@tatchi-xyz/sdk 0.32.2 → 0.32.3

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 (57) hide show
  1. package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-CvW8VMJJ.css → PasskeyAuthMenu-mMygL3xX.css} +136 -46
  2. package/dist/cjs/react/components/PasskeyAuthMenu/PasskeyAuthMenu-mMygL3xX.css.map +1 -0
  3. package/dist/cjs/react/components/PasskeyAuthMenu/client.js +2 -3
  4. package/dist/cjs/react/components/PasskeyAuthMenu/client.js.map +1 -1
  5. package/dist/cjs/react/components/PasskeyAuthMenu/controller/mode.js +7 -2
  6. package/dist/cjs/react/components/PasskeyAuthMenu/controller/mode.js.map +1 -1
  7. package/dist/cjs/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js +4 -1
  8. package/dist/cjs/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js.map +1 -1
  9. package/dist/cjs/react/components/PasskeyAuthMenu/hydrationContext.js +20 -0
  10. package/dist/cjs/react/components/PasskeyAuthMenu/hydrationContext.js.map +1 -0
  11. package/dist/cjs/react/components/PasskeyAuthMenu/passkeyAuthMenuCompat.js +1 -1
  12. package/dist/cjs/react/components/PasskeyAuthMenu/shell.js +48 -27
  13. package/dist/cjs/react/components/PasskeyAuthMenu/shell.js.map +1 -1
  14. package/dist/cjs/react/components/PasskeyAuthMenu/skeleton.js +155 -101
  15. package/dist/cjs/react/components/PasskeyAuthMenu/skeleton.js.map +1 -1
  16. package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +5 -1
  17. package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
  18. package/dist/cjs/react/index.js +2 -2
  19. package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-C-muDjkN.css → PasskeyAuthMenu-BihXvuII.css} +136 -46
  20. package/dist/esm/react/components/PasskeyAuthMenu/PasskeyAuthMenu-BihXvuII.css.map +1 -0
  21. package/dist/esm/react/components/PasskeyAuthMenu/client.js +2 -3
  22. package/dist/esm/react/components/PasskeyAuthMenu/client.js.map +1 -1
  23. package/dist/esm/react/components/PasskeyAuthMenu/controller/mode.js +7 -3
  24. package/dist/esm/react/components/PasskeyAuthMenu/controller/mode.js.map +1 -1
  25. package/dist/esm/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js +4 -1
  26. package/dist/esm/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js.map +1 -1
  27. package/dist/esm/react/components/PasskeyAuthMenu/hydrationContext.js +17 -0
  28. package/dist/esm/react/components/PasskeyAuthMenu/hydrationContext.js.map +1 -0
  29. package/dist/esm/react/components/PasskeyAuthMenu/passkeyAuthMenuCompat.js +1 -1
  30. package/dist/esm/react/components/PasskeyAuthMenu/shell.js +48 -27
  31. package/dist/esm/react/components/PasskeyAuthMenu/shell.js.map +1 -1
  32. package/dist/esm/react/components/PasskeyAuthMenu/skeleton.js +155 -101
  33. package/dist/esm/react/components/PasskeyAuthMenu/skeleton.js.map +1 -1
  34. package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +5 -1
  35. package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
  36. package/dist/esm/react/index.js +2 -2
  37. package/dist/esm/react/styles/styles.css +135 -45
  38. package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
  39. package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts +0 -1
  40. package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts.map +1 -1
  41. package/dist/types/src/react/components/PasskeyAuthMenu/controller/mode.d.ts +6 -1
  42. package/dist/types/src/react/components/PasskeyAuthMenu/controller/mode.d.ts.map +1 -1
  43. package/dist/types/src/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.d.ts.map +1 -1
  44. package/dist/types/src/react/components/PasskeyAuthMenu/hydrationContext.d.ts +10 -0
  45. package/dist/types/src/react/components/PasskeyAuthMenu/hydrationContext.d.ts.map +1 -0
  46. package/dist/types/src/react/components/PasskeyAuthMenu/shell.d.ts +2 -1
  47. package/dist/types/src/react/components/PasskeyAuthMenu/shell.d.ts.map +1 -1
  48. package/dist/types/src/react/components/PasskeyAuthMenu/skeleton.d.ts +5 -1
  49. package/dist/types/src/react/components/PasskeyAuthMenu/skeleton.d.ts.map +1 -1
  50. package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts.map +1 -1
  51. package/dist/workers/offline-export-sw.js +156 -1
  52. package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
  53. package/dist/workers/web3authn-signer.worker.js +1360 -2
  54. package/dist/workers/web3authn-vrf.worker.js +2857 -2
  55. package/package.json +1 -1
  56. package/dist/cjs/react/components/PasskeyAuthMenu/PasskeyAuthMenu-CvW8VMJJ.css.map +0 -1
  57. package/dist/esm/react/components/PasskeyAuthMenu/PasskeyAuthMenu-C-muDjkN.css.map +0 -1
@@ -1,116 +1,170 @@
1
1
  import { useTheme } from "../theme/ThemeProvider.js";
2
- import "./PasskeyAuthMenu.js";
2
+ import { ArrowLeftIcon } from "./ui/icons/ArrowLeft.js";
3
+ import { MailIcon } from "./ui/icons/Mail.js";
4
+ import QRCodeIcon_default from "../QRCodeIcon.js";
3
5
  import { PasskeyAuthMenuThemeScope } from "./themeScope.js";
6
+ import { AuthMenuMode } from "./authMenuTypes.js";
7
+ import { getModeTitle } from "./controller/mode.js";
4
8
  import React from "react";
5
9
  import { jsx, jsxs } from "react/jsx-runtime";
6
10
 
7
11
  //#region src/react/components/PasskeyAuthMenu/skeleton.tsx
8
- const PasskeyAuthMenuSkeletonInner = React.forwardRef(({ className, style }, ref) => {
9
- return /* @__PURE__ */ jsxs("div", {
12
+ const PasskeyAuthMenuSkeletonInner = React.forwardRef(({ className, style, defaultMode, headings }, ref) => {
13
+ const mode = typeof defaultMode === "number" ? defaultMode : AuthMenuMode.Register;
14
+ const title = getModeTitle(mode, headings ?? null);
15
+ const placeholder = mode === AuthMenuMode.Register ? "Pick a username" : mode === AuthMenuMode.Sync ? "Leave blank to discover accounts" : "Enter your username";
16
+ const segHelpText = mode === AuthMenuMode.Login ? "Sign in with your passkey" : mode === AuthMenuMode.Sync ? "Sync account (iCloud/Chrome sync)" : "Create a new account";
17
+ const segActiveWidth = "calc((100% - 18px) / 3)";
18
+ const segActiveX = mode === AuthMenuMode.Login ? `calc(5px + ${segActiveWidth} + 4px)` : mode === AuthMenuMode.Sync ? `calc(5px + ${segActiveWidth} + 4px + ${segActiveWidth} + 4px)` : "5px";
19
+ return /* @__PURE__ */ jsx("div", {
10
20
  ref,
11
21
  className: `w3a-signup-menu-root w3a-skeleton${className ? ` ${className}` : ""}`,
12
22
  style,
13
- children: [
14
- /* @__PURE__ */ jsxs("div", {
15
- className: "w3a-header",
16
- children: [/* @__PURE__ */ jsx("div", {
17
- className: "w3a-skeleton-block w3a-title-skeleton",
18
- style: {
19
- width: "60%",
20
- height: "24px",
21
- marginBottom: "8px"
22
- }
23
- }), /* @__PURE__ */ jsx("div", {
24
- className: "w3a-skeleton-block w3a-subtitle-skeleton",
25
- style: {
26
- width: "80%",
27
- height: "16px"
28
- }
29
- })]
30
- }),
31
- /* @__PURE__ */ jsx("div", {
32
- className: "w3a-passkey-row",
33
- children: /* @__PURE__ */ jsx("div", {
34
- className: "w3a-input-pill w3a-skeleton-input",
35
- children: /* @__PURE__ */ jsx("div", {
36
- className: "w3a-skeleton-block",
37
- style: {
38
- width: "40%",
39
- height: "18px",
40
- marginLeft: "12px"
41
- }
42
- })
43
- })
44
- }),
45
- /* @__PURE__ */ jsx("div", {
46
- className: "w3a-segmented-root",
47
- children: /* @__PURE__ */ jsxs("div", {
48
- className: "w3a-seg-track",
49
- children: [
50
- /* @__PURE__ */ jsx("div", {
51
- className: "w3a-seg-button",
52
- children: "Register"
53
- }),
54
- /* @__PURE__ */ jsx("div", {
55
- className: "w3a-seg-button",
56
- children: "Login"
57
- }),
58
- /* @__PURE__ */ jsx("div", {
59
- className: "w3a-seg-button",
60
- children: "Sync"
61
- })
62
- ]
23
+ "data-mode": mode,
24
+ "data-waiting": "false",
25
+ "data-scan-device": "false",
26
+ "data-email-recovery": "false",
27
+ children: /* @__PURE__ */ jsxs("div", {
28
+ className: "w3a-content-switcher",
29
+ children: [/* @__PURE__ */ jsx("button", {
30
+ "aria-label": "Back",
31
+ type: "button",
32
+ className: "w3a-back-button",
33
+ disabled: true,
34
+ children: /* @__PURE__ */ jsx(ArrowLeftIcon, {
35
+ size: 18,
36
+ strokeWidth: 2.25,
37
+ style: { display: "block" }
63
38
  })
64
- }),
65
- /* @__PURE__ */ jsx("div", {
66
- className: "w3a-seg-help-row",
39
+ }), /* @__PURE__ */ jsx("div", {
40
+ className: "w3a-content-area",
67
41
  children: /* @__PURE__ */ jsx("div", {
68
- className: "w3a-skeleton-block",
69
- style: {
70
- width: "50%",
71
- height: "14px",
72
- margin: "0 auto"
73
- }
74
- })
75
- }),
76
- /* @__PURE__ */ jsxs("div", {
77
- className: "w3a-scan-device-row",
78
- children: [/* @__PURE__ */ jsx("div", {
79
- className: "w3a-section-divider",
80
- children: /* @__PURE__ */ jsx("div", {
81
- className: "w3a-section-divider-text",
82
- children: "Already have an account?"
42
+ className: "w3a-content-sizer",
43
+ children: /* @__PURE__ */ jsxs("div", {
44
+ className: "w3a-signin-menu",
45
+ children: [
46
+ /* @__PURE__ */ jsx("div", {
47
+ className: "w3a-header",
48
+ children: /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx("div", {
49
+ className: "w3a-title",
50
+ children: title.title
51
+ }), /* @__PURE__ */ jsx("div", {
52
+ className: "w3a-subhead",
53
+ children: title.subtitle
54
+ })] })
55
+ }),
56
+ /* @__PURE__ */ jsxs("div", {
57
+ className: "w3a-passkey-row",
58
+ children: [/* @__PURE__ */ jsx("div", {
59
+ className: "w3a-input-pill",
60
+ children: /* @__PURE__ */ jsx("div", {
61
+ className: "w3a-input-wrap",
62
+ children: /* @__PURE__ */ jsx("input", {
63
+ type: "text",
64
+ name: "passkey",
65
+ disabled: true,
66
+ placeholder,
67
+ className: "w3a-input",
68
+ "aria-disabled": "true",
69
+ autoCapitalize: "none",
70
+ autoCorrect: "off",
71
+ spellCheck: false,
72
+ inputMode: "text",
73
+ style: { pointerEvents: "none" }
74
+ })
75
+ })
76
+ }), /* @__PURE__ */ jsx("div", {
77
+ style: {
78
+ position: "relative",
79
+ display: "inline-block"
80
+ },
81
+ children: /* @__PURE__ */ jsx("button", {
82
+ "aria-label": "Continue",
83
+ type: "button",
84
+ className: "w3a-arrow-btn no-transition",
85
+ disabled: true
86
+ })
87
+ })]
88
+ }),
89
+ /* @__PURE__ */ jsxs("div", {
90
+ className: "w3a-seg",
91
+ children: [/* @__PURE__ */ jsx("div", {
92
+ className: "w3a-seg-active",
93
+ style: {
94
+ width: segActiveWidth,
95
+ transform: `translateX(${segActiveX})`,
96
+ opacity: .9,
97
+ background: "var(--w3a-passkey-auth-menu2-seg-active-bg)"
98
+ }
99
+ }), /* @__PURE__ */ jsxs("div", {
100
+ className: "w3a-seg-grid",
101
+ children: [
102
+ /* @__PURE__ */ jsx("button", {
103
+ type: "button",
104
+ "aria-pressed": mode === AuthMenuMode.Register,
105
+ className: `w3a-seg-btn${mode === AuthMenuMode.Register ? " is-active" : ""} register`,
106
+ disabled: true,
107
+ children: "Register"
108
+ }),
109
+ /* @__PURE__ */ jsx("button", {
110
+ type: "button",
111
+ "aria-pressed": mode === AuthMenuMode.Login,
112
+ className: `w3a-seg-btn${mode === AuthMenuMode.Login ? " is-active" : ""} login`,
113
+ disabled: true,
114
+ children: "Login"
115
+ }),
116
+ /* @__PURE__ */ jsx("button", {
117
+ type: "button",
118
+ "aria-pressed": mode === AuthMenuMode.Sync,
119
+ className: `w3a-seg-btn${mode === AuthMenuMode.Sync ? " is-active" : ""} sync`,
120
+ disabled: true,
121
+ children: "Sync"
122
+ })
123
+ ]
124
+ })]
125
+ }),
126
+ /* @__PURE__ */ jsx("div", {
127
+ className: "w3a-seg-help-row",
128
+ children: /* @__PURE__ */ jsx("div", {
129
+ className: "w3a-seg-help",
130
+ "aria-live": "polite",
131
+ children: segHelpText
132
+ })
133
+ }),
134
+ /* @__PURE__ */ jsxs("div", {
135
+ className: "w3a-scan-device-row",
136
+ children: [/* @__PURE__ */ jsx("div", {
137
+ className: "w3a-section-divider",
138
+ children: /* @__PURE__ */ jsx("span", {
139
+ className: "w3a-section-divider-text",
140
+ children: "Already have an account?"
141
+ })
142
+ }), /* @__PURE__ */ jsxs("div", {
143
+ className: "w3a-secondary-actions",
144
+ children: [/* @__PURE__ */ jsxs("button", {
145
+ className: "w3a-link-device-btn",
146
+ disabled: true,
147
+ children: [/* @__PURE__ */ jsx(QRCodeIcon_default, {
148
+ width: 18,
149
+ height: 18,
150
+ strokeWidth: 2
151
+ }), "Scan and Link Device"]
152
+ }), /* @__PURE__ */ jsxs("button", {
153
+ className: "w3a-link-device-btn",
154
+ disabled: true,
155
+ children: [/* @__PURE__ */ jsx(MailIcon, {
156
+ size: 18,
157
+ strokeWidth: 2,
158
+ style: { display: "block" }
159
+ }), "Recover Account with Email"]
160
+ })]
161
+ })]
162
+ })
163
+ ]
83
164
  })
84
- }), /* @__PURE__ */ jsxs("div", {
85
- className: "w3a-secondary-actions",
86
- children: [/* @__PURE__ */ jsxs("button", {
87
- className: "w3a-link-device-btn",
88
- disabled: true,
89
- children: [/* @__PURE__ */ jsx("div", {
90
- className: "w3a-skeleton-block",
91
- style: {
92
- width: "18px",
93
- height: "18px",
94
- marginRight: "8px",
95
- borderRadius: "4px"
96
- }
97
- }), "Scan and Link Device"]
98
- }), /* @__PURE__ */ jsxs("button", {
99
- className: "w3a-link-device-btn",
100
- disabled: true,
101
- children: [/* @__PURE__ */ jsx("div", {
102
- className: "w3a-skeleton-block",
103
- style: {
104
- width: "18px",
105
- height: "18px",
106
- marginRight: "8px",
107
- borderRadius: "9999px"
108
- }
109
- }), "Recover Account with Email"]
110
- })]
111
- })]
112
- })
113
- ]
165
+ })
166
+ })]
167
+ })
114
168
  });
115
169
  });
116
170
  PasskeyAuthMenuSkeletonInner.displayName = "PasskeyAuthMenuSkeletonInner";
@@ -1 +1 @@
1
- {"version":3,"file":"skeleton.js","names":["PasskeyAuthMenuSkeleton: React.FC<PasskeyAuthMenuSkeletonProps>"],"sources":["../../../../../src/react/components/PasskeyAuthMenu/skeleton.tsx"],"sourcesContent":["import React from 'react';\nimport './PasskeyAuthMenu.css';\nimport { PasskeyAuthMenuThemeScope } from './themeScope';\nimport { useTheme } from '../theme';\n\nexport interface PasskeyAuthMenuSkeletonProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport const PasskeyAuthMenuSkeletonInner = React.forwardRef<\n HTMLDivElement,\n PasskeyAuthMenuSkeletonProps\n>(({ className, style }, ref) => {\n return (\n <div\n ref={ref}\n className={`w3a-signup-menu-root w3a-skeleton${className ? ` ${className}` : ''}`}\n style={style}\n >\n <div className=\"w3a-header\">\n <div\n className=\"w3a-skeleton-block w3a-title-skeleton\"\n style={{ width: '60%', height: '24px', marginBottom: '8px' }}\n />\n <div\n className=\"w3a-skeleton-block w3a-subtitle-skeleton\"\n style={{ width: '80%', height: '16px' }}\n />\n </div>\n\n <div className=\"w3a-passkey-row\">\n <div className=\"w3a-input-pill w3a-skeleton-input\">\n <div\n className=\"w3a-skeleton-block\"\n style={{ width: '40%', height: '18px', marginLeft: '12px' }}\n />\n </div>\n </div>\n\n <div className=\"w3a-segmented-root\">\n <div className=\"w3a-seg-track\">\n <div className=\"w3a-seg-button\">Register</div>\n <div className=\"w3a-seg-button\">Login</div>\n <div className=\"w3a-seg-button\">Sync</div>\n </div>\n </div>\n\n <div className=\"w3a-seg-help-row\">\n <div\n className=\"w3a-skeleton-block\"\n style={{ width: '50%', height: '14px', margin: '0 auto' }}\n />\n </div>\n\n <div className=\"w3a-scan-device-row\">\n <div className=\"w3a-section-divider\">\n <div className=\"w3a-section-divider-text\">Already have an account?</div>\n </div>\n <div className=\"w3a-secondary-actions\">\n <button className=\"w3a-link-device-btn\" disabled>\n <div\n className=\"w3a-skeleton-block\"\n style={{\n width: '18px',\n height: '18px',\n marginRight: '8px',\n borderRadius: '4px',\n }}\n />\n Scan and Link Device\n </button>\n <button className=\"w3a-link-device-btn\" disabled>\n <div\n className=\"w3a-skeleton-block\"\n style={{\n width: '18px',\n height: '18px',\n marginRight: '8px',\n borderRadius: '9999px',\n }}\n />\n Recover Account with Email\n </button>\n </div>\n </div>\n </div>\n );\n});\nPasskeyAuthMenuSkeletonInner.displayName = 'PasskeyAuthMenuSkeletonInner';\n\nexport const PasskeyAuthMenuSkeleton: React.FC<PasskeyAuthMenuSkeletonProps> = (props) => {\n const { theme } = useTheme();\n return (\n <PasskeyAuthMenuThemeScope theme={theme}>\n <PasskeyAuthMenuSkeletonInner {...props} />\n </PasskeyAuthMenuThemeScope>\n );\n};\n\nexport default PasskeyAuthMenuSkeleton;\n"],"mappings":";;;;;;;AAUA,MAAa,+BAA+B,MAAM,YAG/C,EAAE,WAAW,SAAS,QAAQ;AAC/B,QACE,qBAAC;EACM;EACL,WAAW,oCAAoC,YAAY,IAAI,cAAc;EACtE;;GAEP,qBAAC;IAAI,WAAU;eACb,oBAAC;KACC,WAAU;KACV,OAAO;MAAE,OAAO;MAAO,QAAQ;MAAQ,cAAc;;QAEvD,oBAAC;KACC,WAAU;KACV,OAAO;MAAE,OAAO;MAAO,QAAQ;;;;GAInC,oBAAC;IAAI,WAAU;cACb,oBAAC;KAAI,WAAU;eACb,oBAAC;MACC,WAAU;MACV,OAAO;OAAE,OAAO;OAAO,QAAQ;OAAQ,YAAY;;;;;GAKzD,oBAAC;IAAI,WAAU;cACb,qBAAC;KAAI,WAAU;;MACb,oBAAC;OAAI,WAAU;iBAAiB;;MAChC,oBAAC;OAAI,WAAU;iBAAiB;;MAChC,oBAAC;OAAI,WAAU;iBAAiB;;;;;GAIpC,oBAAC;IAAI,WAAU;cACb,oBAAC;KACC,WAAU;KACV,OAAO;MAAE,OAAO;MAAO,QAAQ;MAAQ,QAAQ;;;;GAInD,qBAAC;IAAI,WAAU;eACb,oBAAC;KAAI,WAAU;eACb,oBAAC;MAAI,WAAU;gBAA2B;;QAE5C,qBAAC;KAAI,WAAU;gBACb,qBAAC;MAAO,WAAU;MAAsB;iBACtC,oBAAC;OACC,WAAU;OACV,OAAO;QACL,OAAO;QACP,QAAQ;QACR,aAAa;QACb,cAAc;;UAEhB;SAGJ,qBAAC;MAAO,WAAU;MAAsB;iBACtC,oBAAC;OACC,WAAU;OACV,OAAO;QACL,OAAO;QACP,QAAQ;QACR,aAAa;QACb,cAAc;;UAEhB;;;;;;;AAQd,6BAA6B,cAAc;AAE3C,MAAaA,2BAAmE,UAAU;CACxF,MAAM,EAAE,UAAU;AAClB,QACE,oBAAC;EAAiC;YAChC,oBAAC,gCAA6B,GAAI;;;AAKxC,uBAAe"}
1
+ {"version":3,"file":"skeleton.js","names":["QRCodeIcon","PasskeyAuthMenuSkeleton: React.FC<PasskeyAuthMenuSkeletonProps>"],"sources":["../../../../../src/react/components/PasskeyAuthMenu/skeleton.tsx"],"sourcesContent":["import React from 'react';\nimport { ArrowLeftIcon, MailIcon } from './ui/icons';\nimport QRCodeIcon from '../QRCodeIcon';\nimport { PasskeyAuthMenuThemeScope } from './themeScope';\nimport { useTheme } from '../theme';\nimport { getModeTitle } from './controller/mode';\nimport { AuthMenuMode, type AuthMenuHeadings } from './types';\n\nexport interface PasskeyAuthMenuSkeletonProps {\n className?: string;\n style?: React.CSSProperties;\n /** Best-effort to match the hydrated UI default tab. */\n defaultMode?: AuthMenuMode;\n /** Best-effort to match the hydrated UI headings. */\n headings?: AuthMenuHeadings;\n}\n\nexport const PasskeyAuthMenuSkeletonInner = React.forwardRef<\n HTMLDivElement,\n PasskeyAuthMenuSkeletonProps\n>(({ className, style, defaultMode, headings }, ref) => {\n const mode = typeof defaultMode === 'number' ? defaultMode : AuthMenuMode.Register;\n const title = getModeTitle(mode, headings ?? null);\n const placeholder =\n mode === AuthMenuMode.Register\n ? 'Pick a username'\n : mode === AuthMenuMode.Sync\n ? 'Leave blank to discover accounts'\n : 'Enter your username';\n const segHelpText =\n mode === AuthMenuMode.Login\n ? 'Sign in with your passkey'\n : mode === AuthMenuMode.Sync\n ? 'Sync account (iCloud/Chrome sync)'\n : 'Create a new account';\n const segActiveWidth = 'calc((100% - 18px) / 3)';\n const segActiveX =\n mode === AuthMenuMode.Login\n ? `calc(5px + ${segActiveWidth} + 4px)`\n : mode === AuthMenuMode.Sync\n ? `calc(5px + ${segActiveWidth} + 4px + ${segActiveWidth} + 4px)`\n : '5px';\n\n return (\n <div\n ref={ref}\n className={`w3a-signup-menu-root w3a-skeleton${className ? ` ${className}` : ''}`}\n style={style}\n data-mode={mode}\n data-waiting=\"false\"\n data-scan-device=\"false\"\n data-email-recovery=\"false\"\n >\n <div className=\"w3a-content-switcher\">\n <button aria-label=\"Back\" type=\"button\" className=\"w3a-back-button\" disabled>\n <ArrowLeftIcon size={18} strokeWidth={2.25} style={{ display: 'block' }} />\n </button>\n\n <div className=\"w3a-content-area\">\n <div className=\"w3a-content-sizer\">\n <div className=\"w3a-signin-menu\">\n <div className=\"w3a-header\">\n <div>\n <div className=\"w3a-title\">{title.title}</div>\n <div className=\"w3a-subhead\">{title.subtitle}</div>\n </div>\n </div>\n\n <div className=\"w3a-passkey-row\">\n <div className=\"w3a-input-pill\">\n <div className=\"w3a-input-wrap\">\n <input\n type=\"text\"\n name=\"passkey\"\n disabled\n placeholder={placeholder}\n className=\"w3a-input\"\n aria-disabled=\"true\"\n autoCapitalize=\"none\"\n autoCorrect=\"off\"\n spellCheck={false}\n inputMode=\"text\"\n style={{ pointerEvents: 'none' }}\n />\n </div>\n </div>\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <button aria-label=\"Continue\" type=\"button\" className=\"w3a-arrow-btn no-transition\" disabled />\n </div>\n </div>\n\n <div className=\"w3a-seg\">\n <div\n className=\"w3a-seg-active\"\n style={{\n width: segActiveWidth,\n transform: `translateX(${segActiveX})`,\n opacity: 0.9,\n background: 'var(--w3a-passkey-auth-menu2-seg-active-bg)',\n }}\n />\n <div className=\"w3a-seg-grid\">\n <button\n type=\"button\"\n aria-pressed={mode === AuthMenuMode.Register}\n className={`w3a-seg-btn${mode === AuthMenuMode.Register ? ' is-active' : ''} register`}\n disabled\n >\n Register\n </button>\n <button\n type=\"button\"\n aria-pressed={mode === AuthMenuMode.Login}\n className={`w3a-seg-btn${mode === AuthMenuMode.Login ? ' is-active' : ''} login`}\n disabled\n >\n Login\n </button>\n <button\n type=\"button\"\n aria-pressed={mode === AuthMenuMode.Sync}\n className={`w3a-seg-btn${mode === AuthMenuMode.Sync ? ' is-active' : ''} sync`}\n disabled\n >\n Sync\n </button>\n </div>\n </div>\n\n <div className=\"w3a-seg-help-row\">\n <div className=\"w3a-seg-help\" aria-live=\"polite\">\n {segHelpText}\n </div>\n </div>\n\n <div className=\"w3a-scan-device-row\">\n <div className=\"w3a-section-divider\">\n <span className=\"w3a-section-divider-text\">Already have an account?</span>\n </div>\n <div className=\"w3a-secondary-actions\">\n <button className=\"w3a-link-device-btn\" disabled>\n <QRCodeIcon width={18} height={18} strokeWidth={2} />\n Scan and Link Device\n </button>\n <button className=\"w3a-link-device-btn\" disabled>\n <MailIcon size={18} strokeWidth={2} style={{ display: 'block' }} />\n Recover Account with Email\n </button>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n});\nPasskeyAuthMenuSkeletonInner.displayName = 'PasskeyAuthMenuSkeletonInner';\n\nexport const PasskeyAuthMenuSkeleton: React.FC<PasskeyAuthMenuSkeletonProps> = (props) => {\n const { theme } = useTheme();\n return (\n <PasskeyAuthMenuThemeScope theme={theme}>\n <PasskeyAuthMenuSkeletonInner {...props} />\n </PasskeyAuthMenuThemeScope>\n );\n};\n\nexport default PasskeyAuthMenuSkeleton;\n"],"mappings":";;;;;;;;;;;AAiBA,MAAa,+BAA+B,MAAM,YAG/C,EAAE,WAAW,OAAO,aAAa,YAAY,QAAQ;CACtD,MAAM,OAAO,OAAO,gBAAgB,WAAW,cAAc,aAAa;CAC1E,MAAM,QAAQ,aAAa,MAAM,YAAY;CAC7C,MAAM,cACJ,SAAS,aAAa,WAClB,oBACA,SAAS,aAAa,OACpB,qCACA;CACR,MAAM,cACJ,SAAS,aAAa,QAClB,8BACA,SAAS,aAAa,OACpB,sCACA;CACR,MAAM,iBAAiB;CACvB,MAAM,aACJ,SAAS,aAAa,QAClB,cAAc,eAAe,WAC7B,SAAS,aAAa,OACpB,cAAc,eAAe,WAAW,eAAe,WACvD;AAER,QACE,oBAAC;EACM;EACL,WAAW,oCAAoC,YAAY,IAAI,cAAc;EACtE;EACP,aAAW;EACX,gBAAa;EACb,oBAAiB;EACjB,uBAAoB;YAEpB,qBAAC;GAAI,WAAU;cACb,oBAAC;IAAO,cAAW;IAAO,MAAK;IAAS,WAAU;IAAkB;cAClE,oBAAC;KAAc,MAAM;KAAI,aAAa;KAAM,OAAO,EAAE,SAAS;;OAGhE,oBAAC;IAAI,WAAU;cACb,oBAAC;KAAI,WAAU;eACb,qBAAC;MAAI,WAAU;;OACb,oBAAC;QAAI,WAAU;kBACb,qBAAC,oBACC,oBAAC;SAAI,WAAU;mBAAa,MAAM;YAClC,oBAAC;SAAI,WAAU;mBAAe,MAAM;;;OAIxC,qBAAC;QAAI,WAAU;mBACb,oBAAC;SAAI,WAAU;mBACb,oBAAC;UAAI,WAAU;oBACb,oBAAC;WACC,MAAK;WACL,MAAK;WACL;WACa;WACb,WAAU;WACV,iBAAc;WACd,gBAAe;WACf,aAAY;WACZ,YAAY;WACZ,WAAU;WACV,OAAO,EAAE,eAAe;;;YAI9B,oBAAC;SAAI,OAAO;UAAE,UAAU;UAAY,SAAS;;mBAC3C,oBAAC;UAAO,cAAW;UAAW,MAAK;UAAS,WAAU;UAA8B;;;;OAIxF,qBAAC;QAAI,WAAU;mBACb,oBAAC;SACC,WAAU;SACV,OAAO;UACL,OAAO;UACP,WAAW,cAAc,WAAW;UACpC,SAAS;UACT,YAAY;;YAGhB,qBAAC;SAAI,WAAU;;UACb,oBAAC;WACC,MAAK;WACL,gBAAc,SAAS,aAAa;WACpC,WAAW,cAAc,SAAS,aAAa,WAAW,eAAe,GAAG;WAC5E;qBACD;;UAGD,oBAAC;WACC,MAAK;WACL,gBAAc,SAAS,aAAa;WACpC,WAAW,cAAc,SAAS,aAAa,QAAQ,eAAe,GAAG;WACzE;qBACD;;UAGD,oBAAC;WACC,MAAK;WACL,gBAAc,SAAS,aAAa;WACpC,WAAW,cAAc,SAAS,aAAa,OAAO,eAAe,GAAG;WACxE;qBACD;;;;;OAML,oBAAC;QAAI,WAAU;kBACb,oBAAC;SAAI,WAAU;SAAe,aAAU;mBACrC;;;OAIL,qBAAC;QAAI,WAAU;mBACb,oBAAC;SAAI,WAAU;mBACb,oBAAC;UAAK,WAAU;oBAA2B;;YAE7C,qBAAC;SAAI,WAAU;oBACb,qBAAC;UAAO,WAAU;UAAsB;qBACtC,oBAACA;WAAW,OAAO;WAAI,QAAQ;WAAI,aAAa;cAAK;aAGvD,qBAAC;UAAO,WAAU;UAAsB;qBACtC,oBAAC;WAAS,MAAM;WAAI,aAAa;WAAG,OAAO,EAAE,SAAS;cAAa;;;;;;;;;;;AAYvF,6BAA6B,cAAc;AAE3C,MAAaC,2BAAmE,UAAU;CACxF,MAAM,EAAE,UAAU;AAClB,QACE,oBAAC;EAAiC;YAChC,oBAAC,gCAA6B,GAAI;;;AAKxC,uBAAe"}
@@ -6,6 +6,10 @@ const ContentSwitcher = ({ waiting, waitingText = "Waiting for Passkey…", wait
6
6
  const switcherRef = React.useRef(null);
7
7
  const contentAreaRef = React.useRef(null);
8
8
  const sizerRef = React.useRef(null);
9
+ const isInitialMount = React.useRef(true);
10
+ React.useEffect(() => {
11
+ isInitialMount.current = false;
12
+ }, []);
9
13
  const prefersReducedMotion = React.useMemo(() => {
10
14
  if (typeof window === "undefined" || !("matchMedia" in window)) return false;
11
15
  return window.matchMedia("(prefers-reduced-motion: reduce)").matches;
@@ -91,7 +95,7 @@ const ContentSwitcher = ({ waiting, waitingText = "Waiting for Passkey…", wait
91
95
  children: emailRecoveryElement
92
96
  }),
93
97
  !waiting && !showScanDevice && !showEmailRecovery && /* @__PURE__ */ jsx("div", {
94
- className: "w3a-signin-menu",
98
+ className: `w3a-signin-menu${isInitialMount.current ? " w3a-no-animation" : ""}`,
95
99
  children
96
100
  })
97
101
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"ContentSwitcher.js","names":["ContentSwitcher: React.FC<ContentSwitcherProps>"],"sources":["../../../../../../src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface ContentSwitcherProps {\n waiting: boolean;\n waitingText?: string;\n waitingSubtext?: string;\n waitingSDKEventsText?: string;\n showScanDevice?: boolean;\n showQRCodeElement?: React.ReactNode;\n showEmailRecovery?: boolean;\n emailRecoveryElement?: React.ReactNode;\n children: React.ReactNode;\n backButton?: React.ReactNode;\n}\n\nexport const ContentSwitcher: React.FC<ContentSwitcherProps> = ({\n waiting,\n waitingText = 'Waiting for Passkey…',\n waitingSubtext = '',\n waitingSDKEventsText = '',\n showScanDevice = false,\n showQRCodeElement,\n showEmailRecovery = false,\n emailRecoveryElement,\n children,\n backButton,\n}) => {\n // Animate height of the switcher as content changes\n const switcherRef = React.useRef<HTMLDivElement | null>(null);\n const contentAreaRef = React.useRef<HTMLDivElement | null>(null);\n const sizerRef = React.useRef<HTMLDivElement | null>(null);\n\n // Track whether user prefers reduced motion\n const prefersReducedMotion = React.useMemo(() => {\n if (typeof window === 'undefined' || !('matchMedia' in window)) return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }, []);\n\n // Helper to read current content height and apply to the switcher\n const syncHeight = React.useCallback(() => {\n const wrap = switcherRef.current;\n const sizer = sizerRef.current;\n if (!wrap || !sizer) return;\n // Use scrollHeight to capture intrinsic content size regardless of flex context\n const next = sizer.scrollHeight;\n if (prefersReducedMotion) {\n // Apply without animation\n wrap.style.transition = 'none';\n wrap.style.height = `${next}px`;\n // Force reflow then restore transition so future changes can animate\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n wrap.offsetHeight;\n wrap.style.transition = '';\n return;\n }\n // Normal path: let CSS transition handle the interpolation\n wrap.style.height = `${next}px`;\n }, [prefersReducedMotion]);\n\n // Observe size changes of the content area\n React.useLayoutEffect(() => {\n const area = contentAreaRef.current;\n const sizer = sizerRef.current;\n if (!area || !sizer) return;\n\n // Initial sync after mount/update\n syncHeight();\n\n // ResizeObserver to capture dynamic content changes (e.g., QR render)\n const ro = new ResizeObserver(() => {\n // Use rAF to coalesce layout reads/writes with rendering\n requestAnimationFrame(syncHeight);\n });\n ro.observe(sizer);\n\n // Re-sync after fonts load (text metrics can change)\n const fonts = document?.fonts;\n if (fonts?.ready) {\n fonts.ready.then(() => syncHeight()).catch(() => {});\n }\n\n // Also re-sync on window resize\n const onResize = () => syncHeight();\n window.addEventListener('resize', onResize);\n\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', onResize);\n };\n }, [syncHeight, waiting, showScanDevice, showEmailRecovery, children, emailRecoveryElement]);\n\n return (\n <div ref={switcherRef} className=\"w3a-content-switcher\">\n {/* Back button - absolutely positioned overlay */}\n {backButton}\n\n {/* Content areas - conditionally rendered with smooth transitions */}\n <div ref={contentAreaRef} className=\"w3a-content-area\">\n <div ref={sizerRef} className=\"w3a-content-sizer\">\n {waiting && (\n <div className=\"w3a-waiting\">\n <div className=\"w3a-waiting-message\">\n <div className=\"w3a-waiting-text\">{waitingText}</div>\n {waitingSubtext.trim().length > 0 && (\n <div className=\"w3a-waiting-subtext\">{waitingSubtext}</div>\n )}\n {waitingSDKEventsText.trim().length > 0 && (\n <div className=\"w3a-waiting-sdk-events\">{waitingSDKEventsText}</div>\n )}\n </div>\n <div aria-label=\"Loading\" className=\"w3a-spinner\" />\n </div>\n )}\n\n {showScanDevice && <div className=\"w3a-scan-device-content\">{showQRCodeElement}</div>}\n\n {showEmailRecovery && <div className=\"w3a-email-recovery-content\">{emailRecoveryElement}</div>}\n\n {!waiting && !showScanDevice && !showEmailRecovery && (\n <div className=\"w3a-signin-menu\">{children}</div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ContentSwitcher;\n"],"mappings":";;;;AAeA,MAAaA,mBAAmD,EAC9D,SACA,cAAc,wBACd,iBAAiB,IACjB,uBAAuB,IACvB,iBAAiB,OACjB,mBACA,oBAAoB,OACpB,sBACA,UACA,iBACI;CAEJ,MAAM,cAAc,MAAM,OAA8B;CACxD,MAAM,iBAAiB,MAAM,OAA8B;CAC3D,MAAM,WAAW,MAAM,OAA8B;CAGrD,MAAM,uBAAuB,MAAM,cAAc;AAC/C,MAAI,OAAO,WAAW,eAAe,EAAE,gBAAgB,QAAS,QAAO;AACvE,SAAO,OAAO,WAAW,oCAAoC;IAC5D;CAGH,MAAM,aAAa,MAAM,kBAAkB;EACzC,MAAM,OAAO,YAAY;EACzB,MAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,QAAQ,CAAC,MAAO;EAErB,MAAM,OAAO,MAAM;AACnB,MAAI,sBAAsB;AAExB,QAAK,MAAM,aAAa;AACxB,QAAK,MAAM,SAAS,GAAG,KAAK;AAG5B,QAAK;AACL,QAAK,MAAM,aAAa;AACxB;;AAGF,OAAK,MAAM,SAAS,GAAG,KAAK;IAC3B,CAAC;AAGJ,OAAM,sBAAsB;EAC1B,MAAM,OAAO,eAAe;EAC5B,MAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,QAAQ,CAAC,MAAO;AAGrB;EAGA,MAAM,KAAK,IAAI,qBAAqB;AAElC,yBAAsB;;AAExB,KAAG,QAAQ;EAGX,MAAM,QAAQ,UAAU;AACxB,MAAI,OAAO,MACT,OAAM,MAAM,WAAW,cAAc,YAAY;EAInD,MAAM,iBAAiB;AACvB,SAAO,iBAAiB,UAAU;AAElC,eAAa;AACX,MAAG;AACH,UAAO,oBAAoB,UAAU;;IAEtC;EAAC;EAAY;EAAS;EAAgB;EAAmB;EAAU;;AAEtE,QACE,qBAAC;EAAI,KAAK;EAAa,WAAU;aAE9B,YAGD,oBAAC;GAAI,KAAK;GAAgB,WAAU;aAClC,qBAAC;IAAI,KAAK;IAAU,WAAU;;KAC3B,WACC,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;;QACb,oBAAC;SAAI,WAAU;mBAAoB;;QAClC,eAAe,OAAO,SAAS,KAC9B,oBAAC;SAAI,WAAU;mBAAuB;;QAEvC,qBAAqB,OAAO,SAAS,KACpC,oBAAC;SAAI,WAAU;mBAA0B;;;UAG7C,oBAAC;OAAI,cAAW;OAAU,WAAU;;;KAIvC,kBAAkB,oBAAC;MAAI,WAAU;gBAA2B;;KAE5D,qBAAqB,oBAAC;MAAI,WAAU;gBAA8B;;KAElE,CAAC,WAAW,CAAC,kBAAkB,CAAC,qBAC/B,oBAAC;MAAI,WAAU;MAAmB"}
1
+ {"version":3,"file":"ContentSwitcher.js","names":["ContentSwitcher: React.FC<ContentSwitcherProps>"],"sources":["../../../../../../src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.tsx"],"sourcesContent":["import React from 'react';\n\nexport interface ContentSwitcherProps {\n waiting: boolean;\n waitingText?: string;\n waitingSubtext?: string;\n waitingSDKEventsText?: string;\n showScanDevice?: boolean;\n showQRCodeElement?: React.ReactNode;\n showEmailRecovery?: boolean;\n emailRecoveryElement?: React.ReactNode;\n children: React.ReactNode;\n backButton?: React.ReactNode;\n}\n\nexport const ContentSwitcher: React.FC<ContentSwitcherProps> = ({\n waiting,\n waitingText = 'Waiting for Passkey…',\n waitingSubtext = '',\n waitingSDKEventsText = '',\n showScanDevice = false,\n showQRCodeElement,\n showEmailRecovery = false,\n emailRecoveryElement,\n children,\n backButton,\n}) => {\n // Animate height of the switcher as content changes\n const switcherRef = React.useRef<HTMLDivElement | null>(null);\n const contentAreaRef = React.useRef<HTMLDivElement | null>(null);\n const sizerRef = React.useRef<HTMLDivElement | null>(null);\n const isInitialMount = React.useRef(true);\n\n React.useEffect(() => {\n isInitialMount.current = false;\n }, []);\n\n // Track whether user prefers reduced motion\n const prefersReducedMotion = React.useMemo(() => {\n if (typeof window === 'undefined' || !('matchMedia' in window)) return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n }, []);\n\n // Helper to read current content height and apply to the switcher\n const syncHeight = React.useCallback(() => {\n const wrap = switcherRef.current;\n const sizer = sizerRef.current;\n if (!wrap || !sizer) return;\n // Use scrollHeight to capture intrinsic content size regardless of flex context\n const next = sizer.scrollHeight;\n if (prefersReducedMotion) {\n // Apply without animation\n wrap.style.transition = 'none';\n wrap.style.height = `${next}px`;\n // Force reflow then restore transition so future changes can animate\n // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n wrap.offsetHeight;\n wrap.style.transition = '';\n return;\n }\n // Normal path: let CSS transition handle the interpolation\n wrap.style.height = `${next}px`;\n }, [prefersReducedMotion]);\n\n // Observe size changes of the content area\n React.useLayoutEffect(() => {\n const area = contentAreaRef.current;\n const sizer = sizerRef.current;\n if (!area || !sizer) return;\n\n // Initial sync after mount/update\n syncHeight();\n\n // ResizeObserver to capture dynamic content changes (e.g., QR render)\n const ro = new ResizeObserver(() => {\n // Use rAF to coalesce layout reads/writes with rendering\n requestAnimationFrame(syncHeight);\n });\n ro.observe(sizer);\n\n // Re-sync after fonts load (text metrics can change)\n const fonts = document?.fonts;\n if (fonts?.ready) {\n fonts.ready.then(() => syncHeight()).catch(() => { });\n }\n\n // Also re-sync on window resize\n const onResize = () => syncHeight();\n window.addEventListener('resize', onResize);\n\n return () => {\n ro.disconnect();\n window.removeEventListener('resize', onResize);\n };\n }, [syncHeight, waiting, showScanDevice, showEmailRecovery, children, emailRecoveryElement]);\n\n return (\n <div ref={switcherRef} className=\"w3a-content-switcher\">\n {/* Back button - absolutely positioned overlay */}\n {backButton}\n\n {/* Content areas - conditionally rendered with smooth transitions */}\n <div ref={contentAreaRef} className=\"w3a-content-area\">\n <div ref={sizerRef} className=\"w3a-content-sizer\">\n {waiting && (\n <div className=\"w3a-waiting\">\n <div className=\"w3a-waiting-message\">\n <div className=\"w3a-waiting-text\">{waitingText}</div>\n {waitingSubtext.trim().length > 0 && (\n <div className=\"w3a-waiting-subtext\">{waitingSubtext}</div>\n )}\n {waitingSDKEventsText.trim().length > 0 && (\n <div className=\"w3a-waiting-sdk-events\">{waitingSDKEventsText}</div>\n )}\n </div>\n <div aria-label=\"Loading\" className=\"w3a-spinner\" />\n </div>\n )}\n\n {showScanDevice && <div className=\"w3a-scan-device-content\">{showQRCodeElement}</div>}\n\n {showEmailRecovery && <div className=\"w3a-email-recovery-content\">{emailRecoveryElement}</div>}\n\n {!waiting && !showScanDevice && !showEmailRecovery && (\n <div className={`w3a-signin-menu${isInitialMount.current ? ' w3a-no-animation' : ''}`}>\n {children}\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default ContentSwitcher;\n"],"mappings":";;;;AAeA,MAAaA,mBAAmD,EAC9D,SACA,cAAc,wBACd,iBAAiB,IACjB,uBAAuB,IACvB,iBAAiB,OACjB,mBACA,oBAAoB,OACpB,sBACA,UACA,iBACI;CAEJ,MAAM,cAAc,MAAM,OAA8B;CACxD,MAAM,iBAAiB,MAAM,OAA8B;CAC3D,MAAM,WAAW,MAAM,OAA8B;CACrD,MAAM,iBAAiB,MAAM,OAAO;AAEpC,OAAM,gBAAgB;AACpB,iBAAe,UAAU;IACxB;CAGH,MAAM,uBAAuB,MAAM,cAAc;AAC/C,MAAI,OAAO,WAAW,eAAe,EAAE,gBAAgB,QAAS,QAAO;AACvE,SAAO,OAAO,WAAW,oCAAoC;IAC5D;CAGH,MAAM,aAAa,MAAM,kBAAkB;EACzC,MAAM,OAAO,YAAY;EACzB,MAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,QAAQ,CAAC,MAAO;EAErB,MAAM,OAAO,MAAM;AACnB,MAAI,sBAAsB;AAExB,QAAK,MAAM,aAAa;AACxB,QAAK,MAAM,SAAS,GAAG,KAAK;AAG5B,QAAK;AACL,QAAK,MAAM,aAAa;AACxB;;AAGF,OAAK,MAAM,SAAS,GAAG,KAAK;IAC3B,CAAC;AAGJ,OAAM,sBAAsB;EAC1B,MAAM,OAAO,eAAe;EAC5B,MAAM,QAAQ,SAAS;AACvB,MAAI,CAAC,QAAQ,CAAC,MAAO;AAGrB;EAGA,MAAM,KAAK,IAAI,qBAAqB;AAElC,yBAAsB;;AAExB,KAAG,QAAQ;EAGX,MAAM,QAAQ,UAAU;AACxB,MAAI,OAAO,MACT,OAAM,MAAM,WAAW,cAAc,YAAY;EAInD,MAAM,iBAAiB;AACvB,SAAO,iBAAiB,UAAU;AAElC,eAAa;AACX,MAAG;AACH,UAAO,oBAAoB,UAAU;;IAEtC;EAAC;EAAY;EAAS;EAAgB;EAAmB;EAAU;;AAEtE,QACE,qBAAC;EAAI,KAAK;EAAa,WAAU;aAE9B,YAGD,oBAAC;GAAI,KAAK;GAAgB,WAAU;aAClC,qBAAC;IAAI,KAAK;IAAU,WAAU;;KAC3B,WACC,qBAAC;MAAI,WAAU;iBACb,qBAAC;OAAI,WAAU;;QACb,oBAAC;SAAI,WAAU;mBAAoB;;QAClC,eAAe,OAAO,SAAS,KAC9B,oBAAC;SAAI,WAAU;mBAAuB;;QAEvC,qBAAqB,OAAO,SAAS,KACpC,oBAAC;SAAI,WAAU;mBAA0B;;;UAG7C,oBAAC;OAAI,cAAW;OAAU,WAAU;;;KAIvC,kBAAkB,oBAAC;MAAI,WAAU;gBAA2B;;KAE5D,qBAAqB,oBAAC;MAAI,WAAU;gBAA8B;;KAElE,CAAC,WAAW,CAAC,kBAAkB,CAAC,qBAC/B,oBAAC;MAAI,WAAW,kBAAkB,eAAe,UAAU,sBAAsB;MAC9E"}
@@ -19,11 +19,11 @@ import { PROFILE_MENU_ITEM_IDS } from "./components/AccountMenuButton/types.js";
19
19
  import { QRCodeScanner } from "./components/QRCodeScanner.js";
20
20
  import { AccountMenuButton, ProfileSettingsButton } from "./components/AccountMenuButton/index.js";
21
21
  import { ShowQRCode } from "./components/ShowQRCode2.js";
22
+ import QRCodeIcon_default from "./components/QRCodeIcon.js";
23
+ import { AuthMenuMode, AuthMenuModeMap } from "./components/PasskeyAuthMenu/authMenuTypes.js";
22
24
  import { PasskeyAuthMenuSkeleton, PasskeyAuthMenuSkeletonInner } from "./components/PasskeyAuthMenu/skeleton.js";
23
25
  import { preloadPasskeyAuthMenu } from "./components/PasskeyAuthMenu/preload.js";
24
26
  import { PasskeyAuthMenu } from "./components/PasskeyAuthMenu/shell.js";
25
- import { AuthMenuMode, AuthMenuModeMap } from "./components/PasskeyAuthMenu/authMenuTypes.js";
26
- import QRCodeIcon_default from "./components/QRCodeIcon.js";
27
27
  import { PasskeyAuthMenuClient } from "./components/PasskeyAuthMenu/client.js";
28
28
 
29
29
  export { AccountMenuButton, ActionPhase, ActionStatus, ActionType, AuthMenuMode, AuthMenuModeMap, DARK_TOKENS, ActionPhase as DelegateActionPhase, DeviceLinkingPhase, DeviceLinkingStatus, EmailRecoveryPhase, EmailRecoveryStatus, LIGHT_TOKENS, LoginPhase, LoginStatus, MoonIcon_default as MoonIcon, PASSKEY_MANAGER_DEFAULT_CONFIGS, PROFILE_MENU_ITEM_IDS, PasskeyAuthMenu, PasskeyAuthMenuClient, PasskeyAuthMenuSkeleton, PasskeyAuthMenuSkeletonInner, ProfileSettingsButton, QRCodeIcon_default as QRCodeIcon, QRCodeScanner, QRScanMode, RegistrationPhase, RegistrationStatus, ShowQRCode, SunIcon_default as SunIcon, SyncAccountPhase, SyncAccountStatus, TatchiContextProvider, TatchiPasskey, TatchiPasskeyProvider, Theme, TouchIcon_default as TouchIcon, TxExecutionStatus, preloadPasskeyAuthMenu, useAccountInput, useDeviceLinking, useNearClient, usePostfixPosition, useQRCamera, useQRFileUpload, useTatchi, useTheme };