{"version":3,"sources":["env.ts","constants.ts","contexts/Wallet.tsx","contexts/DeepWaifuContract.tsx","services/apiService.ts","utils.ts","contexts/Waifu.tsx","hooks/useDeepWaifuContract.ts","hooks/useWaifu.ts","hooks/useWallet.ts","components/colors.ts","components/shared/AppHeader.tsx","components/shared/Confetti.tsx","components/shared/KaomojiLoader.tsx","components/shared/NftCounter.tsx","components/main/cropImage.ts","components/main/ImageUploader.tsx","components/main/SoldOut.tsx","components/main/MainHeader.tsx","components/main/MainContent.tsx","components/main/MainFooter.tsx","components/pillow/PillowMockup.tsx","components/pillow/OrderPillow.tsx","components/pillow/OrderSuccess.tsx","components/pillow/OrderError.tsx","components/certificate/Certificate.tsx","components/certificate/CertificateHeader.tsx","components/generator/MintForm.tsx","components/generator/GeneratorHeader.tsx","Providers.tsx","GlobalStyle.ts","App.tsx","reportWebVitals.ts","index.tsx"],"names":["CHAIN_ID","process","REACT_APP_STRIPE_PUBLIC_KEY","Number","NETWORKS","SHIDEN","chainId","chainParams","decToUnpaddedHex","chainName","nativeCurrency","name","symbol","decimals","rpcUrls","blockExplorerUrls","SHIBUYA","LOCALNET","dec","ethers","BigNumber","from","toHexString","replace","networkKey","Object","keys","find","key","NETWORK","defaultProvider","providers","JsonRpcProvider","defaultContext","provider","signer","undefined","address","connected","connect","WalletContext","createContext","WalletProvider","children","useState","setSigner","setProvider","setAddress","setConnected","resetWallet","useCallback","a","window","ethereum","removeAllListeners","e","console","error","request","method","params","code","metamaskProvider","Web3Provider","getSigner","getAddress","on","accounts","Provider","value","DeepWaifuContractContext","maxItems","itemsLeft","priceWei","onPayForMint","Promise","resolve","DeepWaifuContractProvider","useContext","contract","setContract","setMaxItems","setItemsLeft","setPriceWei","handlePayForMint","payForMint","res","wait","getTransactionReceipt","hash","txReceipt","interface","parseLog","logs","args","id","tx","payer","useEffect","deepWaifuContract","Contract","deepWaifuAbi","abi","intervalId","fetchMaxItems","setInterval","clearInterval","fetchItemsLeft","currentId","toNumber","fetchPriceWei","mintPrice","client","axios","create","baseURL","api","selfie2anime","selfie","fd","FormData","append","post","responseType","data","File","mint","waifu","certificate","mintStatus","get","createStripeCheckoutIntent","image","sleep","ms","setTimeout","fileToDataUrl","file","reader","FileReader","addEventListener","result","readAsDataURL","srcToFile","src","fileName","mimeType","fetch","arrayBuffer","ab","type","htmlToDataUrl","selector","scale","originalPixelRatio","devicePixelRatio","html2canvas","document","querySelector","allowTaint","canvas","dataUrl","toDataURL","STATE_STORAGE_KEY","WaifuContext","state","onUpdateState","onResetState","initialState","JSON","parse","localStorage","getItem","WaifuProvider","initialized","setInitialized","waifuState","setWaifuState","persistState","newState","setItem","stringify","handleResetState","handleUpdateState","waifuDataUrl","selfieDataUrl","all","apiService","message","updatedState","init","useDeepWaifuContract","useWaifu","useWallet","flamingo","whitesmoke","bluegrey","Header","Layout","Title","Typography","isProd","AppHeader","addressShort","useMemo","substr","FixedHeader","CustomHeader","CustomMenu","className","href","onClick","ButtonWrapper","count","styled","div","windowHeight","innerHeight","windowWidth","innerWidth","Confetti","exploding","setExploding","explode","Container","force","duration","particleCount","floorWidth","floorHeight","kaomojis","KaomojiLoader","counter","setCounter","kaomoji","setKaomoji","i","interval","length","Math","ceil","random","Row","Kaomoji","Dots","repeat","Text","NftCounter","createImage","url","reject","Image","setAttribute","getRadianAngle","degreeValue","PI","getCroppedImg","imageSrc","pixelCrop","rotation","createElement","ctx","getContext","maxSize","max","width","height","safeArea","sqrt","translate","rotate","drawImage","getImageData","putImageData","round","x","y","Dragger","Upload","ImageUploader","disabled","onUploadDone","setDataUrl","showCropper","setShowCropper","crop","setCrop","zoom","setZoom","croppedAreaPixels","setCroppedAreaPixels","handleCropComplete","croppedArea","handleCustomRequest","onSuccess","onError","du","handleCancel","handleSubmit","cropResult","footer","Footer","direction","size","accept","action","multiple","showUploadList","customRequest","CloudUploadOutlined","visible","destroyOnClose","closable","CropperContainer","aspect","showGrid","onCropChange","onCropComplete","onZoomChange","SoldOut","Content","MainHeader","history","useHistory","ready","setReady","soldOut","setSoldOut","handleSelfieUploadDone","push","CustomContent","preview","MainContent","TextBlock","Features","span","target","rel","Certificate","TwitterCircleFilled","GithubFilled","MainFooter","CustomFooter","PillowMockup","PillowBase","PillowImage","OrderPillow","loading","setLoading","handleOrderIntent","checkoutUrl","open","bordered","strong","queryString","location","search","paymentId","orderId","OrderSuccess","flex","OrderError","holder","nameSize","nameLength","Overlay","CertificateBase","hoverable","cover","alt","CertificateImage","String","padStart","CertificateHeader","handlePrintPDF","printPDF","handleReset","tweetUrl","certId","certificateLink","split","reverse","explorerUrl","Mint","danger","icon","FilePdfFilled","pdf","jsPdf","orientation","unit","format","pdfWidth","internal","pageSize","getWidth","pdfHeight","getHeight","addImage","save","Date","toISOString","emailRegex","MintForm","Form","useForm","form","resumeMint","setResumeMint","paying","setPaying","minting","setMinting","certificateParams","setCertificateParams","waitForMint","status","Error","getCertificateFile","handleMint","validateFields","email","heap","identify","success","metadataLink","CertificateForm","Item","label","rules","required","placeholder","pattern","MintButtonWrapper","BadgeWrapper","utils","formatEther","style","backgroundColor","CertificateContainer","GeneratorHeader","Providers","GlobalStyle","createGlobalStyle","antIcon","LoadingOutlined","fontSize","spin","Wrapper","App","React","Component","fallback","LoaderWrapper","indicator","exact","path","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.291951fb.chunk.js","sourcesContent":["export const API_URL = process.env.REACT_APP_API_URL as string;\nexport const SHARE_URL = process.env.REACT_APP_SHARE_URL as string;\n\nexport const STRIPE_PUBLIC_KEY = process.env.REACT_APP_STRIPE_PUBLIC_KEY as string;\n\nexport const NFT_CONTRACT_ADDRESS = process.env.REACT_APP_NFT_CONTRACT_ADDRESS as string;\n\nexport const CHAIN_ID = Number(process.env.REACT_APP_CHAIN_ID);\n\nexport const PILLOW_PRICE_USD = Number(process.env.REACT_APP_PILLOW_PRICE_USD);\n","import { ethers } from 'ethers';\n\nimport { CHAIN_ID } from './env';\n\nexport const SECOND_MILLIS = 1000;\nexport const MINUTE_MILLIS = 60 * SECOND_MILLIS;\n\ninterface IChain {\n chainId: number;\n chainParams: {\n chainId: string;\n chainName: string;\n nativeCurrency: {\n name: string;\n symbol: string;\n decimals: number;\n };\n rpcUrls: string[];\n blockExplorerUrls: string[];\n };\n}\n\nexport const NETWORKS = {\n SHIDEN: {\n chainId: 336,\n chainParams: {\n chainId: decToUnpaddedHex(336),\n chainName: 'Shiden',\n nativeCurrency: {\n name: 'Shiden',\n symbol: 'SDN',\n decimals: 18,\n },\n rpcUrls: ['https://rpc.shiden.astar.network:8545'],\n blockExplorerUrls: ['https://shiden.subscan.io/'],\n },\n },\n SHIBUYA: {\n chainId: 81,\n chainParams: {\n chainId: decToUnpaddedHex(81),\n chainName: 'Shibuya',\n nativeCurrency: {\n name: 'Shibuya',\n symbol: 'SBY',\n decimals: 18,\n },\n rpcUrls: ['https://rpc.shibuya.astar.network:8545'],\n blockExplorerUrls: ['https://shibuya.subscan.io/'],\n },\n },\n LOCALNET: {\n chainId: 4369,\n chainParams: {\n chainId: decToUnpaddedHex(4369),\n chainName: 'Shiden Local',\n nativeCurrency: {\n name: 'Shiden Local',\n symbol: 'SDNL',\n decimals: 18,\n },\n rpcUrls: ['https://localhost:9933'],\n blockExplorerUrls: ['https://localhost:9934'],\n },\n },\n};\n\n// metamask expects unpadded hex string but ethers sometimes makes padded strings\nfunction decToUnpaddedHex(dec: number): string {\n const paddedHex = ethers.BigNumber.from(dec).toHexString();\n\n return paddedHex.replace(/x0+/, 'x');\n}\n\nconst networkKey = Object.keys(NETWORKS).find((key) => (NETWORKS as any)[key].chainId === CHAIN_ID) as string;\n\nexport const NETWORK = (NETWORKS as any)[networkKey] as IChain;\n","import React, { createContext, useCallback, useState } from 'react';\nimport { ethers } from 'ethers';\n\nimport { NETWORK } from '../constants';\n\nconst defaultProvider = new ethers.providers.JsonRpcProvider(NETWORK.chainParams.rpcUrls[0]);\n\nexport interface IWalletContext {\n provider: ethers.providers.BaseProvider;\n signer?: ethers.Signer;\n address?: string;\n connected: boolean;\n connect: () => void;\n}\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nconst defaultContext: IWalletContext = {\n provider: defaultProvider,\n signer: undefined,\n address: undefined,\n connected: false,\n connect: () => {},\n};\n\nexport const WalletContext = createContext(defaultContext);\n\nexport const WalletProvider: React.FC = ({ children }: IProps) => {\n const [signer, setSigner] = useState();\n const [provider, setProvider] = useState(defaultProvider);\n const [address, setAddress] = useState();\n const [connected, setConnected] = useState(false);\n\n const resetWallet = useCallback(() => {\n setSigner(undefined);\n setAddress(undefined);\n setProvider(defaultProvider);\n setConnected(false);\n }, []);\n\n const connect = useCallback(async () => {\n const { ethereum } = window as any;\n try {\n ethereum.removeAllListeners();\n } catch (e) {\n console.error(e);\n }\n await ethereum.request({ method: 'eth_requestAccounts' });\n const chainId = ethereum.request({ method: 'eth_chainId' });\n\n // eslint-disable-next-line eqeqeq\n if (chainId != NETWORK.chainId) {\n try {\n await ethereum.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: NETWORK.chainParams.chainId }],\n });\n } catch (e) {\n // This error code indicates that the chain has not been added to MetaMask.\n if ((e as any).code === 4902) {\n await ethereum.request({\n method: 'wallet_addEthereumChain',\n params: [NETWORK.chainParams],\n });\n } else {\n throw e;\n }\n }\n }\n const metamaskProvider = new ethers.providers.Web3Provider(ethereum, 'any');\n const signer = metamaskProvider.getSigner();\n\n const address = await signer.getAddress();\n\n setSigner(signer);\n setAddress(address);\n setProvider(metamaskProvider);\n setConnected(true);\n\n ethereum.on('chainChanged', (chainId: string) => {\n // console.log('chainChanged', chainId);\n if (chainId !== NETWORK.chainParams.chainId) {\n resetWallet();\n }\n });\n ethereum.on('disconnect', resetWallet);\n ethereum.on('accountsChanged', (accounts: string[]) => {\n // console.log('accountsChanged', accounts);\n resetWallet();\n });\n }, [resetWallet]);\n\n return (\n \n {children}\n \n );\n};\n","import React, { createContext, useCallback, useContext, useEffect, useState } from 'react';\nimport { ethers } from 'ethers';\n\nimport deepWaifuAbi from '../abi/DeepWaifu.json';\nimport { DeepWaifu } from '../abi/typechain';\nimport { NFT_CONTRACT_ADDRESS } from '../env';\nimport { WalletContext } from './Wallet';\nimport { MINUTE_MILLIS } from '../constants';\n\ninterface IPaymentResult {\n tx: string;\n payer: string;\n id: number;\n}\n\nexport interface IDeepWaifuContractContext {\n maxItems: number;\n itemsLeft: number;\n priceWei: ethers.BigNumber;\n onPayForMint: () => Promise;\n}\n\ninterface IProps {\n children: React.ReactNode;\n}\n\n// const deepWaifuInterface = new ethers.utils.Interface(deepWaifuAbi.abi);\n\nexport const DeepWaifuContractContext = createContext({\n maxItems: -1,\n itemsLeft: -1,\n priceWei: ethers.BigNumber.from(0),\n onPayForMint: () => Promise.resolve({} as any),\n});\n\nexport const DeepWaifuContractProvider: React.FC = ({ children }: IProps) => {\n const { provider, signer } = useContext(WalletContext);\n const [contract, setContract] = useState();\n const [maxItems, setMaxItems] = useState(-1);\n const [itemsLeft, setItemsLeft] = useState(-1);\n const [priceWei, setPriceWei] = useState(ethers.BigNumber.from(0));\n\n const handlePayForMint = useCallback(async (): Promise => {\n const res = await contract!.payForMint({\n value: priceWei,\n });\n await res.wait(3);\n\n const txReceipt = await provider.getTransactionReceipt(res.hash);\n\n const { args } = contract!.interface.parseLog(txReceipt.logs[0]);\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_from, _amount, id] = args;\n\n return { tx: res.hash, payer: res.from, id };\n }, [contract, priceWei, provider]);\n\n useEffect(() => {\n let deepWaifuContract = new ethers.Contract(NFT_CONTRACT_ADDRESS, deepWaifuAbi.abi, provider) as DeepWaifu;\n if (signer) {\n deepWaifuContract = deepWaifuContract.connect(signer);\n }\n setContract(deepWaifuContract);\n }, [provider, signer]);\n\n useEffect(() => {\n let intervalId: NodeJS.Timeout;\n\n if (contract) {\n fetchMaxItems();\n intervalId = setInterval(fetchMaxItems, 5 * MINUTE_MILLIS);\n }\n\n async function fetchMaxItems() {\n const res = await contract!.maxItems();\n setMaxItems(res);\n }\n\n return () => clearInterval(intervalId);\n }, [contract]);\n\n useEffect(() => {\n let intervalId: NodeJS.Timeout;\n\n if (contract) {\n fetchItemsLeft();\n intervalId = setInterval(fetchItemsLeft, 1 * MINUTE_MILLIS);\n }\n\n async function fetchItemsLeft() {\n const res = await contract!.currentId();\n setItemsLeft(maxItems - res.toNumber());\n }\n\n return () => clearInterval(intervalId);\n }, [contract, maxItems]);\n\n useEffect(() => {\n let intervalId: NodeJS.Timeout;\n\n if (contract) {\n fetchPriceWei();\n intervalId = setInterval(fetchPriceWei, 5 * MINUTE_MILLIS);\n }\n\n async function fetchPriceWei() {\n const res = await contract!.mintPrice();\n setPriceWei(res);\n }\n\n return () => clearInterval(intervalId);\n }, [contract]);\n\n return (\n \n {children}\n \n );\n};\n","import axios from 'axios';\n\nimport { API_URL } from '../env';\nimport { IMintStatus, IStripeCheckoutIntent } from '../types';\n\nconst client = axios.create({\n baseURL: API_URL,\n});\n\nconst api = {\n async selfie2anime(selfie: File): Promise {\n const fd = new FormData();\n fd.append('selfie', selfie, 'selfie.jpg');\n\n const { data } = await client.post(`/selfie2anime`, fd, { responseType: 'blob' });\n const res = new File([data], 'waifu.png');\n\n return res;\n },\n async mint({\n tx,\n waifu,\n certificate,\n name,\n }: {\n tx: string;\n waifu: File;\n certificate: File;\n name: string;\n }): Promise {\n const fd = new FormData();\n fd.append('tx', tx);\n fd.append('name', name);\n fd.append('waifu', waifu, 'waifu.png');\n fd.append('certificate', certificate, 'certificate.png');\n\n const { data } = await client.post(`/mint`, fd, { responseType: 'json' });\n\n return data;\n },\n async mintStatus(tx: string): Promise {\n const { data } = await client.get(`/mint/${tx}`, { responseType: 'json' });\n\n return data;\n },\n async createStripeCheckoutIntent({ name, image }: { name: string; image: File }): Promise {\n const fd = new FormData();\n fd.append('name', name);\n fd.append('image', image, 'image.png');\n\n const { data } = await client.post(`/checkoutIntent`, fd, { responseType: 'json' });\n\n return data;\n },\n};\n\nexport default api;\n","import html2canvas from 'html2canvas';\n\nexport function sleep(ms: number) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function isTruthy(value: string): boolean {\n // eslint-disable-next-line eqeqeq\n return value === 'true' || value == '1';\n}\n\nexport function shortAddress(address?: string | null | undefined, chars = 4): string {\n const addr = (address || '').toUpperCase();\n return `0x${addr.substr(2, chars)}...${addr.substr(-chars)}`;\n}\n\nexport function fileToDataUrl(file: File): Promise {\n return new Promise((resolve) => {\n const reader = new FileReader();\n reader.addEventListener(\n 'load',\n function () {\n resolve(reader.result as any);\n },\n false\n );\n\n reader.readAsDataURL(file);\n });\n}\n\nexport async function srcToFile(src: string, fileName: string, mimeType: string) {\n const res = await fetch(src);\n const ab = await res.arrayBuffer();\n\n return new File([ab], fileName, { type: mimeType });\n}\n\nexport async function htmlToDataUrl(selector: string, scale = 1): Promise {\n const originalPixelRatio = window.devicePixelRatio;\n // weird hack for retina displays images coming out 2x too big but seems to work\n // also works for generally scaling the images up/down\n try {\n (window as any).devicePixelRatio = scale;\n } catch (e) {\n //\n }\n const canvas = await html2canvas(document.querySelector(selector)!, { allowTaint: true });\n\n const dataUrl = canvas.toDataURL('image/png');\n try {\n (window as any).devicePixelRatio = originalPixelRatio;\n } catch (e) {\n //\n }\n\n return dataUrl;\n}\n","import React, { createContext, useCallback, useEffect, useState } from 'react';\nimport { message } from 'antd';\n\nimport { SECOND_MILLIS } from '../constants';\nimport { apiService } from '../services';\nimport { fileToDataUrl, sleep, srcToFile } from '../utils';\n\nconst STATE_STORAGE_KEY = 'waifu-state';\n\nexport interface IWaifuSerializableState {\n name: string;\n id: number;\n holder: string;\n tx: string;\n selfieDataUrl: string;\n waifuDataUrl: string;\n metadataLink: string;\n certificateLink: string;\n}\n\nexport interface IWaifuState extends IWaifuSerializableState {\n selfie: File | undefined;\n waifu: File | undefined;\n}\n\nexport interface IWaifuContext {\n state: IWaifuState;\n onUpdateState: (state: Partial, replace?: boolean) => void;\n onResetState: () => void;\n}\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nexport const WaifuContext = createContext({\n state: {} as any,\n onUpdateState: () => {},\n onResetState: () => {},\n});\n\nconst initialState = readState();\n\nexport const WaifuProvider: React.FC = ({ children }: IProps) => {\n const [initialized, setInitialized] = useState(false);\n const [waifuState, setWaifuState] = useState(initialState as any);\n\n const persistState = useCallback((newState: IWaifuState) => {\n setWaifuState(newState);\n storeState(newState);\n }, []);\n\n const handleResetState = useCallback(() => {\n persistState({} as any);\n }, [persistState]);\n\n const handleUpdateState = useCallback(\n async (state: Partial, replace = false) => {\n const newState = { ...state };\n\n if (newState.waifu) {\n newState.waifuDataUrl = await fileToDataUrl(newState.waifu);\n } else if (newState.waifuDataUrl) {\n newState.waifu = await srcToFile(newState.waifuDataUrl, 'waifu.png', 'image/png');\n }\n\n if (newState.selfie) {\n newState.selfieDataUrl = await fileToDataUrl(newState.selfie);\n persistState({ ...waifuState, ...newState });\n try {\n const [res] = await Promise.all([apiService.selfie2anime(newState.selfie), sleep(3 * SECOND_MILLIS)]);\n newState.waifu = res;\n newState.waifuDataUrl = await fileToDataUrl(res);\n } catch (e) {\n message.error((e as any).message || 'Unknown error. Please try again');\n handleResetState();\n throw e;\n }\n } else if (newState.selfieDataUrl) {\n newState.selfie = await srcToFile(newState.selfieDataUrl, 'selfie.jpg', 'image/jpeg');\n }\n\n const updatedState = replace ? newState : { ...waifuState, ...newState };\n\n persistState(updatedState as IWaifuState);\n },\n [waifuState, persistState, handleResetState]\n );\n\n useEffect(() => {\n async function init() {\n await handleUpdateState(initialState as IWaifuState);\n setInitialized(true);\n }\n\n init();\n // only run this once so skip any dependencies\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n return (\n \n {initialized && children}\n \n );\n};\n\nfunction storeState(state: IWaifuState) {\n localStorage.setItem(\n STATE_STORAGE_KEY,\n JSON.stringify({\n ...state,\n waifu: undefined,\n selfie: undefined,\n })\n );\n}\n\nfunction readState(): IWaifuSerializableState {\n return JSON.parse(localStorage.getItem(STATE_STORAGE_KEY) || '{}');\n}\n","import { useContext } from 'react';\n\nimport { DeepWaifuContractContext } from '../contexts';\n\nexport function useDeepWaifuContract() {\n const ctx = useContext(DeepWaifuContractContext);\n\n return ctx;\n}\n","import { useContext } from 'react';\n\nimport { WaifuContext } from '../contexts';\n\nexport function useWaifu() {\n const waifuCtx = useContext(WaifuContext);\n\n return waifuCtx;\n}\n","import { useContext } from 'react';\n\nimport { WalletContext } from '../contexts';\n\nexport function useWallet() {\n const ctx = useContext(WalletContext);\n\n return ctx;\n}\n","export const flamingo = '#ff4d4f';\nexport const whitesmoke = '#F5F5F5';\nexport const bluegrey = '#37474f';\n","import { useMemo } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Layout, Divider, Badge } from 'antd';\n\nimport { useWaifu, useWallet } from '../../hooks';\nimport { flamingo } from '../colors';\nimport { CHAIN_ID } from '../../env';\nimport { NETWORK } from '../../constants';\n\nconst { Header } = Layout;\nconst { Title } = Typography;\n\nconst isProd = CHAIN_ID === NETWORK.chainId;\n\nexport default function AppHeader() {\n const { address } = useWallet();\n const { onResetState } = useWaifu();\n\n const addressShort = useMemo(() => {\n if (address) {\n return address.substr(0, 6) + '...' + address.substr(-4);\n }\n return '';\n }, [address]);\n\n return (\n \n \n
\n \n \n Deep\n Waifu\n \n ディープ\n ワイフ\n \n \n {!isProd &&
{NETWORK.chainParams.chainName}
}\n \n
\n
\n
\n
\n
\n );\n}\n\nconst CustomMenu = styled.div`\n display: flex;\n padding-top: 1.2em;\n justify-content: space-between;\n\n a.title {\n display: flex;\n }\n\n .ant-btn:hover,\n .ant-btn:focus {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n\n .walletConnector {\n background-color: white;\n color: rgba(0, 0, 0, 0.85);\n border: 1px solid rgba(0, 0, 0, 0.85);\n border-radius: 3px;\n font-weight: 300;\n\n &:hover {\n background-color: white;\n transition: all 0.2s ease;\n color: ${flamingo};\n border-color: ${flamingo};\n background-image: none;\n }\n\n &.hidden {\n visibility: hidden;\n }\n }\n`;\n\nconst CustomHeader = styled.div`\n .ant-layout-header {\n height: 8em;\n background: white;\n max-width: 960px;\n margin: 0 auto;\n padding: 0 10px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .ant-divider-vertical {\n top: 1.3em;\n height: 1.6em;\n border-left: 2px solid rgba(0, 0, 0, 0.2);\n }\n`;\n\nconst FixedHeader = styled.div`\n position: fixed;\n z-index: 10;\n width: 100%;\n box-shadow: 0px 1px 0px rgba(0, 0, 0, 0.06);\n background: white;\n`;\n\nconst ButtonWrapper = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n gap: 10px;\n\n .envLabel {\n color: ${flamingo};\n font-weight: bold;\n }\n`;\n","import { useEffect, useState } from 'react';\nimport ConfettiExplosion from '@reonomy/react-confetti-explosion';\nimport styled from 'styled-components';\nimport { sleep } from '../../utils';\n\nconst windowHeight = window.innerHeight;\nconst windowWidth = window.innerWidth;\n\nexport default function Confetti() {\n const [exploding, setExploding] = useState(true);\n\n useEffect(() => {\n async function explode() {\n await sleep(3000);\n setExploding(false);\n }\n\n explode();\n }, []);\n\n return exploding ? (\n \n \n \n ) : null;\n}\n\nconst Container = styled.div`\n position: fixed;\n z-index: 9999;\n top: 20%;\n left: 50%;\n width: 0;\n height: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n opacity: 1;\n`;\n","import { useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Typography } from 'antd';\n\nimport { flamingo } from '../colors';\n\nconst { Title } = Typography;\n\nconst kaomojis = [\n '(* ^ ω ^)',\n '( ´ ω ` )ノ゙',\n '(☆▽☆)',\n '(„• ᴗ •„)',\n '(ノ◕ヮ◕)ノ*',\n '(─‿‿─)',\n '(´。• ᵕ •。`)',\n 'ヽ(*・ω・)ノ',\n '(o・ω・o)',\n '(⌒ω⌒)',\n '(*≧ω≦*)',\n];\n\ninterface IProps {\n message?: React.ReactNode;\n}\n\nexport default function KaomojiLoader({ message }: IProps) {\n const [counter, setCounter] = useState(0);\n const [kaomoji, setKaomoji] = useState(kaomojis[0]);\n\n useEffect(() => {\n let i = 0;\n let interval = setInterval(() => {\n setCounter(i++);\n }, 500);\n\n return () => {\n clearInterval(interval);\n };\n }, []);\n\n useEffect(() => {\n if (counter % 4 === 0) {\n setKaomoji(kaomojis[randomIndex(kaomojis.length)]);\n }\n }, [counter]);\n\n return (\n \n \n \n {kaomoji}\n \n \n {'・'.repeat(counter % 4)}\n \n \n \n {message}\n \n \n );\n}\n\nconst Container = styled.div`\n position: fixed;\n z-index: 9;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background-color: rgba(0, 0, 0, 0.65);\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .red {\n color: ${flamingo};\n font-size: 60px;\n }\n\n .message {\n font-weight: bold;\n color: ${flamingo};\n font-size: 30px;\n }\n`;\n\nconst Row = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: center;\n align-items: center;\n`;\n\nconst Kaomoji = styled.div`\n width: 300px;\n text-align: center;\n`;\n\nconst Dots = styled.div`\n width: 100px;\n`;\n\nfunction randomIndex(length: number): number {\n return Math.ceil(Math.random() * length) - 1;\n}\n","import { Typography } from 'antd';\n\nimport { useDeepWaifuContract } from '../../hooks';\n\nconst { Text } = Typography;\n\nexport default function NftCounter() {\n const { itemsLeft } = useDeepWaifuContract();\n\n if (itemsLeft < 0) {\n return
;\n }\n\n return (\n \n Hurry up, there's only {itemsLeft} NFTs left to mint!\n \n );\n}\n","// credit to https://github.com/ricardo-ch/react-easy-crop and https://codesandbox.io/s/q8q1mnr01w?file=/src/cropImage.js\n\nconst createImage = (url: string): Promise =>\n new Promise((resolve, reject) => {\n const image = new Image();\n image.addEventListener('load', () => resolve(image));\n image.addEventListener('error', (error) => reject(error));\n image.setAttribute('crossOrigin', 'anonymous'); // needed to avoid cross-origin issues on CodeSandbox\n image.src = url;\n });\n\nfunction getRadianAngle(degreeValue: number) {\n return (degreeValue * Math.PI) / 180;\n}\n\n// This function was adapted from the one in the ReadMe of https://github.com/DominicTobias/react-image-crop\nexport default async function getCroppedImg(\n imageSrc: any,\n pixelCrop: { width: number; height: number; x: number; y: number },\n rotation = 0\n) {\n const image = await createImage(imageSrc);\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n const maxSize = Math.max(image.width, image.height);\n const safeArea = 2 * ((maxSize / 2) * Math.sqrt(2));\n\n // set each dimensions to double largest dimension to allow for a safe area for the\n // image to rotate in without being clipped by canvas context\n canvas.width = safeArea;\n canvas.height = safeArea;\n\n // translate canvas context to a central location on image to allow rotating around the center.\n ctx!.translate(safeArea / 2, safeArea / 2);\n ctx!.rotate(getRadianAngle(rotation));\n ctx!.translate(-safeArea / 2, -safeArea / 2);\n\n // draw rotated image and store data.\n ctx!.drawImage(image, safeArea / 2 - image.width * 0.5, safeArea / 2 - image.height * 0.5);\n const data = ctx!.getImageData(0, 0, safeArea, safeArea);\n\n // set canvas width to final desired crop size - this will clear existing context\n canvas.width = pixelCrop.width;\n canvas.height = pixelCrop.height;\n\n // paste generated rotate image with correct offsets for x,y crop values.\n ctx!.putImageData(\n data,\n Math.round(0 - safeArea / 2 + image.width * 0.5 - pixelCrop.x),\n Math.round(0 - safeArea / 2 + image.height * 0.5 - pixelCrop.y)\n );\n\n // As Base64 string\n const mimeType = 'image/jpeg';\n return { dataUrl: canvas.toDataURL(mimeType), mimeType };\n\n // As a blob\n // return new Promise((resolve) => {\n // canvas.toBlob((file) => {\n // resolve(URL.createObjectURL(file));\n // }, 'image/jpeg');\n // });\n}\n","import { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Upload, Modal, Button, Space } from 'antd';\nimport { CloudUploadOutlined } from '@ant-design/icons';\nimport Cropper from 'react-easy-crop';\n\nimport { fileToDataUrl, srcToFile } from '../../utils';\nimport getCroppedImg from './cropImage';\nimport { NftCounter } from '../shared';\n\nconst { Dragger } = Upload;\nconst { Title, Text } = Typography;\n\ninterface IProps {\n disabled: boolean;\n onUploadDone: (selfie: File) => void;\n}\n\nexport default function ImageUploader({ disabled, onUploadDone }: IProps) {\n const [dataUrl, setDataUrl] = useState();\n const [showCropper, setShowCropper] = useState(false);\n const [crop, setCrop] = useState({ x: 0, y: 0 });\n const [zoom, setZoom] = useState(1);\n const [croppedAreaPixels, setCroppedAreaPixels] = useState(null);\n\n const handleCropComplete = useCallback((croppedArea, croppedAreaPixels) => {\n setCroppedAreaPixels(croppedAreaPixels);\n }, []);\n\n const handleCustomRequest = useCallback(\n async ({ file, onSuccess, onError }: { file: File; onSuccess: Function; onError: Function }) => {\n const du = await fileToDataUrl(file);\n setDataUrl(du);\n setShowCropper(true);\n },\n []\n );\n\n const handleCancel = useCallback(() => {\n setShowCropper(false);\n setDataUrl('');\n }, []);\n\n const handleSubmit = useCallback(async () => {\n setShowCropper(false);\n const cropResult = await getCroppedImg(dataUrl, croppedAreaPixels);\n const file = await srcToFile(cropResult.dataUrl, 'selfie.jpg', cropResult.mimeType);\n onUploadDone(file);\n setDataUrl('');\n }, [croppedAreaPixels, dataUrl, onUploadDone]);\n\n const footer = (\n
\n \n \n For best results, your selfie should be a face-and-shoulders shot, directly facing the camera. Try as many\n images as you wish.\n \n
\n \n \n
\n
\n
\n );\n\n return (\n <>\n \n

\n \n

\n (=^・ω・^=)\n Upload a Selfie Here\n \n
\n
\n

Photos you upload will NOT BE PUBLISHED

\n \n \n \n \n \n \n \n );\n}\n\nconst CropperContainer = styled.div`\n position: relative;\n width: 350px;\n height: 350px;\n`;\n\nconst Footer = styled.div`\n display: flex;\n flex-direction: row;\n align-items: center;\n justify-content: center;\n text-align: center;\n\n .text12 {\n font-size: 12px;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography } from 'antd';\n\nimport { flamingo } from '../colors';\n\nconst { Text, Title } = Typography;\n\nexport default function SoldOut() {\n return (\n \n \n ・゚・(。{'>'}ω{'<'}。)・゚・\n \n Sold out!\n \n );\n}\n\nconst Container = styled.div`\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n\n .red {\n font-size: 40px;\n color: ${flamingo};\n }\n .text {\n font-size: 46px;\n font-weight: bold;\n margin: 8px;\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport styled from 'styled-components';\nimport { Layout, Image } from 'antd';\nimport { useHistory } from 'react-router-dom';\n\nimport { useDeepWaifuContract, useWaifu } from '../../hooks';\nimport { flamingo } from '../colors';\nimport { AppHeader } from '../shared';\nimport ImageUploader from './ImageUploader';\nimport SoldOut from './SoldOut';\n\nconst { Content } = Layout;\n\nexport default function MainHeader() {\n const history = useHistory();\n const { onUpdateState } = useWaifu();\n const [ready, setReady] = useState(false);\n const [soldOut, setSoldOut] = useState(false);\n const { maxItems, itemsLeft } = useDeepWaifuContract();\n\n const handleSelfieUploadDone = useCallback(\n async (selfie: File) => {\n onUpdateState(\n {\n selfie,\n },\n true\n );\n history.push('/mint');\n },\n [history, onUpdateState]\n );\n\n useEffect(() => {\n if (maxItems > 0) {\n setReady(true);\n setSoldOut(itemsLeft === 0);\n }\n }, [maxItems, itemsLeft]);\n\n return (\n \n \n \n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n {soldOut ? : }\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n );\n}\n\nconst CustomContent = styled.div`\n .ant-layout-content {\n max-width: 1280px;\n margin: 8em auto 0 auto;\n }\n .titleRed {\n color: ${flamingo};\n }\n .grid-wrapper {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n .grid-layout {\n flex-grow: 0;\n flex-shrink: 0;\n display: grid;\n width: 1280px;\n grid-template-columns: repeat(auto-fill, minmax(8em, auto));\n grid-auto-rows: minmax(8em, auto);\n grid-gap: 0px;\n }\n .span-1 {\n grid-column-end: span 8;\n grid-row-end: span 4;\n margin: 2em;\n }\n .span-2 {\n grid-column-end: span 2;\n grid-row-end: span 2;\n height: 160px;\n }\n .selfie,\n .waifu {\n position: absolute;\n transition: 0.5s;\n }\n\n .waifu:hover {\n opacity: 0;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col, Button, Image, Card } from 'antd';\nimport { TwitterCircleFilled, GithubFilled } from '@ant-design/icons';\nimport { flamingo, whitesmoke } from '../colors';\n\nconst { Content } = Layout;\nconst { Title, Text } = Typography;\n\nexport default function MainContent() {\n return (\n \n \n \n \n
\n ディープワイフについて\n \n About DeepWaifu\n \n
\n \n No Waifu... No Laifu!
\n Using deep neural networks this website can make the perfect Waifu just for you!\n
\n
\n \n \n \n (=^・ω・^=)\n Upload Selfie\n \n Let a non-human artist draw your anime-style portrait.\n \n \n (´。• ω •。`)\n Mint NFT\n \n Trade exclusive, high-quality NFTs minted on the blockchain.\n
\n Powered by\n \n \n \n
\n \n \n ヽ(*・ω・)ノ\n Order Pillow\n \n Get your Waifu printed in full color on both sides of a pillow.\n \n
\n
\n \n
\n \n
\n 養子縁組証明書\n \n Certificate\n \n
\n \n If having an NFT of your Waifu is not enough, you can print your Certificate of Adoption.\n \n
\n \n \n \n \n \n
\n \n \n
\n 私たちと連絡を取る\n \n Get in touch\n \n
\n Follow us on Twitter and Github to find out more about DeepWaifu.\n
\n
\n \n \n \n \n \n \n
\n
\n
\n );\n}\n\nconst CustomContent = styled.div`\n .ant-layout-content {\n text-align: center;\n max-width: 960px;\n margin: 0 auto;\n }\n .text18 {\n font-size: 18px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .titleJumbo {\n font-family: 'Hachi Maru Pop', cursive;\n font-style: normal;\n font-weight: normal;\n font-size: 48px;\n line-height: 28px;\n color: rgba(38, 38, 38, 0.1);\n margin-top: 0.5em !important;\n }\n .head {\n position: relative;\n }\n #overlay {\n position: relative;\n top: -1.5em;\n left: 0;\n margin: 0;\n }\n .ant-btn {\n color: ${flamingo};\n border-color: black;\n }\n .ant-btn:hover {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n .iconSocial {\n font-size: 36px;\n margin: 0 0.5em;\n color: black;\n }\n`;\n\nconst Features = styled.div`\n margin: 3em auto 0 auto;\n padding-bottom: 3em;\n max-width: 960px;\n background: ${whitesmoke};\n\n .shiden {\n margin-top: 2em;\n }\n\n .ant-col-8 {\n padding: 2em 4em;\n }\n .titleFeaturesRed {\n font-size: 16px;\n color: ${flamingo};\n }\n .titleFeatures {\n font-size: 16px;\n }\n .text16 {\n font-size: 16px;\n }\n .text12 {\n font-size: 12px;\n }\n .ant-image {\n margin: 1em 0;\n }\n`;\n\nconst TextBlock = styled.div`\n margin: 6em 0 1em 0;\n`;\n\nconst Certificate = styled.div`\n margin: 3em 0 1em;\n\n .ant-card-body {\n padding: 1em;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Divider } from 'antd';\n\nconst { Footer } = Layout;\nconst { Text } = Typography;\n\nexport default function MainFooter() {\n return (\n \n \n
\n \n Terms of Service • Privacy Statement\n
\n
\n
\n );\n}\n\nconst CustomFooter = styled.div`\n .ant-layout-footer {\n text-align: center;\n background: white;\n max-width: 960px;\n margin: 0 auto 2em;\n padding: 0 1em;\n }\n`;\n","import styled from 'styled-components';\nimport { Image } from 'antd';\n\nimport { useWaifu } from '../../hooks';\n\nexport default function PillowMockup() {\n const { state } = useWaifu();\n\n return (\n \n \n \n \n \n \n \n \n );\n}\n\nconst Container = styled.div`\n position: relative;\n width: 180px;\n height: 180px;\n`;\n\nconst PillowBase = styled.div`\n position: relative;\n top: 0;\n left: 0;\n`;\n\nconst PillowImage = styled.div`\n position: absolute;\n top: -3px;\n left: 0;\n mix-blend-mode: multiply;\n\n mask-image: url('../img/pillow-mask.png');\n mask-size: 180px;\n mask-repeat: no-repeat;\n mask-position: center;\n`;\n","import { useCallback, useState } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Card, Space, Button, message } from 'antd';\n\nimport { flamingo } from '../colors';\nimport { apiService } from '../../services';\nimport { useWaifu } from '../../hooks';\nimport PillowMockup from './PillowMockup';\n\nconst { Title, Text } = Typography;\n\nexport default function OrderPillow() {\n const { state } = useWaifu();\n const [loading, setLoading] = useState(false);\n const handleOrderIntent = useCallback(async () => {\n setLoading(true);\n try {\n const { checkoutUrl } = await apiService.createStripeCheckoutIntent({\n name: state.name || 'Waifu',\n image: state.waifu!,\n });\n\n window.open(checkoutUrl, '_blank');\n } catch (e) {\n message.error('Something went wrong');\n } finally {\n setLoading(false);\n }\n }, [state]);\n\n return (\n \n \n \n
\n ヽ(*・ω・)ノ\n Order Pillow\n
\n \n \n Get your DeepWaifu printed on both sides of a 18\"x18\" pillow in full color. The pillows are soft yet\n durable, made from 100% spun polyester poplin fabric.\n \n \n Free shipment to Europe, USA, Canada, Japan\n \n \n
\n
\n
\n );\n}\n\nconst Container = styled.div`\n position: relative;\n top: 0;\n left: 0;\n text-align: center;\n background: none;\n\n .ant-card-body {\n padding: 0 2em;\n }\n\n .ant-card {\n background: none;\n }\n .ant-btn {\n color: ${flamingo};\n border-color: black;\n }\n .ant-btn:hover {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n\n .space {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col } from 'antd';\nimport queryString from 'query-string';\n\nimport { flamingo, whitesmoke } from '../colors';\nimport { AppHeader, Confetti } from '../shared';\nimport PillowMockup from './PillowMockup';\n\nconst { Content } = Layout;\nconst { Title, Text } = Typography;\n\nconst { paymentId, orderId } = queryString.parse(window.location.search);\n\nexport default function OrderSuccess() {\n return (\n \n \n \n \n \n \n (*☆ω☆)\n  Your DeepWaifu pillow is on its way!\n \n \n \n \n \n \n \n \n \n Your payment id: {paymentId}\n \n \n Your order id: {orderId}\n \n \n \n \n \n You can safely close this window now\n \n \n \n \n \n );\n}\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 4em auto;\n padding: 0 10px;\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n .titleRed {\n color: ${flamingo};\n }\n\n .centerFlex {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .pillowContainer {\n margin-top: 10em;\n margin-bottom: 12em;\n > div {\n transform: scale(2);\n }\n }\n\n .orderDetails {\n font-size: 16px;\n line-height: 32px;\n margin-bottom: 2em;\n }\n\n .note {\n font-size: 12px;\n font-style: italic;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col } from 'antd';\n\nimport { flamingo, whitesmoke } from '../colors';\nimport { AppHeader } from '../shared';\nimport PillowMockup from './PillowMockup';\n\nconst { Content } = Layout;\nconst { Title, Text } = Typography;\n\nexport default function OrderError() {\n return (\n \n \n \n \n \n \n ・゚・(。{'>'}ω{'<'}。)・゚・\n \n  Oops, something went wrong with your order!\n \n \n \n Please try again!\n \n \n \n \n \n \n \n \n \n You can safely close this window now\n \n \n \n \n \n );\n}\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n min-height: 100vh;\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 4em auto;\n padding: 0 10px;\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n .titleRed {\n color: ${flamingo};\n }\n\n .centerFlex {\n display: flex;\n flex-direction: column;\n align-items: center;\n }\n\n .pillowContainer {\n margin-top: 4em;\n margin-bottom: 6em;\n }\n\n .note {\n font-size: 12px;\n font-style: italic;\n }\n`;\n","import { useMemo } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Space, Image, Row, Col, Card } from 'antd';\n\nimport { flamingo, bluegrey } from '../colors';\n\nconst { Title, Text } = Typography;\n\ninterface IProps {\n className?: string;\n waifuDataUrl: string;\n name: string;\n id: number;\n holder: string;\n}\n\nexport default function Certificate({ className, waifuDataUrl, name, id, holder }: IProps) {\n const nameSize = useMemo(() => {\n const nameLength = (name || '').length || 0;\n if (nameLength <= 8) {\n return 'xl';\n } else if (nameLength <= 12) {\n return 'l';\n } else if (nameLength <= 16) {\n return 'm';\n } else if (nameLength <= 20) {\n return 's';\n } else {\n return 'xs';\n }\n }, [name]);\n\n return (\n \n \n }>\n \n \n \n \n \n \n \n \n Certificate of Adoption\n 養子縁組証明書\n \n Let it be known to all that the holder of the DeepWaifu known by the name of\n \n {name}\n \n has agreed to provide a loving home for this waifu and promised to keep it safe.\n \n \n Token ID: {String(id).padStart(4, '0')}\n \n \n Holder: {holder}\n \n \n \n \n \n \n );\n}\n\nconst Overlay = styled.div`\n position: relative;\n top: 0;\n left: 0;\n overflow: hidden;\n`;\n\nconst CertificateBase = styled.div`\n text-align: center;\n position: relative;\n top: 0;\n left: 0;\n\n .ant-card-body {\n display: none;\n }\n .ant-card-cover,\n .ant-card-bordered {\n height: 451px;\n }\n`;\n\nconst CertificateImage = styled.div`\n position: absolute;\n top: 140px;\n left: 70px;\n transform: rotate(-14.5deg);\n mix-blend-mode: multiply;\n`;\n\nconst TextBlock = styled.div`\n position: absolute;\n top: 0px;\n left: 365px;\n transform: rotate(-14.5deg);\n text-align: center;\n mix-blend-mode: multiply;\n\n .space {\n width: 232px;\n }\n\n .titleName {\n font-family: Hachi Maru Pop;\n font-style: normal;\n font-weight: normal;\n line-height: 36px;\n color: ${flamingo};\n white-space: nowrap;\n\n &.xl {\n font-size: 28px;\n }\n &.l {\n font-size: 22px;\n }\n &.m {\n font-size: 18px;\n }\n &.s {\n font-size: 14px;\n }\n &.xs {\n font-size: 12px;\n }\n }\n .text14 {\n color: ${bluegrey};\n }\n\n .text10 {\n font-size: 10px;\n white-space: nowrap;\n display: inline-block;\n\n &.first {\n margin-top: 16px;\n }\n }\n`;\n","import { useCallback, useMemo } from 'react';\nimport styled from 'styled-components';\nimport { Typography, Layout, Space, Button, Row, Col } from 'antd';\nimport { FilePdfFilled } from '@ant-design/icons';\nimport jsPdf from 'jspdf';\nimport { useHistory } from 'react-router-dom';\n\nimport { SHARE_URL } from '../../env';\nimport { useWaifu } from '../../hooks';\nimport { htmlToDataUrl } from '../../utils';\nimport { NETWORK } from '../../constants';\nimport { flamingo, whitesmoke, bluegrey } from '../colors';\nimport { AppHeader, Confetti } from '../shared';\nimport { OrderPillow } from '../pillow';\nimport Certificate from './Certificate';\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nexport default function CertificateHeader() {\n const history = useHistory();\n const { state, onResetState } = useWaifu();\n\n const handlePrintPDF = useCallback(async () => {\n const dataUrl = await htmlToDataUrl('#certificate', 2);\n printPDF(dataUrl);\n }, []);\n\n const handleReset = useCallback(async () => {\n onResetState();\n history.push('/');\n }, [history, onResetState]);\n\n const tweetUrl = useMemo(() => {\n const certId = state.certificateLink?.split('/').reverse()[0];\n return `https://twitter.com/intent/tweet?text=Check%20out%20my%20%23DeepWaifu!%20%0A%0A${SHARE_URL}/c/${certId}`;\n }, [state.certificateLink]);\n\n const explorerUrl = useMemo(() => {\n return NETWORK.chainParams.blockExplorerUrls[0] + 'tx/' + state.tx;\n }, [state.tx]);\n\n return (\n \n \n \n \n \n \n (´。• ω •。`)\n  Your DeepWaifu NFT has been listed!\n \n \n \n \n
\n
\n \n \n
\n \n \n \n \n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n \n
\n
\n
\n
\n );\n}\n\nfunction printPDF(dataUrl: string) {\n const pdf = new jsPdf({\n orientation: 'landscape',\n unit: 'px',\n format: [1280, 902],\n });\n const pdfWidth = pdf.internal.pageSize.getWidth();\n const pdfHeight = pdf.internal.pageSize.getHeight();\n pdf.addImage(dataUrl, 'JPEG', 0, 0, pdfWidth, pdfHeight);\n pdf.save(`certificate_of_adoption_${new Date().toISOString()}.pdf`);\n}\n\nconst Mint = styled.div`\n text-align: center;\n margin: 2em 0;\n\n .ant-switch {\n background-color: ${flamingo};\n }\n .ant-switch-checked {\n background-color: black;\n }\n .ant-switch-checked:focus {\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n .mintBtn {\n display: block;\n }\n`;\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 0 auto;\n padding: 0 10px;\n }\n .ant-input:hover,\n .ant-input:focus,\n .ant-input-focused {\n border-color: ${flamingo};\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n\n .certificate {\n text-align: center;\n }\n\n .titleFeaturesRed {\n font-size: 16px;\n color: ${flamingo};\n }\n .titleFeatures {\n font-size: 16px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .title30 {\n font-size: 30px;\n margin: 0px;\n margin-top: 0px !important;\n color: ${bluegrey};\n }\n .titleJumbo {\n font-family: Hachi Maru Pop;\n font-style: normal;\n font-weight: normal;\n font-size: 18px;\n line-height: 36px;\n color: ${flamingo};\n }\n .text14 {\n font-size: 14px;\n }\n .text12 {\n font-size: 12px;\n }\n .text8 {\n font-size: 8px;\n color: ${bluegrey};\n }\n .flow {\n flex-flow: initial;\n }\n`;\n","import { useCallback, useEffect, useState } from 'react';\nimport { useHistory } from 'react-router-dom';\nimport styled from 'styled-components';\nimport { Typography, Space, Button, Image, Row, Col, Card, Input, Badge, Form, message } from 'antd';\nimport { ethers } from 'ethers';\n\nimport { useDeepWaifuContract, useWaifu, useWallet } from '../../hooks';\nimport { htmlToDataUrl, sleep, srcToFile } from '../../utils';\nimport { apiService } from '../../services';\nimport { SECOND_MILLIS } from '../../constants';\nimport { IMintStatus } from '../../types';\nimport { Certificate } from '../certificate';\nimport { KaomojiLoader, NftCounter } from '../shared';\n\nconst { Title, Text } = Typography;\n\ninterface ICertificateParams {\n id: number;\n name: string;\n holder: string;\n}\n\nconst emailRegex =\n /^([a-zA-Z0-9_\\-+.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9-]+\\.)+))([a-zA-Z]{2,10}|[0-9]{1,3})(\\]?)$/i;\nconst MAX_NAME_LENGTH = 24;\n\nexport default function MintForm() {\n const history = useHistory();\n const [form] = Form.useForm();\n const { state, onUpdateState, onResetState } = useWaifu();\n const [resumeMint, setResumeMint] = useState(false);\n const [paying, setPaying] = useState(false);\n const [minting, setMinting] = useState(false);\n const [certificateParams, setCertificateParams] = useState({} as any);\n const { connected, connect } = useWallet();\n const { priceWei, onPayForMint } = useDeepWaifuContract();\n\n const waitForMint = useCallback(async (tx: string): Promise => {\n return new Promise(async (resolve, reject) => {\n try {\n while (true) {\n await sleep(3 * SECOND_MILLIS);\n const res = await apiService.mintStatus(tx);\n if (res.status === 'minted') {\n return resolve(res);\n } else if (res.status === 'error') {\n return reject(new Error(res.message));\n }\n }\n } catch (e) {\n reject(e);\n }\n });\n }, []);\n\n const getCertificateFile = useCallback(async (params: ICertificateParams) => {\n setCertificateParams(params);\n await sleep(100); // give time to rerender\n const dataUrl = await htmlToDataUrl('#certificate');\n\n return srcToFile(dataUrl, 'certificate.png', 'image/png');\n }, []);\n\n const handleMint = useCallback(async () => {\n const { name, email } = await form.validateFields();\n\n if (!connected) {\n setResumeMint(true);\n return connect();\n }\n\n try {\n (window as any).heap.identify(email);\n } catch (e) {\n console.error(e as any);\n }\n\n try {\n setPaying(true);\n const { tx, payer, id } = await onPayForMint();\n message.success('Payment successful!');\n setMinting(true);\n const certificate = await getCertificateFile({ id, name, holder: payer });\n await apiService.mint({ tx, waifu: state.waifu!, certificate, name });\n const res = await waitForMint(tx);\n\n onUpdateState({\n id: res.id,\n tx: res.tx,\n metadataLink: res.metadataLink,\n certificateLink: res.certificateLink,\n name,\n holder: payer,\n });\n\n message.success('Your Waifu has been minted!');\n history.push('/certificate');\n } catch (e) {\n message.error((e as any).message);\n } finally {\n setPaying(false);\n setMinting(false);\n }\n }, [connect, connected, form, getCertificateFile, history, onPayForMint, onUpdateState, state.waifu, waitForMint]);\n\n useEffect(() => {\n if (connected && resumeMint) {\n setResumeMint(false);\n handleMint();\n }\n }, [connected, handleMint, resumeMint]);\n\n const handleReset = useCallback(() => {\n onResetState();\n history.push('/');\n }, [history, onResetState]);\n\n return (\n
\n {minting && }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Certificate of Adoption\n 養子縁組証明書\n \n Let it be known to all that the holder of the DeepWaifu known by the name of\n \n \n \n \n \n has agreed to provide a loving home for this waifu and promised to keep it safe.\n \n \n \n \n Your email will be kept private\n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n
\n \n \n
\n
\n \n \n \n \n );\n}\n\nconst CertificateForm = styled.div`\n text-align: center;\n`;\n\nconst BadgeWrapper = styled.div`\n min-width: 110px;\n`;\n\nconst CertificateImage = styled.div`\n .certImage {\n width: 310px;\n height: 310px;\n margin: 0 3em 1em 0;\n }\n .ant-card-body {\n padding: 1em;\n }\n`;\n\nconst MintButtonWrapper = styled.div`\n text-align: center;\n margin: 1em 0 2em 0;\n`;\n\nconst CertificateContainer = styled.div`\n flex-grow: 0;\n flex-shrink: 0;\n width: 640px;\n height: 451px;\n position: absolute;\n left: -9000px;\n top: -9000px;\n\n .certificate {\n position: absolute;\n }\n`;\n","import styled from 'styled-components';\nimport { Typography, Layout, Row, Col } from 'antd';\n\nimport { flamingo, whitesmoke } from '../colors';\nimport { useWaifu } from '../../hooks';\nimport { AppHeader, KaomojiLoader } from '../shared';\nimport { OrderPillow } from '../pillow';\nimport MintForm from './MintForm';\n\nconst { Content } = Layout;\nconst { Title } = Typography;\n\nexport default function GeneratorHeader() {\n const { state } = useWaifu();\n const loading = !!state.selfieDataUrl && !state.waifuDataUrl;\n\n return (\n \n \n {loading && }\n \n \n \n {!loading && (\n <>\n (´。• ω •。`)\n  Here’s your DeepWaifu!\n \n )}\n {loading && (\n <>\n ( ☆ ω ☆ )\n  Generating your DeepWaifu...\n \n )}\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst CustomContent = styled.div`\n background: ${whitesmoke};\n\n .ant-layout-content {\n max-width: 960px;\n margin: 8em auto 0 auto;\n padding: 0 10px;\n }\n .ant-input:hover,\n .ant-input:focus,\n .ant-input-focused {\n border-color: ${flamingo};\n box-shadow: 0 0 0 2px rgb(235 87 87 / 20%);\n }\n\n .mainTitle {\n display: flex;\n padding: 1em 0 2em;\n }\n\n .titleFeaturesRed {\n font-size: 16px;\n color: ${flamingo};\n }\n .titleFeatures {\n font-size: 16px;\n }\n .titleRed {\n color: ${flamingo};\n }\n .title30 {\n font-size: 30px;\n margin: 0px;\n margin-top: 0px !important;\n }\n .titleJumbo {\n font-family: Hachi Maru Pop;\n font-style: normal;\n font-weight: normal;\n font-size: 18px;\n line-height: 36px;\n color: ${flamingo};\n }\n .text14 {\n font-size: 14px;\n }\n .text12 {\n font-size: 12px;\n }\n .flow {\n flex-flow: initial;\n\n &.blur {\n filter: blur(10px);\n }\n }\n`;\n","import React from 'react';\n\nimport { DeepWaifuContractProvider, WaifuProvider, WalletProvider } from './contexts';\n\ninterface IProps {\n children: React.ReactNode;\n}\n\nexport default function Providers({ children }: IProps) {\n return (\n \n \n {children}\n \n \n );\n}\n","import { createGlobalStyle } from 'styled-components';\nimport { flamingo } from './components/colors';\n\n// weird hack to make prettier recognize css in createGlobalStyle and format it\nconst styled = {\n div: createGlobalStyle,\n};\n\nconst GlobalStyle = styled.div`\n body,\n html {\n font-family: -apple-system, 'PingFangSC', BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell',\n 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;\n font-size: 10px;\n font-weight: 300;\n box-sizing: border-box;\n scroll-behavior: smooth;\n\n --antd-wave-shadow-color: ${flamingo};\n }\n\n h1.ant-typography,\n .ant-typography h1 {\n font-family: 'Dela Gothic One', cursive;\n font-weight: 500;\n font-size: 24px;\n margin-top: 0.5em !important;\n }\n\n code {\n font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New', monospace;\n }\n .ant-layout {\n background: white;\n }\n .ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon {\n color: ${flamingo};\n }\n .ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover {\n border-color: ${flamingo};\n }\n .ant-message-info .anticon,\n .ant-message-loading .anticon {\n color: ${flamingo};\n }\n\n .ant-btn-primary:not([disabled]) {\n background: ${flamingo};\n border-color: ${flamingo};\n }\n .ant-btn-primary:not([disabled]):hover,\n .ant-btn-primary:not([disabled]):focus {\n color: white;\n }\n .ant-btn:hover,\n .ant-btn:focus {\n color: ${flamingo};\n border-color: ${flamingo};\n }\n .shidenLogo {\n margin-top: 4px;\n }\n`;\n\nexport default GlobalStyle;\n","import 'antd/dist/antd.css';\nimport React, { Suspense } from 'react';\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom';\nimport { Spin } from 'antd';\nimport { LoadingOutlined } from '@ant-design/icons';\nimport styled from 'styled-components';\n\nimport { MainHeader, MainContent, MainFooter } from './components/main';\nimport { GeneratorHeader } from './components/generator';\nimport { CertificateHeader } from './components/certificate';\nimport { OrderError, OrderSuccess } from './components/pillow';\nimport Providers from './Providers';\nimport GlobalStyle from './GlobalStyle';\n\nconst antIcon = ;\n\nclass Wrapper extends React.Component {\n public render() {\n return (\n \n \n \n \n \n \n );\n }\n}\n\nfunction App() {\n return (\n \n \n \n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst LoaderWrapper = styled.div`\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n height: 100vh;\n`;\n\nexport default Wrapper;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}