@liberfi.io/ui-chain-select 0.1.8 → 0.1.9

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.d.mts CHANGED
@@ -11,7 +11,7 @@ declare global {
11
11
  };
12
12
  }
13
13
  }
14
- declare const _default: "0.1.8";
14
+ declare const _default: "0.1.9";
15
15
 
16
16
  type ChainSelectUIProps = {
17
17
  size?: "sm" | "md" | "lg";
package/dist/index.d.ts CHANGED
@@ -11,7 +11,7 @@ declare global {
11
11
  };
12
12
  }
13
13
  }
14
- declare const _default: "0.1.8";
14
+ declare const _default: "0.1.9";
15
15
 
16
16
  type ChainSelectUIProps = {
17
17
  size?: "sm" | "md" | "lg";
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- 'use strict';var types=require('@liberfi.io/types'),ui=require('@liberfi.io/ui'),react=require('react'),utils$1=require('@liberfi.io/utils'),jsxRuntime=require('react/jsx-runtime'),jotai=require('jotai'),utils=require('jotai/utils');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-chain-select"]="0.1.8");var R="0.1.8";function s({chain:e,className:o}){switch(e){case types.Chain.SOLANA:return jsxRuntime.jsx(ui.SolanaIcon,{className:o});case types.Chain.ETHEREUM:return jsxRuntime.jsx(ui.EthereumIcon,{className:o});case types.Chain.BINANCE:return jsxRuntime.jsx(ui.BinanceIcon,{className:o});default:return jsxRuntime.jsx(ui.Avatar,{className:o,name:utils$1.capitalizeString(utils$1.chainSlug(e)??"")})}}function w({size:e,candidates:o,chain:n=o[0],onSelectChain:t,className:i}){let{isOpen:r,onClose:S,onOpenChange:k}=ui.useDisclosure(),B=react.useCallback(a=>{t?.(a),S();},[t,S]);return jsxRuntime.jsxs(ui.Popover,{isOpen:r,onOpenChange:k,placement:"bottom-end",className:i,classNames:{content:"w-38 bg-content1 border border-border"},children:[jsxRuntime.jsx(ui.PopoverTrigger,{children:jsxRuntime.jsx(ui.Button,{size:e,variant:"bordered",radius:"full",style:{borderColor:utils$1.chainColor(n)?`${utils$1.chainColor(n)}60`:void 0},startContent:jsxRuntime.jsx(s,{chain:n,className:ui.clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),children:utils$1.chainDisplayName(n)})}),jsxRuntime.jsx(ui.PopoverContent,{className:"w-40 flex flex-col gap-1 p-1 rounded-md",children:o.map(a=>jsxRuntime.jsxs("div",{className:ui.clsx("w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3","flex gap-2 items-center",a===n?"bg-content2 text-foreground":"text-neutral"),onClick:()=>B(a),children:[jsxRuntime.jsx(s,{chain:a,className:ui.clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),utils$1.chainDisplayName(a)]},a))})]})}function b({size:e,candidates:o,chain:n=types.Chain.SOLANA,onSelectChain:t,className:i}){return jsxRuntime.jsx("div",{className:ui.clsx("flex items-center gap-1",i),children:o.map(r=>jsxRuntime.jsx(ui.Button,{isIconOnly:true,radius:"full",className:ui.clsx("min-w-0 min-h-0 border",e==="sm"?"w-6 h-6":e==="md"||e===void 0?"w-7 h-7":"w-8 h-8",r===n?"bg-content1 scale-110 hover:opacity-100":"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent"),style:r===n&&utils$1.chainColor(r)?{borderColor:`${utils$1.chainColor(r)}60`}:void 0,onPress:()=>t?.(r),children:jsxRuntime.jsx(s,{chain:r,className:ui.clsx(e==="sm"?"w-4 h-4":e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")})},r))})}var Z=[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE];function E({size:e,chain:o=types.Chain.SOLANA,candidates:n=Z,onSelectChain:t,className:i}){let{isMobile:r}=ui.useScreen();return r?jsxRuntime.jsx(b,{size:e,chain:o,onSelectChain:t,candidates:n,className:i}):jsxRuntime.jsx(w,{size:e,chain:o,onSelectChain:t,candidates:n,className:i})}var h=utils.atomWithStorage("chain",types.Chain.SOLANA,void 0,{getOnInit:true}),l=utils.atomWithStorage("chainNamespace",types.ChainNamespace.SOLANA,void 0,{getOnInit:true});function U(){let e=jotai.useSetAtom(h),o=jotai.useSetAtom(l);return react.useCallback(n=>{switch(n){case types.Chain.ETHEREUM:case types.Chain.BINANCE:o(types.ChainNamespace.EVM);break;case types.Chain.SOLANA:o(types.ChainNamespace.SOLANA);break;default:throw new Error(`Unsupported chain: ${n}`)}e(n);},[e,o])}function L(){let e=jotai.useAtomValue(h),o=jotai.useAtomValue(l);return react.useMemo(()=>({chain:e,chainNamespace:o}),[e,o])}function qe({size:e,className:o}){let{chain:n}=L(),t=U();return jsxRuntime.jsx(E,{chain:n,onSelectChain:t,size:e,className:o})}exports.ChainSelectDesktopUI=w;exports.ChainSelectMobileUI=b;exports.ChainSelectUI=E;exports.ChainSelectWidget=qe;exports.chainAtom=h;exports.chainNamespaceAtom=l;exports.useCurrentChain=L;exports.useSelectChain=U;exports.version=R;//# sourceMappingURL=index.js.map
1
+ 'use strict';var types=require('@liberfi.io/types'),ui=require('@liberfi.io/ui'),react=require('react'),utils$1=require('@liberfi.io/utils'),jsxRuntime=require('react/jsx-runtime'),jotai=require('jotai'),utils=require('jotai/utils');typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-chain-select"]="0.1.9");var R="0.1.9";function s({chain:e,className:o}){switch(e){case types.Chain.SOLANA:return jsxRuntime.jsx(ui.SolanaIcon,{className:o});case types.Chain.ETHEREUM:return jsxRuntime.jsx(ui.EthereumIcon,{className:o});case types.Chain.BINANCE:return jsxRuntime.jsx(ui.BinanceIcon,{className:o});default:return jsxRuntime.jsx(ui.Avatar,{className:o,name:utils$1.capitalizeString(utils$1.chainSlug(e)??"")})}}function w({size:e,candidates:o,chain:n=o[0],onSelectChain:t,className:i}){let{isOpen:r,onClose:S,onOpenChange:k}=ui.useDisclosure(),B=react.useCallback(a=>{t?.(a),S();},[t,S]);return jsxRuntime.jsxs(ui.Popover,{isOpen:r,onOpenChange:k,placement:"bottom-end",className:i,classNames:{content:"w-38 bg-content1 border border-border"},children:[jsxRuntime.jsx(ui.PopoverTrigger,{children:jsxRuntime.jsx(ui.Button,{size:e,variant:"bordered",radius:"full",style:{borderColor:utils$1.chainColor(n)?`${utils$1.chainColor(n)}60`:void 0},startContent:jsxRuntime.jsx(s,{chain:n,className:ui.clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),children:utils$1.chainDisplayName(n)})}),jsxRuntime.jsx(ui.PopoverContent,{className:"w-40 flex flex-col gap-1 p-1 rounded-md",children:o.map(a=>jsxRuntime.jsxs("div",{className:ui.clsx("w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3","flex gap-2 items-center",a===n?"bg-content2 text-foreground":"text-neutral"),onClick:()=>B(a),children:[jsxRuntime.jsx(s,{chain:a,className:ui.clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),utils$1.chainDisplayName(a)]},a))})]})}function b({size:e,candidates:o,chain:n=types.Chain.SOLANA,onSelectChain:t,className:i}){return jsxRuntime.jsx("div",{className:ui.clsx("flex items-center gap-1",i),children:o.map(r=>jsxRuntime.jsx(ui.Button,{isIconOnly:true,radius:"full",className:ui.clsx("min-w-0 min-h-0 border",e==="sm"?"w-6 h-6":e==="md"||e===void 0?"w-7 h-7":"w-8 h-8",r===n?"bg-content1 scale-110 hover:opacity-100":"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent"),style:r===n&&utils$1.chainColor(r)?{borderColor:`${utils$1.chainColor(r)}60`}:void 0,onPress:()=>t?.(r),children:jsxRuntime.jsx(s,{chain:r,className:ui.clsx(e==="sm"?"w-4 h-4":e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")})},r))})}var Z=[types.Chain.SOLANA,types.Chain.ETHEREUM,types.Chain.BINANCE];function E({size:e,chain:o=types.Chain.SOLANA,candidates:n=Z,onSelectChain:t,className:i}){let{isMobile:r}=ui.useScreen();return r?jsxRuntime.jsx(b,{size:e,chain:o,onSelectChain:t,candidates:n,className:i}):jsxRuntime.jsx(w,{size:e,chain:o,onSelectChain:t,candidates:n,className:i})}var h=utils.atomWithStorage("chain",types.Chain.SOLANA,void 0,{getOnInit:true}),l=utils.atomWithStorage("chainNamespace",types.ChainNamespace.SOLANA,void 0,{getOnInit:true});function U(){let e=jotai.useSetAtom(h),o=jotai.useSetAtom(l);return react.useCallback(n=>{switch(n){case types.Chain.ETHEREUM:case types.Chain.BINANCE:o(types.ChainNamespace.EVM);break;case types.Chain.SOLANA:o(types.ChainNamespace.SOLANA);break;default:throw new Error(`Unsupported chain: ${n}`)}e(n);},[e,o])}function L(){let e=jotai.useAtomValue(h),o=jotai.useAtomValue(l);return react.useMemo(()=>({chain:e,chainNamespace:o}),[e,o])}function qe({size:e,className:o}){let{chain:n}=L(),t=U();return jsxRuntime.jsx(E,{chain:n,onSelectChain:t,size:e,className:o})}exports.ChainSelectDesktopUI=w;exports.ChainSelectMobileUI=b;exports.ChainSelectUI=E;exports.ChainSelectWidget=qe;exports.chainAtom=h;exports.chainNamespaceAtom=l;exports.useCurrentChain=L;exports.useSelectChain=U;exports.version=R;//# sourceMappingURL=index.js.map
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/components/chain-avatar.tsx","../src/components/chain-select.desktop.ui.tsx","../src/components/chain-select.mobile.ui.tsx","../src/components/chain-select.ui.tsx","../src/states.ts","../src/hooks/useSelectChain.tsx","../src/hooks/useCurrentChain.tsx","../src/components/chain-select.widget.tsx"],"names":["version_default","ChainAvatar","chain","className","Chain","jsx","SolanaIcon","EthereumIcon","BinanceIcon","Avatar","capitalizeString","chainSlug","ChainSelectDesktopUI","size","candidates","onSelectChain","isOpen","onClose","onOpenChange","useDisclosure","handleSelect","useCallback","jsxs","Popover","PopoverTrigger","Button","chainColor","clsx","chainDisplayName","PopoverContent","it","ChainSelectMobileUI","DEFAULT_CANDIDATES","ChainSelectUI","isMobile","useScreen","chainAtom","atomWithStorage","chainNamespaceAtom","ChainNamespace","useSelectChain","setChain","useSetAtom","setChainNamespace","useCurrentChain","useAtomValue","chainNamespace","useMemo","ChainSelectWidget","selectChain"],"mappings":"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","file":"index.js","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/ui-chain-select\"] = \"0.1.8\";\n}\n\nexport default \"0.1.8\";\n","import { Chain } from \"@liberfi.io/types\";\nimport { Avatar, BinanceIcon, EthereumIcon, SolanaIcon } from \"@liberfi.io/ui\";\nimport { capitalizeString, chainSlug } from \"@liberfi.io/utils\";\n\nexport type ChainAvatarProps = {\n chain: Chain;\n className?: string;\n};\n\nexport function ChainAvatar({ chain, className }: ChainAvatarProps) {\n switch (chain) {\n case Chain.SOLANA:\n return <SolanaIcon className={className} />;\n case Chain.ETHEREUM:\n return <EthereumIcon className={className} />;\n case Chain.BINANCE:\n return <BinanceIcon className={className} />;\n default:\n return (\n <Avatar\n className={className}\n name={capitalizeString(chainSlug(chain) ?? \"\")}\n />\n );\n }\n}\n","import { useCallback } from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n Button,\n clsx,\n Popover,\n PopoverContent,\n PopoverTrigger,\n useDisclosure,\n} from \"@liberfi.io/ui\";\nimport { chainColor, chainDisplayName } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectDesktopUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectDesktopUI({\n size,\n candidates,\n chain = candidates[0],\n onSelectChain,\n className,\n}: ChainSelectDesktopUIProps) {\n const { isOpen, onClose, onOpenChange } = useDisclosure();\n\n const handleSelect = useCallback(\n (chain: Chain) => {\n onSelectChain?.(chain);\n onClose();\n },\n [onSelectChain, onClose],\n );\n\n return (\n <Popover\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom-end\"\n className={className}\n classNames={{ content: \"w-38 bg-content1 border border-border\" }}\n >\n <PopoverTrigger>\n <Button\n size={size}\n variant=\"bordered\"\n radius=\"full\"\n style={{\n borderColor: chainColor(chain)\n ? `${chainColor(chain)}60`\n : undefined,\n }}\n startContent={\n <ChainAvatar\n chain={chain}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n }\n >\n {chainDisplayName(chain)}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-40 flex flex-col gap-1 p-1 rounded-md\">\n {candidates.map((it) => (\n <div\n key={it}\n className={clsx(\n \"w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3\",\n \"flex gap-2 items-center\",\n it === chain ? \"bg-content2 text-foreground\" : \"text-neutral\",\n )}\n onClick={() => handleSelect(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n {chainDisplayName(it)}\n </div>\n ))}\n </PopoverContent>\n </Popover>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { Button, clsx } from \"@liberfi.io/ui\";\nimport { chainColor } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectMobileUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectMobileUI({\n size,\n candidates,\n chain = Chain.SOLANA,\n onSelectChain,\n className,\n}: ChainSelectMobileUIProps) {\n return (\n <div className={clsx(\"flex items-center gap-1\", className)}>\n {candidates.map((it) => (\n <Button\n isIconOnly\n radius=\"full\"\n className={clsx(\n \"min-w-0 min-h-0 border\",\n size === \"sm\"\n ? \"w-6 h-6\"\n : size === \"md\" || size === undefined\n ? \"w-7 h-7\"\n : \"w-8 h-8\",\n it === chain\n ? \"bg-content1 scale-110 hover:opacity-100\"\n : \"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent\",\n )}\n style={\n it === chain && chainColor(it)\n ? { borderColor: `${chainColor(it)}60` }\n : undefined\n }\n key={it}\n onPress={() => onSelectChain?.(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-4 h-4\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n </Button>\n ))}\n </div>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { useScreen } from \"@liberfi.io/ui\";\nimport { ChainSelectDesktopUI } from \"./chain-select.desktop.ui\";\nimport { ChainSelectMobileUI } from \"./chain-select.mobile.ui\";\n\nconst DEFAULT_CANDIDATES = [Chain.SOLANA, Chain.ETHEREUM, Chain.BINANCE];\n\nexport type ChainSelectUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n chain?: Chain;\n candidates?: Chain[];\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectUI({\n size,\n chain = Chain.SOLANA,\n candidates = DEFAULT_CANDIDATES,\n onSelectChain,\n className,\n}: ChainSelectUIProps) {\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return (\n <ChainSelectMobileUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n } else {\n return (\n <ChainSelectDesktopUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n }\n}\n","import { atomWithStorage } from \"jotai/utils\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\n\n/** current chain */\nexport const chainAtom = atomWithStorage<Chain>(\n \"chain\",\n Chain.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n\n/** current chain namespace */\nexport const chainNamespaceAtom = atomWithStorage<ChainNamespace>(\n \"chainNamespace\",\n ChainNamespace.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n","import { useCallback } from \"react\";\nimport { useSetAtom } from \"jotai\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useSelectChain(): (chain: Chain) => void {\n const setChain = useSetAtom(chainAtom);\n const setChainNamespace = useSetAtom(chainNamespaceAtom);\n\n return useCallback(\n (chain: Chain) => {\n switch (chain) {\n case Chain.ETHEREUM:\n case Chain.BINANCE:\n setChainNamespace(ChainNamespace.EVM);\n break;\n case Chain.SOLANA:\n setChainNamespace(ChainNamespace.SOLANA);\n break;\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n setChain(chain);\n },\n [setChain, setChainNamespace],\n );\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useCurrentChain() {\n const chain = useAtomValue(chainAtom);\n const chainNamespace = useAtomValue(chainNamespaceAtom);\n return useMemo(() => ({ chain, chainNamespace }), [chain, chainNamespace]);\n}\n","import { useSelectChain, useCurrentChain } from \"../hooks\";\nimport { ChainSelectUI } from \"./chain-select.ui\";\n\nexport type ChainSelectWidgetProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n};\n\nexport function ChainSelectWidget({ size, className }: ChainSelectWidgetProps) {\n const { chain } = useCurrentChain();\n const selectChain = useSelectChain();\n\n return (\n <ChainSelectUI\n chain={chain}\n onSelectChain={selectChain}\n size={size}\n className={className}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/components/chain-avatar.tsx","../src/components/chain-select.desktop.ui.tsx","../src/components/chain-select.mobile.ui.tsx","../src/components/chain-select.ui.tsx","../src/states.ts","../src/hooks/useSelectChain.tsx","../src/hooks/useCurrentChain.tsx","../src/components/chain-select.widget.tsx"],"names":["version_default","ChainAvatar","chain","className","Chain","jsx","SolanaIcon","EthereumIcon","BinanceIcon","Avatar","capitalizeString","chainSlug","ChainSelectDesktopUI","size","candidates","onSelectChain","isOpen","onClose","onOpenChange","useDisclosure","handleSelect","useCallback","jsxs","Popover","PopoverTrigger","Button","chainColor","clsx","chainDisplayName","PopoverContent","it","ChainSelectMobileUI","DEFAULT_CANDIDATES","ChainSelectUI","isMobile","useScreen","chainAtom","atomWithStorage","chainNamespaceAtom","ChainNamespace","useSelectChain","setChain","useSetAtom","setChainNamespace","useCurrentChain","useAtomValue","chainNamespace","useMemo","ChainSelectWidget","selectChain"],"mappings":"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","file":"index.js","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/ui-chain-select\"] = \"0.1.9\";\n}\n\nexport default \"0.1.9\";\n","import { Chain } from \"@liberfi.io/types\";\nimport { Avatar, BinanceIcon, EthereumIcon, SolanaIcon } from \"@liberfi.io/ui\";\nimport { capitalizeString, chainSlug } from \"@liberfi.io/utils\";\n\nexport type ChainAvatarProps = {\n chain: Chain;\n className?: string;\n};\n\nexport function ChainAvatar({ chain, className }: ChainAvatarProps) {\n switch (chain) {\n case Chain.SOLANA:\n return <SolanaIcon className={className} />;\n case Chain.ETHEREUM:\n return <EthereumIcon className={className} />;\n case Chain.BINANCE:\n return <BinanceIcon className={className} />;\n default:\n return (\n <Avatar\n className={className}\n name={capitalizeString(chainSlug(chain) ?? \"\")}\n />\n );\n }\n}\n","import { useCallback } from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n Button,\n clsx,\n Popover,\n PopoverContent,\n PopoverTrigger,\n useDisclosure,\n} from \"@liberfi.io/ui\";\nimport { chainColor, chainDisplayName } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectDesktopUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectDesktopUI({\n size,\n candidates,\n chain = candidates[0],\n onSelectChain,\n className,\n}: ChainSelectDesktopUIProps) {\n const { isOpen, onClose, onOpenChange } = useDisclosure();\n\n const handleSelect = useCallback(\n (chain: Chain) => {\n onSelectChain?.(chain);\n onClose();\n },\n [onSelectChain, onClose],\n );\n\n return (\n <Popover\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom-end\"\n className={className}\n classNames={{ content: \"w-38 bg-content1 border border-border\" }}\n >\n <PopoverTrigger>\n <Button\n size={size}\n variant=\"bordered\"\n radius=\"full\"\n style={{\n borderColor: chainColor(chain)\n ? `${chainColor(chain)}60`\n : undefined,\n }}\n startContent={\n <ChainAvatar\n chain={chain}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n }\n >\n {chainDisplayName(chain)}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-40 flex flex-col gap-1 p-1 rounded-md\">\n {candidates.map((it) => (\n <div\n key={it}\n className={clsx(\n \"w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3\",\n \"flex gap-2 items-center\",\n it === chain ? \"bg-content2 text-foreground\" : \"text-neutral\",\n )}\n onClick={() => handleSelect(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n {chainDisplayName(it)}\n </div>\n ))}\n </PopoverContent>\n </Popover>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { Button, clsx } from \"@liberfi.io/ui\";\nimport { chainColor } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectMobileUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectMobileUI({\n size,\n candidates,\n chain = Chain.SOLANA,\n onSelectChain,\n className,\n}: ChainSelectMobileUIProps) {\n return (\n <div className={clsx(\"flex items-center gap-1\", className)}>\n {candidates.map((it) => (\n <Button\n isIconOnly\n radius=\"full\"\n className={clsx(\n \"min-w-0 min-h-0 border\",\n size === \"sm\"\n ? \"w-6 h-6\"\n : size === \"md\" || size === undefined\n ? \"w-7 h-7\"\n : \"w-8 h-8\",\n it === chain\n ? \"bg-content1 scale-110 hover:opacity-100\"\n : \"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent\",\n )}\n style={\n it === chain && chainColor(it)\n ? { borderColor: `${chainColor(it)}60` }\n : undefined\n }\n key={it}\n onPress={() => onSelectChain?.(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-4 h-4\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n </Button>\n ))}\n </div>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { useScreen } from \"@liberfi.io/ui\";\nimport { ChainSelectDesktopUI } from \"./chain-select.desktop.ui\";\nimport { ChainSelectMobileUI } from \"./chain-select.mobile.ui\";\n\nconst DEFAULT_CANDIDATES = [Chain.SOLANA, Chain.ETHEREUM, Chain.BINANCE];\n\nexport type ChainSelectUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n chain?: Chain;\n candidates?: Chain[];\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectUI({\n size,\n chain = Chain.SOLANA,\n candidates = DEFAULT_CANDIDATES,\n onSelectChain,\n className,\n}: ChainSelectUIProps) {\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return (\n <ChainSelectMobileUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n } else {\n return (\n <ChainSelectDesktopUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n }\n}\n","import { atomWithStorage } from \"jotai/utils\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\n\n/** current chain */\nexport const chainAtom = atomWithStorage<Chain>(\n \"chain\",\n Chain.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n\n/** current chain namespace */\nexport const chainNamespaceAtom = atomWithStorage<ChainNamespace>(\n \"chainNamespace\",\n ChainNamespace.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n","import { useCallback } from \"react\";\nimport { useSetAtom } from \"jotai\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useSelectChain(): (chain: Chain) => void {\n const setChain = useSetAtom(chainAtom);\n const setChainNamespace = useSetAtom(chainNamespaceAtom);\n\n return useCallback(\n (chain: Chain) => {\n switch (chain) {\n case Chain.ETHEREUM:\n case Chain.BINANCE:\n setChainNamespace(ChainNamespace.EVM);\n break;\n case Chain.SOLANA:\n setChainNamespace(ChainNamespace.SOLANA);\n break;\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n setChain(chain);\n },\n [setChain, setChainNamespace],\n );\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useCurrentChain() {\n const chain = useAtomValue(chainAtom);\n const chainNamespace = useAtomValue(chainNamespaceAtom);\n return useMemo(() => ({ chain, chainNamespace }), [chain, chainNamespace]);\n}\n","import { useSelectChain, useCurrentChain } from \"../hooks\";\nimport { ChainSelectUI } from \"./chain-select.ui\";\n\nexport type ChainSelectWidgetProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n};\n\nexport function ChainSelectWidget({ size, className }: ChainSelectWidgetProps) {\n const { chain } = useCurrentChain();\n const selectChain = useSelectChain();\n\n return (\n <ChainSelectUI\n chain={chain}\n onSelectChain={selectChain}\n size={size}\n className={className}\n />\n );\n}\n"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import {Chain,ChainNamespace}from'@liberfi.io/types';import {useDisclosure,Popover,PopoverTrigger,Button,clsx,PopoverContent,useScreen,Avatar,BinanceIcon,EthereumIcon,SolanaIcon}from'@liberfi.io/ui';import {useCallback,useMemo}from'react';import {chainDisplayName,chainColor,capitalizeString,chainSlug}from'@liberfi.io/utils';import {jsxs,jsx}from'react/jsx-runtime';import {useSetAtom,useAtomValue}from'jotai';import {atomWithStorage}from'jotai/utils';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-chain-select"]="0.1.8");var R="0.1.8";function s({chain:e,className:o}){switch(e){case Chain.SOLANA:return jsx(SolanaIcon,{className:o});case Chain.ETHEREUM:return jsx(EthereumIcon,{className:o});case Chain.BINANCE:return jsx(BinanceIcon,{className:o});default:return jsx(Avatar,{className:o,name:capitalizeString(chainSlug(e)??"")})}}function w({size:e,candidates:o,chain:n=o[0],onSelectChain:t,className:i}){let{isOpen:r,onClose:S,onOpenChange:k}=useDisclosure(),B=useCallback(a=>{t?.(a),S();},[t,S]);return jsxs(Popover,{isOpen:r,onOpenChange:k,placement:"bottom-end",className:i,classNames:{content:"w-38 bg-content1 border border-border"},children:[jsx(PopoverTrigger,{children:jsx(Button,{size:e,variant:"bordered",radius:"full",style:{borderColor:chainColor(n)?`${chainColor(n)}60`:void 0},startContent:jsx(s,{chain:n,className:clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),children:chainDisplayName(n)})}),jsx(PopoverContent,{className:"w-40 flex flex-col gap-1 p-1 rounded-md",children:o.map(a=>jsxs("div",{className:clsx("w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3","flex gap-2 items-center",a===n?"bg-content2 text-foreground":"text-neutral"),onClick:()=>B(a),children:[jsx(s,{chain:a,className:clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),chainDisplayName(a)]},a))})]})}function b({size:e,candidates:o,chain:n=Chain.SOLANA,onSelectChain:t,className:i}){return jsx("div",{className:clsx("flex items-center gap-1",i),children:o.map(r=>jsx(Button,{isIconOnly:true,radius:"full",className:clsx("min-w-0 min-h-0 border",e==="sm"?"w-6 h-6":e==="md"||e===void 0?"w-7 h-7":"w-8 h-8",r===n?"bg-content1 scale-110 hover:opacity-100":"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent"),style:r===n&&chainColor(r)?{borderColor:`${chainColor(r)}60`}:void 0,onPress:()=>t?.(r),children:jsx(s,{chain:r,className:clsx(e==="sm"?"w-4 h-4":e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")})},r))})}var Z=[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE];function E({size:e,chain:o=Chain.SOLANA,candidates:n=Z,onSelectChain:t,className:i}){let{isMobile:r}=useScreen();return r?jsx(b,{size:e,chain:o,onSelectChain:t,candidates:n,className:i}):jsx(w,{size:e,chain:o,onSelectChain:t,candidates:n,className:i})}var h=atomWithStorage("chain",Chain.SOLANA,void 0,{getOnInit:true}),l=atomWithStorage("chainNamespace",ChainNamespace.SOLANA,void 0,{getOnInit:true});function U(){let e=useSetAtom(h),o=useSetAtom(l);return useCallback(n=>{switch(n){case Chain.ETHEREUM:case Chain.BINANCE:o(ChainNamespace.EVM);break;case Chain.SOLANA:o(ChainNamespace.SOLANA);break;default:throw new Error(`Unsupported chain: ${n}`)}e(n);},[e,o])}function L(){let e=useAtomValue(h),o=useAtomValue(l);return useMemo(()=>({chain:e,chainNamespace:o}),[e,o])}function qe({size:e,className:o}){let{chain:n}=L(),t=U();return jsx(E,{chain:n,onSelectChain:t,size:e,className:o})}export{w as ChainSelectDesktopUI,b as ChainSelectMobileUI,E as ChainSelectUI,qe as ChainSelectWidget,h as chainAtom,l as chainNamespaceAtom,L as useCurrentChain,U as useSelectChain,R as version};//# sourceMappingURL=index.mjs.map
1
+ import {Chain,ChainNamespace}from'@liberfi.io/types';import {useDisclosure,Popover,PopoverTrigger,Button,clsx,PopoverContent,useScreen,Avatar,BinanceIcon,EthereumIcon,SolanaIcon}from'@liberfi.io/ui';import {useCallback,useMemo}from'react';import {chainDisplayName,chainColor,capitalizeString,chainSlug}from'@liberfi.io/utils';import {jsxs,jsx}from'react/jsx-runtime';import {useSetAtom,useAtomValue}from'jotai';import {atomWithStorage}from'jotai/utils';typeof window<"u"&&(window.__LIBERFI_VERSION__=window.__LIBERFI_VERSION__||{},window.__LIBERFI_VERSION__["@liberfi.io/ui-chain-select"]="0.1.9");var R="0.1.9";function s({chain:e,className:o}){switch(e){case Chain.SOLANA:return jsx(SolanaIcon,{className:o});case Chain.ETHEREUM:return jsx(EthereumIcon,{className:o});case Chain.BINANCE:return jsx(BinanceIcon,{className:o});default:return jsx(Avatar,{className:o,name:capitalizeString(chainSlug(e)??"")})}}function w({size:e,candidates:o,chain:n=o[0],onSelectChain:t,className:i}){let{isOpen:r,onClose:S,onOpenChange:k}=useDisclosure(),B=useCallback(a=>{t?.(a),S();},[t,S]);return jsxs(Popover,{isOpen:r,onOpenChange:k,placement:"bottom-end",className:i,classNames:{content:"w-38 bg-content1 border border-border"},children:[jsx(PopoverTrigger,{children:jsx(Button,{size:e,variant:"bordered",radius:"full",style:{borderColor:chainColor(n)?`${chainColor(n)}60`:void 0},startContent:jsx(s,{chain:n,className:clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),children:chainDisplayName(n)})}),jsx(PopoverContent,{className:"w-40 flex flex-col gap-1 p-1 rounded-md",children:o.map(a=>jsxs("div",{className:clsx("w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3","flex gap-2 items-center",a===n?"bg-content2 text-foreground":"text-neutral"),onClick:()=>B(a),children:[jsx(s,{chain:a,className:clsx(e==="sm"||e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")}),chainDisplayName(a)]},a))})]})}function b({size:e,candidates:o,chain:n=Chain.SOLANA,onSelectChain:t,className:i}){return jsx("div",{className:clsx("flex items-center gap-1",i),children:o.map(r=>jsx(Button,{isIconOnly:true,radius:"full",className:clsx("min-w-0 min-h-0 border",e==="sm"?"w-6 h-6":e==="md"||e===void 0?"w-7 h-7":"w-8 h-8",r===n?"bg-content1 scale-110 hover:opacity-100":"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent"),style:r===n&&chainColor(r)?{borderColor:`${chainColor(r)}60`}:void 0,onPress:()=>t?.(r),children:jsx(s,{chain:r,className:clsx(e==="sm"?"w-4 h-4":e==="md"||e===void 0?"w-5 h-5":"w-6 h-6")})},r))})}var Z=[Chain.SOLANA,Chain.ETHEREUM,Chain.BINANCE];function E({size:e,chain:o=Chain.SOLANA,candidates:n=Z,onSelectChain:t,className:i}){let{isMobile:r}=useScreen();return r?jsx(b,{size:e,chain:o,onSelectChain:t,candidates:n,className:i}):jsx(w,{size:e,chain:o,onSelectChain:t,candidates:n,className:i})}var h=atomWithStorage("chain",Chain.SOLANA,void 0,{getOnInit:true}),l=atomWithStorage("chainNamespace",ChainNamespace.SOLANA,void 0,{getOnInit:true});function U(){let e=useSetAtom(h),o=useSetAtom(l);return useCallback(n=>{switch(n){case Chain.ETHEREUM:case Chain.BINANCE:o(ChainNamespace.EVM);break;case Chain.SOLANA:o(ChainNamespace.SOLANA);break;default:throw new Error(`Unsupported chain: ${n}`)}e(n);},[e,o])}function L(){let e=useAtomValue(h),o=useAtomValue(l);return useMemo(()=>({chain:e,chainNamespace:o}),[e,o])}function qe({size:e,className:o}){let{chain:n}=L(),t=U();return jsx(E,{chain:n,onSelectChain:t,size:e,className:o})}export{w as ChainSelectDesktopUI,b as ChainSelectMobileUI,E as ChainSelectUI,qe as ChainSelectWidget,h as chainAtom,l as chainNamespaceAtom,L as useCurrentChain,U as useSelectChain,R as version};//# sourceMappingURL=index.mjs.map
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/version.ts","../src/components/chain-avatar.tsx","../src/components/chain-select.desktop.ui.tsx","../src/components/chain-select.mobile.ui.tsx","../src/components/chain-select.ui.tsx","../src/states.ts","../src/hooks/useSelectChain.tsx","../src/hooks/useCurrentChain.tsx","../src/components/chain-select.widget.tsx"],"names":["version_default","ChainAvatar","chain","className","Chain","jsx","SolanaIcon","EthereumIcon","BinanceIcon","Avatar","capitalizeString","chainSlug","ChainSelectDesktopUI","size","candidates","onSelectChain","isOpen","onClose","onOpenChange","useDisclosure","handleSelect","useCallback","jsxs","Popover","PopoverTrigger","Button","chainColor","clsx","chainDisplayName","PopoverContent","it","ChainSelectMobileUI","DEFAULT_CANDIDATES","ChainSelectUI","isMobile","useScreen","chainAtom","atomWithStorage","chainNamespaceAtom","ChainNamespace","useSelectChain","setChain","useSetAtom","setChainNamespace","useCurrentChain","useAtomValue","chainNamespace","useMemo","ChainSelectWidget","selectChain"],"mappings":"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","file":"index.mjs","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/ui-chain-select\"] = \"0.1.8\";\n}\n\nexport default \"0.1.8\";\n","import { Chain } from \"@liberfi.io/types\";\nimport { Avatar, BinanceIcon, EthereumIcon, SolanaIcon } from \"@liberfi.io/ui\";\nimport { capitalizeString, chainSlug } from \"@liberfi.io/utils\";\n\nexport type ChainAvatarProps = {\n chain: Chain;\n className?: string;\n};\n\nexport function ChainAvatar({ chain, className }: ChainAvatarProps) {\n switch (chain) {\n case Chain.SOLANA:\n return <SolanaIcon className={className} />;\n case Chain.ETHEREUM:\n return <EthereumIcon className={className} />;\n case Chain.BINANCE:\n return <BinanceIcon className={className} />;\n default:\n return (\n <Avatar\n className={className}\n name={capitalizeString(chainSlug(chain) ?? \"\")}\n />\n );\n }\n}\n","import { useCallback } from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n Button,\n clsx,\n Popover,\n PopoverContent,\n PopoverTrigger,\n useDisclosure,\n} from \"@liberfi.io/ui\";\nimport { chainColor, chainDisplayName } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectDesktopUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectDesktopUI({\n size,\n candidates,\n chain = candidates[0],\n onSelectChain,\n className,\n}: ChainSelectDesktopUIProps) {\n const { isOpen, onClose, onOpenChange } = useDisclosure();\n\n const handleSelect = useCallback(\n (chain: Chain) => {\n onSelectChain?.(chain);\n onClose();\n },\n [onSelectChain, onClose],\n );\n\n return (\n <Popover\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom-end\"\n className={className}\n classNames={{ content: \"w-38 bg-content1 border border-border\" }}\n >\n <PopoverTrigger>\n <Button\n size={size}\n variant=\"bordered\"\n radius=\"full\"\n style={{\n borderColor: chainColor(chain)\n ? `${chainColor(chain)}60`\n : undefined,\n }}\n startContent={\n <ChainAvatar\n chain={chain}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n }\n >\n {chainDisplayName(chain)}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-40 flex flex-col gap-1 p-1 rounded-md\">\n {candidates.map((it) => (\n <div\n key={it}\n className={clsx(\n \"w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3\",\n \"flex gap-2 items-center\",\n it === chain ? \"bg-content2 text-foreground\" : \"text-neutral\",\n )}\n onClick={() => handleSelect(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n {chainDisplayName(it)}\n </div>\n ))}\n </PopoverContent>\n </Popover>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { Button, clsx } from \"@liberfi.io/ui\";\nimport { chainColor } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectMobileUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectMobileUI({\n size,\n candidates,\n chain = Chain.SOLANA,\n onSelectChain,\n className,\n}: ChainSelectMobileUIProps) {\n return (\n <div className={clsx(\"flex items-center gap-1\", className)}>\n {candidates.map((it) => (\n <Button\n isIconOnly\n radius=\"full\"\n className={clsx(\n \"min-w-0 min-h-0 border\",\n size === \"sm\"\n ? \"w-6 h-6\"\n : size === \"md\" || size === undefined\n ? \"w-7 h-7\"\n : \"w-8 h-8\",\n it === chain\n ? \"bg-content1 scale-110 hover:opacity-100\"\n : \"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent\",\n )}\n style={\n it === chain && chainColor(it)\n ? { borderColor: `${chainColor(it)}60` }\n : undefined\n }\n key={it}\n onPress={() => onSelectChain?.(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-4 h-4\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n </Button>\n ))}\n </div>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { useScreen } from \"@liberfi.io/ui\";\nimport { ChainSelectDesktopUI } from \"./chain-select.desktop.ui\";\nimport { ChainSelectMobileUI } from \"./chain-select.mobile.ui\";\n\nconst DEFAULT_CANDIDATES = [Chain.SOLANA, Chain.ETHEREUM, Chain.BINANCE];\n\nexport type ChainSelectUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n chain?: Chain;\n candidates?: Chain[];\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectUI({\n size,\n chain = Chain.SOLANA,\n candidates = DEFAULT_CANDIDATES,\n onSelectChain,\n className,\n}: ChainSelectUIProps) {\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return (\n <ChainSelectMobileUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n } else {\n return (\n <ChainSelectDesktopUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n }\n}\n","import { atomWithStorage } from \"jotai/utils\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\n\n/** current chain */\nexport const chainAtom = atomWithStorage<Chain>(\n \"chain\",\n Chain.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n\n/** current chain namespace */\nexport const chainNamespaceAtom = atomWithStorage<ChainNamespace>(\n \"chainNamespace\",\n ChainNamespace.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n","import { useCallback } from \"react\";\nimport { useSetAtom } from \"jotai\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useSelectChain(): (chain: Chain) => void {\n const setChain = useSetAtom(chainAtom);\n const setChainNamespace = useSetAtom(chainNamespaceAtom);\n\n return useCallback(\n (chain: Chain) => {\n switch (chain) {\n case Chain.ETHEREUM:\n case Chain.BINANCE:\n setChainNamespace(ChainNamespace.EVM);\n break;\n case Chain.SOLANA:\n setChainNamespace(ChainNamespace.SOLANA);\n break;\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n setChain(chain);\n },\n [setChain, setChainNamespace],\n );\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useCurrentChain() {\n const chain = useAtomValue(chainAtom);\n const chainNamespace = useAtomValue(chainNamespaceAtom);\n return useMemo(() => ({ chain, chainNamespace }), [chain, chainNamespace]);\n}\n","import { useSelectChain, useCurrentChain } from \"../hooks\";\nimport { ChainSelectUI } from \"./chain-select.ui\";\n\nexport type ChainSelectWidgetProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n};\n\nexport function ChainSelectWidget({ size, className }: ChainSelectWidgetProps) {\n const { chain } = useCurrentChain();\n const selectChain = useSelectChain();\n\n return (\n <ChainSelectUI\n chain={chain}\n onSelectChain={selectChain}\n size={size}\n className={className}\n />\n );\n}\n"]}
1
+ {"version":3,"sources":["../src/version.ts","../src/components/chain-avatar.tsx","../src/components/chain-select.desktop.ui.tsx","../src/components/chain-select.mobile.ui.tsx","../src/components/chain-select.ui.tsx","../src/states.ts","../src/hooks/useSelectChain.tsx","../src/hooks/useCurrentChain.tsx","../src/components/chain-select.widget.tsx"],"names":["version_default","ChainAvatar","chain","className","Chain","jsx","SolanaIcon","EthereumIcon","BinanceIcon","Avatar","capitalizeString","chainSlug","ChainSelectDesktopUI","size","candidates","onSelectChain","isOpen","onClose","onOpenChange","useDisclosure","handleSelect","useCallback","jsxs","Popover","PopoverTrigger","Button","chainColor","clsx","chainDisplayName","PopoverContent","it","ChainSelectMobileUI","DEFAULT_CANDIDATES","ChainSelectUI","isMobile","useScreen","chainAtom","atomWithStorage","chainNamespaceAtom","ChainNamespace","useSelectChain","setChain","useSetAtom","setChainNamespace","useCurrentChain","useAtomValue","chainNamespace","useMemo","ChainSelectWidget","selectChain"],"mappings":"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","file":"index.mjs","sourcesContent":["declare global {\n interface Window {\n __LIBERFI_VERSION__?: {\n [key: string]: string;\n };\n }\n}\nif (typeof window !== \"undefined\") {\n window.__LIBERFI_VERSION__ = window.__LIBERFI_VERSION__ || {};\n window.__LIBERFI_VERSION__[\"@liberfi.io/ui-chain-select\"] = \"0.1.9\";\n}\n\nexport default \"0.1.9\";\n","import { Chain } from \"@liberfi.io/types\";\nimport { Avatar, BinanceIcon, EthereumIcon, SolanaIcon } from \"@liberfi.io/ui\";\nimport { capitalizeString, chainSlug } from \"@liberfi.io/utils\";\n\nexport type ChainAvatarProps = {\n chain: Chain;\n className?: string;\n};\n\nexport function ChainAvatar({ chain, className }: ChainAvatarProps) {\n switch (chain) {\n case Chain.SOLANA:\n return <SolanaIcon className={className} />;\n case Chain.ETHEREUM:\n return <EthereumIcon className={className} />;\n case Chain.BINANCE:\n return <BinanceIcon className={className} />;\n default:\n return (\n <Avatar\n className={className}\n name={capitalizeString(chainSlug(chain) ?? \"\")}\n />\n );\n }\n}\n","import { useCallback } from \"react\";\nimport { Chain } from \"@liberfi.io/types\";\nimport {\n Button,\n clsx,\n Popover,\n PopoverContent,\n PopoverTrigger,\n useDisclosure,\n} from \"@liberfi.io/ui\";\nimport { chainColor, chainDisplayName } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectDesktopUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectDesktopUI({\n size,\n candidates,\n chain = candidates[0],\n onSelectChain,\n className,\n}: ChainSelectDesktopUIProps) {\n const { isOpen, onClose, onOpenChange } = useDisclosure();\n\n const handleSelect = useCallback(\n (chain: Chain) => {\n onSelectChain?.(chain);\n onClose();\n },\n [onSelectChain, onClose],\n );\n\n return (\n <Popover\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n placement=\"bottom-end\"\n className={className}\n classNames={{ content: \"w-38 bg-content1 border border-border\" }}\n >\n <PopoverTrigger>\n <Button\n size={size}\n variant=\"bordered\"\n radius=\"full\"\n style={{\n borderColor: chainColor(chain)\n ? `${chainColor(chain)}60`\n : undefined,\n }}\n startContent={\n <ChainAvatar\n chain={chain}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n }\n >\n {chainDisplayName(chain)}\n </Button>\n </PopoverTrigger>\n <PopoverContent className=\"w-40 flex flex-col gap-1 p-1 rounded-md\">\n {candidates.map((it) => (\n <div\n key={it}\n className={clsx(\n \"w-full h-10 hover:bg-content2/80 cursor-pointer rounded-md px-3\",\n \"flex gap-2 items-center\",\n it === chain ? \"bg-content2 text-foreground\" : \"text-neutral\",\n )}\n onClick={() => handleSelect(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-5 h-5\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n {chainDisplayName(it)}\n </div>\n ))}\n </PopoverContent>\n </Popover>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { Button, clsx } from \"@liberfi.io/ui\";\nimport { chainColor } from \"@liberfi.io/utils\";\nimport { ChainAvatar } from \"./chain-avatar\";\n\nexport type ChainSelectMobileUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n candidates: Chain[];\n chain?: Chain;\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectMobileUI({\n size,\n candidates,\n chain = Chain.SOLANA,\n onSelectChain,\n className,\n}: ChainSelectMobileUIProps) {\n return (\n <div className={clsx(\"flex items-center gap-1\", className)}>\n {candidates.map((it) => (\n <Button\n isIconOnly\n radius=\"full\"\n className={clsx(\n \"min-w-0 min-h-0 border\",\n size === \"sm\"\n ? \"w-6 h-6\"\n : size === \"md\" || size === undefined\n ? \"w-7 h-7\"\n : \"w-8 h-8\",\n it === chain\n ? \"bg-content1 scale-110 hover:opacity-100\"\n : \"bg-transparent scale-90 opacity-50 hover:opacity-100 border-transparent\",\n )}\n style={\n it === chain && chainColor(it)\n ? { borderColor: `${chainColor(it)}60` }\n : undefined\n }\n key={it}\n onPress={() => onSelectChain?.(it)}\n >\n <ChainAvatar\n chain={it}\n className={clsx(\n size === \"sm\"\n ? \"w-4 h-4\"\n : size === \"md\" || size === undefined\n ? \"w-5 h-5\"\n : \"w-6 h-6\",\n )}\n />\n </Button>\n ))}\n </div>\n );\n}\n","import { Chain } from \"@liberfi.io/types\";\nimport { useScreen } from \"@liberfi.io/ui\";\nimport { ChainSelectDesktopUI } from \"./chain-select.desktop.ui\";\nimport { ChainSelectMobileUI } from \"./chain-select.mobile.ui\";\n\nconst DEFAULT_CANDIDATES = [Chain.SOLANA, Chain.ETHEREUM, Chain.BINANCE];\n\nexport type ChainSelectUIProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n chain?: Chain;\n candidates?: Chain[];\n onSelectChain?: (chain: Chain) => void;\n className?: string;\n};\n\nexport function ChainSelectUI({\n size,\n chain = Chain.SOLANA,\n candidates = DEFAULT_CANDIDATES,\n onSelectChain,\n className,\n}: ChainSelectUIProps) {\n const { isMobile } = useScreen();\n\n if (isMobile) {\n return (\n <ChainSelectMobileUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n } else {\n return (\n <ChainSelectDesktopUI\n size={size}\n chain={chain}\n onSelectChain={onSelectChain}\n candidates={candidates}\n className={className}\n />\n );\n }\n}\n","import { atomWithStorage } from \"jotai/utils\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\n\n/** current chain */\nexport const chainAtom = atomWithStorage<Chain>(\n \"chain\",\n Chain.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n\n/** current chain namespace */\nexport const chainNamespaceAtom = atomWithStorage<ChainNamespace>(\n \"chainNamespace\",\n ChainNamespace.SOLANA,\n undefined,\n {\n getOnInit: true,\n },\n);\n","import { useCallback } from \"react\";\nimport { useSetAtom } from \"jotai\";\nimport { Chain, ChainNamespace } from \"@liberfi.io/types\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useSelectChain(): (chain: Chain) => void {\n const setChain = useSetAtom(chainAtom);\n const setChainNamespace = useSetAtom(chainNamespaceAtom);\n\n return useCallback(\n (chain: Chain) => {\n switch (chain) {\n case Chain.ETHEREUM:\n case Chain.BINANCE:\n setChainNamespace(ChainNamespace.EVM);\n break;\n case Chain.SOLANA:\n setChainNamespace(ChainNamespace.SOLANA);\n break;\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n setChain(chain);\n },\n [setChain, setChainNamespace],\n );\n}\n","import { useMemo } from \"react\";\nimport { useAtomValue } from \"jotai\";\nimport { chainAtom, chainNamespaceAtom } from \"../states\";\n\nexport function useCurrentChain() {\n const chain = useAtomValue(chainAtom);\n const chainNamespace = useAtomValue(chainNamespaceAtom);\n return useMemo(() => ({ chain, chainNamespace }), [chain, chainNamespace]);\n}\n","import { useSelectChain, useCurrentChain } from \"../hooks\";\nimport { ChainSelectUI } from \"./chain-select.ui\";\n\nexport type ChainSelectWidgetProps = {\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n};\n\nexport function ChainSelectWidget({ size, className }: ChainSelectWidgetProps) {\n const { chain } = useCurrentChain();\n const selectChain = useSelectChain();\n\n return (\n <ChainSelectUI\n chain={chain}\n onSelectChain={selectChain}\n size={size}\n className={className}\n />\n );\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liberfi.io/ui-chain-select",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "description": "Chain Management for Liberfi React SDK",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -16,9 +16,9 @@
16
16
  "dependencies": {
17
17
  "@tanstack/react-query": "^5.90.2",
18
18
  "tailwind-variants": "^3.1.1",
19
- "@liberfi.io/types": "0.1.17",
20
- "@liberfi.io/ui": "0.1.17",
21
- "@liberfi.io/utils": "0.1.14"
19
+ "@liberfi.io/types": "0.1.18",
20
+ "@liberfi.io/ui": "0.1.18",
21
+ "@liberfi.io/utils": "0.1.15"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@tailwindcss/cli": "^4.1.13",
@@ -34,7 +34,7 @@
34
34
  "tailwindcss": "^4.1.13",
35
35
  "tsup": "^8.5.0",
36
36
  "typescript": "^5.9.2",
37
- "tsconfig": "0.1.5"
37
+ "tsconfig": "0.1.6"
38
38
  },
39
39
  "peerDependencies": {
40
40
  "react": ">=18",