@txnlab/use-wallet-ui-react 1.2.1 → 1.4.0

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.
Files changed (65) hide show
  1. package/README.md +121 -18
  2. package/dist/cjs/chunks/{floating-ui.react-O3sXJ80G.cjs → floating-ui.react-ChfuPAKc.cjs} +1 -1
  3. package/dist/cjs/chunks/{floating-ui.react-O3sXJ80G.cjs.map → floating-ui.react-ChfuPAKc.cjs.map} +1 -1
  4. package/dist/cjs/chunks/passkey-C8Dw6sNL.cjs +2 -0
  5. package/dist/cjs/chunks/passkey-C8Dw6sNL.cjs.map +1 -0
  6. package/dist/cjs/index.cjs +14 -14
  7. package/dist/cjs/index.cjs.map +1 -1
  8. package/dist/cjs/plugins/export-key.cjs +2 -2
  9. package/dist/cjs/plugins/export-key.cjs.map +1 -1
  10. package/dist/cjs/plugins/passkey.cjs +2 -0
  11. package/dist/cjs/plugins/passkey.cjs.map +1 -0
  12. package/dist/esm/chunks/{floating-ui.react-Co7v2aHO.js → floating-ui.react-CxJSDrxv.js} +1 -1
  13. package/dist/esm/chunks/{floating-ui.react-Co7v2aHO.js.map → floating-ui.react-CxJSDrxv.js.map} +1 -1
  14. package/dist/esm/chunks/passkey-BbgvIGki.js +44 -0
  15. package/dist/esm/chunks/passkey-BbgvIGki.js.map +1 -0
  16. package/dist/esm/index.js +2888 -2601
  17. package/dist/esm/index.js.map +1 -1
  18. package/dist/esm/plugins/export-key.js +13 -12
  19. package/dist/esm/plugins/export-key.js.map +1 -1
  20. package/dist/esm/plugins/passkey.js +578 -0
  21. package/dist/esm/plugins/passkey.js.map +1 -0
  22. package/dist/style.css +152 -0
  23. package/dist/types/components/ConnectWalletMenu.d.ts +7 -1
  24. package/dist/types/components/ConnectWalletMenu.d.ts.map +1 -1
  25. package/dist/types/components/ConnectedWalletMenu.d.ts.map +1 -1
  26. package/dist/types/components/PasskeyConnect.d.ts +29 -0
  27. package/dist/types/components/PasskeyConnect.d.ts.map +1 -0
  28. package/dist/types/components/WalletButton.d.ts +7 -1
  29. package/dist/types/components/WalletButton.d.ts.map +1 -1
  30. package/dist/types/components/WalletGroupLabel.d.ts +6 -0
  31. package/dist/types/components/WalletGroupLabel.d.ts.map +1 -0
  32. package/dist/types/components/WalletIcon.d.ts +6 -0
  33. package/dist/types/components/WalletIcon.d.ts.map +1 -0
  34. package/dist/types/components/WalletList.d.ts.map +1 -1
  35. package/dist/types/index.d.cts +5 -0
  36. package/dist/types/index.d.ts +5 -0
  37. package/dist/types/index.d.ts.map +1 -1
  38. package/dist/types/plugins/passkey/PasskeyDisclosure.d.ts +11 -0
  39. package/dist/types/plugins/passkey/PasskeyDisclosure.d.ts.map +1 -0
  40. package/dist/types/plugins/passkey/PasskeyRecoveryDialog.d.ts +10 -0
  41. package/dist/types/plugins/passkey/PasskeyRecoveryDialog.d.ts.map +1 -0
  42. package/dist/types/plugins/passkey/PasskeyRecoveryMenuButton.d.ts +5 -0
  43. package/dist/types/plugins/passkey/PasskeyRecoveryMenuButton.d.ts.map +1 -0
  44. package/dist/types/plugins/passkey/PasskeySessionControl.d.ts +6 -0
  45. package/dist/types/plugins/passkey/PasskeySessionControl.d.ts.map +1 -0
  46. package/dist/types/plugins/passkey/constants.d.ts +3 -0
  47. package/dist/types/plugins/passkey/constants.d.ts.map +1 -0
  48. package/dist/types/plugins/passkey/index.d.cts +36 -0
  49. package/dist/types/plugins/passkey/index.d.ts +36 -0
  50. package/dist/types/plugins/passkey/index.d.ts.map +1 -0
  51. package/dist/types/plugins/passkey/index.test.d.ts +2 -0
  52. package/dist/types/plugins/passkey/index.test.d.ts.map +1 -0
  53. package/dist/types/plugins/passkey/storage.d.ts +5 -0
  54. package/dist/types/plugins/passkey/storage.d.ts.map +1 -0
  55. package/dist/types/plugins/passkey/storage.test.d.ts +2 -0
  56. package/dist/types/plugins/passkey/storage.test.d.ts.map +1 -0
  57. package/dist/types/plugins/passkey/usePasskeyAdapter.d.ts +10 -0
  58. package/dist/types/plugins/passkey/usePasskeyAdapter.d.ts.map +1 -0
  59. package/dist/types/providers/WalletUIProvider.d.ts +15 -1
  60. package/dist/types/providers/WalletUIProvider.d.ts.map +1 -1
  61. package/dist/types/utils/passkey.d.ts +59 -0
  62. package/dist/types/utils/passkey.d.ts.map +1 -0
  63. package/dist/types/utils/passkey.test.d.ts +2 -0
  64. package/dist/types/utils/passkey.test.d.ts.map +1 -0
  65. package/package.json +16 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.js","sources":["../../../src/plugins/passkey/constants.ts","../../../src/plugins/passkey/storage.ts","../../../src/plugins/passkey/PasskeyDisclosure.tsx","../../../src/plugins/passkey/usePasskeyAdapter.ts","../../../src/plugins/passkey/PasskeyRecoveryDialog.tsx","../../../src/plugins/passkey/PasskeyRecoveryMenuButton.tsx","../../../src/plugins/passkey/PasskeySessionControl.tsx","../../../src/plugins/passkey/index.tsx"],"sourcesContent":["export const PASSKEY_RECOVERY_DIALOG = 'passkey-recovery-dialog'\n\nexport const DEFAULT_PASSKEY_DISCLOSURE =\n 'This account is created by and for {domain}. Keep only what you need here, and move larger amounts to a wallet you control.'\n","/**\n * A per-account flag in localStorage. Falls back to memory when storage is\n * unavailable (private mode, blocked site data), so it lasts for the page\n * session.\n */\ninterface AddressFlag {\n has: (address: string) => boolean\n set: (address: string) => void\n}\n\nfunction createAddressFlag(keyPrefix: string): AddressFlag {\n const inMemory = new Set<string>()\n return {\n has(address: string): boolean {\n if (inMemory.has(address)) return true\n try {\n return localStorage.getItem(keyPrefix + address) === '1'\n } catch {\n return false\n }\n },\n set(address: string): void {\n inMemory.add(address)\n try {\n localStorage.setItem(keyPrefix + address, '1')\n } catch {\n // Kept in memory above\n }\n },\n }\n}\n\nconst disclosureDismissed = createAddressFlag(\n 'wui:passkey-disclosure-dismissed:',\n)\n\n/** Whether the user dismissed the passkey disclosure for this account */\nexport const isDisclosureDismissed = (address: string): boolean =>\n disclosureDismissed.has(address)\n\n/** Remember that the user dismissed the passkey disclosure for this account */\nexport const dismissDisclosure = (address: string): void =>\n disclosureDismissed.set(address)\n","import { useState } from 'react'\n\nimport { getPasskeyAccountDomain } from '../../utils/passkey'\n\nimport { dismissDisclosure, isDisclosureDismissed } from './storage'\n\nimport type { MenuRenderContext } from '../types'\n\n/**\n * Tells users the passkey account belongs to the site that created it. Shows\n * until the user chooses \"Got it\", once per account; the domain tag in the\n * menu stays after that.\n */\nexport function PasskeyDisclosure({\n ctx,\n text,\n}: {\n ctx: MenuRenderContext\n text: string\n}) {\n const address = ctx.activeAddress\n // Re-render after dismissing; the dismissal itself lives in storage\n const [, setDismissedCount] = useState(0)\n\n if (!address || isDisclosureDismissed(address)) return null\n\n const domain = getPasskeyAccountDomain(ctx.activeWallet?.activeAccount?.name)\n\n const handleDismiss = () => {\n dismissDisclosure(address)\n setDismissedCount((count) => count + 1)\n }\n\n return (\n <div\n role=\"note\"\n data-passkey-disclosure\n className=\"mb-2 flex flex-col gap-2 rounded-[10px] border border-[var(--wui-color-border)] bg-[var(--wui-color-bg-secondary)] px-3 py-2.5\"\n >\n <p className=\"text-xs leading-[1.55] text-[var(--wui-color-text-secondary)]\">\n {text.replaceAll('{domain}', domain)}\n </p>\n <button\n type=\"button\"\n onClick={handleDismiss}\n className=\"self-end rounded-md bg-[var(--wui-color-primary)] px-2.5 py-1 text-xs font-medium text-[var(--wui-color-primary-text)] hover:bg-[var(--wui-color-primary-hover)]\"\n >\n Got it\n </button>\n </div>\n )\n}\n","import { useWalletManager } from '@txnlab/use-wallet-react'\n\nimport { isPasskeyWallet, type PasskeyWalletAdapter } from '../../utils/passkey'\n\nimport type { Wallet } from '@txnlab/use-wallet-react'\n\n/**\n * Returns the passkey adapter behind a `useWallet()` wallet object, or null\n * for any other wallet. Adapter-specific methods (`unlock`, `lock`,\n * `exportRecoveryPhrase`) aren't on the hook's wallet objects, so reach the\n * adapter through the manager. Requires @txnlab/use-wallet-react 5.2+.\n */\nexport function usePasskeyAdapter(\n wallet: Wallet | null,\n): PasskeyWalletAdapter | null {\n const manager = useWalletManager()\n if (!wallet || !isPasskeyWallet(wallet)) return null\n const adapter = manager.getWallet(wallet.walletKey)\n return (adapter as unknown as PasskeyWalletAdapter | undefined) ?? null\n}\n","import {\n FloatingFocusManager,\n FloatingOverlay,\n useDismiss,\n useFloating,\n useInteractions,\n useRole,\n} from '@floating-ui/react'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { getPasskeyErrorMessage } from '../../utils/passkey'\n\nimport { usePasskeyAdapter } from './usePasskeyAdapter'\n\nimport type { PluginRenderContext } from '../types'\n\ntype DialogStep = 'warning' | 'loading' | 'display' | 'error'\n\nexport const DEFAULT_PASSKEY_DISPLAY_TIMEOUT = 60\n\nexport interface PasskeyRecoveryDialogProps {\n ctx: PluginRenderContext\n onClose: () => void\n /** Seconds to show the phrase before the dialog closes. Default: 60 */\n displayTimeout?: number\n}\n\nexport function PasskeyRecoveryDialog({\n ctx,\n onClose,\n displayTimeout = DEFAULT_PASSKEY_DISPLAY_TIMEOUT,\n}: PasskeyRecoveryDialogProps) {\n const adapter = usePasskeyAdapter(ctx.activeWallet)\n\n const [step, setStep] = useState<DialogStep>('warning')\n // The phrase only ever lives in this component's state\n const [words, setWords] = useState<string[] | null>(null)\n const [timeRemaining, setTimeRemaining] = useState(displayTimeout)\n const [showCopied, setShowCopied] = useState(false)\n const [errorMessage, setErrorMessage] = useState<string | null>(null)\n const [animationState, setAnimationState] = useState<\n 'starting' | 'entered' | 'exiting' | null\n >('starting')\n\n const hasCopiedRef = useRef(false)\n const isMountedRef = useRef(true)\n const isClosingRef = useRef(false)\n\n const { refs, context } = useFloating({\n open: true,\n onOpenChange: (open) => {\n if (!open) handleClose()\n },\n })\n\n const dismiss = useDismiss(context, { outsidePressEvent: 'mousedown' })\n const role = useRole(context, { role: 'dialog' })\n const { getFloatingProps } = useInteractions([dismiss, role])\n\n // Entry animation\n useEffect(() => {\n requestAnimationFrame(() => setAnimationState('entered'))\n }, [])\n\n const clearSensitiveData = useCallback(() => {\n setWords(null)\n // Best effort: clearing can fail without focus or permission\n if (hasCopiedRef.current) {\n hasCopiedRef.current = false\n navigator.clipboard?.writeText('').catch(() => {})\n }\n }, [])\n\n const handleClose = useCallback(() => {\n if (isClosingRef.current) return\n isClosingRef.current = true\n clearSensitiveData()\n setAnimationState('exiting')\n setTimeout(onClose, 150)\n }, [clearSensitiveData, onClose])\n\n // Hide the phrase (and close) when the countdown ends\n useEffect(() => {\n if (step !== 'display') return\n const timer = setInterval(() => {\n setTimeRemaining((prev) => Math.max(0, prev - 1))\n }, 1000)\n return () => clearInterval(timer)\n }, [step])\n\n useEffect(() => {\n if (step === 'display' && timeRemaining === 0) handleClose()\n }, [step, timeRemaining, handleClose])\n\n // Clear everything on unmount, e.g. when the wallet disconnects\n useEffect(() => {\n isMountedRef.current = true\n return () => {\n isMountedRef.current = false\n if (hasCopiedRef.current) {\n hasCopiedRef.current = false\n navigator.clipboard?.writeText('').catch(() => {})\n }\n }\n }, [])\n\n const handleReveal = () => {\n if (!adapter) {\n setErrorMessage('No passkey account is connected.')\n setStep('error')\n return\n }\n\n let exporting: ReturnType<typeof adapter.exportRecoveryPhrase>\n try {\n // Call exportRecoveryPhrase before any await: iOS drops the user's tap\n // across one, and the passkey prompt needs it\n exporting = adapter.exportRecoveryPhrase()\n } catch (error) {\n showError(error)\n return\n }\n setStep('loading')\n\n exporting.then(\n ({ phrase }) => {\n // Drop the phrase if the dialog closed while the prompt was open\n if (!isMountedRef.current || isClosingRef.current) return\n setWords(phrase.split(' '))\n setTimeRemaining(displayTimeout)\n setStep('display')\n },\n (error: unknown) => {\n if (isMountedRef.current) showError(error)\n },\n )\n }\n\n const showError = (error: unknown) => {\n setErrorMessage(\n getPasskeyErrorMessage(error) ??\n (error instanceof Error ? error.message : 'Failed to export phrase'),\n )\n setStep('error')\n }\n\n const handleCopy = () => {\n if (!words || !navigator.clipboard) return\n navigator.clipboard\n .writeText(words.join(' '))\n .then(() => {\n hasCopiedRef.current = true\n setShowCopied(true)\n setTimeout(() => setShowCopied(false), 2000)\n })\n .catch(() => {})\n }\n\n const handleRetry = () => {\n setErrorMessage(null)\n setStep('warning')\n }\n\n // Rendered inside PluginDialogRenderer's FloatingPortal,\n // so no FloatingPortal wrapper here\n return (\n <FloatingOverlay\n className=\"grid place-items-center px-4 z-50 transition-opacity duration-150 ease-in-out bg-[var(--wui-color-overlay)] data-[state=starting]:opacity-0 data-[state=exiting]:opacity-0 data-[state=entered]:opacity-100\"\n data-state={animationState}\n lockScroll\n >\n <FloatingFocusManager context={context} modal={true}>\n <div\n ref={refs.setFloating}\n {...getFloatingProps()}\n role=\"dialog\"\n aria-label={\n step === 'display' ? 'Recovery Phrase' : 'Export Recovery Phrase'\n }\n data-passkey-recovery-dialog\n data-state={animationState}\n className=\"w-full max-w-sm max-h-[calc(100dvh-2rem)] overflow-y-auto rounded-3xl bg-[var(--wui-color-bg)] shadow-xl transform transition-all duration-150 ease-in-out data-[state=starting]:opacity-0 data-[state=starting]:scale-90 data-[state=exiting]:opacity-0 data-[state=exiting]:scale-90 data-[state=entered]:opacity-100 data-[state=entered]:scale-100\"\n style={{ marginTop: '-0.5rem' }}\n >\n {step === 'warning' && (\n <>\n <DialogHeader\n title=\"Export Recovery Phrase\"\n onClose={handleClose}\n />\n <div className=\"px-6 pb-4 space-y-3\">\n <div className=\"bg-[var(--wui-color-danger-bg)] rounded-xl p-4\">\n <p className=\"text-sm font-medium text-[var(--wui-color-danger-text)] mb-2\">\n Your recovery phrase gives full access to this account and\n its funds.\n </p>\n <ul className=\"text-sm text-[var(--wui-color-danger-text)] list-disc pl-5 space-y-1\">\n <li>Never share it with anyone</li>\n <li>Never enter it on unverified websites</li>\n <li>Write it down and store it securely</li>\n </ul>\n </div>\n <FalconImportNote />\n </div>\n <div className=\"px-6 pb-5 flex gap-2\">\n <button\n onClick={handleClose}\n className=\"flex-1 py-2.5 px-4 bg-[var(--wui-color-bg-tertiary)] text-[var(--wui-color-text-secondary)] font-medium rounded-xl hover:brightness-90 transition-all text-sm\"\n >\n Cancel\n </button>\n <button\n onClick={handleReveal}\n className=\"flex-1 py-2.5 px-4 bg-[var(--wui-color-danger-bg)] text-[var(--wui-color-danger-text)] font-medium rounded-xl hover:bg-[var(--wui-color-danger-bg-hover)] transition-colors text-sm\"\n >\n Reveal Recovery Phrase\n </button>\n </div>\n </>\n )}\n\n {step === 'loading' && (\n <div className=\"px-6 py-12 flex flex-col items-center gap-3\">\n <Spinner />\n <p\n role=\"status\"\n className=\"text-sm text-[var(--wui-color-text-secondary)]\"\n >\n Confirm with your passkey…\n </p>\n </div>\n )}\n\n {step === 'display' && words && (\n <>\n <div className=\"relative flex items-center justify-between px-6 pt-5 pb-3\">\n <h2 className=\"text-xl font-bold text-[var(--wui-color-text)] wallet-custom-font\">\n Recovery Phrase\n </h2>\n <div className=\"flex items-center gap-2\">\n <span\n className=\"text-sm font-medium tabular-nums text-[var(--wui-color-text-secondary)]\"\n aria-label={`${timeRemaining} seconds remaining`}\n >\n {formatTime(timeRemaining)}\n </span>\n <CloseButton onClick={handleClose} />\n </div>\n </div>\n\n <div className=\"px-6 pb-3\">\n <ol\n className=\"grid grid-cols-3 gap-1 bg-[var(--wui-color-bg-secondary)] rounded-xl p-2\"\n style={{ userSelect: 'none' }}\n data-passkey-phrase\n >\n {words.map((word, i) => (\n <li\n key={i}\n className=\"flex items-baseline gap-1 py-1 px-1.5 rounded-md bg-[var(--wui-color-bg)] border border-[var(--wui-color-border)]\"\n >\n <span className=\"w-4 shrink-0 text-right text-[10px] tabular-nums text-[var(--wui-color-text-tertiary)]\">\n {i + 1}\n </span>\n <span className=\"text-xs font-medium text-[var(--wui-color-text)]\">\n {word}\n </span>\n </li>\n ))}\n </ol>\n </div>\n\n <div className=\"px-6 pb-3\">\n <FalconImportNote compact />\n </div>\n\n <div className=\"px-6 pb-2 flex gap-2\">\n <button\n onClick={handleCopy}\n className=\"flex-1 py-2 px-4 bg-[var(--wui-color-bg-tertiary)] text-[var(--wui-color-text-secondary)] font-medium rounded-xl hover:brightness-90 transition-all text-sm\"\n >\n {showCopied ? 'Copied' : 'Copy'}\n </button>\n <button\n onClick={handleClose}\n className=\"flex-1 py-2 px-4 bg-[var(--wui-color-primary)] text-[var(--wui-color-primary-text)] font-medium rounded-xl hover:bg-[var(--wui-color-primary-hover)] transition-colors text-sm\"\n >\n Done\n </button>\n </div>\n <p className=\"px-6 pb-5 text-xs text-[var(--wui-color-text-tertiary)] text-center\">\n Clear your clipboard after you paste it\n </p>\n </>\n )}\n\n {step === 'error' && (\n <>\n <DialogHeader\n title=\"Export Recovery Phrase\"\n onClose={handleClose}\n />\n <div className=\"px-6 pb-4\">\n <p\n role=\"alert\"\n className=\"bg-[var(--wui-color-danger-bg)] rounded-xl p-4 text-sm text-[var(--wui-color-danger-text)]\"\n >\n {errorMessage || 'An unexpected error occurred.'}\n </p>\n </div>\n <div className=\"px-6 pb-5 flex gap-2\">\n <button\n onClick={handleClose}\n className=\"flex-1 py-2.5 px-4 bg-[var(--wui-color-bg-tertiary)] text-[var(--wui-color-text-secondary)] font-medium rounded-xl hover:brightness-90 transition-all text-sm\"\n >\n Cancel\n </button>\n <button\n onClick={handleRetry}\n className=\"flex-1 py-2.5 px-4 bg-[var(--wui-color-primary)] text-[var(--wui-color-primary-text)] font-medium rounded-xl hover:bg-[var(--wui-color-primary-hover)] transition-colors text-sm\"\n >\n Try Again\n </button>\n </div>\n </>\n )}\n </div>\n </FloatingFocusManager>\n </FloatingOverlay>\n )\n}\n\n/**\n * The phrase restores the account only as a Falcon-1024 account. The same\n * words in a regular import restore a different, empty account.\n */\nfunction FalconImportNote({ compact = false }: { compact?: boolean }) {\n return (\n <div\n data-passkey-falcon-note\n className=\"rounded-xl border border-[var(--wui-color-border)] bg-[var(--wui-color-bg-secondary)] p-3 text-sm text-[var(--wui-color-text)]\"\n >\n <p className=\"font-medium\">Import it as a Falcon / quantum account</p>\n {!compact && (\n <ul className=\"mt-1.5 list-disc pl-5 space-y-1 text-[var(--wui-color-text-secondary)]\">\n <li>\n Lute: Add account → <strong>Falcon25 account</strong> → Import\n </li>\n <li>Pera: use the quantum account import</li>\n </ul>\n )}\n <p className=\"mt-1.5 text-[var(--wui-color-text-secondary)]\">\n A regular 25-word import restores a different, empty account.\n </p>\n </div>\n )\n}\n\nfunction DialogHeader({\n title,\n onClose,\n}: {\n title: string\n onClose: () => void\n}) {\n return (\n <div className=\"relative flex items-center px-6 pt-5 pb-4\">\n <h2 className=\"text-xl font-bold text-[var(--wui-color-text)] wallet-custom-font\">\n {title}\n </h2>\n <CloseButton onClick={onClose} className=\"absolute right-4\" />\n </div>\n )\n}\n\nfunction CloseButton({\n onClick,\n className = '',\n}: {\n onClick: () => void\n className?: string\n}) {\n return (\n <button\n onClick={onClick}\n className={`${className} rounded-full bg-[var(--wui-color-bg-tertiary)] p-2 text-[var(--wui-color-text-secondary)] hover:brightness-90 transition-all`}\n aria-label=\"Close dialog\"\n >\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-5 w-5\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n )\n}\n\nfunction Spinner() {\n return (\n <svg\n className=\"h-8 w-8 text-[var(--wui-color-text-tertiary)] animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n aria-hidden=\"true\"\n >\n <circle\n className=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n strokeWidth=\"4\"\n />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n )\n}\n\nfunction formatTime(seconds: number): string {\n const mins = Math.floor(seconds / 60)\n const secs = seconds % 60\n return `${mins}:${secs.toString().padStart(2, '0')}`\n}\n","import { PASSKEY_RECOVERY_DIALOG } from './constants'\n\nimport type { MenuRenderContext } from '../types'\n\nexport function PasskeyRecoveryMenuButton({ ctx }: { ctx: MenuRenderContext }) {\n // Only opens the dialog: the passkey prompt starts from its Reveal button\n const handleClick = () => {\n ctx.closeMenu()\n ctx.openDialog(PASSKEY_RECOVERY_DIALOG)\n }\n\n return (\n <>\n <div className=\"border-t border-[var(--wui-color-border)] mt-2 mb-2\" />\n <button\n onClick={handleClick}\n className=\"w-full flex items-center gap-2 px-2 py-2 rounded-lg text-sm text-[var(--wui-color-text-secondary)] hover:bg-[var(--wui-color-bg-hover)] transition-colors\"\n >\n {/* A plain shield: backing up is a protective step. No checkmark, so\n it doesn't read as already done, and no key, which means passkey\n sign-in. Heroicons solid shield-check without the check, MIT\n License */}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M9.661 2.237a.531.531 0 0 1 .678 0 11.947 11.947 0 0 0 7.078 2.749.5.5 0 0 1 .479.425c.069.52.104 1.05.104 1.59 0 5.162-3.26 9.563-7.834 11.256a.48.48 0 0 1-.332 0C5.26 16.564 2 12.163 2 7c0-.538.035-1.069.104-1.589a.5.5 0 0 1 .48-.425 11.947 11.947 0 0 0 7.077-2.75Z\" />\n </svg>\n <span className=\"flex-1 text-left\">Back up account</span>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4 shrink-0 opacity-50\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n </button>\n </>\n )\n}\n","import { useEffect, useState } from 'react'\n\nimport { getPasskeyErrorMessage } from '../../utils/passkey'\n\nimport { usePasskeyAdapter } from './usePasskeyAdapter'\n\nimport type { MenuRenderContext } from '../types'\n\n// The adapter's onLock/onUnlock callbacks belong to the app, so re-read\n// isUnlocked while the menu is open to catch locks from timeouts\nconst POLL_INTERVAL_MS = 1000\n\n/** Shows whether the passkey session is unlocked, with Unlock and Lock */\nexport function PasskeySessionControl({ ctx }: { ctx: MenuRenderContext }) {\n const adapter = usePasskeyAdapter(ctx.activeWallet)\n const [isUnlocked, setIsUnlocked] = useState(() => !!adapter?.isUnlocked)\n const [pending, setPending] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n useEffect(() => {\n if (!adapter) return\n setIsUnlocked(adapter.isUnlocked)\n const timer = setInterval(\n () => setIsUnlocked(adapter.isUnlocked),\n POLL_INTERVAL_MS,\n )\n return () => clearInterval(timer)\n }, [adapter])\n\n if (!adapter) return null\n\n const handleUnlock = () => {\n setError(null)\n // Call unlock before any await: iOS drops the user's tap across one\n const unlocking = adapter.unlock()\n setPending(true)\n unlocking\n .then(() => setIsUnlocked(adapter.isUnlocked))\n .catch((err: unknown) => {\n setError(\n getPasskeyErrorMessage(err) ??\n (err instanceof Error ? err.message : 'Unlock failed'),\n )\n })\n .finally(() => setPending(false))\n }\n\n const handleLock = () => {\n adapter.lock()\n setIsUnlocked(adapter.isUnlocked)\n setError(null)\n }\n\n return (\n <div data-passkey-session className=\"mb-2\">\n <div className=\"flex items-center justify-between gap-2 px-1 py-0.5\">\n <span className=\"flex items-center gap-2 text-sm text-[var(--wui-color-text-secondary)]\">\n {isUnlocked ? <UnlockedIcon /> : <LockedIcon />}\n <span>{isUnlocked ? 'Unlocked' : 'Locked'}</span>\n </span>\n {isUnlocked ? (\n <button\n onClick={handleLock}\n className=\"py-1 px-2.5 bg-[var(--wui-color-bg-tertiary)] text-[var(--wui-color-text-secondary)] font-medium rounded-md hover:brightness-90 transition-all text-xs\"\n >\n Lock\n </button>\n ) : (\n <button\n onClick={handleUnlock}\n disabled={pending}\n className=\"py-1 px-2.5 bg-[var(--wui-color-primary)] text-[var(--wui-color-primary-text)] font-medium rounded-md hover:bg-[var(--wui-color-primary-hover)] transition-colors text-xs disabled:opacity-50 disabled:cursor-not-allowed\"\n >\n {pending ? 'Waiting…' : 'Unlock'}\n </button>\n )}\n </div>\n {!isUnlocked && !error && (\n <p className=\"px-1 text-xs text-[var(--wui-color-text-tertiary)]\">\n The next signature asks for your passkey.\n </p>\n )}\n {error && (\n <p\n role=\"alert\"\n className=\"mt-1 rounded-lg bg-[var(--wui-color-danger-bg)] px-3 py-2 text-xs text-[var(--wui-color-danger-text)]\"\n >\n {error}\n </p>\n )}\n </div>\n )\n}\n\nfunction LockedIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n fillRule=\"evenodd\"\n d=\"M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z\"\n clipRule=\"evenodd\"\n />\n </svg>\n )\n}\n\nfunction UnlockedIcon() {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4 shrink-0\"\n viewBox=\"0 0 20 20\"\n fill=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path d=\"M10 2a5 5 0 00-5 5v2a2 2 0 00-2 2v5a2 2 0 002 2h10a2 2 0 002-2v-5a2 2 0 00-2-2H7V7a3 3 0 015.905-.75 1 1 0 001.937-.5A5.002 5.002 0 0010 2z\" />\n </svg>\n )\n}\n","import { isPasskeyWallet } from '../../utils/passkey'\n\nimport {\n DEFAULT_PASSKEY_DISCLOSURE,\n PASSKEY_RECOVERY_DIALOG,\n} from './constants'\nimport { PasskeyDisclosure } from './PasskeyDisclosure'\nimport { PasskeyRecoveryDialog } from './PasskeyRecoveryDialog'\nimport { PasskeyRecoveryMenuButton } from './PasskeyRecoveryMenuButton'\nimport { PasskeySessionControl } from './PasskeySessionControl'\n\nimport type { PluginDialog, PluginMenuItem, WalletUIPlugin } from '../types'\n\nexport {\n DEFAULT_PASSKEY_DISCLOSURE,\n PASSKEY_RECOVERY_DIALOG,\n} from './constants'\nexport { usePasskeyAdapter } from './usePasskeyAdapter'\nexport type { PasskeyWalletAdapter } from '../../utils/passkey'\n\nexport interface PasskeyPluginOptions {\n /**\n * Add \"Back up account\" to the menu, which reveals the recovery phrase.\n * Pass an object to set how long the phrase stays visible (seconds,\n * default 60). Default: true\n */\n recoveryPhrase?: boolean | { displayTimeout?: number }\n /**\n * Show the session's lock status with Unlock and Lock buttons. Turn it on\n * when the passkey wallet is configured with `passkey({ session })`.\n * Default: false\n */\n session?: boolean\n /**\n * Tell users the account belongs to this site, until they choose \"Got it\"\n * (remembered per account). Pass a string to replace the text; `{domain}`\n * is replaced with the account's domain. The menu always shows the domain\n * as a tag. Default: false\n */\n disclosure?: boolean | string\n}\n\n/**\n * Plugin that adds passkey account features to the ConnectedWalletMenu:\n * recovery phrase export, session lock status, and an optional note on whose\n * account it is. Only visible when the passkey wallet is active.\n *\n * Requires @txnlab/use-wallet-react 5.2 or later.\n */\nexport function passkeyPlugin(\n options: PasskeyPluginOptions = {},\n): WalletUIPlugin {\n const { recoveryPhrase = true, session = false, disclosure = false } = options\n\n const enabled = (ctx: { activeWallet: { id: string } | null }) =>\n isPasskeyWallet(ctx.activeWallet)\n\n const menuItems: PluginMenuItem[] = []\n const dialogs: PluginDialog[] = []\n\n if (disclosure) {\n const text =\n typeof disclosure === 'string' ? disclosure : DEFAULT_PASSKEY_DISCLOSURE\n menuItems.push({\n key: 'passkey-disclosure',\n slot: 'after-wallet-info',\n order: 5,\n enabled,\n render: (ctx) => <PasskeyDisclosure ctx={ctx} text={text} />,\n })\n }\n\n if (session) {\n menuItems.push({\n key: 'passkey-session',\n slot: 'after-wallet-info',\n order: 10,\n enabled,\n render: (ctx) => <PasskeySessionControl ctx={ctx} />,\n })\n }\n\n if (recoveryPhrase) {\n const displayTimeout =\n typeof recoveryPhrase === 'object'\n ? recoveryPhrase.displayTimeout\n : undefined\n menuItems.push({\n key: 'passkey-recovery-trigger',\n slot: 'after-wallet-info',\n order: 20,\n enabled,\n render: (ctx) => <PasskeyRecoveryMenuButton ctx={ctx} />,\n })\n dialogs.push({\n key: PASSKEY_RECOVERY_DIALOG,\n render: ({ onClose, ctx }) => (\n <PasskeyRecoveryDialog\n ctx={ctx}\n onClose={onClose}\n displayTimeout={displayTimeout}\n />\n ),\n })\n }\n\n return {\n id: 'passkey',\n name: 'Passkey',\n menuItems,\n dialogs,\n }\n}\n"],"names":["PASSKEY_RECOVERY_DIALOG","DEFAULT_PASSKEY_DISCLOSURE","createAddressFlag","keyPrefix","inMemory","address","disclosureDismissed","isDisclosureDismissed","dismissDisclosure","PasskeyDisclosure","ctx","text","setDismissedCount","useState","domain","getPasskeyAccountDomain","_b","_a","handleDismiss","count","jsxs","jsx","usePasskeyAdapter","wallet","manager","useWalletManager","isPasskeyWallet","DEFAULT_PASSKEY_DISPLAY_TIMEOUT","PasskeyRecoveryDialog","onClose","displayTimeout","adapter","step","setStep","words","setWords","timeRemaining","setTimeRemaining","showCopied","setShowCopied","errorMessage","setErrorMessage","animationState","setAnimationState","hasCopiedRef","useRef","isMountedRef","isClosingRef","refs","context","useFloating","open","handleClose","dismiss","useDismiss","role","useRole","getFloatingProps","useInteractions","useEffect","clearSensitiveData","useCallback","timer","prev","handleReveal","exporting","error","showError","phrase","getPasskeyErrorMessage","handleCopy","handleRetry","FloatingOverlay","FloatingFocusManager","Fragment","DialogHeader","FalconImportNote","Spinner","CloseButton","word","i","compact","title","onClick","className","formatTime","seconds","mins","secs","PasskeyRecoveryMenuButton","POLL_INTERVAL_MS","PasskeySessionControl","isUnlocked","setIsUnlocked","pending","setPending","setError","UnlockedIcon","LockedIcon","unlocking","err","passkeyPlugin","options","recoveryPhrase","session","disclosure","enabled","menuItems","dialogs"],"mappings":"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"}
package/dist/style.css CHANGED
@@ -18,7 +18,9 @@
18
18
  --text-xl--line-height: calc(1.75 / 1.25);
19
19
  --font-weight-normal: 400;
20
20
  --font-weight-medium: 500;
21
+ --font-weight-semibold: 600;
21
22
  --font-weight-bold: 700;
23
+ --tracking-wide: 0.025em;
22
24
  --radius-md: 0.375rem;
23
25
  --radius-lg: 0.5rem;
24
26
  --radius-xl: 0.75rem;
@@ -150,6 +152,17 @@
150
152
  [data-wallet-ui].visible, [data-wallet-ui] .visible {
151
153
  visibility: visible;
152
154
  }
155
+ [data-wallet-ui].sr-only, [data-wallet-ui] .sr-only {
156
+ position: absolute;
157
+ width: 1px;
158
+ height: 1px;
159
+ padding: 0;
160
+ margin: -1px;
161
+ overflow: hidden;
162
+ clip-path: inset(50%);
163
+ white-space: nowrap;
164
+ border-width: 0;
165
+ }
153
166
  [data-wallet-ui].absolute, [data-wallet-ui] .absolute {
154
167
  position: absolute;
155
168
  }
@@ -177,12 +190,18 @@
177
190
  [data-wallet-ui].row-start-1, [data-wallet-ui] .row-start-1 {
178
191
  grid-row-start: 1;
179
192
  }
193
+ [data-wallet-ui].mx-1\.5, [data-wallet-ui] .mx-1\.5 {
194
+ margin-inline: calc(var(--spacing) * 1.5);
195
+ }
180
196
  [data-wallet-ui].mt-0\.5, [data-wallet-ui] .mt-0\.5 {
181
197
  margin-top: calc(var(--spacing) * 0.5);
182
198
  }
183
199
  [data-wallet-ui].mt-1, [data-wallet-ui] .mt-1 {
184
200
  margin-top: calc(var(--spacing) * 1);
185
201
  }
202
+ [data-wallet-ui].mt-1\.5, [data-wallet-ui] .mt-1\.5 {
203
+ margin-top: calc(var(--spacing) * 1.5);
204
+ }
186
205
  [data-wallet-ui].mt-2, [data-wallet-ui] .mt-2 {
187
206
  margin-top: calc(var(--spacing) * 2);
188
207
  }
@@ -231,9 +250,15 @@
231
250
  [data-wallet-ui].inline-block, [data-wallet-ui] .inline-block {
232
251
  display: inline-block;
233
252
  }
253
+ [data-wallet-ui].inline-flex, [data-wallet-ui] .inline-flex {
254
+ display: inline-flex;
255
+ }
234
256
  [data-wallet-ui].h-3, [data-wallet-ui] .h-3 {
235
257
  height: calc(var(--spacing) * 3);
236
258
  }
259
+ [data-wallet-ui].h-3\.5, [data-wallet-ui] .h-3\.5 {
260
+ height: calc(var(--spacing) * 3.5);
261
+ }
237
262
  [data-wallet-ui].h-4, [data-wallet-ui] .h-4 {
238
263
  height: calc(var(--spacing) * 4);
239
264
  }
@@ -252,15 +277,27 @@
252
277
  [data-wallet-ui].h-12, [data-wallet-ui] .h-12 {
253
278
  height: calc(var(--spacing) * 12);
254
279
  }
280
+ [data-wallet-ui].h-\[18px\], [data-wallet-ui] .h-\[18px\] {
281
+ height: 18px;
282
+ }
283
+ [data-wallet-ui].h-px, [data-wallet-ui] .h-px {
284
+ height: 1px;
285
+ }
255
286
  [data-wallet-ui].max-h-60, [data-wallet-ui] .max-h-60 {
256
287
  max-height: calc(var(--spacing) * 60);
257
288
  }
289
+ [data-wallet-ui].max-h-\[calc\(100dvh-2rem\)\], [data-wallet-ui] .max-h-\[calc\(100dvh-2rem\)\] {
290
+ max-height: calc(100dvh - 2rem);
291
+ }
258
292
  [data-wallet-ui].max-h-full, [data-wallet-ui] .max-h-full {
259
293
  max-height: 100%;
260
294
  }
261
295
  [data-wallet-ui].w-3, [data-wallet-ui] .w-3 {
262
296
  width: calc(var(--spacing) * 3);
263
297
  }
298
+ [data-wallet-ui].w-3\.5, [data-wallet-ui] .w-3\.5 {
299
+ width: calc(var(--spacing) * 3.5);
300
+ }
264
301
  [data-wallet-ui].w-4, [data-wallet-ui] .w-4 {
265
302
  width: calc(var(--spacing) * 4);
266
303
  }
@@ -282,6 +319,9 @@
282
319
  [data-wallet-ui].w-80, [data-wallet-ui] .w-80 {
283
320
  width: calc(var(--spacing) * 80);
284
321
  }
322
+ [data-wallet-ui].w-\[18px\], [data-wallet-ui] .w-\[18px\] {
323
+ width: 18px;
324
+ }
285
325
  [data-wallet-ui].w-full, [data-wallet-ui] .w-full {
286
326
  width: 100%;
287
327
  }
@@ -315,6 +355,9 @@
315
355
  [data-wallet-ui].cursor-pointer, [data-wallet-ui] .cursor-pointer {
316
356
  cursor: pointer;
317
357
  }
358
+ [data-wallet-ui].list-disc, [data-wallet-ui] .list-disc {
359
+ list-style-type: disc;
360
+ }
318
361
  [data-wallet-ui].grid-cols-1, [data-wallet-ui] .grid-cols-1 {
319
362
  grid-template-columns: repeat(1, minmax(0, 1fr));
320
363
  }
@@ -327,6 +370,9 @@
327
370
  [data-wallet-ui].place-items-center, [data-wallet-ui] .place-items-center {
328
371
  place-items: center;
329
372
  }
373
+ [data-wallet-ui].items-baseline, [data-wallet-ui] .items-baseline {
374
+ align-items: baseline;
375
+ }
330
376
  [data-wallet-ui].items-center, [data-wallet-ui] .items-center {
331
377
  align-items: center;
332
378
  }
@@ -348,9 +394,19 @@
348
394
  [data-wallet-ui].gap-2, [data-wallet-ui] .gap-2 {
349
395
  gap: calc(var(--spacing) * 2);
350
396
  }
397
+ [data-wallet-ui].gap-2\.5, [data-wallet-ui] .gap-2\.5 {
398
+ gap: calc(var(--spacing) * 2.5);
399
+ }
351
400
  [data-wallet-ui].gap-3, [data-wallet-ui] .gap-3 {
352
401
  gap: calc(var(--spacing) * 3);
353
402
  }
403
+ [data-wallet-ui].space-y-1, [data-wallet-ui] .space-y-1 {
404
+ :where(& > :not(:last-child)) {
405
+ --tw-space-y-reverse: 0;
406
+ margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));
407
+ margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)));
408
+ }
409
+ }
354
410
  [data-wallet-ui].space-y-1\.5, [data-wallet-ui] .space-y-1\.5 {
355
411
  :where(& > :not(:last-child)) {
356
412
  --tw-space-y-reverse: 0;
@@ -358,9 +414,19 @@
358
414
  margin-block-end: calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)));
359
415
  }
360
416
  }
417
+ [data-wallet-ui].space-y-3, [data-wallet-ui] .space-y-3 {
418
+ :where(& > :not(:last-child)) {
419
+ --tw-space-y-reverse: 0;
420
+ margin-block-start: calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));
421
+ margin-block-end: calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)));
422
+ }
423
+ }
361
424
  [data-wallet-ui].self-center, [data-wallet-ui] .self-center {
362
425
  align-self: center;
363
426
  }
427
+ [data-wallet-ui].self-end, [data-wallet-ui] .self-end {
428
+ align-self: flex-end;
429
+ }
364
430
  [data-wallet-ui].justify-self-end, [data-wallet-ui] .justify-self-end {
365
431
  justify-self: flex-end;
366
432
  }
@@ -375,12 +441,21 @@
375
441
  [data-wallet-ui].overflow-hidden, [data-wallet-ui] .overflow-hidden {
376
442
  overflow: hidden;
377
443
  }
444
+ [data-wallet-ui].overflow-y-auto, [data-wallet-ui] .overflow-y-auto {
445
+ overflow-y: auto;
446
+ }
378
447
  [data-wallet-ui].rounded, [data-wallet-ui] .rounded {
379
448
  border-radius: 0.25rem;
380
449
  }
381
450
  [data-wallet-ui].rounded-3xl, [data-wallet-ui] .rounded-3xl {
382
451
  border-radius: var(--radius-3xl);
383
452
  }
453
+ [data-wallet-ui].rounded-\[10px\], [data-wallet-ui] .rounded-\[10px\] {
454
+ border-radius: 10px;
455
+ }
456
+ [data-wallet-ui].rounded-\[14px\], [data-wallet-ui] .rounded-\[14px\] {
457
+ border-radius: 14px;
458
+ }
384
459
  [data-wallet-ui].rounded-full, [data-wallet-ui] .rounded-full {
385
460
  border-radius: calc(infinity * 1px);
386
461
  }
@@ -397,13 +472,24 @@
397
472
  border-style: var(--tw-border-style);
398
473
  border-width: 1px;
399
474
  }
475
+ [data-wallet-ui].border-\[1\.5px\], [data-wallet-ui] .border-\[1\.5px\] {
476
+ border-style: var(--tw-border-style);
477
+ border-width: 1.5px;
478
+ }
400
479
  [data-wallet-ui].border-t, [data-wallet-ui] .border-t {
401
480
  border-top-style: var(--tw-border-style);
402
481
  border-top-width: 1px;
403
482
  }
483
+ [data-wallet-ui].border-dashed, [data-wallet-ui] .border-dashed {
484
+ --tw-border-style: dashed;
485
+ border-style: dashed;
486
+ }
404
487
  [data-wallet-ui].border-\[var\(--wui-color-border\)\], [data-wallet-ui] .border-\[var\(--wui-color-border\)\] {
405
488
  border-color: var(--wui-color-border);
406
489
  }
490
+ [data-wallet-ui].border-\[var\(--wui-color-text-tertiary\)\], [data-wallet-ui] .border-\[var\(--wui-color-text-tertiary\)\] {
491
+ border-color: var(--wui-color-text-tertiary);
492
+ }
407
493
  [data-wallet-ui].bg-\[var\(--wui-color-bg\)\], [data-wallet-ui] .bg-\[var\(--wui-color-bg\)\] {
408
494
  background-color: var(--wui-color-bg);
409
495
  }
@@ -413,6 +499,9 @@
413
499
  [data-wallet-ui].bg-\[var\(--wui-color-bg-tertiary\)\], [data-wallet-ui] .bg-\[var\(--wui-color-bg-tertiary\)\] {
414
500
  background-color: var(--wui-color-bg-tertiary);
415
501
  }
502
+ [data-wallet-ui].bg-\[var\(--wui-color-border\)\], [data-wallet-ui] .bg-\[var\(--wui-color-border\)\] {
503
+ background-color: var(--wui-color-border);
504
+ }
416
505
  [data-wallet-ui].bg-\[var\(--wui-color-danger-bg\)\], [data-wallet-ui] .bg-\[var\(--wui-color-danger-bg\)\] {
417
506
  background-color: var(--wui-color-danger-bg);
418
507
  }
@@ -446,6 +535,9 @@
446
535
  [data-wallet-ui].px-2, [data-wallet-ui] .px-2 {
447
536
  padding-inline: calc(var(--spacing) * 2);
448
537
  }
538
+ [data-wallet-ui].px-2\.5, [data-wallet-ui] .px-2\.5 {
539
+ padding-inline: calc(var(--spacing) * 2.5);
540
+ }
449
541
  [data-wallet-ui].px-3, [data-wallet-ui] .px-3 {
450
542
  padding-inline: calc(var(--spacing) * 3);
451
543
  }
@@ -458,6 +550,12 @@
458
550
  [data-wallet-ui].px-6, [data-wallet-ui] .px-6 {
459
551
  padding-inline: calc(var(--spacing) * 6);
460
552
  }
553
+ [data-wallet-ui].px-\[7px\], [data-wallet-ui] .px-\[7px\] {
554
+ padding-inline: 7px;
555
+ }
556
+ [data-wallet-ui].px-\[22px\], [data-wallet-ui] .px-\[22px\] {
557
+ padding-inline: 22px;
558
+ }
461
559
  [data-wallet-ui].py-0\.5, [data-wallet-ui] .py-0\.5 {
462
560
  padding-block: calc(var(--spacing) * 0.5);
463
561
  }
@@ -482,6 +580,12 @@
482
580
  [data-wallet-ui].py-12, [data-wallet-ui] .py-12 {
483
581
  padding-block: calc(var(--spacing) * 12);
484
582
  }
583
+ [data-wallet-ui].py-px, [data-wallet-ui] .py-px {
584
+ padding-block: 1px;
585
+ }
586
+ [data-wallet-ui].pt-1, [data-wallet-ui] .pt-1 {
587
+ padding-top: calc(var(--spacing) * 1);
588
+ }
485
589
  [data-wallet-ui].pt-5, [data-wallet-ui] .pt-5 {
486
590
  padding-top: calc(var(--spacing) * 5);
487
591
  }
@@ -503,6 +607,9 @@
503
607
  [data-wallet-ui].pb-2, [data-wallet-ui] .pb-2 {
504
608
  padding-bottom: calc(var(--spacing) * 2);
505
609
  }
610
+ [data-wallet-ui].pb-2\.5, [data-wallet-ui] .pb-2\.5 {
611
+ padding-bottom: calc(var(--spacing) * 2.5);
612
+ }
506
613
  [data-wallet-ui].pb-3, [data-wallet-ui] .pb-3 {
507
614
  padding-bottom: calc(var(--spacing) * 3);
508
615
  }
@@ -524,12 +631,18 @@
524
631
  [data-wallet-ui].pl-3\.5, [data-wallet-ui] .pl-3\.5 {
525
632
  padding-left: calc(var(--spacing) * 3.5);
526
633
  }
634
+ [data-wallet-ui].pl-5, [data-wallet-ui] .pl-5 {
635
+ padding-left: calc(var(--spacing) * 5);
636
+ }
527
637
  [data-wallet-ui].text-center, [data-wallet-ui] .text-center {
528
638
  text-align: center;
529
639
  }
530
640
  [data-wallet-ui].text-left, [data-wallet-ui] .text-left {
531
641
  text-align: left;
532
642
  }
643
+ [data-wallet-ui].text-right, [data-wallet-ui] .text-right {
644
+ text-align: right;
645
+ }
533
646
  [data-wallet-ui].align-baseline, [data-wallet-ui] .align-baseline {
534
647
  vertical-align: baseline;
535
648
  }
@@ -556,6 +669,10 @@
556
669
  [data-wallet-ui].text-\[10px\], [data-wallet-ui] .text-\[10px\] {
557
670
  font-size: 10px;
558
671
  }
672
+ [data-wallet-ui].leading-\[1\.55\], [data-wallet-ui] .leading-\[1\.55\] {
673
+ --tw-leading: 1.55;
674
+ line-height: 1.55;
675
+ }
559
676
  [data-wallet-ui].leading-none, [data-wallet-ui] .leading-none {
560
677
  --tw-leading: 1;
561
678
  line-height: 1;
@@ -572,6 +689,14 @@
572
689
  --tw-font-weight: var(--font-weight-normal);
573
690
  font-weight: var(--font-weight-normal);
574
691
  }
692
+ [data-wallet-ui].font-semibold, [data-wallet-ui] .font-semibold {
693
+ --tw-font-weight: var(--font-weight-semibold);
694
+ font-weight: var(--font-weight-semibold);
695
+ }
696
+ [data-wallet-ui].tracking-wide, [data-wallet-ui] .tracking-wide {
697
+ --tw-tracking: var(--tracking-wide);
698
+ letter-spacing: var(--tracking-wide);
699
+ }
575
700
  [data-wallet-ui].text-\[var\(--wui-color-danger-text\)\], [data-wallet-ui] .text-\[var\(--wui-color-danger-text\)\] {
576
701
  color: var(--wui-color-danger-text);
577
702
  }
@@ -599,6 +724,9 @@
599
724
  [data-wallet-ui].text-green-500, [data-wallet-ui] .text-green-500 {
600
725
  color: var(--color-green-500);
601
726
  }
727
+ [data-wallet-ui].uppercase, [data-wallet-ui] .uppercase {
728
+ text-transform: uppercase;
729
+ }
602
730
  [data-wallet-ui].tabular-nums, [data-wallet-ui] .tabular-nums {
603
731
  --tw-numeric-spacing: tabular-nums;
604
732
  font-variant-numeric: var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,);
@@ -745,11 +873,30 @@
745
873
  outline-style: none;
746
874
  }
747
875
  }
876
+ [data-wallet-ui].disabled\:cursor-not-allowed, [data-wallet-ui] .disabled\:cursor-not-allowed {
877
+ &:disabled {
878
+ cursor: not-allowed;
879
+ }
880
+ }
881
+ [data-wallet-ui].disabled\:cursor-wait, [data-wallet-ui] .disabled\:cursor-wait {
882
+ &:disabled {
883
+ cursor: wait;
884
+ }
885
+ }
748
886
  [data-wallet-ui].disabled\:opacity-50, [data-wallet-ui] .disabled\:opacity-50 {
749
887
  &:disabled {
750
888
  opacity: 50%;
751
889
  }
752
890
  }
891
+ [data-wallet-ui].disabled\:hover\:bg-transparent, [data-wallet-ui] .disabled\:hover\:bg-transparent {
892
+ &:disabled {
893
+ &:hover {
894
+ @media (hover: hover) {
895
+ background-color: transparent;
896
+ }
897
+ }
898
+ }
899
+ }
753
900
  [data-wallet-ui].data-\[focus\]\:bg-\[var\(--wui-color-bg-hover\)\], [data-wallet-ui] .data-\[focus\]\:bg-\[var\(--wui-color-bg-hover\)\] {
754
901
  &[data-focus] {
755
902
  background-color: var(--wui-color-bg-hover);
@@ -899,6 +1046,10 @@
899
1046
  syntax: "*";
900
1047
  inherits: false;
901
1048
  }
1049
+ @property --tw-tracking {
1050
+ syntax: "*";
1051
+ inherits: false;
1052
+ }
902
1053
  @property --tw-ordinal {
903
1054
  syntax: "*";
904
1055
  inherits: false;
@@ -1077,6 +1228,7 @@
1077
1228
  --tw-border-style: solid;
1078
1229
  --tw-leading: initial;
1079
1230
  --tw-font-weight: initial;
1231
+ --tw-tracking: initial;
1080
1232
  --tw-ordinal: initial;
1081
1233
  --tw-slashed-zero: initial;
1082
1234
  --tw-numeric-figure: initial;
@@ -1,10 +1,16 @@
1
1
  import { ReactElement, RefObject } from 'react';
2
+ import { PasskeyConnectLayout } from '../utils/passkey';
2
3
  type RefableElement = ReactElement & {
3
4
  ref?: RefObject<HTMLElement> | ((instance: HTMLElement | null) => void);
4
5
  };
5
6
  export interface ConnectWalletMenuProps {
6
7
  children?: RefableElement;
8
+ /**
9
+ * How to present a passkey wallet: 'list' or 'featured'. Overrides the
10
+ * `WalletUIProvider` setting; the default is 'list'.
11
+ */
12
+ passkeyLayout?: PasskeyConnectLayout;
7
13
  }
8
- export declare function ConnectWalletMenu({ children }: ConnectWalletMenuProps): import("react/jsx-runtime").JSX.Element;
14
+ export declare function ConnectWalletMenu({ children, passkeyLayout: menuPasskeyLayout, }: ConnectWalletMenuProps): import("react/jsx-runtime").JSX.Element;
9
15
  export {};
10
16
  //# sourceMappingURL=ConnectWalletMenu.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectWalletMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ConnectWalletMenu.tsx"],"names":[],"mappings":"AAaA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AAUhE,KAAK,cAAc,GAAG,YAAY,GAAG;IACnC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,CAAA;CACxE,CAAA;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAED,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,sBAAsB,2CAiLrE"}
1
+ {"version":3,"file":"ConnectWalletMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ConnectWalletMenu.tsx"],"names":[],"mappings":"AAaA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AAGhE,OAAO,EAML,KAAK,oBAAoB,EAE1B,MAAM,kBAAkB,CAAA;AAUzB,KAAK,cAAc,GAAG,YAAY,GAAG;IACnC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,CAAA;CACxE,CAAA;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACrC;AAED,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,aAAa,EAAE,iBAAiB,GACjC,EAAE,sBAAsB,2CAmRxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"ConnectedWalletMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ConnectedWalletMenu.tsx"],"names":[],"mappings":"AAuBA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AAehE,KAAK,cAAc,GAAG,YAAY,GAAG;IACnC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,CAAA;CACxE,CAAA;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AA6eD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CAQlE"}
1
+ {"version":3,"file":"ConnectedWalletMenu.d.ts","sourceRoot":"","sources":["../../../src/components/ConnectedWalletMenu.tsx"],"names":[],"mappings":"AAuBA,OAAc,EAAE,YAAY,EAAE,SAAS,EAAY,MAAM,OAAO,CAAA;AAgBhE,KAAK,cAAc,GAAG,YAAY,GAAG;IACnC,GAAG,CAAC,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC,CAAA;CACxE,CAAA;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,cAAc,CAAA;CAC1B;AAwfD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,2CAQlE"}
@@ -0,0 +1,29 @@
1
+ import { PasskeyConnectArgs, PasskeyConnectLayout, PasskeyConnectStatus } from '../utils/passkey';
2
+ import { Wallet } from '@txnlab/use-wallet-react';
3
+ export interface PasskeyConnectProps {
4
+ /** The passkey wallet (`id: 'passkey'`) */
5
+ wallet: Wallet;
6
+ /**
7
+ * Connects the wallet. "Create a passkey" passes `{ create: true }`; forward
8
+ * `args` to `wallet.connect(args)` before any `await`.
9
+ */
10
+ handleWalletClick: (wallet: Wallet, args?: PasskeyConnectArgs) => Promise<void>;
11
+ /** Pending state or error for the passkey wallet's connect request */
12
+ status?: PasskeyConnectStatus | null;
13
+ /**
14
+ * `'list'` (default): "Sign in with passkey" and "Create a passkey" rows
15
+ * under a "Passkey" group label. `'featured'`: a "Continue with passkey"
16
+ * button and a "Create a passkey" link.
17
+ */
18
+ layout?: PasskeyConnectLayout;
19
+ /** Show the "Passkey" group label in the `'list'` layout. Default: true */
20
+ showLabel?: boolean;
21
+ }
22
+ /**
23
+ * The passkey section of the connect dialog: one action signs in, and
24
+ * "Create a passkey" makes a new one. A missing passkey and a cancelled
25
+ * prompt raise the same browser error, so creating stays a separate,
26
+ * explicit choice.
27
+ */
28
+ export declare function PasskeyConnect({ wallet, handleWalletClick, status, layout, showLabel, }: PasskeyConnectProps): import("react/jsx-runtime").JSX.Element;
29
+ //# sourceMappingURL=PasskeyConnect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PasskeyConnect.d.ts","sourceRoot":"","sources":["../../../src/components/PasskeyConnect.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,iBAAiB,EAAE,CACjB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,kBAAkB,KACtB,OAAO,CAAC,IAAI,CAAC,CAAA;IAClB,sEAAsE;IACtE,MAAM,CAAC,EAAE,oBAAoB,GAAG,IAAI,CAAA;IACpC;;;;OAIG;IACH,MAAM,CAAC,EAAE,oBAAoB,CAAA;IAC7B,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAA;CACpB;AAeD;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,iBAAiB,EACjB,MAAM,EACN,MAAe,EACf,SAAgB,GACjB,EAAE,mBAAmB,2CA2HrB"}
@@ -1,5 +1,6 @@
1
1
  import { default as React } from 'react';
2
2
  import { ButtonSize } from './ConnectWalletButton';
3
+ import { PasskeyConnectLayout } from '../utils/passkey';
3
4
  export interface WalletButtonProps {
4
5
  /** Size variant for the button */
5
6
  size?: ButtonSize;
@@ -7,6 +8,11 @@ export interface WalletButtonProps {
7
8
  className?: string;
8
9
  /** Inline styles to apply to the button (can include CSS variable overrides) */
9
10
  style?: React.CSSProperties;
11
+ /**
12
+ * How the connect dialog presents a passkey wallet: 'list' or 'featured'.
13
+ * Overrides the `WalletUIProvider` setting; the default is 'list'.
14
+ */
15
+ passkeyLayout?: PasskeyConnectLayout;
10
16
  }
11
- export declare function WalletButton({ size, className, style }: WalletButtonProps): import("react/jsx-runtime").JSX.Element;
17
+ export declare function WalletButton({ size, className, style, passkeyLayout, }: WalletButtonProps): import("react/jsx-runtime").JSX.Element;
12
18
  //# sourceMappingURL=WalletButton.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"WalletButton.d.ts","sourceRoot":"","sources":["../../../src/components/WalletButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,uBAAuB,CAAA;AAG5E,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;CAC5B;AAED,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,iBAAiB,2CAkBzE"}
1
+ {"version":3,"file":"WalletButton.d.ts","sourceRoot":"","sources":["../../../src/components/WalletButton.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,uBAAuB,CAAA;AAG5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,WAAW,iBAAiB;IAChC,kCAAkC;IAClC,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,gFAAgF;IAChF,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAA;IAC3B;;;OAGG;IACH,aAAa,CAAC,EAAE,oBAAoB,CAAA;CACrC;AAED,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,SAAS,EACT,KAAK,EACL,aAAa,GACd,EAAE,iBAAiB,2CAsBnB"}
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ /** A group heading in the connect dialog's list layout ("Passkey", "Wallets") */
3
+ export declare function WalletGroupLabel({ children }: {
4
+ children: ReactNode;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=WalletGroupLabel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletGroupLabel.d.ts","sourceRoot":"","sources":["../../../src/components/WalletGroupLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAA;AAEtC,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,SAAS,CAAA;CAAE,2CAMrE"}
@@ -0,0 +1,6 @@
1
+ import { Wallet } from '@txnlab/use-wallet-react';
2
+ /** A wallet's 32 px icon tile, as shown in the connect dialog */
3
+ export declare function WalletIcon({ wallet }: {
4
+ wallet: Wallet;
5
+ }): import("react/jsx-runtime").JSX.Element;
6
+ //# sourceMappingURL=WalletIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletIcon.d.ts","sourceRoot":"","sources":["../../../src/components/WalletIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD,iEAAiE;AACjE,wBAAgB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,2CAUxD"}
@@ -1 +1 @@
1
- {"version":3,"file":"WalletList.d.ts","sourceRoot":"","sources":["../../../src/components/WalletList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,eAAe,2CA6BzE"}
1
+ {"version":3,"file":"WalletList.d.ts","sourceRoot":"","sources":["../../../src/components/WalletList.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAEtD,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,EAAE,CAAA;IACjB,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD;AAED,wBAAgB,UAAU,CAAC,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,eAAe,2CAuBzE"}
@@ -5,6 +5,9 @@ export { ConnectedWalletButton } from './components/ConnectedWalletButton';
5
5
  export { ConnectedWalletMenu } from './components/ConnectedWalletMenu';
6
6
  export { WalletButton } from './components/WalletButton';
7
7
  export { WalletList } from './components/WalletList';
8
+ export type { WalletListProps } from './components/WalletList';
9
+ export { PasskeyConnect } from './components/PasskeyConnect';
10
+ export type { PasskeyConnectProps } from './components/PasskeyConnect';
8
11
  export { NfdAvatar } from './components/NfdAvatar';
9
12
  export { useNfd } from './hooks/useNfd';
10
13
  export type { NfdRecord, NfdLookupResponse } from './hooks/useNfd';
@@ -12,6 +15,8 @@ export { useAccountInfo } from './hooks/useAccountInfo';
12
15
  export { useResolvedTheme } from './hooks/useResolvedTheme';
13
16
  export type { Theme, ResolvedTheme } from './hooks/useResolvedTheme';
14
17
  export { WalletUIProvider, useWalletUI } from './providers/WalletUIProvider';
18
+ export { getPasskeyErrorMessage } from './utils/passkey';
19
+ export type { PasskeyConnectArgs, PasskeyConnectLayout, PasskeyConnectStatus, } from './utils/passkey';
15
20
  export { usePlugins } from './plugins/PluginContext';
16
21
  export type { MenuRenderContext, MenuSlot, PluginDialog, PluginLifecycleHooks, PluginMenuItem, PluginPanel, PluginRenderContext, WalletUIPlugin, } from './plugins/types';
17
22
  //# sourceMappingURL=index.d.ts.map
@@ -5,6 +5,9 @@ export { ConnectedWalletButton } from './components/ConnectedWalletButton';
5
5
  export { ConnectedWalletMenu } from './components/ConnectedWalletMenu';
6
6
  export { WalletButton } from './components/WalletButton';
7
7
  export { WalletList } from './components/WalletList';
8
+ export type { WalletListProps } from './components/WalletList';
9
+ export { PasskeyConnect } from './components/PasskeyConnect';
10
+ export type { PasskeyConnectProps } from './components/PasskeyConnect';
8
11
  export { NfdAvatar } from './components/NfdAvatar';
9
12
  export { useNfd } from './hooks/useNfd';
10
13
  export type { NfdRecord, NfdLookupResponse } from './hooks/useNfd';
@@ -12,6 +15,8 @@ export { useAccountInfo } from './hooks/useAccountInfo';
12
15
  export { useResolvedTheme } from './hooks/useResolvedTheme';
13
16
  export type { Theme, ResolvedTheme } from './hooks/useResolvedTheme';
14
17
  export { WalletUIProvider, useWalletUI } from './providers/WalletUIProvider';
18
+ export { getPasskeyErrorMessage } from './utils/passkey';
19
+ export type { PasskeyConnectArgs, PasskeyConnectLayout, PasskeyConnectStatus, } from './utils/passkey';
15
20
  export { usePlugins } from './plugins/PluginContext';
16
21
  export type { MenuRenderContext, MenuSlot, PluginDialog, PluginLifecycleHooks, PluginMenuItem, PluginPanel, PluginRenderContext, WalletUIPlugin, } from './plugins/types';
17
22
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGpE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAG5E,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,YAAY,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAA;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAA;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAA;AAC3D,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AAGpE,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAA;AAG5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AACxD,YAAY,EACV,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,YAAY,EACZ,oBAAoB,EACpB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,cAAc,GACf,MAAM,iBAAiB,CAAA"}