hybrid 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- import{jsx as t,Fragment as e,jsxs as n}from"react/jsx-runtime";import{configureChains as r,createClient as o,WagmiConfig as c,useProvider as a,useAccount as i,useConnect as s,useNetwork as l,useSigner as u,useContract as d,useSwitchNetwork as h,useBlockNumber as m}from"wagmi";import{mainnet as f,goerli as p,arbitrum as b,arbitrumGoerli as B,localhost as v}from"wagmi/chains";import w,{useContext as D,useState as g,useEffect as y,useCallback as N}from"react";import{alchemyProvider as _}from"wagmi/providers/alchemy";import{infuraProvider as k}from"wagmi/providers/infura";import{publicProvider as I}from"wagmi/providers/public";import{etherscanAddressURL as x,truncateEthAddress as C}from"@hybrd/utils";export*from"@hybrd/utils";import P from"clsx";import{BigNumber as S,Wallet as E,utils as K}from"ethers";export*from"@hybrd/types";function M(n){const{provider:c,webSocketProvider:a}=r(n.chains,n.providers);return{client:o({autoConnect:!0,provider:c,webSocketProvider:a}),Provider:({children:n})=>t(e,{children:n})}}function L(){return D(O)}const O=w.createContext({client:void 0,chains:void 0}),j=[f,p,b,B,v];function A(e){console.log({props:e});const{children:n,wallet:r=M}=e,o=j,a=function(t){const{alchemyKey:e,infuraKey:n}=t,r=[];return e&&r.push(_({apiKey:e})),n&&r.push(k({apiKey:n})),r.push(I()),r}(e),{client:i,Provider:s}=r({chains:o,providers:a}),l={client:i,chains:o};return t(O.Provider,{value:l,children:t(c,{client:i,children:t(s,{children:n})})})}function G(e){const{className:r,chainId:o}=e,{address:c,isConnected:u}=i(),{connect:d,connectors:h}=s(),{chain:m}=l(),f=function(t){const[e,n]=g(),r=a({chainId:1});return y((()=>{t&&r.lookupAddress(t).then(n)}),[name,r]),e}(c);return n("p",{className:P(r,"text-sm text-center flex space-x-3 items-center justify-center text-gray"),children:[!u&&t("button",{onClick:()=>d({connector:h[0]}),children:"Connect Wallet"}),u&&n("span",{className:"",children:["connected as"," ",t("a",{href:x(c,o||m.id),className:P(r,"underline"),target:"_blank",rel:"noreferrer",children:f||C(c)})]})]})}const R=t=>{const{contract:e}=t,n=e?.chainId,{data:r}=u({chainId:n}),[o,c]=g(!1),[a,i]=g(!1),[s,l]=g(!1),h=d({address:e?.address,abi:e?.abi});return{isMinting:o,isSuccess:a,isError:s,mint:N((async(t,e={})=>{if(!h)return;c(!0);const{value:n=S.from("0"),gasPrice:o}=e;return h.connect(r).mint(t,{value:n,gasPrice:o}).then((t=>t.wait())).then((t=>(i(!0),setTimeout((()=>i(!1)),3e3),t))).catch((t=>{console.error(t),l(!0),setTimeout((()=>l(!1)),1e3)})).finally((()=>c(!1)))}),[r,h,n])}};var T={DefaultButton:"DefaultButton-module_DefaultButton__Px-Zc",DefaultButtonBase:"DefaultButton-module_DefaultButtonBase__KRytO",DefaultButtonSuccess:"DefaultButton-module_DefaultButtonSuccess__eaosU",DefaultButtonError:"DefaultButton-module_DefaultButtonError__B7CKv",DefaultButtonDisabled:"DefaultButton-module_DefaultButtonDisabled__-PIdK"};const U={default:T.DefaultButtonBase,success:T.DefaultButtonSuccess,error:T.DefaultButtonError},W=e=>{const{className:n=T.DefaultButton,intent:r="default",onClick:o,children:c,disabled:a}=e;return t("button",{className:P(n,U[r],a&&T.DefaultButtonDisabled),onClick:o,children:c})},F=e=>{const{amount:n=1,button:r=W,className:o,contract:c}=e,{data:a}=u(),{connect:i,connectors:d}=s(),{chain:m}=l(),{switchNetwork:f}=h(),{isMinting:p,isSuccess:b,isError:B,mint:v}=R({contract:c});if(p)return t(r,{disabled:!0,className:o,children:"Minting"});if(b)return t(r,{disabled:!0,className:o,intent:"success",children:"Minted"});if(B)return t(r,{disabled:!0,className:o,intent:"error",children:"Error Occurred"});if(!a){const e=d[0];return t(r,{className:o,onClick:()=>i({connector:e}),children:"Connect Wallet"})}return t(r,m?.id!==c?.chainId&&f?{onClick:()=>f(c?.chainId),className:o,intent:"error",children:"Switch Network"}:{className:o,onClick:()=>v(n),children:"Mint Now"})};function Y(t){const{address:e,contract:n}=t,r=n?.chainId,o=a({chainId:r}),[c,i]=g(!0),[s,l]=g(),[u,h]=g(),m=d({address:n?.address,abi:n?.abi});return y((()=>{n||(i(!1),l(!1),h(!0)),m&&m.connect(o).balanceOf(e).then((t=>t.toNumber())).then((t=>{console.log({allow:t}),l(t),h(!t)})).catch((t=>{console.error(t),l(!1),h(!0)})).finally((()=>i(!1)))}),[e,n]),{isLoading:c,address:e,allow:s,deny:u}}const Z=({children:n,contract:r,loading:o=t("p",{children:"Loading"}),deny:c=t("p",{children:"You must own a token to view this content."})})=>{const{address:a}=i(),{isLoading:s,allow:l}=Y({address:a,contract:r});return t(e,{children:s?o:l?n:c})},$=e=>{const{className:n,contract:r}=e,o=r?.chainId,c=a({chainId:o}),{data:i}=m(),s=d({address:r?.address,abi:r?.abi}),l=function(t,e,n){const[r,o]=g(n);return y((()=>{let e=!1;const n=t();if(null!=n)return n.then((t=>{e||o(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),r}((()=>{if(s)return s.connect(c).totalSupply().then((t=>t.toNumber()))}),[s,i]);return t("span",{className:n,children:l})},q=()=>{const[t,e]=g();return m({watch:!0,onBlock:e}),t};function z(t){const{deployData:e,chainId:n}=t,r=a({chainId:n}),o=q(),[c,i]=g({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=N((t=>"function"==typeof e?e(t):e),[e]);return y((()=>{const{address:t}=E.createRandom(),e=s(r);e&&async function(t,e){const n=await t.estimateGas(e),r=await t.getGasPrice(),o=n.mul(r),c=parseFloat(K.formatUnits(o,"ether"));return{gas:n,gasPrice:r,wei:o,eth:c}}(r,{data:e,from:t}).then(i).catch((t=>{console.error("useEstimation",t)}))}),[o,r,n,s]),c}export{G as ConnectedAs,F as MintButton,Z as TokenGate,$ as TotalSupply,A as Web3Provider,z as useEstimation,L as useHybrid,R as useMinting,Y as useTokenGating};
1
+ import{jsx as t,Fragment as e,jsxs as n}from"react/jsx-runtime";import{configureChains as r,createClient as o,WagmiConfig as c,useProvider as a,useAccount as i,useConnect as s,useNetwork as l,useSigner as u,useContract as d,useSwitchNetwork as h,useBlockNumber as m}from"wagmi";import{mainnet as f,goerli as p,arbitrum as b,arbitrumGoerli as w,localhost as B}from"wagmi/chains";import v,{useContext as D,useState as g,useEffect as y,useCallback as N}from"react";import{alchemyProvider as _}from"wagmi/providers/alchemy";import{infuraProvider as k}from"wagmi/providers/infura";import{publicProvider as I}from"wagmi/providers/public";import{etherscanAddressURL as x,truncateEthAddress as C}from"@hybrd/utils";export*from"@hybrd/utils";import P from"clsx";import{BigNumber as S,Wallet as E,utils as K}from"ethers";export*from"@hybrd/types";function M(n){const{provider:c,webSocketProvider:a}=r(n.chains,n.providers);return{client:o({autoConnect:!0,provider:c,webSocketProvider:a}),Provider:({children:n})=>t(e,{children:n})}}function L(){return D(O)}const O=v.createContext({client:void 0,chains:void 0}),j=[f,p,b,w,B];function A(e){console.log({props:e});const{children:n,wallet:r=M}=e,o=j,a=function(t){const{alchemyKey:e,infuraKey:n}=t,r=[];return e&&r.push(_({apiKey:e})),n&&r.push(k({apiKey:n})),r.push(I()),r}(e),{client:i,Provider:s}=r({chains:o,providers:a}),l={client:i,chains:o};return t(O.Provider,{value:l,children:t(c,{client:i,children:t(s,{children:n})})})}function G(e){const{className:r,chainId:o}=e,{address:c,isConnected:u}=i(),{connect:d,connectors:h}=s(),{chain:m}=l(),f=function(t){const[e,n]=g(),r=a({chainId:1});return y((()=>{t&&r.lookupAddress(t).then(n)}),[name,r]),e}(c);return n("p",{className:P(r,"text-sm text-center flex space-x-3 items-center justify-center text-gray"),children:[!u&&t("button",{onClick:()=>d({connector:h[0]}),children:"Connect Wallet"}),u&&n("span",{className:"",children:["connected as"," ",t("a",{href:x(c,o||m.id),className:P(r,"underline"),target:"_blank",rel:"noreferrer",children:f||C(c)})]})]})}const R=t=>{const{contract:e}=t,n=e?.chainId,{data:r}=u({chainId:n}),[o,c]=g(!1),[a,i]=g(!1),[s,l]=g(!1),h=d({address:e?.address,abi:e?.abi});return{isMinting:o,isSuccess:a,isError:s,mint:N((async(t,e={})=>{if(!h)return;c(!0);const{value:n=S.from("0"),gasPrice:o}=e;return h.connect(r).mint(t,{value:n,gasPrice:o}).then((t=>t.wait())).then((t=>(i(!0),setTimeout((()=>i(!1)),3e3),t))).catch((t=>{console.error(t),l(!0),setTimeout((()=>l(!1)),1e3)})).finally((()=>c(!1)))}),[r,h,n])}};var T={DefaultButton:"DefaultButton-module_DefaultButton__Px-Zc",DefaultButtonBase:"DefaultButton-module_DefaultButtonBase__KRytO",DefaultButtonSuccess:"DefaultButton-module_DefaultButtonSuccess__eaosU",DefaultButtonError:"DefaultButton-module_DefaultButtonError__B7CKv",DefaultButtonDisabled:"DefaultButton-module_DefaultButtonDisabled__-PIdK"};const U={default:T.DefaultButtonBase,success:T.DefaultButtonSuccess,error:T.DefaultButtonError},W=e=>{const{className:n=T.DefaultButton,intent:r="default",onClick:o,children:c,disabled:a}=e;return t("button",{className:P(n,U[r],a&&T.DefaultButtonDisabled),onClick:o,children:c})},F=e=>{const{amount:n=1,button:r=W,className:o,contract:c}=e,{data:a}=u(),{connect:i,connectors:d}=s(),{chain:m}=l(),{switchNetwork:f}=h(),{isMinting:p,isSuccess:b,isError:w,mint:B}=R({contract:c});if(p)return t(r,{disabled:!0,className:o,children:"Minting"});if(b)return t(r,{disabled:!0,className:o,intent:"success",children:"Minted"});if(w)return t(r,{disabled:!0,className:o,intent:"error",children:"Error Occurred"});if(!a){const e=d[0];return t(r,{className:o,onClick:()=>i({connector:e}),children:"Connect Wallet"})}return t(r,m?.id!==c?.chainId&&f?{onClick:()=>f(c?.chainId),className:o,intent:"error",children:"Switch Network"}:{className:o,onClick:()=>B(n),children:"Mint Now"})};function Y(t){const{address:e,contract:n}=t,r=n?.chainId,o=a({chainId:r}),[c,i]=g(!0),[s,l]=g(),[u,h]=g(),m=d({address:n?.address,abi:n?.abi});return y((()=>{n||(i(!1),l(!1),h(!0)),m&&m.connect(o).balanceOf(e).then((t=>t.toNumber())).then((t=>{console.log({allow:t}),l(t),h(!t)})).catch((t=>{console.error(t),l(!1),h(!0)})).finally((()=>i(!1)))}),[e,n]),{isLoading:c,address:e,allow:s,deny:u}}const Z=({children:n,contract:r,loading:o=t("p",{children:"Loading"}),deny:c=t("p",{children:"You must own a token to view this content."})})=>{const{address:a}=i(),{isLoading:s,allow:l}=Y({address:a,contract:r});return t(e,{children:s?o:l?n:c})},$=e=>{const{className:n,contract:r}=e,o=r?.chainId,c=a({chainId:o}),{data:i}=m({watch:!0}),s=d({address:r?.address,abi:r?.abi}),l=function(t,e,n){const[r,o]=g(n);return y((()=>{let e=!1;const n=t();if(null!=n)return n.then((t=>{e||o(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),r}((()=>{if(s)return s.connect(c).totalSupply().then((t=>t.toNumber()))}),[s,i]);return t("span",{className:n,children:l})},q=()=>{const[t,e]=g();return m({watch:!0,onBlock:e}),t};function z(t){const{deployData:e,chainId:n}=t,r=a({chainId:n}),o=q(),[c,i]=g({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=N((t=>"function"==typeof e?e(t):e),[e]);return y((()=>{const{address:t}=E.createRandom(),e=s(r);e&&async function(t,e){const n=await t.estimateGas(e),r=await t.getGasPrice(),o=n.mul(r),c=parseFloat(K.formatUnits(o,"ether"));return{gas:n,gasPrice:r,wei:o,eth:c}}(r,{data:e,from:t}).then(i).catch((t=>{console.error("useEstimation",t)}))}),[o,r,n,s]),c}export{G as ConnectedAs,F as MintButton,Z as TokenGate,$ as TotalSupply,A as Web3Provider,z as useEstimation,L as useHybrid,R as useMinting,Y as useTokenGating};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/providers/DefaultWalletConnector.tsx","../src/providers/Web3Provider.tsx","../src/providers/helpers.ts","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import React from \"react\"\nimport { configureChains, createClient, Client } from \"wagmi\"\nimport type { WalletConnection } from \"@hybrd/types\"\n\nexport default function DefaultWalletConnector(config) {\n const { provider, webSocketProvider } = configureChains(\n config.chains,\n config.providers\n )\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\n })\n\n return {\n client: client as Client,\n Provider: ({ children }: { children: React.ReactNode }) => <>{children}</>\n } as WalletConnection\n}\n","import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { ProviderKeys, WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\nimport { buildProviders } from \"./helpers\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(\n props: {\n children: React.ReactNode\n wallet: WalletConnector\n } & ProviderKeys\n) {\n console.log({ props })\n\n const {\n children,\n wallet: createWalletConnector = createDefaultWalletConnector\n } = props\n const chains = SUPPORTED_CHAINS\n const providers = buildProviders(props)\n\n const { client, Provider } = createWalletConnector({\n chains,\n providers\n })\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport type { ProviderKeys } from \"@hybrd/types\"\n\nexport function buildProviders(config: ProviderKeys) {\n const { alchemyKey, infuraKey } = config\n const providers = []\n\n if (alchemyKey) {\n providers.push(\n alchemyProvider({\n apiKey: alchemyKey\n })\n )\n }\n\n if (infuraKey) {\n providers.push(\n infuraProvider({\n apiKey: infuraKey\n })\n )\n }\n\n // TODO - add hybrid provider\n // providers.push(hybridProvider())\n\n providers.push(publicProvider())\n\n return providers\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["DefaultWalletConnector","config","provider","webSocketProvider","configureChains","chains","providers","client","createClient","autoConnect","Provider","children","_jsx","_Fragment","useHybrid","useContext","Web3Context","React","createContext","undefined","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","wallet","createWalletConnector","createDefaultWalletConnector","alchemyKey","infuraKey","push","alchemyProvider","apiKey","infuraProvider","publicProvider","buildProviders","contextValue","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","watch","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/providers/DefaultWalletConnector.tsx","../src/providers/Web3Provider.tsx","../src/providers/helpers.ts","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import React from \"react\"\nimport { configureChains, createClient, Client } from \"wagmi\"\nimport type { WalletConnection } from \"@hybrd/types\"\n\nexport default function DefaultWalletConnector(config) {\n const { provider, webSocketProvider } = configureChains(\n config.chains,\n config.providers\n )\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\n })\n\n return {\n client: client as Client,\n Provider: ({ children }: { children: React.ReactNode }) => <>{children}</>\n } as WalletConnection\n}\n","import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { ProviderKeys, WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\nimport { buildProviders } from \"./helpers\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(\n props: {\n children: React.ReactNode\n wallet: WalletConnector\n } & ProviderKeys\n) {\n console.log({ props })\n\n const {\n children,\n wallet: createWalletConnector = createDefaultWalletConnector\n } = props\n const chains = SUPPORTED_CHAINS\n const providers = buildProviders(props)\n\n const { client, Provider } = createWalletConnector({\n chains,\n providers\n })\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport type { ProviderKeys } from \"@hybrd/types\"\n\nexport function buildProviders(config: ProviderKeys) {\n const { alchemyKey, infuraKey } = config\n const providers = []\n\n if (alchemyKey) {\n providers.push(\n alchemyProvider({\n apiKey: alchemyKey\n })\n )\n }\n\n if (infuraKey) {\n providers.push(\n infuraProvider({\n apiKey: infuraKey\n })\n )\n }\n\n // TODO - add hybrid provider\n // providers.push(hybridProvider())\n\n providers.push(publicProvider())\n\n return providers\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber({ watch: true })\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["DefaultWalletConnector","config","provider","webSocketProvider","configureChains","chains","providers","client","createClient","autoConnect","Provider","children","_jsx","_Fragment","useHybrid","useContext","Web3Context","React","createContext","undefined","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","wallet","createWalletConnector","createDefaultWalletConnector","alchemyKey","infuraKey","push","alchemyProvider","apiKey","infuraProvider","publicProvider","buildProviders","contextValue","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","watch","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{jsx as t,Fragment as e,jsxs as n}from"react/jsx-runtime";import{configureChains as r,createClient as o,WagmiConfig as c,useProvider as a,useAccount as i,useConnect as s,useNetwork as l,useSigner as u,useContract as d,useSwitchNetwork as h,useBlockNumber as m}from"wagmi";import{mainnet as f,goerli as p,arbitrum as b,arbitrumGoerli as B,localhost as v}from"wagmi/chains";import w,{useContext as D,useState as g,useEffect as y,useCallback as N}from"react";import{alchemyProvider as _}from"wagmi/providers/alchemy";import{infuraProvider as k}from"wagmi/providers/infura";import{publicProvider as I}from"wagmi/providers/public";import{etherscanAddressURL as x,truncateEthAddress as C}from"@hybrd/utils";export*from"@hybrd/utils";import P from"clsx";import{BigNumber as S,Wallet as E,utils as K}from"ethers";export*from"@hybrd/types";function M(n){const{provider:c,webSocketProvider:a}=r(n.chains,n.providers);return{client:o({autoConnect:!0,provider:c,webSocketProvider:a}),Provider:({children:n})=>t(e,{children:n})}}function L(){return D(O)}const O=w.createContext({client:void 0,chains:void 0}),j=[f,p,b,B,v];function A(e){console.log({props:e});const{children:n,wallet:r=M}=e,o=j,a=function(t){const{alchemyKey:e,infuraKey:n}=t,r=[];return e&&r.push(_({apiKey:e})),n&&r.push(k({apiKey:n})),r.push(I()),r}(e),{client:i,Provider:s}=r({chains:o,providers:a}),l={client:i,chains:o};return t(O.Provider,{value:l,children:t(c,{client:i,children:t(s,{children:n})})})}function G(e){const{className:r,chainId:o}=e,{address:c,isConnected:u}=i(),{connect:d,connectors:h}=s(),{chain:m}=l(),f=function(t){const[e,n]=g(),r=a({chainId:1});return y((()=>{t&&r.lookupAddress(t).then(n)}),[name,r]),e}(c);return n("p",{className:P(r,"text-sm text-center flex space-x-3 items-center justify-center text-gray"),children:[!u&&t("button",{onClick:()=>d({connector:h[0]}),children:"Connect Wallet"}),u&&n("span",{className:"",children:["connected as"," ",t("a",{href:x(c,o||m.id),className:P(r,"underline"),target:"_blank",rel:"noreferrer",children:f||C(c)})]})]})}const R=t=>{const{contract:e}=t,n=e?.chainId,{data:r}=u({chainId:n}),[o,c]=g(!1),[a,i]=g(!1),[s,l]=g(!1),h=d({address:e?.address,abi:e?.abi});return{isMinting:o,isSuccess:a,isError:s,mint:N((async(t,e={})=>{if(!h)return;c(!0);const{value:n=S.from("0"),gasPrice:o}=e;return h.connect(r).mint(t,{value:n,gasPrice:o}).then((t=>t.wait())).then((t=>(i(!0),setTimeout((()=>i(!1)),3e3),t))).catch((t=>{console.error(t),l(!0),setTimeout((()=>l(!1)),1e3)})).finally((()=>c(!1)))}),[r,h,n])}};var T={DefaultButton:"DefaultButton-module_DefaultButton__Px-Zc",DefaultButtonBase:"DefaultButton-module_DefaultButtonBase__KRytO",DefaultButtonSuccess:"DefaultButton-module_DefaultButtonSuccess__eaosU",DefaultButtonError:"DefaultButton-module_DefaultButtonError__B7CKv",DefaultButtonDisabled:"DefaultButton-module_DefaultButtonDisabled__-PIdK"};const U={default:T.DefaultButtonBase,success:T.DefaultButtonSuccess,error:T.DefaultButtonError},W=e=>{const{className:n=T.DefaultButton,intent:r="default",onClick:o,children:c,disabled:a}=e;return t("button",{className:P(n,U[r],a&&T.DefaultButtonDisabled),onClick:o,children:c})},F=e=>{const{amount:n=1,button:r=W,className:o,contract:c}=e,{data:a}=u(),{connect:i,connectors:d}=s(),{chain:m}=l(),{switchNetwork:f}=h(),{isMinting:p,isSuccess:b,isError:B,mint:v}=R({contract:c});if(p)return t(r,{disabled:!0,className:o,children:"Minting"});if(b)return t(r,{disabled:!0,className:o,intent:"success",children:"Minted"});if(B)return t(r,{disabled:!0,className:o,intent:"error",children:"Error Occurred"});if(!a){const e=d[0];return t(r,{className:o,onClick:()=>i({connector:e}),children:"Connect Wallet"})}return t(r,m?.id!==c?.chainId&&f?{onClick:()=>f(c?.chainId),className:o,intent:"error",children:"Switch Network"}:{className:o,onClick:()=>v(n),children:"Mint Now"})};function Y(t){const{address:e,contract:n}=t,r=n?.chainId,o=a({chainId:r}),[c,i]=g(!0),[s,l]=g(),[u,h]=g(),m=d({address:n?.address,abi:n?.abi});return y((()=>{n||(i(!1),l(!1),h(!0)),m&&m.connect(o).balanceOf(e).then((t=>t.toNumber())).then((t=>{console.log({allow:t}),l(t),h(!t)})).catch((t=>{console.error(t),l(!1),h(!0)})).finally((()=>i(!1)))}),[e,n]),{isLoading:c,address:e,allow:s,deny:u}}const Z=({children:n,contract:r,loading:o=t("p",{children:"Loading"}),deny:c=t("p",{children:"You must own a token to view this content."})})=>{const{address:a}=i(),{isLoading:s,allow:l}=Y({address:a,contract:r});return t(e,{children:s?o:l?n:c})},$=e=>{const{className:n,contract:r}=e,o=r?.chainId,c=a({chainId:o}),{data:i}=m(),s=d({address:r?.address,abi:r?.abi}),l=function(t,e,n){const[r,o]=g(n);return y((()=>{let e=!1;const n=t();if(null!=n)return n.then((t=>{e||o(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),r}((()=>{if(s)return s.connect(c).totalSupply().then((t=>t.toNumber()))}),[s,i]);return t("span",{className:n,children:l})},q=()=>{const[t,e]=g();return m({watch:!0,onBlock:e}),t};function z(t){const{deployData:e,chainId:n}=t,r=a({chainId:n}),o=q(),[c,i]=g({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=N((t=>"function"==typeof e?e(t):e),[e]);return y((()=>{const{address:t}=E.createRandom(),e=s(r);e&&async function(t,e){const n=await t.estimateGas(e),r=await t.getGasPrice(),o=n.mul(r),c=parseFloat(K.formatUnits(o,"ether"));return{gas:n,gasPrice:r,wei:o,eth:c}}(r,{data:e,from:t}).then(i).catch((t=>{console.error("useEstimation",t)}))}),[o,r,n,s]),c}export{G as ConnectedAs,F as MintButton,Z as TokenGate,$ as TotalSupply,A as Web3Provider,z as useEstimation,L as useHybrid,R as useMinting,Y as useTokenGating};
1
+ import{jsx as t,Fragment as e,jsxs as n}from"react/jsx-runtime";import{configureChains as r,createClient as o,WagmiConfig as c,useProvider as a,useAccount as i,useConnect as s,useNetwork as l,useSigner as u,useContract as d,useSwitchNetwork as h,useBlockNumber as m}from"wagmi";import{mainnet as f,goerli as p,arbitrum as b,arbitrumGoerli as w,localhost as B}from"wagmi/chains";import v,{useContext as D,useState as g,useEffect as y,useCallback as N}from"react";import{alchemyProvider as _}from"wagmi/providers/alchemy";import{infuraProvider as k}from"wagmi/providers/infura";import{publicProvider as I}from"wagmi/providers/public";import{etherscanAddressURL as x,truncateEthAddress as C}from"@hybrd/utils";export*from"@hybrd/utils";import P from"clsx";import{BigNumber as S,Wallet as E,utils as K}from"ethers";export*from"@hybrd/types";function M(n){const{provider:c,webSocketProvider:a}=r(n.chains,n.providers);return{client:o({autoConnect:!0,provider:c,webSocketProvider:a}),Provider:({children:n})=>t(e,{children:n})}}function L(){return D(O)}const O=v.createContext({client:void 0,chains:void 0}),j=[f,p,b,w,B];function A(e){console.log({props:e});const{children:n,wallet:r=M}=e,o=j,a=function(t){const{alchemyKey:e,infuraKey:n}=t,r=[];return e&&r.push(_({apiKey:e})),n&&r.push(k({apiKey:n})),r.push(I()),r}(e),{client:i,Provider:s}=r({chains:o,providers:a}),l={client:i,chains:o};return t(O.Provider,{value:l,children:t(c,{client:i,children:t(s,{children:n})})})}function G(e){const{className:r,chainId:o}=e,{address:c,isConnected:u}=i(),{connect:d,connectors:h}=s(),{chain:m}=l(),f=function(t){const[e,n]=g(),r=a({chainId:1});return y((()=>{t&&r.lookupAddress(t).then(n)}),[name,r]),e}(c);return n("p",{className:P(r,"text-sm text-center flex space-x-3 items-center justify-center text-gray"),children:[!u&&t("button",{onClick:()=>d({connector:h[0]}),children:"Connect Wallet"}),u&&n("span",{className:"",children:["connected as"," ",t("a",{href:x(c,o||m.id),className:P(r,"underline"),target:"_blank",rel:"noreferrer",children:f||C(c)})]})]})}const R=t=>{const{contract:e}=t,n=e?.chainId,{data:r}=u({chainId:n}),[o,c]=g(!1),[a,i]=g(!1),[s,l]=g(!1),h=d({address:e?.address,abi:e?.abi});return{isMinting:o,isSuccess:a,isError:s,mint:N((async(t,e={})=>{if(!h)return;c(!0);const{value:n=S.from("0"),gasPrice:o}=e;return h.connect(r).mint(t,{value:n,gasPrice:o}).then((t=>t.wait())).then((t=>(i(!0),setTimeout((()=>i(!1)),3e3),t))).catch((t=>{console.error(t),l(!0),setTimeout((()=>l(!1)),1e3)})).finally((()=>c(!1)))}),[r,h,n])}};var T={DefaultButton:"DefaultButton-module_DefaultButton__Px-Zc",DefaultButtonBase:"DefaultButton-module_DefaultButtonBase__KRytO",DefaultButtonSuccess:"DefaultButton-module_DefaultButtonSuccess__eaosU",DefaultButtonError:"DefaultButton-module_DefaultButtonError__B7CKv",DefaultButtonDisabled:"DefaultButton-module_DefaultButtonDisabled__-PIdK"};const U={default:T.DefaultButtonBase,success:T.DefaultButtonSuccess,error:T.DefaultButtonError},W=e=>{const{className:n=T.DefaultButton,intent:r="default",onClick:o,children:c,disabled:a}=e;return t("button",{className:P(n,U[r],a&&T.DefaultButtonDisabled),onClick:o,children:c})},F=e=>{const{amount:n=1,button:r=W,className:o,contract:c}=e,{data:a}=u(),{connect:i,connectors:d}=s(),{chain:m}=l(),{switchNetwork:f}=h(),{isMinting:p,isSuccess:b,isError:w,mint:B}=R({contract:c});if(p)return t(r,{disabled:!0,className:o,children:"Minting"});if(b)return t(r,{disabled:!0,className:o,intent:"success",children:"Minted"});if(w)return t(r,{disabled:!0,className:o,intent:"error",children:"Error Occurred"});if(!a){const e=d[0];return t(r,{className:o,onClick:()=>i({connector:e}),children:"Connect Wallet"})}return t(r,m?.id!==c?.chainId&&f?{onClick:()=>f(c?.chainId),className:o,intent:"error",children:"Switch Network"}:{className:o,onClick:()=>B(n),children:"Mint Now"})};function Y(t){const{address:e,contract:n}=t,r=n?.chainId,o=a({chainId:r}),[c,i]=g(!0),[s,l]=g(),[u,h]=g(),m=d({address:n?.address,abi:n?.abi});return y((()=>{n||(i(!1),l(!1),h(!0)),m&&m.connect(o).balanceOf(e).then((t=>t.toNumber())).then((t=>{console.log({allow:t}),l(t),h(!t)})).catch((t=>{console.error(t),l(!1),h(!0)})).finally((()=>i(!1)))}),[e,n]),{isLoading:c,address:e,allow:s,deny:u}}const Z=({children:n,contract:r,loading:o=t("p",{children:"Loading"}),deny:c=t("p",{children:"You must own a token to view this content."})})=>{const{address:a}=i(),{isLoading:s,allow:l}=Y({address:a,contract:r});return t(e,{children:s?o:l?n:c})},$=e=>{const{className:n,contract:r}=e,o=r?.chainId,c=a({chainId:o}),{data:i}=m({watch:!0}),s=d({address:r?.address,abi:r?.abi}),l=function(t,e,n){const[r,o]=g(n);return y((()=>{let e=!1;const n=t();if(null!=n)return n.then((t=>{e||o(t)})).catch((t=>{console.error(`Error in useAsyncMemo: ${t}`)})),()=>{e=!0}}),e),r}((()=>{if(s)return s.connect(c).totalSupply().then((t=>t.toNumber()))}),[s,i]);return t("span",{className:n,children:l})},q=()=>{const[t,e]=g();return m({watch:!0,onBlock:e}),t};function z(t){const{deployData:e,chainId:n}=t,r=a({chainId:n}),o=q(),[c,i]=g({gas:void 0,gasPrice:void 0,wei:void 0,eth:void 0}),s=N((t=>"function"==typeof e?e(t):e),[e]);return y((()=>{const{address:t}=E.createRandom(),e=s(r);e&&async function(t,e){const n=await t.estimateGas(e),r=await t.getGasPrice(),o=n.mul(r),c=parseFloat(K.formatUnits(o,"ether"));return{gas:n,gasPrice:r,wei:o,eth:c}}(r,{data:e,from:t}).then(i).catch((t=>{console.error("useEstimation",t)}))}),[o,r,n,s]),c}export{G as ConnectedAs,F as MintButton,Z as TokenGate,$ as TotalSupply,A as Web3Provider,z as useEstimation,L as useHybrid,R as useMinting,Y as useTokenGating};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/providers/DefaultWalletConnector.tsx","../src/providers/Web3Provider.tsx","../src/providers/helpers.ts","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import React from \"react\"\nimport { configureChains, createClient, Client } from \"wagmi\"\nimport type { WalletConnection } from \"@hybrd/types\"\n\nexport default function DefaultWalletConnector(config) {\n const { provider, webSocketProvider } = configureChains(\n config.chains,\n config.providers\n )\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\n })\n\n return {\n client: client as Client,\n Provider: ({ children }: { children: React.ReactNode }) => <>{children}</>\n } as WalletConnection\n}\n","import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { ProviderKeys, WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\nimport { buildProviders } from \"./helpers\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(\n props: {\n children: React.ReactNode\n wallet: WalletConnector\n } & ProviderKeys\n) {\n console.log({ props })\n\n const {\n children,\n wallet: createWalletConnector = createDefaultWalletConnector\n } = props\n const chains = SUPPORTED_CHAINS\n const providers = buildProviders(props)\n\n const { client, Provider } = createWalletConnector({\n chains,\n providers\n })\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport type { ProviderKeys } from \"@hybrd/types\"\n\nexport function buildProviders(config: ProviderKeys) {\n const { alchemyKey, infuraKey } = config\n const providers = []\n\n if (alchemyKey) {\n providers.push(\n alchemyProvider({\n apiKey: alchemyKey\n })\n )\n }\n\n if (infuraKey) {\n providers.push(\n infuraProvider({\n apiKey: infuraKey\n })\n )\n }\n\n // TODO - add hybrid provider\n // providers.push(hybridProvider())\n\n providers.push(publicProvider())\n\n return providers\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["DefaultWalletConnector","config","provider","webSocketProvider","configureChains","chains","providers","client","createClient","autoConnect","Provider","children","_jsx","_Fragment","useHybrid","useContext","Web3Context","React","createContext","undefined","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","wallet","createWalletConnector","createDefaultWalletConnector","alchemyKey","infuraKey","push","alchemyProvider","apiKey","infuraProvider","publicProvider","buildProviders","contextValue","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","watch","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../src/providers/DefaultWalletConnector.tsx","../src/providers/Web3Provider.tsx","../src/providers/helpers.ts","../src/components/ConnectedAs.tsx","../src/hooks/internal/useEnsName.tsx","../src/hooks/useMinting.ts","../src/components/DefaultButton.tsx","../src/components/MintButton.tsx","../src/hooks/useTokenGating.ts","../src/components/TokenGate.tsx","../src/components/TotalSupply.tsx","../src/hooks/internal/useAsyncMemo.ts","../src/hooks/useEstimation.ts"],"sourcesContent":["import React from \"react\"\nimport { configureChains, createClient, Client } from \"wagmi\"\nimport type { WalletConnection } from \"@hybrd/types\"\n\nexport default function DefaultWalletConnector(config) {\n const { provider, webSocketProvider } = configureChains(\n config.chains,\n config.providers\n )\n\n const client = createClient({\n autoConnect: true,\n // connectors,\n provider,\n webSocketProvider\n })\n\n return {\n client: client as Client,\n Provider: ({ children }: { children: React.ReactNode }) => <>{children}</>\n } as WalletConnection\n}\n","import { WagmiConfig, Client } from \"wagmi\"\nimport {\n mainnet,\n goerli,\n localhost,\n arbitrum,\n arbitrumGoerli\n} from \"wagmi/chains\"\n\nimport React, { useContext, useMemo } from \"react\"\n// import { Provider } from \"@ethersproject/providers\"\nimport { ProviderKeys, WalletConnector } from \"@hybrd/types\"\nimport createDefaultWalletConnector from \"./DefaultWalletConnector\"\nimport { buildProviders } from \"./helpers\"\n\nexport type Config = {\n // appName?: string\n // alchemyKey?: string\n // infuraKey?: string\n // publicProvider?: boolean\n}\n\n// export const withHybrid = (InputComponent, config: Config = {}) => {\n// return function WithHybrid(props) {\n// return (\n// <Web3Provider {...config}>\n// <InputComponent {...props} />\n// </Web3Provider>\n// )\n// }\n// }\n\nexport function useHybrid() {\n return useContext(Web3Context)\n}\n\nexport const Web3Context = React.createContext<{\n client: Client\n chains: any[]\n // provider: ({ chainId }: { chainId?: number }) => Provider\n // webSocketProvider: ({ chainId }: { chainId?: number }) => Provider\n}>({\n client: undefined,\n chains: undefined\n // provider: undefined,\n // webSocketProvider: undefined\n})\n\nconst SUPPORTED_CHAINS = [mainnet, goerli, arbitrum, arbitrumGoerli, localhost]\n\nexport function Web3Provider(\n props: {\n children: React.ReactNode\n wallet: WalletConnector\n } & ProviderKeys\n) {\n console.log({ props })\n\n const {\n children,\n wallet: createWalletConnector = createDefaultWalletConnector\n } = props\n const chains = SUPPORTED_CHAINS\n const providers = buildProviders(props)\n\n const { client, Provider } = createWalletConnector({\n chains,\n providers\n })\n\n const contextValue = {\n client,\n chains\n // provider,\n // webSocketProvider\n }\n\n return (\n <Web3Context.Provider value={contextValue}>\n <WagmiConfig client={client}>\n <Provider>{children}</Provider>\n </WagmiConfig>\n </Web3Context.Provider>\n )\n}\n","import { alchemyProvider } from \"wagmi/providers/alchemy\"\nimport { infuraProvider } from \"wagmi/providers/infura\"\nimport { publicProvider } from \"wagmi/providers/public\"\nimport type { ProviderKeys } from \"@hybrd/types\"\n\nexport function buildProviders(config: ProviderKeys) {\n const { alchemyKey, infuraKey } = config\n const providers = []\n\n if (alchemyKey) {\n providers.push(\n alchemyProvider({\n apiKey: alchemyKey\n })\n )\n }\n\n if (infuraKey) {\n providers.push(\n infuraProvider({\n apiKey: infuraKey\n })\n )\n }\n\n // TODO - add hybrid provider\n // providers.push(hybridProvider())\n\n providers.push(publicProvider())\n\n return providers\n}\n","import { etherscanAddressURL, truncateEthAddress } from \"@hybrd/utils\"\nimport clsx from \"clsx\"\nimport { useEnsName } from \"../hooks/internal\"\nimport { useAccount, useConnect, useNetwork } from \"wagmi\"\n\nexport default function ConnectedAs(props: {\n className?: string\n chainId?: number\n}) {\n const { className, chainId } = props\n const { address, isConnected } = useAccount()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const ens = useEnsName(address)\n\n return (\n <p\n className={clsx(\n className,\n \"text-sm text-center flex space-x-3 items-center justify-center text-gray\"\n )}\n >\n {!isConnected && (\n <button onClick={() => connect({ connector: connectors[0] })}>\n Connect Wallet\n </button>\n )}\n\n {isConnected && (\n <span className=\"\">\n connected as{\" \"}\n <a\n href={etherscanAddressURL(address, chainId || network.id)}\n className={clsx(className, \"underline\")}\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n {ens || truncateEthAddress(address as string)}\n </a>\n </span>\n )}\n </p>\n )\n}\n","import { useProvider } from \"wagmi\"\nimport { useEffect, useState } from \"react\"\n\n/**\n * The wagmi useEnsName does not respect the chainId property.\n */\nexport function useEnsName(address: `0x${string}`) {\n const [ens, setENS] = useState<string | null>()\n const provider = useProvider({ chainId: 1 })\n\n useEffect(() => {\n if (!address) return\n provider.lookupAddress(address).then(setENS)\n }, [name, provider])\n\n return ens\n}\n","import type {\n TransactionReceipt,\n TransactionResponse\n} from \"@ethersproject/providers\"\nimport { BigNumber } from \"ethers\"\nimport { useCallback, useState } from \"react\"\nimport { useContract, useSigner } from \"wagmi\"\n\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype UseMinting = {\n isMinting: boolean\n isSuccess: boolean\n isError: boolean\n mint: (amount: number) => Promise<TransactionReceipt | undefined>\n}\n\ntype MintOpts = {\n value?: BigNumber | string\n gasPrice?: BigNumber | number\n}\n\ntype Props = {\n contract: DeployedContract\n}\n\nexport const useMinting = (props: Props): UseMinting => {\n const { contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const { data: signer } = useSigner({ chainId })\n\n const [isMinting, setMinting] = useState<boolean>(false)\n const [isSuccess, setSuccess] = useState<boolean>(false)\n const [isError, setError] = useState<boolean>(false)\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const mint = useCallback(\n async (amount: number, opts: MintOpts = {}) => {\n if (!contract) return\n setMinting(true)\n\n // For localhost, we need to set the gas price manually\n // const gasPrice = chainId === 1337 ? await signer.getGasPrice() : null\n const { value = BigNumber.from(\"0\"), gasPrice } = opts\n\n return contract\n .connect(signer)\n .mint(amount, {\n value,\n gasPrice\n })\n .then((tx: TransactionResponse) => tx.wait())\n .then((reciept: TransactionReceipt) => {\n setSuccess(true)\n setTimeout(() => setSuccess(false), 3000)\n return reciept\n })\n .catch((err: Error) => {\n console.error(err)\n setError(true)\n setTimeout(() => setError(false), 1000)\n })\n .finally(() => setMinting(false))\n },\n [signer, contract, chainId]\n )\n\n return {\n isMinting,\n isSuccess,\n isError,\n mint\n }\n}\n","import clsx from \"clsx\"\nimport styles from \"./DefaultButton.module.css\"\n\nexport type DefaultButtonProps = {\n className?: string\n intent?: \"default\" | \"success\" | \"error\"\n onClick?: () => void\n children: React.ReactNode\n disabled?: boolean\n}\n\nconst INTENTS = {\n default: styles.DefaultButtonBase,\n success: styles.DefaultButtonSuccess,\n error: styles.DefaultButtonError\n}\n\nconst DefaultButton = (props: DefaultButtonProps) => {\n const {\n // className = \"px-8 py-3 transition-all cursor-pointer duration-250 hover:scale-[1.05] rounded-xl font-bold\",\n className = styles.DefaultButton,\n intent = \"default\",\n onClick,\n children,\n disabled\n } = props\n\n return (\n <button\n className={clsx(\n className,\n INTENTS[intent],\n disabled && styles.DefaultButtonDisabled\n )}\n onClick={onClick}\n >\n {children}\n </button>\n )\n}\n\nexport default DefaultButton\n","import { useMinting } from \"../hooks/useMinting\"\nimport { useConnect, useNetwork, useSigner, useSwitchNetwork } from \"wagmi\"\nimport DefaultButton, { DefaultButtonProps } from \"./DefaultButton\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype MintButtonProps = {\n className?: string\n contract: DeployedContract\n button?: React.FC<DefaultButtonProps>\n amount?: number\n}\n\nconst MintButton = (props: MintButtonProps) => {\n const {\n amount = 1,\n button: Button = DefaultButton,\n className,\n contract\n } = props\n const { data: signer } = useSigner()\n const { connect, connectors } = useConnect()\n const { chain: network } = useNetwork()\n const { switchNetwork } = useSwitchNetwork()\n\n const { isMinting, isSuccess, isError, mint } = useMinting({ contract })\n\n if (isMinting) {\n return (\n <Button disabled className={className}>\n Minting\n </Button>\n )\n }\n\n if (isSuccess) {\n return (\n <Button disabled className={className} intent=\"success\">\n Minted\n </Button>\n )\n }\n\n if (isError) {\n return (\n <Button disabled className={className} intent=\"error\">\n Error Occurred\n </Button>\n )\n }\n\n if (!signer) {\n const connector = connectors[0]\n return (\n <Button className={className} onClick={() => connect({ connector })}>\n Connect Wallet\n </Button>\n )\n }\n\n if (network?.id !== contract?.chainId && switchNetwork) {\n return (\n <Button\n onClick={() => switchNetwork(contract?.chainId)}\n className={className}\n intent=\"error\"\n >\n Switch Network\n </Button>\n )\n }\n\n return (\n <Button className={className} onClick={() => mint(amount)}>\n Mint Now\n </Button>\n )\n}\n\nexport default MintButton\n","import { DeployedContract } from \"@hybrd/types\"\nimport { BigNumber } from \"ethers\"\nimport { useEffect, useState } from \"react\"\nimport { useContract, useProvider } from \"wagmi\"\n\ntype UseTokenGating = {\n isLoading: boolean\n address: string\n allow: boolean\n deny: boolean\n}\n\nexport function useTokenGating(props: {\n contract: DeployedContract\n address: `0x${string}`\n}): UseTokenGating {\n const { address, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n\n const [isLoading, setLoading] = useState(true)\n const [allow, setAllow] = useState<boolean>()\n const [deny, setDeny] = useState<boolean>()\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n useEffect(() => {\n if (!deployedContract) {\n setLoading(false)\n setAllow(false)\n setDeny(true)\n }\n\n if (!contract) return\n contract\n .connect(provider)\n .balanceOf(address)\n .then((res: BigNumber) => res.toNumber())\n // .then((bal) => bal > 0)\n .then((allow) => {\n console.log({ allow })\n setAllow(allow)\n setDeny(!allow)\n })\n .catch((err: Error) => {\n console.error(err)\n setAllow(false)\n setDeny(true)\n })\n .finally(() => setLoading(false))\n }, [address, deployedContract])\n\n return {\n isLoading: isLoading,\n address,\n allow,\n deny\n }\n}\n","import React from \"react\"\nimport { useAccount } from \"wagmi\"\nimport { useTokenGating } from \"../hooks/useTokenGating\"\nimport { DeployedContract } from \"@hybrd/types\"\n\ntype Props = {\n children: React.ReactNode\n contract: DeployedContract\n loading?: React.ReactNode\n deny?: React.ReactNode\n}\n\nconst TokenGate: React.FC<Props> = ({\n children,\n contract,\n loading: loadingComponent = <p>Loading</p>,\n deny: denyComponent = <p>You must own a token to view this content.</p>\n}: Props) => {\n const { address } = useAccount()\n const { isLoading, allow } = useTokenGating({ address, contract })\n\n return <>{isLoading ? loadingComponent : allow ? children : denyComponent}</>\n}\n\nexport default TokenGate\n","import { DeployedContract } from \"@hybrd/types\"\nimport { useBlockNumber, useContract, useProvider } from \"wagmi\"\nimport { useAsyncMemo } from \"../hooks/internal/useAsyncMemo\"\nimport { BigNumber } from \"ethers\"\n\ntype TotalSupplyProps = {\n className?: string\n contract: DeployedContract\n}\n\nconst TotalSupply = (props: TotalSupplyProps) => {\n const { className, contract: deployedContract } = props\n const chainId = deployedContract?.chainId\n const provider = useProvider({ chainId })\n const { data: block } = useBlockNumber({ watch: true })\n\n const contract = useContract({\n address: deployedContract?.address,\n abi: deployedContract?.abi\n })\n\n const totalSupply: number = useAsyncMemo(() => {\n if (!contract) return\n return contract\n .connect(provider)\n .totalSupply()\n .then((res: BigNumber) => res.toNumber())\n }, [contract, block])\n\n return <span className={className}>{totalSupply}</span>\n}\n\nexport default TotalSupply\n","import { DependencyList, useEffect, useState } from \"react\"\n\ntype Factory<T> = () => Promise<T | undefined | null>\n\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList\n): T | undefined\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial: T\n): T\nexport function useAsyncMemo<T>(\n factory: Factory<T>,\n deps: DependencyList,\n initial?: T\n) {\n const [val, setVal] = useState<T | undefined>(initial)\n\n useEffect(() => {\n let cancel = false\n const promise = factory()\n if (promise === undefined || promise === null) return\n\n promise\n .then((val) => {\n if (!cancel) {\n setVal(val)\n }\n })\n .catch((error) => {\n console.error(`Error in useAsyncMemo: ${error}`)\n })\n\n return () => {\n cancel = true\n }\n }, deps)\n\n return val\n}\n","import { BigNumber, ethers, Signer, utils, Wallet } from \"ethers\"\nimport { useCallback, useEffect, useState } from \"react\"\nimport { useBlockNumber, useProvider, useWebSocketProvider } from \"wagmi\"\nimport type { BytesLike, Deferrable } from \"ethers/lib/utils\"\n\ntype DataOrFn = BytesLike | ((signer: Signer) => BytesLike) | null\n\ntype Estimate = {\n gas?: number\n gasPrice?: number\n wei?: number\n eth?: number\n}\n\nconst useBlockBeat = () => {\n const [block, setBlock] = useState<number>()\n useBlockNumber({ watch: true, onBlock: setBlock })\n\n return block\n}\n\ntype Opts = {\n deployData: DataOrFn\n chainId?: number\n}\n\nexport function useEstimation(opts: Opts) {\n const { deployData, chainId } = opts\n const provider = useProvider({ chainId })\n const block = useBlockBeat()\n\n const [estimate, setEstimate] = useState<Estimate>({\n gas: undefined,\n gasPrice: undefined,\n wei: undefined,\n eth: undefined\n })\n\n const buildData = useCallback(\n (provider) => {\n return typeof deployData === \"function\"\n ? deployData(provider)\n : deployData\n },\n [deployData]\n )\n\n useEffect(() => {\n const { address: from } = Wallet.createRandom()\n const data = buildData(provider)\n if (!data) return\n\n getEstimate(provider, {\n data,\n from\n })\n .then(setEstimate)\n .catch((err) => {\n console.error(\"useEstimation\", err)\n })\n }, [block, provider, chainId, buildData])\n\n return estimate\n}\n\nasync function getEstimate(\n provider: any,\n tx: Deferrable<ethers.providers.TransactionRequest>\n) {\n const gas = await provider.estimateGas(tx)\n const gasPrice = await provider.getGasPrice()\n const wei = gas.mul(gasPrice)\n const eth = parseFloat(utils.formatUnits(wei, \"ether\"))\n\n return {\n gas,\n gasPrice,\n wei,\n eth\n }\n}\n"],"names":["DefaultWalletConnector","config","provider","webSocketProvider","configureChains","chains","providers","client","createClient","autoConnect","Provider","children","_jsx","_Fragment","useHybrid","useContext","Web3Context","React","createContext","undefined","SUPPORTED_CHAINS","mainnet","goerli","arbitrum","arbitrumGoerli","localhost","Web3Provider","props","console","log","wallet","createWalletConnector","createDefaultWalletConnector","alchemyKey","infuraKey","push","alchemyProvider","apiKey","infuraProvider","publicProvider","buildProviders","contextValue","value","WagmiConfig","ConnectedAs","className","chainId","address","isConnected","useAccount","connect","connectors","useConnect","chain","network","useNetwork","ens","setENS","useState","useProvider","useEffect","lookupAddress","then","name","useEnsName","_jsxs","clsx","onClick","connector","href","etherscanAddressURL","id","target","rel","truncateEthAddress","useMinting","contract","deployedContract","data","signer","useSigner","isMinting","setMinting","isSuccess","setSuccess","isError","setError","useContract","abi","mint","useCallback","async","amount","opts","BigNumber","from","gasPrice","tx","wait","reciept","setTimeout","catch","err","error","finally","INTENTS","default","styles","DefaultButtonBase","success","DefaultButtonSuccess","DefaultButtonError","DefaultButton","intent","disabled","DefaultButtonDisabled","MintButton","button","Button","switchNetwork","useSwitchNetwork","useTokenGating","isLoading","setLoading","allow","setAllow","deny","setDeny","balanceOf","res","toNumber","TokenGate","loading","loadingComponent","denyComponent","TotalSupply","block","useBlockNumber","watch","totalSupply","factory","deps","initial","val","setVal","cancel","promise","useAsyncMemo","useBlockBeat","setBlock","onBlock","useEstimation","deployData","estimate","setEstimate","gas","wei","eth","buildData","Wallet","createRandom","estimateGas","getGasPrice","mul","parseFloat","utils","formatUnits","getEstimate"],"mappings":"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"}
package/dist/stats.html CHANGED
@@ -6157,7 +6157,7 @@ var drawChart = (function (exports) {
6157
6157
  </script>
6158
6158
  <script>
6159
6159
  /*<!--*/
6160
- const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"src","children":[{"name":"providers","children":[{"uid":"767e-44","name":"DefaultWalletConnector.tsx"},{"uid":"767e-46","name":"Web3Provider.tsx"},{"uid":"767e-48","name":"helpers.ts"}]},{"name":"components","children":[{"uid":"767e-50","name":"ConnectedAs.tsx"},{"uid":"767e-56","name":"DefaultButton.tsx"},{"uid":"767e-58","name":"MintButton.tsx"},{"uid":"767e-62","name":"TokenGate.tsx"},{"uid":"767e-64","name":"TotalSupply.tsx"}]},{"name":"hooks","children":[{"name":"internal","children":[{"uid":"767e-52","name":"useEnsName.tsx"},{"uid":"767e-66","name":"useAsyncMemo.ts"}]},{"uid":"767e-54","name":"useMinting.ts"},{"uid":"767e-60","name":"useTokenGating.ts"},{"uid":"767e-68","name":"useEstimation.ts"}]}]}]}],"isRoot":true},"nodeParts":{"767e-44":{"renderedLength":391,"gzipLength":0,"brotliLength":0,"metaUid":"767e-43"},"767e-46":{"renderedLength":1155,"gzipLength":0,"brotliLength":0,"metaUid":"767e-45"},"767e-48":{"renderedLength":464,"gzipLength":0,"brotliLength":0,"metaUid":"767e-47"},"767e-50":{"renderedLength":799,"gzipLength":0,"brotliLength":0,"metaUid":"767e-49"},"767e-52":{"renderedLength":351,"gzipLength":0,"brotliLength":0,"metaUid":"767e-51"},"767e-54":{"renderedLength":1451,"gzipLength":0,"brotliLength":0,"metaUid":"767e-53"},"767e-56":{"renderedLength":558,"gzipLength":0,"brotliLength":0,"metaUid":"767e-55"},"767e-58":{"renderedLength":1296,"gzipLength":0,"brotliLength":0,"metaUid":"767e-57"},"767e-60":{"renderedLength":1244,"gzipLength":0,"brotliLength":0,"metaUid":"767e-59"},"767e-62":{"renderedLength":420,"gzipLength":0,"brotliLength":0,"metaUid":"767e-61"},"767e-64":{"renderedLength":672,"gzipLength":0,"brotliLength":0,"metaUid":"767e-63"},"767e-66":{"renderedLength":577,"gzipLength":0,"brotliLength":0,"metaUid":"767e-65"},"767e-68":{"renderedLength":1385,"gzipLength":0,"brotliLength":0,"metaUid":"767e-67"}},"nodeMetas":{"767e-43":{"id":"/src/providers/DefaultWalletConnector.tsx","moduleParts":{"index.js":"767e-44"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-45"}]},"767e-45":{"id":"/src/providers/Web3Provider.tsx","moduleParts":{"index.js":"767e-46"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"},{"uid":"767e-76"},{"uid":"767e-77"},{"uid":"767e-43"},{"uid":"767e-47"}],"importedBy":[{"uid":"767e-69"},{"uid":"767e-84"}]},"767e-47":{"id":"/src/providers/helpers.ts","moduleParts":{"index.js":"767e-48"},"imported":[{"uid":"767e-78"},{"uid":"767e-79"},{"uid":"767e-80"}],"importedBy":[{"uid":"767e-45"}]},"767e-49":{"id":"/src/components/ConnectedAs.tsx","moduleParts":{"index.js":"767e-50"},"imported":[{"uid":"767e-74"},{"uid":"767e-73"},{"uid":"767e-81"},{"uid":"767e-82"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-70"}]},"767e-51":{"id":"/src/hooks/internal/useEnsName.tsx","moduleParts":{"index.js":"767e-52"},"imported":[{"uid":"767e-75"},{"uid":"767e-77"}],"importedBy":[{"uid":"767e-82"}]},"767e-53":{"id":"/src/hooks/useMinting.ts","moduleParts":{"index.js":"767e-54"},"imported":[{"uid":"767e-83"},{"uid":"767e-77"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-71"},{"uid":"767e-57"}]},"767e-55":{"id":"/src/components/DefaultButton.tsx","moduleParts":{"index.js":"767e-56"},"imported":[{"uid":"767e-74"},{"uid":"767e-81"},{"uid":"767e-85"}],"importedBy":[{"uid":"767e-57"}]},"767e-57":{"id":"/src/components/MintButton.tsx","moduleParts":{"index.js":"767e-58"},"imported":[{"uid":"767e-74"},{"uid":"767e-53"},{"uid":"767e-75"},{"uid":"767e-55"}],"importedBy":[{"uid":"767e-70"}]},"767e-59":{"id":"/src/hooks/useTokenGating.ts","moduleParts":{"index.js":"767e-60"},"imported":[{"uid":"767e-77"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-71"},{"uid":"767e-61"}]},"767e-61":{"id":"/src/components/TokenGate.tsx","moduleParts":{"index.js":"767e-62"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"},{"uid":"767e-59"}],"importedBy":[{"uid":"767e-70"}]},"767e-63":{"id":"/src/components/TotalSupply.tsx","moduleParts":{"index.js":"767e-64"},"imported":[{"uid":"767e-74"},{"uid":"767e-75"},{"uid":"767e-65"}],"importedBy":[{"uid":"767e-70"}]},"767e-65":{"id":"/src/hooks/internal/useAsyncMemo.ts","moduleParts":{"index.js":"767e-66"},"imported":[{"uid":"767e-77"}],"importedBy":[{"uid":"767e-63"},{"uid":"767e-82"}]},"767e-67":{"id":"/src/hooks/useEstimation.ts","moduleParts":{"index.js":"767e-68"},"imported":[{"uid":"767e-83"},{"uid":"767e-77"},{"uid":"767e-75"}],"importedBy":[{"uid":"767e-71"}]},"767e-69":{"id":"/src/index.ts","moduleParts":{},"imported":[{"uid":"767e-45"},{"uid":"767e-70"},{"uid":"767e-71"},{"uid":"767e-72"},{"uid":"767e-73"}],"importedBy":[],"isEntry":true},"767e-70":{"id":"/src/components/index.ts","moduleParts":{},"imported":[{"uid":"767e-49"},{"uid":"767e-57"},{"uid":"767e-61"},{"uid":"767e-63"}],"importedBy":[{"uid":"767e-69"}]},"767e-71":{"id":"/src/hooks/index.ts","moduleParts":{},"imported":[{"uid":"767e-67"},{"uid":"767e-53"},{"uid":"767e-59"}],"importedBy":[{"uid":"767e-69"}]},"767e-72":{"id":"@hybrd/types","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-69"}],"isExternal":true},"767e-73":{"id":"@hybrd/utils","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-69"},{"uid":"767e-49"}],"isExternal":true},"767e-74":{"id":"react/jsx-runtime","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"},{"uid":"767e-43"},{"uid":"767e-49"},{"uid":"767e-57"},{"uid":"767e-61"},{"uid":"767e-63"},{"uid":"767e-55"}],"isExternal":true},"767e-75":{"id":"wagmi","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"},{"uid":"767e-43"},{"uid":"767e-49"},{"uid":"767e-57"},{"uid":"767e-61"},{"uid":"767e-63"},{"uid":"767e-67"},{"uid":"767e-53"},{"uid":"767e-59"},{"uid":"767e-51"}],"isExternal":true},"767e-76":{"id":"wagmi/chains","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"}],"isExternal":true},"767e-77":{"id":"react","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-45"},{"uid":"767e-67"},{"uid":"767e-53"},{"uid":"767e-59"},{"uid":"767e-65"},{"uid":"767e-84"},{"uid":"767e-51"}],"isExternal":true},"767e-78":{"id":"wagmi/providers/alchemy","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-47"}],"isExternal":true},"767e-79":{"id":"wagmi/providers/infura","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-47"}],"isExternal":true},"767e-80":{"id":"wagmi/providers/public","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-47"}],"isExternal":true},"767e-81":{"id":"clsx","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-49"},{"uid":"767e-55"}],"isExternal":true},"767e-82":{"id":"/src/hooks/internal/index.ts","moduleParts":{},"imported":[{"uid":"767e-65"},{"uid":"767e-84"},{"uid":"767e-51"}],"importedBy":[{"uid":"767e-49"}]},"767e-83":{"id":"ethers","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-67"},{"uid":"767e-53"}],"isExternal":true},"767e-84":{"id":"/src/hooks/internal/useContext.ts","moduleParts":{},"imported":[{"uid":"767e-77"},{"uid":"767e-45"}],"importedBy":[{"uid":"767e-82"}]},"767e-85":{"id":"/src/components/DefaultButton.module.css","moduleParts":{},"imported":[],"importedBy":[{"uid":"767e-55"}]}},"env":{"rollup":"3.19.1"},"options":{"gzip":false,"brotli":false,"sourcemap":true}};
6160
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"index.js","children":[{"name":"src","children":[{"name":"providers","children":[{"uid":"068d-44","name":"DefaultWalletConnector.tsx"},{"uid":"068d-46","name":"Web3Provider.tsx"},{"uid":"068d-48","name":"helpers.ts"}]},{"name":"components","children":[{"uid":"068d-50","name":"ConnectedAs.tsx"},{"uid":"068d-56","name":"DefaultButton.tsx"},{"uid":"068d-58","name":"MintButton.tsx"},{"uid":"068d-62","name":"TokenGate.tsx"},{"uid":"068d-64","name":"TotalSupply.tsx"}]},{"name":"hooks","children":[{"name":"internal","children":[{"uid":"068d-52","name":"useEnsName.tsx"},{"uid":"068d-66","name":"useAsyncMemo.ts"}]},{"uid":"068d-54","name":"useMinting.ts"},{"uid":"068d-60","name":"useTokenGating.ts"},{"uid":"068d-68","name":"useEstimation.ts"}]}]}]}],"isRoot":true},"nodeParts":{"068d-44":{"renderedLength":391,"gzipLength":0,"brotliLength":0,"metaUid":"068d-43"},"068d-46":{"renderedLength":1155,"gzipLength":0,"brotliLength":0,"metaUid":"068d-45"},"068d-48":{"renderedLength":464,"gzipLength":0,"brotliLength":0,"metaUid":"068d-47"},"068d-50":{"renderedLength":799,"gzipLength":0,"brotliLength":0,"metaUid":"068d-49"},"068d-52":{"renderedLength":351,"gzipLength":0,"brotliLength":0,"metaUid":"068d-51"},"068d-54":{"renderedLength":1451,"gzipLength":0,"brotliLength":0,"metaUid":"068d-53"},"068d-56":{"renderedLength":558,"gzipLength":0,"brotliLength":0,"metaUid":"068d-55"},"068d-58":{"renderedLength":1296,"gzipLength":0,"brotliLength":0,"metaUid":"068d-57"},"068d-60":{"renderedLength":1244,"gzipLength":0,"brotliLength":0,"metaUid":"068d-59"},"068d-62":{"renderedLength":420,"gzipLength":0,"brotliLength":0,"metaUid":"068d-61"},"068d-64":{"renderedLength":687,"gzipLength":0,"brotliLength":0,"metaUid":"068d-63"},"068d-66":{"renderedLength":577,"gzipLength":0,"brotliLength":0,"metaUid":"068d-65"},"068d-68":{"renderedLength":1385,"gzipLength":0,"brotliLength":0,"metaUid":"068d-67"}},"nodeMetas":{"068d-43":{"id":"/src/providers/DefaultWalletConnector.tsx","moduleParts":{"index.js":"068d-44"},"imported":[{"uid":"068d-74"},{"uid":"068d-75"}],"importedBy":[{"uid":"068d-45"}]},"068d-45":{"id":"/src/providers/Web3Provider.tsx","moduleParts":{"index.js":"068d-46"},"imported":[{"uid":"068d-74"},{"uid":"068d-75"},{"uid":"068d-76"},{"uid":"068d-77"},{"uid":"068d-43"},{"uid":"068d-47"}],"importedBy":[{"uid":"068d-69"},{"uid":"068d-84"}]},"068d-47":{"id":"/src/providers/helpers.ts","moduleParts":{"index.js":"068d-48"},"imported":[{"uid":"068d-78"},{"uid":"068d-79"},{"uid":"068d-80"}],"importedBy":[{"uid":"068d-45"}]},"068d-49":{"id":"/src/components/ConnectedAs.tsx","moduleParts":{"index.js":"068d-50"},"imported":[{"uid":"068d-74"},{"uid":"068d-73"},{"uid":"068d-81"},{"uid":"068d-82"},{"uid":"068d-75"}],"importedBy":[{"uid":"068d-70"}]},"068d-51":{"id":"/src/hooks/internal/useEnsName.tsx","moduleParts":{"index.js":"068d-52"},"imported":[{"uid":"068d-75"},{"uid":"068d-77"}],"importedBy":[{"uid":"068d-82"}]},"068d-53":{"id":"/src/hooks/useMinting.ts","moduleParts":{"index.js":"068d-54"},"imported":[{"uid":"068d-83"},{"uid":"068d-77"},{"uid":"068d-75"}],"importedBy":[{"uid":"068d-71"},{"uid":"068d-57"}]},"068d-55":{"id":"/src/components/DefaultButton.tsx","moduleParts":{"index.js":"068d-56"},"imported":[{"uid":"068d-74"},{"uid":"068d-81"},{"uid":"068d-85"}],"importedBy":[{"uid":"068d-57"}]},"068d-57":{"id":"/src/components/MintButton.tsx","moduleParts":{"index.js":"068d-58"},"imported":[{"uid":"068d-74"},{"uid":"068d-53"},{"uid":"068d-75"},{"uid":"068d-55"}],"importedBy":[{"uid":"068d-70"}]},"068d-59":{"id":"/src/hooks/useTokenGating.ts","moduleParts":{"index.js":"068d-60"},"imported":[{"uid":"068d-77"},{"uid":"068d-75"}],"importedBy":[{"uid":"068d-71"},{"uid":"068d-61"}]},"068d-61":{"id":"/src/components/TokenGate.tsx","moduleParts":{"index.js":"068d-62"},"imported":[{"uid":"068d-74"},{"uid":"068d-75"},{"uid":"068d-59"}],"importedBy":[{"uid":"068d-70"}]},"068d-63":{"id":"/src/components/TotalSupply.tsx","moduleParts":{"index.js":"068d-64"},"imported":[{"uid":"068d-74"},{"uid":"068d-75"},{"uid":"068d-65"}],"importedBy":[{"uid":"068d-70"}]},"068d-65":{"id":"/src/hooks/internal/useAsyncMemo.ts","moduleParts":{"index.js":"068d-66"},"imported":[{"uid":"068d-77"}],"importedBy":[{"uid":"068d-63"},{"uid":"068d-82"}]},"068d-67":{"id":"/src/hooks/useEstimation.ts","moduleParts":{"index.js":"068d-68"},"imported":[{"uid":"068d-83"},{"uid":"068d-77"},{"uid":"068d-75"}],"importedBy":[{"uid":"068d-71"}]},"068d-69":{"id":"/src/index.ts","moduleParts":{},"imported":[{"uid":"068d-45"},{"uid":"068d-70"},{"uid":"068d-71"},{"uid":"068d-72"},{"uid":"068d-73"}],"importedBy":[],"isEntry":true},"068d-70":{"id":"/src/components/index.ts","moduleParts":{},"imported":[{"uid":"068d-49"},{"uid":"068d-57"},{"uid":"068d-61"},{"uid":"068d-63"}],"importedBy":[{"uid":"068d-69"}]},"068d-71":{"id":"/src/hooks/index.ts","moduleParts":{},"imported":[{"uid":"068d-67"},{"uid":"068d-53"},{"uid":"068d-59"}],"importedBy":[{"uid":"068d-69"}]},"068d-72":{"id":"@hybrd/types","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-69"}],"isExternal":true},"068d-73":{"id":"@hybrd/utils","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-69"},{"uid":"068d-49"}],"isExternal":true},"068d-74":{"id":"react/jsx-runtime","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-45"},{"uid":"068d-43"},{"uid":"068d-49"},{"uid":"068d-57"},{"uid":"068d-61"},{"uid":"068d-63"},{"uid":"068d-55"}],"isExternal":true},"068d-75":{"id":"wagmi","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-45"},{"uid":"068d-43"},{"uid":"068d-49"},{"uid":"068d-57"},{"uid":"068d-61"},{"uid":"068d-63"},{"uid":"068d-67"},{"uid":"068d-53"},{"uid":"068d-59"},{"uid":"068d-51"}],"isExternal":true},"068d-76":{"id":"wagmi/chains","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-45"}],"isExternal":true},"068d-77":{"id":"react","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-45"},{"uid":"068d-67"},{"uid":"068d-53"},{"uid":"068d-59"},{"uid":"068d-65"},{"uid":"068d-84"},{"uid":"068d-51"}],"isExternal":true},"068d-78":{"id":"wagmi/providers/alchemy","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-47"}],"isExternal":true},"068d-79":{"id":"wagmi/providers/infura","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-47"}],"isExternal":true},"068d-80":{"id":"wagmi/providers/public","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-47"}],"isExternal":true},"068d-81":{"id":"clsx","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-49"},{"uid":"068d-55"}],"isExternal":true},"068d-82":{"id":"/src/hooks/internal/index.ts","moduleParts":{},"imported":[{"uid":"068d-65"},{"uid":"068d-84"},{"uid":"068d-51"}],"importedBy":[{"uid":"068d-49"}]},"068d-83":{"id":"ethers","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-67"},{"uid":"068d-53"}],"isExternal":true},"068d-84":{"id":"/src/hooks/internal/useContext.ts","moduleParts":{},"imported":[{"uid":"068d-77"},{"uid":"068d-45"}],"importedBy":[{"uid":"068d-82"}]},"068d-85":{"id":"/src/components/DefaultButton.module.css","moduleParts":{},"imported":[],"importedBy":[{"uid":"068d-55"}]}},"env":{"rollup":"3.19.1"},"options":{"gzip":false,"brotli":false,"sourcemap":true}};
6161
6161
 
6162
6162
  const run = () => {
6163
6163
  const width = window.innerWidth;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "hybrid",
3
3
  "author": "IanH <ian@ianh.xyz>",
4
- "version": "0.4.4",
4
+ "version": "0.4.6",
5
5
  "description": "Solidity + TypeScript Framework for Web3 Development",
6
6
  "keywords": [
7
7
  "hybrid",
@@ -60,10 +60,10 @@
60
60
  },
61
61
  "dependencies": {
62
62
  "@ethersproject/providers": "^5.7.1",
63
- "@hybrd/cli": "^0.4.4",
64
- "@hybrd/contracts": "^0.4.4",
65
- "@hybrd/types": "^0.4.4",
66
- "@hybrd/utils": "^0.4.4",
63
+ "@hybrd/cli": "^0.4.6",
64
+ "@hybrd/contracts": "^0.4.6",
65
+ "@hybrd/types": "^0.4.6",
66
+ "@hybrd/utils": "^0.4.6",
67
67
  "abitype": "^0.7.1",
68
68
  "axios": "^1.2.2",
69
69
  "clsx": "^1.2.1",
@@ -117,5 +117,5 @@
117
117
  "react-dom": ">=17",
118
118
  "wagmi": "^0.12.1"
119
119
  },
120
- "gitHead": "8c7849690283595e5c90abc9ff4f3a48bfffca12"
120
+ "gitHead": "54dd53e32ed309810a2314c6e1a701f3b50fb65e"
121
121
  }