@tatchi-xyz/sdk 0.32.1 → 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.
- package/dist/cjs/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-D2eRb2-S.css → PasskeyAuthMenu-mMygL3xX.css} +137 -47
- package/dist/cjs/react/components/PasskeyAuthMenu/PasskeyAuthMenu-mMygL3xX.css.map +1 -0
- package/dist/cjs/react/components/PasskeyAuthMenu/client.js +2 -3
- package/dist/cjs/react/components/PasskeyAuthMenu/client.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/controller/mode.js +7 -2
- package/dist/cjs/react/components/PasskeyAuthMenu/controller/mode.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js +4 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/hydrationContext.js +20 -0
- package/dist/cjs/react/components/PasskeyAuthMenu/hydrationContext.js.map +1 -0
- package/dist/cjs/react/components/PasskeyAuthMenu/passkeyAuthMenuCompat.js +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/shell.js +64 -30
- package/dist/cjs/react/components/PasskeyAuthMenu/shell.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/skeleton.js +155 -101
- package/dist/cjs/react/components/PasskeyAuthMenu/skeleton.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +5 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
- package/dist/cjs/react/index.js +2 -2
- package/dist/esm/react/components/PasskeyAuthMenu/{PasskeyAuthMenu-qTHAv58Z.css → PasskeyAuthMenu-BihXvuII.css} +137 -47
- package/dist/esm/react/components/PasskeyAuthMenu/PasskeyAuthMenu-BihXvuII.css.map +1 -0
- package/dist/esm/react/components/PasskeyAuthMenu/client.js +2 -3
- package/dist/esm/react/components/PasskeyAuthMenu/client.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/controller/mode.js +7 -3
- package/dist/esm/react/components/PasskeyAuthMenu/controller/mode.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js +4 -1
- package/dist/esm/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/hydrationContext.js +17 -0
- package/dist/esm/react/components/PasskeyAuthMenu/hydrationContext.js.map +1 -0
- package/dist/esm/react/components/PasskeyAuthMenu/passkeyAuthMenuCompat.js +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/shell.js +64 -30
- package/dist/esm/react/components/PasskeyAuthMenu/shell.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/skeleton.js +155 -101
- package/dist/esm/react/components/PasskeyAuthMenu/skeleton.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js +5 -1
- package/dist/esm/react/components/PasskeyAuthMenu/ui/ContentSwitcher.js.map +1 -1
- package/dist/esm/react/index.js +2 -2
- package/dist/esm/react/styles/styles.css +136 -46
- package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts +0 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/client.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/controller/mode.d.ts +6 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/controller/mode.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/controller/usePasskeyAuthMenuController.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/hydrationContext.d.ts +10 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/hydrationContext.d.ts.map +1 -0
- package/dist/types/src/react/components/PasskeyAuthMenu/shell.d.ts +2 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/shell.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/skeleton.d.ts +5 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/skeleton.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/ContentSwitcher.d.ts.map +1 -1
- package/dist/workers/offline-export-sw.js +156 -1
- package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
- package/dist/workers/web3authn-signer.worker.js +1360 -2
- package/dist/workers/web3authn-vrf.worker.js +2857 -2
- package/package.json +4 -2
- package/dist/cjs/react/components/PasskeyAuthMenu/PasskeyAuthMenu-D2eRb2-S.css.map +0 -1
- package/dist/esm/react/components/PasskeyAuthMenu/PasskeyAuthMenu-qTHAv58Z.css.map +0 -1
|
@@ -1,8 +1,14 @@
|
|
|
1
1
|
/* Root container */
|
|
2
|
+
.w3a-no-animation {
|
|
3
|
+
animation: none !important;
|
|
4
|
+
transition: none !important;
|
|
5
|
+
}
|
|
6
|
+
|
|
2
7
|
.w3a-signup-menu-root {
|
|
3
|
-
/*
|
|
8
|
+
/* CSS sentinel (used by tests/diagnostics to confirm stylesheet is applied) */
|
|
4
9
|
--w3a-pam2-css-ready: 1;
|
|
5
|
-
position: relative;
|
|
10
|
+
position: relative;
|
|
11
|
+
/* relative position to anchor back button */
|
|
6
12
|
width: min(100dvw, 420px);
|
|
7
13
|
max-width: 100dvw;
|
|
8
14
|
min-width: 330px;
|
|
@@ -44,15 +50,18 @@
|
|
|
44
50
|
pointer-events: none;
|
|
45
51
|
filter: blur(0.2px);
|
|
46
52
|
}
|
|
53
|
+
|
|
47
54
|
.w3a-back-button.is-visible {
|
|
48
55
|
opacity: 1;
|
|
49
56
|
pointer-events: auto;
|
|
50
57
|
filter: none;
|
|
51
58
|
}
|
|
59
|
+
|
|
52
60
|
.w3a-back-button:hover {
|
|
53
61
|
transform: scale(1.02);
|
|
54
62
|
background: var(--w3a-colors-surface);
|
|
55
63
|
}
|
|
64
|
+
|
|
56
65
|
.w3a-back-button:active {
|
|
57
66
|
transform: scale(0.96);
|
|
58
67
|
}
|
|
@@ -140,7 +149,8 @@
|
|
|
140
149
|
.w3a-content-switcher {
|
|
141
150
|
display: flex;
|
|
142
151
|
flex-direction: column;
|
|
143
|
-
overflow: hidden;
|
|
152
|
+
overflow: hidden;
|
|
153
|
+
/* ensure smooth height animations without spillover */
|
|
144
154
|
transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
145
155
|
will-change: height;
|
|
146
156
|
}
|
|
@@ -152,7 +162,6 @@
|
|
|
152
162
|
flex: 0 1 auto;
|
|
153
163
|
display: flex;
|
|
154
164
|
flex-direction: column;
|
|
155
|
-
animation: fade-in 240ms ease-out;
|
|
156
165
|
transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);
|
|
157
166
|
}
|
|
158
167
|
|
|
@@ -170,7 +179,6 @@
|
|
|
170
179
|
gap: 0px;
|
|
171
180
|
min-height: 250px;
|
|
172
181
|
width: 100%;
|
|
173
|
-
animation: content-enter 240ms ease-in-out;
|
|
174
182
|
}
|
|
175
183
|
|
|
176
184
|
@keyframes content-enter {
|
|
@@ -178,6 +186,7 @@
|
|
|
178
186
|
opacity: 0;
|
|
179
187
|
transform: scale(0.98) translateY(6px);
|
|
180
188
|
}
|
|
189
|
+
|
|
181
190
|
to {
|
|
182
191
|
opacity: 1;
|
|
183
192
|
transform: scale(1) translateY(0);
|
|
@@ -188,6 +197,7 @@
|
|
|
188
197
|
from {
|
|
189
198
|
opacity: 0;
|
|
190
199
|
}
|
|
200
|
+
|
|
191
201
|
to {
|
|
192
202
|
opacity: 1;
|
|
193
203
|
}
|
|
@@ -199,6 +209,7 @@
|
|
|
199
209
|
gap: 8px;
|
|
200
210
|
margin-bottom: var(--w3a-spacing-sm);
|
|
201
211
|
}
|
|
212
|
+
|
|
202
213
|
.w3a-social-btn {
|
|
203
214
|
height: 48px;
|
|
204
215
|
flex: 1 1 0;
|
|
@@ -214,13 +225,16 @@
|
|
|
214
225
|
/* no shadow requested */
|
|
215
226
|
box-shadow: none;
|
|
216
227
|
}
|
|
228
|
+
|
|
217
229
|
.w3a-social-btn svg {
|
|
218
230
|
color: var(--w3a-colors-textSecondary, #64748b);
|
|
219
231
|
}
|
|
232
|
+
|
|
220
233
|
.w3a-social-btn:hover {
|
|
221
234
|
background: var(--w3a-colors-surface2);
|
|
222
235
|
box-shadow: var(--w3a-shadows-sm);
|
|
223
236
|
}
|
|
237
|
+
|
|
224
238
|
.w3a-social-btn:hover svg {
|
|
225
239
|
color: var(--w3a-colors-textPrimary, #1e293b);
|
|
226
240
|
}
|
|
@@ -248,6 +262,7 @@
|
|
|
248
262
|
overflow-x: hidden;
|
|
249
263
|
transition: border-radius 150ms ease-in-out;
|
|
250
264
|
}
|
|
265
|
+
|
|
251
266
|
.w3a-input-pill.is-enabled {
|
|
252
267
|
border-radius: 2rem 0.25rem 0.25rem 2rem;
|
|
253
268
|
transition: border-radius 150ms ease-in-out;
|
|
@@ -259,8 +274,10 @@
|
|
|
259
274
|
height: 32px;
|
|
260
275
|
display: flex;
|
|
261
276
|
align-items: center;
|
|
262
|
-
min-width: 0;
|
|
277
|
+
min-width: 0;
|
|
278
|
+
/* allow input to shrink inside flex container without clipping */
|
|
263
279
|
}
|
|
280
|
+
|
|
264
281
|
.w3a-input {
|
|
265
282
|
width: 100%;
|
|
266
283
|
height: 32px;
|
|
@@ -270,7 +287,8 @@
|
|
|
270
287
|
color: var(--w3a-colors-textPrimary);
|
|
271
288
|
font-size: 16px;
|
|
272
289
|
padding: 0;
|
|
273
|
-
min-width: 0;
|
|
290
|
+
min-width: 0;
|
|
291
|
+
/* prevent overflow clipping in flex layouts */
|
|
274
292
|
}
|
|
275
293
|
|
|
276
294
|
/* Absolute status message anchored to bottom-right of the input area */
|
|
@@ -289,15 +307,18 @@
|
|
|
289
307
|
font-size: 16px;
|
|
290
308
|
white-space: nowrap;
|
|
291
309
|
pointer-events: none;
|
|
292
|
-
visibility: hidden;
|
|
310
|
+
visibility: hidden;
|
|
311
|
+
/* React enables once measured */
|
|
293
312
|
will-change: left;
|
|
294
313
|
transition: left 32ms ease;
|
|
295
314
|
}
|
|
315
|
+
|
|
296
316
|
.w3a-postfix.is-existing {
|
|
297
317
|
color: var(--w3a-colors-success);
|
|
298
318
|
}
|
|
319
|
+
|
|
299
320
|
/* On focus, keep postfix subtle for readability */
|
|
300
|
-
.w3a-input:focus
|
|
321
|
+
.w3a-input:focus~.w3a-postfix {
|
|
301
322
|
color: var(--w3a-colors-textMuted);
|
|
302
323
|
}
|
|
303
324
|
|
|
@@ -305,7 +326,8 @@
|
|
|
305
326
|
display: flex;
|
|
306
327
|
align-items: center;
|
|
307
328
|
justify-content: center;
|
|
308
|
-
width: 0;
|
|
329
|
+
width: 0;
|
|
330
|
+
/* hidden footprint by default */
|
|
309
331
|
padding: 0;
|
|
310
332
|
background: transparent;
|
|
311
333
|
border: 0;
|
|
@@ -321,13 +343,15 @@
|
|
|
321
343
|
border: 6px solid var(--w3a-colors-colorBackground, #fff);
|
|
322
344
|
height: 64px;
|
|
323
345
|
transition: transform 150ms ease,
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
346
|
+
background-color 150ms ease,
|
|
347
|
+
border-radius 150ms ease,
|
|
348
|
+
opacity 150ms ease,
|
|
349
|
+
width 150ms ease-in-out;
|
|
328
350
|
}
|
|
351
|
+
|
|
329
352
|
.w3a-arrow-btn.is-enabled {
|
|
330
|
-
width: 100px;
|
|
353
|
+
width: 100px;
|
|
354
|
+
/* expand when enabled */
|
|
331
355
|
/* Prefer themed primary; fall back to legacy then a sane default */
|
|
332
356
|
background: var(--w3a-colors-primary, #2563eb);
|
|
333
357
|
border-radius: 2rem;
|
|
@@ -336,36 +360,42 @@
|
|
|
336
360
|
visibility: visible;
|
|
337
361
|
pointer-events: auto;
|
|
338
362
|
transition: transform 150ms ease,
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
363
|
+
background-color 150ms ease,
|
|
364
|
+
border-radius 150ms ease,
|
|
365
|
+
opacity 150ms ease,
|
|
366
|
+
width 150ms ease-in-out;
|
|
343
367
|
}
|
|
368
|
+
|
|
344
369
|
.w3a-arrow-btn.no-transition,
|
|
345
370
|
.w3a-arrow-btn.no-transition.is-enabled {
|
|
346
371
|
transition: none;
|
|
347
372
|
}
|
|
373
|
+
|
|
348
374
|
.w3a-arrow-btn .w3a-arrow-icon {
|
|
349
375
|
color: #fff;
|
|
350
376
|
}
|
|
377
|
+
|
|
351
378
|
.w3a-arrow-btn.is-enabled:hover {
|
|
352
379
|
/* transform: scale(1.02); */
|
|
353
380
|
background: var(--w3a-colors-primaryHover, #1d4ed8);
|
|
354
381
|
}
|
|
382
|
+
|
|
355
383
|
.w3a-arrow-btn.is-enabled:active {
|
|
356
384
|
transform: scale(0.96);
|
|
357
385
|
}
|
|
386
|
+
|
|
358
387
|
.w3a-arrow-btn:disabled {
|
|
359
388
|
width: 0;
|
|
360
389
|
cursor: not-allowed;
|
|
361
390
|
opacity: 0.5;
|
|
362
391
|
background: var(--w3a-colors-borderSecondary);
|
|
363
392
|
transition: transform 150ms ease,
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
393
|
+
background-color 150ms ease,
|
|
394
|
+
border-radius 150ms ease,
|
|
395
|
+
opacity 150ms ease,
|
|
396
|
+
width 150ms ease-in-out;
|
|
368
397
|
}
|
|
398
|
+
|
|
369
399
|
.w3a-arrow-btn .w3a-arrow-label {
|
|
370
400
|
margin-left: 8px;
|
|
371
401
|
font-weight: 600;
|
|
@@ -379,7 +409,7 @@
|
|
|
379
409
|
justify-content: center;
|
|
380
410
|
}
|
|
381
411
|
|
|
382
|
-
.w3a-arrow-btn .stripe-arrow
|
|
412
|
+
.w3a-arrow-btn .stripe-arrow>.HoverArrow {
|
|
383
413
|
position: relative;
|
|
384
414
|
margin-top: 0.1rem;
|
|
385
415
|
margin-left: 8px;
|
|
@@ -389,23 +419,23 @@
|
|
|
389
419
|
}
|
|
390
420
|
|
|
391
421
|
/* Horizontal line: fades in on hover of the button */
|
|
392
|
-
.w3a-arrow-btn .stripe-arrow
|
|
422
|
+
.w3a-arrow-btn .stripe-arrow>.HoverArrow .HoverArrow__linePath {
|
|
393
423
|
opacity: 0;
|
|
394
424
|
transition: opacity 120ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
395
425
|
}
|
|
396
426
|
|
|
397
427
|
/* Chevron: nudges right and slightly scales on hover */
|
|
398
|
-
.w3a-arrow-btn .stripe-arrow
|
|
428
|
+
.w3a-arrow-btn .stripe-arrow>.HoverArrow .HoverArrow__tipPath {
|
|
399
429
|
transition: transform 120ms cubic-bezier(0.215, 0.61, 0.355, 1);
|
|
400
430
|
}
|
|
401
431
|
|
|
402
|
-
.w3a-arrow-btn.is-enabled:hover .stripe-arrow
|
|
403
|
-
.w3a-arrow-btn.is-enabled:focus-visible .stripe-arrow
|
|
432
|
+
.w3a-arrow-btn.is-enabled:hover .stripe-arrow>.HoverArrow .HoverArrow__linePath,
|
|
433
|
+
.w3a-arrow-btn.is-enabled:focus-visible .stripe-arrow>.HoverArrow .HoverArrow__linePath {
|
|
404
434
|
opacity: 1;
|
|
405
435
|
}
|
|
406
436
|
|
|
407
|
-
.w3a-arrow-btn.is-enabled:hover .stripe-arrow
|
|
408
|
-
.w3a-arrow-btn.is-enabled:focus-visible .stripe-arrow
|
|
437
|
+
.w3a-arrow-btn.is-enabled:hover .stripe-arrow>.HoverArrow .HoverArrow__tipPath,
|
|
438
|
+
.w3a-arrow-btn.is-enabled:focus-visible .stripe-arrow>.HoverArrow .HoverArrow__tipPath {
|
|
409
439
|
transform: translateX(3px);
|
|
410
440
|
}
|
|
411
441
|
|
|
@@ -419,6 +449,7 @@
|
|
|
419
449
|
background: var(--w3a-colors-surface2);
|
|
420
450
|
border-radius: var(--w3a-border-radius-xl);
|
|
421
451
|
}
|
|
452
|
+
|
|
422
453
|
.w3a-seg-active {
|
|
423
454
|
position: absolute;
|
|
424
455
|
top: 5px;
|
|
@@ -432,6 +463,7 @@
|
|
|
432
463
|
will-change: transform, width;
|
|
433
464
|
pointer-events: none;
|
|
434
465
|
}
|
|
466
|
+
|
|
435
467
|
.w3a-seg-grid {
|
|
436
468
|
display: flex;
|
|
437
469
|
gap: 4px;
|
|
@@ -439,6 +471,7 @@
|
|
|
439
471
|
position: relative;
|
|
440
472
|
z-index: 1;
|
|
441
473
|
}
|
|
474
|
+
|
|
442
475
|
.w3a-seg-btn {
|
|
443
476
|
flex: 1 1 0;
|
|
444
477
|
min-width: 0;
|
|
@@ -462,15 +495,19 @@
|
|
|
462
495
|
padding: 0 14px;
|
|
463
496
|
font-size: clamp(13px, 3.6vw, 15px);
|
|
464
497
|
}
|
|
498
|
+
|
|
465
499
|
.w3a-seg-btn:hover {
|
|
466
500
|
transform: scale(1.02);
|
|
467
501
|
}
|
|
502
|
+
|
|
468
503
|
.w3a-seg-btn:active {
|
|
469
504
|
transform: scale(0.98);
|
|
470
505
|
}
|
|
506
|
+
|
|
471
507
|
.w3a-seg-btn.is-active {
|
|
472
508
|
color: var(--w3a-colors-textPrimary);
|
|
473
509
|
}
|
|
510
|
+
|
|
474
511
|
.w3a-seg-btn:focus-visible {
|
|
475
512
|
box-shadow: 0 0 0 2px color-mix(in srgb, var(--w3a-colors-focus), transparent 60%);
|
|
476
513
|
}
|
|
@@ -484,7 +521,9 @@
|
|
|
484
521
|
}
|
|
485
522
|
|
|
486
523
|
@supports (width: 1dvw) {
|
|
487
|
-
.w3a-signup-menu-root {
|
|
524
|
+
.w3a-signup-menu-root {
|
|
525
|
+
max-width: calc(100dvw - 0.25rem);
|
|
526
|
+
}
|
|
488
527
|
}
|
|
489
528
|
|
|
490
529
|
.w3a-title {
|
|
@@ -550,19 +589,26 @@
|
|
|
550
589
|
animation-delay: var(--w3a-waiting-delay, 0ms);
|
|
551
590
|
animation-fill-mode: both;
|
|
552
591
|
}
|
|
592
|
+
|
|
553
593
|
.w3a-waiting-message {
|
|
554
594
|
display: flex;
|
|
555
595
|
flex-direction: column;
|
|
556
596
|
align-items: center;
|
|
557
597
|
gap: 6px;
|
|
558
598
|
}
|
|
559
|
-
|
|
599
|
+
|
|
600
|
+
.w3a-waiting-text {
|
|
601
|
+
font-size: 18px;
|
|
602
|
+
font-weight: 600;
|
|
603
|
+
}
|
|
604
|
+
|
|
560
605
|
.w3a-waiting-subtext {
|
|
561
606
|
font-size: 12px;
|
|
562
607
|
font-weight: 500;
|
|
563
608
|
line-height: 1.35;
|
|
564
609
|
color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 25%);
|
|
565
610
|
}
|
|
611
|
+
|
|
566
612
|
.w3a-waiting-sdk-events {
|
|
567
613
|
font-size: 11px;
|
|
568
614
|
font-weight: 500;
|
|
@@ -570,11 +616,12 @@
|
|
|
570
616
|
white-space: pre-wrap;
|
|
571
617
|
color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 15%);
|
|
572
618
|
}
|
|
619
|
+
|
|
573
620
|
.w3a-spinner {
|
|
574
621
|
width: 36px;
|
|
575
622
|
height: 36px;
|
|
576
623
|
border-radius: 999px;
|
|
577
|
-
border: 3px solid rgba(255,255,255,0.15);
|
|
624
|
+
border: 3px solid rgba(255, 255, 255, 0.15);
|
|
578
625
|
border-top-color: var(--w3a-colors-primary);
|
|
579
626
|
animation: w3a-spin 0.9s linear infinite;
|
|
580
627
|
}
|
|
@@ -593,6 +640,7 @@
|
|
|
593
640
|
width: 100%;
|
|
594
641
|
overflow: hidden;
|
|
595
642
|
animation: content-enter 240ms ease-out;
|
|
643
|
+
animation-fill-mode: both;
|
|
596
644
|
}
|
|
597
645
|
|
|
598
646
|
/* Ensure QR code content stays within bounds */
|
|
@@ -619,6 +667,7 @@
|
|
|
619
667
|
align-items: center;
|
|
620
668
|
justify-content: flex-end;
|
|
621
669
|
}
|
|
670
|
+
|
|
622
671
|
.w3a-status-message {
|
|
623
672
|
font-size: 11px;
|
|
624
673
|
font-weight: 500;
|
|
@@ -655,12 +704,14 @@
|
|
|
655
704
|
margin: 6px 2px 6px;
|
|
656
705
|
font-weight: 600;
|
|
657
706
|
}
|
|
707
|
+
|
|
658
708
|
.w3a-seg-help {
|
|
659
709
|
font-size: 12px;
|
|
660
710
|
color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 25%);
|
|
661
711
|
margin: 0;
|
|
662
712
|
margin-left: 0.75rem;
|
|
663
713
|
}
|
|
714
|
+
|
|
664
715
|
.w3a-seg-help-row {
|
|
665
716
|
display: flex;
|
|
666
717
|
align-items: center;
|
|
@@ -668,6 +719,7 @@
|
|
|
668
719
|
gap: 12px;
|
|
669
720
|
margin-top: 8px;
|
|
670
721
|
}
|
|
722
|
+
|
|
671
723
|
/* Tooltip for account existence status */
|
|
672
724
|
.w3a-input-wrap .w3a-tooltip {
|
|
673
725
|
position: absolute;
|
|
@@ -683,15 +735,18 @@
|
|
|
683
735
|
transition: opacity 180ms ease, transform 200ms ease;
|
|
684
736
|
z-index: 2;
|
|
685
737
|
}
|
|
738
|
+
|
|
686
739
|
.w3a-input-wrap .w3a-tooltip.is-visible {
|
|
687
740
|
opacity: 0.8;
|
|
688
741
|
transform: translateX(0px) scale(1);
|
|
689
742
|
}
|
|
743
|
+
|
|
690
744
|
.w3a-input-wrap .w3a-tooltip.is-error {
|
|
691
745
|
color: var(--w3a-colors-error);
|
|
692
746
|
background: var(--w3a-colors-colorBackground);
|
|
693
747
|
/* background: color-mix(in srgb, var(--w3a-colors-error), transparent 90%); */
|
|
694
748
|
}
|
|
749
|
+
|
|
695
750
|
.w3a-input-wrap .w3a-tooltip.is-success {
|
|
696
751
|
color: var(--w3a-colors-blue400);
|
|
697
752
|
background: var(--w3a-colors-colorBackground);
|
|
@@ -699,13 +754,26 @@
|
|
|
699
754
|
}
|
|
700
755
|
|
|
701
756
|
@keyframes w3a-spin {
|
|
702
|
-
from {
|
|
703
|
-
|
|
757
|
+
from {
|
|
758
|
+
transform: rotate(0deg);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
to {
|
|
762
|
+
transform: rotate(360deg);
|
|
763
|
+
}
|
|
704
764
|
}
|
|
705
765
|
|
|
706
766
|
@keyframes w3a-ellipsis-dot {
|
|
707
|
-
|
|
708
|
-
|
|
767
|
+
|
|
768
|
+
0%,
|
|
769
|
+
80%,
|
|
770
|
+
100% {
|
|
771
|
+
opacity: 0;
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
40% {
|
|
775
|
+
opacity: 1;
|
|
776
|
+
}
|
|
709
777
|
}
|
|
710
778
|
|
|
711
779
|
.w3a-ellipsis {
|
|
@@ -718,24 +786,45 @@
|
|
|
718
786
|
animation: w3a-ellipsis-dot 1.2s infinite;
|
|
719
787
|
}
|
|
720
788
|
|
|
721
|
-
.w3a-ellipsis-dot:nth-child(2) {
|
|
722
|
-
|
|
789
|
+
.w3a-ellipsis-dot:nth-child(2) {
|
|
790
|
+
animation-delay: 0.15s;
|
|
791
|
+
}
|
|
792
|
+
|
|
793
|
+
.w3a-ellipsis-dot:nth-child(3) {
|
|
794
|
+
animation-delay: 0.3s;
|
|
795
|
+
}
|
|
723
796
|
|
|
724
797
|
/* Pop/bounce-in animation (kept for legacy classes) */
|
|
725
798
|
@keyframes w3a-input-msg-pop {
|
|
726
|
-
0% {
|
|
727
|
-
|
|
728
|
-
|
|
799
|
+
0% {
|
|
800
|
+
opacity: 0;
|
|
801
|
+
transform: translateY(8px) scale(0.98);
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
60% {
|
|
805
|
+
opacity: 1;
|
|
806
|
+
transform: translateY(-2px) scale(1.02);
|
|
807
|
+
}
|
|
808
|
+
|
|
809
|
+
100% {
|
|
810
|
+
opacity: 1;
|
|
811
|
+
transform: translateY(0) scale(1);
|
|
812
|
+
}
|
|
729
813
|
}
|
|
730
814
|
|
|
731
815
|
@media (prefers-reduced-motion: reduce) {
|
|
732
|
-
.w3a-input-msg.is-error {
|
|
733
|
-
|
|
816
|
+
.w3a-input-msg.is-error {
|
|
817
|
+
animation: none;
|
|
818
|
+
}
|
|
819
|
+
|
|
820
|
+
.w3a-ellipsis-dot {
|
|
821
|
+
animation: none;
|
|
822
|
+
opacity: 1;
|
|
823
|
+
}
|
|
734
824
|
}
|
|
735
825
|
|
|
736
826
|
/* Button System */
|
|
737
|
-
.w3a-scan-device-row {
|
|
738
|
-
}
|
|
827
|
+
.w3a-scan-device-row {}
|
|
739
828
|
|
|
740
829
|
.w3a-secondary-actions {
|
|
741
830
|
display: flex;
|
|
@@ -814,6 +903,7 @@
|
|
|
814
903
|
gap: 12px;
|
|
815
904
|
min-height: 260px;
|
|
816
905
|
animation: content-enter 240ms ease-out;
|
|
906
|
+
animation-fill-mode: both;
|
|
817
907
|
}
|
|
818
908
|
|
|
819
909
|
.w3a-email-recovery-title {
|
|
@@ -1008,4 +1098,4 @@
|
|
|
1008
1098
|
}
|
|
1009
1099
|
|
|
1010
1100
|
|
|
1011
|
-
/*# sourceMappingURL=PasskeyAuthMenu-
|
|
1101
|
+
/*# sourceMappingURL=PasskeyAuthMenu-mMygL3xX.css.map*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PasskeyAuthMenu-mMygL3xX.css","names":[],"sources":["../../../../../src/react/components/PasskeyAuthMenu/PasskeyAuthMenu.css"],"sourcesContent":["/* Root container */\n.w3a-no-animation {\n animation: none !important;\n transition: none !important;\n}\n\n.w3a-signup-menu-root {\n /* CSS sentinel (used by tests/diagnostics to confirm stylesheet is applied) */\n --w3a-pam2-css-ready: 1;\n position: relative;\n /* relative position to anchor back button */\n width: min(100dvw, 420px);\n max-width: 100dvw;\n min-width: 330px;\n min-height: 250px;\n color: var(--w3a-colors-textPrimary);\n background: var(--w3a-colors-colorBackground);\n border: 1px solid var(--w3a-colors-borderPrimary);\n border-radius: 3rem;\n box-shadow: var(--w3a-shadows-lg);\n padding: var(--w3a-spacing-lg);\n padding-top: calc(var(--w3a-spacing-lg) + 4px);\n position: relative;\n display: flex;\n flex-direction: column;\n transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1), min-height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\n will-change: height, min-height;\n}\n\n/* Back button */\n.w3a-back-button {\n position: absolute;\n top: 1rem;\n left: 1rem;\n width: 48px;\n height: 48px;\n padding: 0;\n aspect-ratio: 1 / 1;\n display: grid;\n place-items: center;\n line-height: 0;\n border-radius: 50%;\n color: var(--w3a-colors-textPrimary);\n background: transparent;\n cursor: pointer;\n border: none;\n z-index: 3;\n transition: transform 120ms ease, background-color 160ms ease, opacity 220ms ease;\n opacity: 0;\n pointer-events: none;\n filter: blur(0.2px);\n}\n\n.w3a-back-button.is-visible {\n opacity: 1;\n pointer-events: auto;\n filter: none;\n}\n\n.w3a-back-button:hover {\n transform: scale(1.02);\n background: var(--w3a-colors-surface);\n}\n\n.w3a-back-button:active {\n transform: scale(0.96);\n}\n\n/* Header */\n.w3a-header {\n display: flex;\n align-items: center;\n justify-content: flex-start;\n opacity: 1;\n height: auto;\n overflow: hidden;\n transition: opacity 240ms ease-out, height 260ms cubic-bezier(0.2, 0.8, 0.2, 1), padding 260ms cubic-bezier(0.2, 0.8, 0.2, 1), margin 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\n pointer-events: auto;\n position: relative;\n will-change: height, opacity;\n}\n\n/* Hide header when waiting or scan device is active */\n.w3a-signup-menu-root[data-waiting=\"true\"] .w3a-header,\n.w3a-signup-menu-root[data-scan-device=\"true\"] .w3a-header {\n opacity: 0;\n height: 0px;\n padding-top: 0px;\n padding-bottom: 0px;\n margin-top: 0px;\n margin-bottom: 0px;\n pointer-events: none;\n}\n\n/* Hide header when email recovery is active */\n.w3a-signup-menu-root[data-email-recovery=\"true\"] .w3a-header {\n opacity: 0;\n height: 0px;\n padding-top: 0px;\n padding-bottom: 0px;\n margin-top: 0px;\n margin-bottom: 0px;\n pointer-events: none;\n}\n\n/* Adjust content area when header is hidden */\n.w3a-signup-menu-root[data-waiting=\"true\"] .w3a-content-area,\n.w3a-signup-menu-root[data-scan-device=\"true\"] .w3a-content-area {\n flex: 1 1 auto;\n transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n\n/* Adjust content area when email recovery is active */\n.w3a-signup-menu-root[data-email-recovery=\"true\"] .w3a-content-area {\n flex: 1 1 auto;\n transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n\n/* Specific height adjustments for different states */\n.w3a-signup-menu-root[data-waiting=\"true\"] {\n min-height: 200px;\n}\n\n.w3a-signup-menu-root[data-scan-device=\"true\"] {\n min-height: 300px;\n}\n\n.w3a-signup-menu-root[data-email-recovery=\"true\"] {\n min-height: 320px;\n}\n\n.w3a-title {\n font-size: 24px;\n font-weight: 700;\n margin: 0.5rem 0.75rem;\n}\n\n.w3a-subhead {\n font-size: 1rem;\n font-weight: 500;\n line-height: 1;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 20%);\n margin: 0;\n margin-bottom: 1rem;\n margin-left: 0.75rem;\n}\n\n/* Content switcher container */\n.w3a-content-switcher {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n /* ensure smooth height animations without spillover */\n transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\n will-change: height;\n}\n\n/* Content area container */\n.w3a-content-area {\n position: relative;\n /* do not force-stretch; let content define intrinsic height */\n flex: 0 1 auto;\n display: flex;\n flex-direction: column;\n transition: height 260ms cubic-bezier(0.2, 0.8, 0.2, 1);\n}\n\n/* Intrinsic sizer wrapper inside content area used for height measurement */\n.w3a-content-sizer {\n display: block;\n width: 100%;\n}\n\n/* Default content */\n.w3a-signin-menu {\n flex: 1;\n display: flex;\n flex-direction: column;\n gap: 0px;\n min-height: 250px;\n width: 100%;\n}\n\n@keyframes content-enter {\n from {\n opacity: 0;\n transform: scale(0.98) translateY(6px);\n }\n\n to {\n opacity: 1;\n transform: scale(1) translateY(0);\n }\n}\n\n@keyframes fade-in {\n from {\n opacity: 0;\n }\n\n to {\n opacity: 1;\n }\n}\n\n/* Social providers row */\n.w3a-social-row {\n display: flex;\n gap: 8px;\n margin-bottom: var(--w3a-spacing-sm);\n}\n\n.w3a-social-btn {\n height: 48px;\n flex: 1 1 0;\n min-width: 0;\n display: grid;\n place-items: center;\n cursor: pointer;\n color: var(--w3a-colors-textSecondary, #64748b);\n overflow: hidden;\n border: 1px solid var(--w3a-colors-borderPrimary);\n background: var(--w3a-colors-surface);\n border-radius: var(--w3a-border-radius-xl);\n /* no shadow requested */\n box-shadow: none;\n}\n\n.w3a-social-btn svg {\n color: var(--w3a-colors-textSecondary, #64748b);\n}\n\n.w3a-social-btn:hover {\n background: var(--w3a-colors-surface2);\n box-shadow: var(--w3a-shadows-sm);\n}\n\n.w3a-social-btn:hover svg {\n color: var(--w3a-colors-textPrimary, #1e293b);\n}\n\n/* Passkey row */\n.w3a-passkey-row {\n position: relative;\n display: flex;\n align-items: center;\n gap: 0.25rem;\n}\n\n.w3a-input-pill {\n position: relative;\n display: flex;\n flex: 1;\n align-items: center;\n padding: 0rem 1rem;\n height: 54px;\n gap: 8px;\n border: none;\n background: var(--w3a-colors-surface);\n border-radius: 2rem 2rem 2rem 2rem;\n box-shadow: none;\n overflow-x: hidden;\n transition: border-radius 150ms ease-in-out;\n}\n\n.w3a-input-pill.is-enabled {\n border-radius: 2rem 0.25rem 0.25rem 2rem;\n transition: border-radius 150ms ease-in-out;\n}\n\n.w3a-input-wrap {\n position: relative;\n flex: 1;\n height: 32px;\n display: flex;\n align-items: center;\n min-width: 0;\n /* allow input to shrink inside flex container without clipping */\n}\n\n.w3a-input {\n width: 100%;\n height: 32px;\n border: none;\n outline: none;\n background: transparent;\n color: var(--w3a-colors-textPrimary);\n font-size: 16px;\n padding: 0;\n min-width: 0;\n /* prevent overflow clipping in flex layouts */\n}\n\n/* Absolute status message anchored to bottom-right of the input area */\n.w3a-input::placeholder {\n /* Improve contrast for placeholders on dark */\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 35%);\n opacity: 0.95;\n}\n\n.w3a-postfix {\n position: absolute;\n top: 50%;\n left: 0;\n transform: translateY(-50%);\n color: var(--w3a-colors-textSecondary);\n font-size: 16px;\n white-space: nowrap;\n pointer-events: none;\n visibility: hidden;\n /* React enables once measured */\n will-change: left;\n transition: left 32ms ease;\n}\n\n.w3a-postfix.is-existing {\n color: var(--w3a-colors-success);\n}\n\n/* On focus, keep postfix subtle for readability */\n.w3a-input:focus~.w3a-postfix {\n color: var(--w3a-colors-textMuted);\n}\n\n.w3a-arrow-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 0;\n /* hidden footprint by default */\n padding: 0;\n background: transparent;\n border: 0;\n border-radius: 2rem 0.25rem 0.25rem 2rem;\n color: #fff;\n line-height: 0;\n cursor: pointer;\n opacity: 0;\n visibility: hidden;\n pointer-events: none;\n margin-left: -1rem;\n z-index: 1;\n border: 6px solid var(--w3a-colors-colorBackground, #fff);\n height: 64px;\n transition: transform 150ms ease,\n background-color 150ms ease,\n border-radius 150ms ease,\n opacity 150ms ease,\n width 150ms ease-in-out;\n}\n\n.w3a-arrow-btn.is-enabled {\n width: 100px;\n /* expand when enabled */\n /* Prefer themed primary; fall back to legacy then a sane default */\n background: var(--w3a-colors-primary, #2563eb);\n border-radius: 2rem;\n /* border-radius: 2rem; */\n opacity: 1;\n visibility: visible;\n pointer-events: auto;\n transition: transform 150ms ease,\n background-color 150ms ease,\n border-radius 150ms ease,\n opacity 150ms ease,\n width 150ms ease-in-out;\n}\n\n.w3a-arrow-btn.no-transition,\n.w3a-arrow-btn.no-transition.is-enabled {\n transition: none;\n}\n\n.w3a-arrow-btn .w3a-arrow-icon {\n color: #fff;\n}\n\n.w3a-arrow-btn.is-enabled:hover {\n /* transform: scale(1.02); */\n background: var(--w3a-colors-primaryHover, #1d4ed8);\n}\n\n.w3a-arrow-btn.is-enabled:active {\n transform: scale(0.96);\n}\n\n.w3a-arrow-btn:disabled {\n width: 0;\n cursor: not-allowed;\n opacity: 0.5;\n background: var(--w3a-colors-borderSecondary);\n transition: transform 150ms ease,\n background-color 150ms ease,\n border-radius 150ms ease,\n opacity 150ms ease,\n width 150ms ease-in-out;\n}\n\n.w3a-arrow-btn .w3a-arrow-label {\n margin-left: 8px;\n font-weight: 600;\n line-height: 1;\n}\n\n/* Animated arrow inside the continue button */\n.w3a-arrow-btn .stripe-arrow {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n}\n\n.w3a-arrow-btn .stripe-arrow>.HoverArrow {\n position: relative;\n margin-top: 0.1rem;\n margin-left: 8px;\n stroke-width: 2;\n fill: none;\n stroke: currentColor;\n}\n\n/* Horizontal line: fades in on hover of the button */\n.w3a-arrow-btn .stripe-arrow>.HoverArrow .HoverArrow__linePath {\n opacity: 0;\n transition: opacity 120ms cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n/* Chevron: nudges right and slightly scales on hover */\n.w3a-arrow-btn .stripe-arrow>.HoverArrow .HoverArrow__tipPath {\n transition: transform 120ms cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n.w3a-arrow-btn.is-enabled:hover .stripe-arrow>.HoverArrow .HoverArrow__linePath,\n.w3a-arrow-btn.is-enabled:focus-visible .stripe-arrow>.HoverArrow .HoverArrow__linePath {\n opacity: 1;\n}\n\n.w3a-arrow-btn.is-enabled:hover .stripe-arrow>.HoverArrow .HoverArrow__tipPath,\n.w3a-arrow-btn.is-enabled:focus-visible .stripe-arrow>.HoverArrow .HoverArrow__tipPath {\n transform: translateX(3px);\n}\n\n/* Segmented control */\n.w3a-seg {\n position: relative;\n min-height: 54px;\n overflow: hidden;\n padding: 5px;\n border: none;\n background: var(--w3a-colors-surface2);\n border-radius: var(--w3a-border-radius-xl);\n}\n\n.w3a-seg-active {\n position: absolute;\n top: 5px;\n bottom: 5px;\n left: 0;\n border-radius: var(--w3a-border-radius-xl);\n transition:\n transform 320ms cubic-bezier(0.2, 0.8, 0.2, 1),\n width 220ms ease,\n opacity 150ms ease;\n will-change: transform, width;\n pointer-events: none;\n}\n\n.w3a-seg-grid {\n display: flex;\n gap: 4px;\n height: 100%;\n position: relative;\n z-index: 1;\n}\n\n.w3a-seg-btn {\n flex: 1 1 0;\n min-width: 0;\n min-height: 44px;\n border-radius: 12px;\n background: transparent;\n /* Make inactive tabs more legible and clearly tappable */\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 45%);\n font-weight: 600;\n cursor: pointer;\n border: none;\n /* Immediate taps on mobile; opt-out of double-tap zoom heuristics */\n touch-action: manipulation;\n -webkit-tap-highlight-color: transparent;\n transition: color 200ms ease, transform 120ms ease;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n white-space: normal;\n padding: 0 14px;\n font-size: clamp(13px, 3.6vw, 15px);\n}\n\n.w3a-seg-btn:hover {\n transform: scale(1.02);\n}\n\n.w3a-seg-btn:active {\n transform: scale(0.98);\n}\n\n.w3a-seg-btn.is-active {\n color: var(--w3a-colors-textPrimary);\n}\n\n.w3a-seg-btn:focus-visible {\n box-shadow: 0 0 0 2px color-mix(in srgb, var(--w3a-colors-focus), transparent 60%);\n}\n\n@media (max-width: 420px) {\n .w3a-signup-menu-root {\n padding: 1rem;\n padding-top: calc(1rem + 4px);\n border-radius: 2rem;\n max-width: calc(100dvw - 0.25rem);\n }\n\n @supports (width: 1dvw) {\n .w3a-signup-menu-root {\n max-width: calc(100dvw - 0.25rem);\n }\n }\n\n .w3a-title {\n font-size: 20px;\n }\n\n .w3a-subhead {\n font-size: 0.9rem;\n margin-bottom: 0.75rem;\n }\n\n .w3a-input-pill {\n height: 48px;\n }\n\n .w3a-arrow-btn {\n height: 60px;\n }\n\n .w3a-arrow-btn.is-enabled {\n width: 60px;\n }\n\n .w3a-seg {\n min-height: 48px;\n padding: 4px;\n }\n\n .w3a-seg-grid {\n gap: 3px;\n }\n\n .w3a-seg-active {\n top: 4px;\n bottom: 4px;\n }\n\n .w3a-seg-btn {\n min-height: 42px;\n padding: 0 12px;\n font-size: clamp(12px, 3.4vw, 14px);\n }\n\n .w3a-back-button {\n top: -0.5rem;\n left: -0.5rem;\n }\n}\n\n/* Waiting state */\n.w3a-waiting {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n background: transparent;\n text-align: center;\n min-height: 200px;\n /* Quick fade with configurable delay for smoother handoff */\n animation: content-enter 200ms ease-out;\n animation-delay: var(--w3a-waiting-delay, 0ms);\n animation-fill-mode: both;\n}\n\n.w3a-waiting-message {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 6px;\n}\n\n.w3a-waiting-text {\n font-size: 18px;\n font-weight: 600;\n}\n\n.w3a-waiting-subtext {\n font-size: 12px;\n font-weight: 500;\n line-height: 1.35;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 25%);\n}\n\n.w3a-waiting-sdk-events {\n font-size: 11px;\n font-weight: 500;\n line-height: 1.35;\n white-space: pre-wrap;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 15%);\n}\n\n.w3a-spinner {\n width: 36px;\n height: 36px;\n border-radius: 999px;\n border: 3px solid rgba(255, 255, 255, 0.15);\n border-top-color: var(--w3a-colors-primary);\n animation: w3a-spin 0.9s linear infinite;\n}\n\n/* Scan device content wrapper */\n.w3a-scan-device-content {\n flex: 1;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n gap: 16px;\n background: transparent;\n text-align: center;\n min-height: 300px;\n width: 100%;\n overflow: hidden;\n animation: content-enter 240ms ease-out;\n animation-fill-mode: both;\n}\n\n/* Ensure QR code content stays within bounds */\n.w3a-scan-device-content .qr-code-container,\n.w3a-scan-device-content .qr-modal-backdrop,\n.w3a-scan-device-content .qr-modal-content {\n max-width: 100%;\n max-height: 100%;\n overflow: hidden;\n}\n\n.w3a-scan-device-content .qr-code-display {\n max-width: 280px;\n width: 100%;\n}\n\n/* Status message row */\n.w3a-status-row {\n position: absolute;\n font-size: 0.75rem;\n bottom: -10px;\n right: 0;\n display: flex;\n align-items: center;\n justify-content: flex-end;\n}\n\n.w3a-status-message {\n font-size: 11px;\n font-weight: 500;\n}\n\n/* Section divider */\n.w3a-section-divider {\n display: flex;\n align-items: center;\n margin: var(--w3a-spacing-md) 0;\n position: relative;\n}\n\n.w3a-section-divider::before,\n.w3a-section-divider::after {\n content: '';\n flex: 1;\n height: 1px;\n background: var(--w3a-colors-borderSecondary);\n}\n\n.w3a-section-divider-text {\n padding: 0 var(--w3a-spacing-sm);\n font-size: 12px;\n color: var(--w3a-colors-textSecondary);\n font-weight: 500;\n background: var(--w3a-colors-colorBackground);\n}\n\n/* Labels and helper text */\n.w3a-field-label {\n font-size: 12px;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 35%);\n margin: 6px 2px 6px;\n font-weight: 600;\n}\n\n.w3a-seg-help {\n font-size: 12px;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 25%);\n margin: 0;\n margin-left: 0.75rem;\n}\n\n.w3a-seg-help-row {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n margin-top: 8px;\n}\n\n/* Tooltip for account existence status */\n.w3a-input-wrap .w3a-tooltip {\n position: absolute;\n right: 0;\n padding: 4px 8px;\n border-radius: 1rem;\n font-size: 0.7rem;\n background: var(--w3a-colors-surface2);\n color: var(--w3a-colors-textPrimary);\n opacity: 0;\n transform: translateX(50px) scale(0.9);\n pointer-events: none;\n transition: opacity 180ms ease, transform 200ms ease;\n z-index: 2;\n}\n\n.w3a-input-wrap .w3a-tooltip.is-visible {\n opacity: 0.8;\n transform: translateX(0px) scale(1);\n}\n\n.w3a-input-wrap .w3a-tooltip.is-error {\n color: var(--w3a-colors-error);\n background: var(--w3a-colors-colorBackground);\n /* background: color-mix(in srgb, var(--w3a-colors-error), transparent 90%); */\n}\n\n.w3a-input-wrap .w3a-tooltip.is-success {\n color: var(--w3a-colors-blue400);\n background: var(--w3a-colors-colorBackground);\n /* background: color-mix(in srgb, var(--w3a-colors-blue400), transparent 90%); */\n}\n\n@keyframes w3a-spin {\n from {\n transform: rotate(0deg);\n }\n\n to {\n transform: rotate(360deg);\n }\n}\n\n@keyframes w3a-ellipsis-dot {\n\n 0%,\n 80%,\n 100% {\n opacity: 0;\n }\n\n 40% {\n opacity: 1;\n }\n}\n\n.w3a-ellipsis {\n display: inline-block;\n}\n\n.w3a-ellipsis-dot {\n display: inline-block;\n opacity: 0;\n animation: w3a-ellipsis-dot 1.2s infinite;\n}\n\n.w3a-ellipsis-dot:nth-child(2) {\n animation-delay: 0.15s;\n}\n\n.w3a-ellipsis-dot:nth-child(3) {\n animation-delay: 0.3s;\n}\n\n/* Pop/bounce-in animation (kept for legacy classes) */\n@keyframes w3a-input-msg-pop {\n 0% {\n opacity: 0;\n transform: translateY(8px) scale(0.98);\n }\n\n 60% {\n opacity: 1;\n transform: translateY(-2px) scale(1.02);\n }\n\n 100% {\n opacity: 1;\n transform: translateY(0) scale(1);\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .w3a-input-msg.is-error {\n animation: none;\n }\n\n .w3a-ellipsis-dot {\n animation: none;\n opacity: 1;\n }\n}\n\n/* Button System */\n.w3a-scan-device-row {}\n\n.w3a-secondary-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n\n.w3a-link-device-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n box-sizing: border-box;\n overflow: hidden;\n gap: 0.5rem;\n padding: 0.5rem 1rem;\n height: 48px;\n width: 100%;\n max-width: 100%;\n background: var(--w3a-colors-surface) !important;\n border: 1px solid var(--w3a-colors-borderPrimary);\n border-radius: 2rem;\n cursor: pointer;\n color: var(--w3a-colors-textPrimary);\n font-family: var(--w3a-font-family, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif);\n font-weight: 500;\n font-size: 0.875rem;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n/* Hover/focus elevated state (theme-reactive via CSS vars) */\n.w3a-link-device-btn:hover:not(:disabled),\n.w3a-link-device-btn:focus-visible {\n background: var(--w3a-colors-surface2) !important;\n}\n\n.w3a-link-device-btn-primary {\n background: var(--w3a-colors-buttonBackground, var(--w3a-colors-primary, #3b82f6)) !important;\n border-color: transparent;\n border-radius: 2rem;\n color: var(--w3a-colors-textButton, white);\n}\n\n.w3a-link-device-btn-primary:hover:not(:disabled),\n.w3a-link-device-btn-primary:focus-visible {\n background: var(--w3a-colors-buttonHoverBackground, var(--w3a-colors-primaryHover, #2563eb)) !important;\n color: var(--w3a-colors-textButton, white);\n}\n\n.w3a-link-device-btn-primary:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n/* Button-local spinner: match text size inside buttons */\n.w3a-link-device-btn .w3a-spinner {\n width: 1em;\n height: 1em;\n border-width: 2px;\n}\n\n.w3a-link-device-btn-primary .w3a-spinner {\n border-color: rgba(255, 255, 255, 0.35);\n border-top-color: #ffffff;\n}\n\n/* Email recovery slide */\n.w3a-email-recovery-content {\n width: 100%;\n padding-top: 1rem;\n}\n\n.w3a-email-recovery-slide {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-height: 260px;\n animation: content-enter 240ms ease-out;\n animation-fill-mode: both;\n}\n\n.w3a-email-recovery-title {\n font-size: 20px;\n font-weight: 700;\n margin: 0.5rem 0.5rem;\n display: flex;\n justify-content: center;\n}\n\n.w3a-email-recovery-help {\n font-size: 0.95rem;\n line-height: 1.2;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 20%);\n margin: 0 0.25rem;\n}\n\n.w3a-email-recovery-meta {\n display: flex;\n align-items: baseline;\n justify-content: space-between;\n gap: 8px;\n padding: 0 0.25rem;\n font-size: 0.85rem;\n}\n\n.w3a-email-recovery-meta-label {\n opacity: 0.85;\n}\n\n.w3a-email-recovery-meta-value {\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n font-size: 0.85rem;\n opacity: 0.9;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 70%;\n text-align: right;\n}\n\n.w3a-email-recovery-input-pill {\n height: 54px;\n padding: 0 1rem;\n border: 1px solid var(--w3a-colors-borderPrimary);\n background: var(--w3a-colors-surface);\n transition: box-shadow 160ms ease, border-color 160ms ease;\n}\n\n.w3a-email-recovery-input-pill:focus-within {\n border-color: var(--w3a-colors-primary, #3b82f6);\n}\n\n.w3a-email-recovery-actions {\n display: flex;\n flex-direction: column;\n gap: 8px;\n margin-top: 4px;\n}\n\n.w3a-email-recovery-summary {\n font-size: 0.875rem;\n line-height: 1.2;\n padding: 0 0.25rem;\n color: color-mix(in srgb, var(--w3a-colors-textSecondary), var(--w3a-colors-textPrimary) 20%);\n display: flex;\n flex-direction: column;\n gap: 4px;\n}\n\n.w3a-email-recovery-warning {\n color: color-mix(in srgb, var(--w3a-colors-error), var(--w3a-colors-textPrimary) 30%);\n}\n\n.w3a-email-recovery-from-warning {\n margin-top: 1rem;\n font-weight: 600;\n}\n\n[data-w3a-theme=\"light\"] .w3a-email-recovery-from-warning {\n color: #d80;\n}\n\n[data-w3a-theme=\"dark\"] .w3a-email-recovery-from-warning {\n color: #ea5;\n}\n\n.w3a-email-recovery-link {\n font-size: 0.875rem;\n color: var(--w3a-colors-primary, #3b82f6);\n text-decoration: none;\n padding: 0;\n}\n\n.w3a-email-recovery-link:hover {\n text-decoration: underline;\n}\n\n.w3a-email-recovery-status {\n font-size: 0.875rem;\n padding: 0.75rem 0.875rem;\n border-radius: 1rem;\n border: 1px solid var(--w3a-colors-borderPrimary);\n background: var(--w3a-colors-surface2);\n color: var(--w3a-colors-textPrimary);\n margin-bottom: 4px;\n}\n\n.w3a-email-recovery-status.is-error {\n border-color: color-mix(in srgb, var(--w3a-colors-error), var(--w3a-colors-borderPrimary) 60%);\n color: var(--w3a-colors-error);\n}\n\n.w3a-email-recovery-elapsed {\n margin-left: 6px;\n opacity: 0.75;\n}\n\n.w3a-email-recovery-saved-emails {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n}\n\n.w3a-email-recovery-email-chip {\n border: 1px solid var(--w3a-colors-borderPrimary);\n background: var(--w3a-colors-surface);\n color: var(--w3a-colors-textPrimary);\n padding: 6px 10px;\n border-radius: 999px;\n font-size: 0.85rem;\n cursor: pointer;\n max-width: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.w3a-email-recovery-email-chip-static {\n cursor: default;\n}\n\n.w3a-email-recovery-email-chip:hover:not(:disabled) {\n background: var(--w3a-colors-surface2);\n}\n\n.w3a-email-recovery-email-chip:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.w3a-email-recovery-toast {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 0.75rem 0.875rem;\n border-radius: 1rem;\n border: 1px solid var(--w3a-colors-borderPrimary);\n background: var(--w3a-colors-surface);\n font-size: 0.875rem;\n color: var(--w3a-colors-textPrimary);\n}\n\n.w3a-email-recovery-toast a {\n color: var(--w3a-colors-primary, #3b82f6);\n text-decoration: none;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n max-width: 100%;\n}\n\n.w3a-email-recovery-toast a:hover {\n text-decoration: underline;\n}\n\n.w3a-email-recovery-toast-close {\n margin-left: auto;\n width: 28px;\n height: 28px;\n border-radius: 999px;\n border: none;\n background: transparent;\n color: var(--w3a-colors-textSecondary);\n cursor: pointer;\n display: grid;\n place-items: center;\n}\n\n.w3a-email-recovery-toast-close:hover {\n background: var(--w3a-colors-surface2);\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
2
2
|
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.js');
|
|
3
3
|
const require_SegmentedControl = require('./ui/SegmentedControl.js');
|
|
4
|
-
require('./PasskeyAuthMenu.js');
|
|
5
|
-
const require_authMenuTypes = require('./authMenuTypes.js');
|
|
6
4
|
const require_ArrowLeft = require('./ui/icons/ArrowLeft.js');
|
|
7
5
|
const require_Mail = require('./ui/icons/Mail.js');
|
|
6
|
+
const require_QRCodeIcon = require('../QRCodeIcon.js');
|
|
7
|
+
const require_authMenuTypes = require('./authMenuTypes.js');
|
|
8
8
|
const require_PasskeyInput = require('./ui/PasskeyInput.js');
|
|
9
9
|
const require_ContentSwitcher = require('./ui/ContentSwitcher.js');
|
|
10
10
|
const require_EmailRecoverySlide = require('./ui/EmailRecoverySlide.js');
|
|
11
|
-
const require_QRCodeIcon = require('../QRCodeIcon.js');
|
|
12
11
|
const require_tatchi = require('./adapters/tatchi.js');
|
|
13
12
|
const require_usePasskeyAuthMenuController = require('./controller/usePasskeyAuthMenuController.js');
|
|
14
13
|
const require_useSDKEvents = require('./controller/useSDKEvents.js');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":["React","PasskeyAuthMenuClient: React.FC<PasskeyAuthMenuProps>","usePasskeyAuthMenuRuntime","useSDKEvents","usePasskeyAuthMenuController","AuthMenuMode","ContentSwitcher","ArrowLeftIcon","EmailRecoverySlide","PasskeyInput","SegmentedControl","QRCodeIcon","MailIcon"],"sources":["../../../../../src/react/components/PasskeyAuthMenu/client.tsx"],"sourcesContent":["import React from 'react';\nimport { ArrowLeftIcon, MailIcon } from './ui/icons';\nimport { SegmentedControl } from './ui/SegmentedControl';\nimport { PasskeyInput } from './ui/PasskeyInput';\nimport { ContentSwitcher } from './ui/ContentSwitcher';\nimport { EmailRecoverySlide } from './ui/EmailRecoverySlide';\nimport QRCodeIcon from '../QRCodeIcon';\nimport { AuthMenuMode, type PasskeyAuthMenuProps } from './types';\nimport './PasskeyAuthMenu.css';\nimport { usePasskeyAuthMenuRuntime } from './adapters/tatchi';\nimport { usePasskeyAuthMenuController } from './controller/usePasskeyAuthMenuController';\nimport { useSDKEvents } from './controller/useSDKEvents';\n\ntype CSSVarStyle = React.CSSProperties & {\n [key: `--${string}`]: string | number | undefined;\n};\n\nconst LazyShowQRCode = React.lazy(() =>\n import('../ShowQRCode').then((m) => ({ default: m.ShowQRCode })),\n);\n\nconst preloadShowQRCode = () => import('../ShowQRCode').then(() => undefined);\n\nexport const PasskeyAuthMenuClient: React.FC<PasskeyAuthMenuProps> = ({\n onLogin,\n onRegister,\n onSyncAccount,\n linkDeviceOptions,\n emailRecoveryOptions,\n header,\n defaultMode,\n style,\n className,\n socialLogin,\n loadingScreenDelayMs,\n headings,\n showSDKEvents = false,\n}) => {\n const runtime = usePasskeyAuthMenuRuntime();\n const { withSdkEventsHandler } = useSDKEvents({ sdkFlow: runtime.sdkFlow });\n\n const onLoginWithSDKEvents = React.useMemo(\n () => withSdkEventsHandler('login', onLogin, 60_000),\n [onLogin, withSdkEventsHandler],\n );\n const onRegisterWithSDKEvents = React.useMemo(\n () => withSdkEventsHandler('register', onRegister, 90_000),\n [onRegister, withSdkEventsHandler],\n );\n const onSyncWithSDKEvents = React.useMemo(\n () => withSdkEventsHandler('sync', onSyncAccount, 120_000),\n [onSyncAccount, withSdkEventsHandler],\n );\n\n const controller = usePasskeyAuthMenuController(\n {\n onLogin: onLoginWithSDKEvents,\n onRegister: onRegisterWithSDKEvents,\n onSyncAccount: onSyncWithSDKEvents,\n defaultMode,\n headings,\n linkDeviceOptions,\n },\n runtime,\n );\n\n const prefetchQRCode = React.useCallback(() => {\n void preloadShowQRCode().catch(() => {});\n }, []);\n\n const segActiveBg = 'var(--w3a-passkey-auth-menu2-seg-active-bg)';\n\n const rootStyle = React.useMemo<CSSVarStyle>(\n () => ({\n ...style,\n ...(loadingScreenDelayMs != null ? { '--w3a-waiting-delay': `${loadingScreenDelayMs}ms` } : null),\n }),\n [loadingScreenDelayMs, style],\n );\n\n const waitingSDKEventsText = React.useMemo(() => {\n if (!showSDKEvents) return '';\n if (\n controller.mode !== AuthMenuMode.Register &&\n controller.mode !== AuthMenuMode.Login &&\n controller.mode !== AuthMenuMode.Sync\n ) {\n return '';\n }\n const text = runtime.sdkFlow.eventsText?.trim() ?? '';\n if (text.length > 0) {\n const lastLine = text.split('\\n').filter(Boolean).slice(-1)[0] ?? '';\n return lastLine;\n }\n return controller.waiting ? 'Awaiting SDK events…' : '';\n }, [controller.mode, controller.waiting, runtime.sdkFlow.eventsText, showSDKEvents]);\n\n return (\n <div\n className={`w3a-signup-menu-root${className ? ` ${className}` : ''}`}\n data-mode={controller.mode}\n data-waiting={controller.waiting}\n data-scan-device={controller.showScanDevice}\n data-email-recovery={controller.showEmailRecovery}\n style={rootStyle}\n >\n <ContentSwitcher\n waiting={controller.waiting}\n waitingText={\n controller.mode === AuthMenuMode.Register\n ? 'Registering passkey…'\n : controller.mode === AuthMenuMode.Sync\n ? 'Syncing account…'\n : 'Waiting for Passkey…'\n }\n waitingSDKEventsText={waitingSDKEventsText}\n backButton={\n <button\n aria-label=\"Back\"\n onClick={() => {\n if (controller.showEmailRecovery) {\n controller.closeEmailRecovery();\n return;\n }\n controller.onResetToStart();\n }}\n className={`w3a-back-button${controller.waiting || controller.showScanDevice || controller.showEmailRecovery ? ' is-visible' : ''}`}\n >\n <ArrowLeftIcon size={18} strokeWidth={2.25} style={{ display: 'block' }} />\n </button>\n }\n showScanDevice={controller.showScanDevice}\n showQRCodeElement={\n <React.Suspense fallback={<div className=\"qr-loading\"><p>Loading QR…</p></div>}>\n <LazyShowQRCode\n isOpen={controller.linkDevice.isOpen}\n onClose={controller.linkDevice.onClose}\n onEvent={controller.linkDevice.onEvent}\n onError={controller.linkDevice.onError}\n />\n </React.Suspense>\n }\n showEmailRecovery={controller.showEmailRecovery}\n emailRecoveryElement={\n <EmailRecoverySlide\n tatchiPasskey={runtime.tatchiPasskey}\n accountId={runtime.targetAccountId}\n refreshLoginState={runtime.refreshLoginState}\n emailRecoveryOptions={emailRecoveryOptions}\n />\n }\n >\n <div className=\"w3a-header\">\n {header ?? (\n <div>\n <div className=\"w3a-title\">{controller.title.title}</div>\n <div className=\"w3a-subhead\">{controller.title.subtitle}</div>\n </div>\n )}\n </div>\n\n <PasskeyInput\n value={controller.currentValue}\n onChange={controller.onInputChange}\n placeholder={\n controller.mode === AuthMenuMode.Register\n ? 'Pick a username'\n : controller.mode === AuthMenuMode.Sync\n ? 'Leave blank to discover accounts'\n : 'Enter your username'\n }\n postfixText={controller.postfixText}\n isUsingExistingAccount={controller.isUsingExistingAccount}\n canProceed={controller.canShowContinue}\n onProceed={controller.onProceed}\n mode={controller.mode}\n secure={controller.secure}\n waiting={controller.waiting}\n />\n\n <SegmentedControl\n items={[\n { value: AuthMenuMode.Register, label: 'Register', className: 'register' },\n { value: AuthMenuMode.Login, label: 'Login', className: 'login' },\n { value: AuthMenuMode.Sync, label: 'Sync', className: 'sync' },\n ]}\n value={controller.mode}\n onValueChange={(v) => controller.onSegmentChange(v as AuthMenuMode)}\n activeBg={segActiveBg}\n />\n\n <div className=\"w3a-seg-help-row\">\n <div className=\"w3a-seg-help\" aria-live=\"polite\">\n {controller.mode === AuthMenuMode.Login && 'Sign in with your passkey'}\n {controller.mode === AuthMenuMode.Register && 'Create a new account'}\n {controller.mode === AuthMenuMode.Sync && 'Sync account (iCloud/Chrome sync)'}\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\n onClick={controller.openScanDevice}\n onPointerEnter={prefetchQRCode}\n onFocus={prefetchQRCode}\n onTouchStart={prefetchQRCode}\n className=\"w3a-link-device-btn\"\n >\n <QRCodeIcon width={18} height={18} strokeWidth={2} />\n Scan and Link Device\n </button>\n <button\n onClick={controller.openEmailRecovery}\n className=\"w3a-link-device-btn\"\n >\n <MailIcon size={18} strokeWidth={2} style={{ display: 'block' }} />\n Recover Account with Email\n </button>\n </div>\n </div>\n </ContentSwitcher>\n </div>\n );\n};\n\nexport default PasskeyAuthMenuClient;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","names":["React","PasskeyAuthMenuClient: React.FC<PasskeyAuthMenuProps>","usePasskeyAuthMenuRuntime","useSDKEvents","usePasskeyAuthMenuController","AuthMenuMode","ContentSwitcher","ArrowLeftIcon","EmailRecoverySlide","PasskeyInput","SegmentedControl","QRCodeIcon","MailIcon"],"sources":["../../../../../src/react/components/PasskeyAuthMenu/client.tsx"],"sourcesContent":["import React from 'react';\nimport { ArrowLeftIcon, MailIcon } from './ui/icons';\nimport { SegmentedControl } from './ui/SegmentedControl';\nimport { PasskeyInput } from './ui/PasskeyInput';\nimport { ContentSwitcher } from './ui/ContentSwitcher';\nimport { EmailRecoverySlide } from './ui/EmailRecoverySlide';\nimport QRCodeIcon from '../QRCodeIcon';\nimport { AuthMenuMode, type PasskeyAuthMenuProps } from './types';\nimport { usePasskeyAuthMenuRuntime } from './adapters/tatchi';\nimport { usePasskeyAuthMenuController } from './controller/usePasskeyAuthMenuController';\nimport { useSDKEvents } from './controller/useSDKEvents';\n\ntype CSSVarStyle = React.CSSProperties & {\n [key: `--${string}`]: string | number | undefined;\n};\n\nconst LazyShowQRCode = React.lazy(() =>\n import('../ShowQRCode').then((m) => ({ default: m.ShowQRCode })),\n);\n\nconst preloadShowQRCode = () => import('../ShowQRCode').then(() => undefined);\n\nexport const PasskeyAuthMenuClient: React.FC<PasskeyAuthMenuProps> = ({\n onLogin,\n onRegister,\n onSyncAccount,\n linkDeviceOptions,\n emailRecoveryOptions,\n header,\n defaultMode,\n style,\n className,\n socialLogin,\n loadingScreenDelayMs,\n headings,\n showSDKEvents = false,\n}) => {\n const runtime = usePasskeyAuthMenuRuntime();\n const { withSdkEventsHandler } = useSDKEvents({ sdkFlow: runtime.sdkFlow });\n\n const onLoginWithSDKEvents = React.useMemo(\n () => withSdkEventsHandler('login', onLogin, 60_000),\n [onLogin, withSdkEventsHandler],\n );\n const onRegisterWithSDKEvents = React.useMemo(\n () => withSdkEventsHandler('register', onRegister, 90_000),\n [onRegister, withSdkEventsHandler],\n );\n const onSyncWithSDKEvents = React.useMemo(\n () => withSdkEventsHandler('sync', onSyncAccount, 120_000),\n [onSyncAccount, withSdkEventsHandler],\n );\n\n const controller = usePasskeyAuthMenuController(\n {\n onLogin: onLoginWithSDKEvents,\n onRegister: onRegisterWithSDKEvents,\n onSyncAccount: onSyncWithSDKEvents,\n defaultMode,\n headings,\n linkDeviceOptions,\n },\n runtime,\n );\n\n const prefetchQRCode = React.useCallback(() => {\n void preloadShowQRCode().catch(() => { });\n }, []);\n\n const segActiveBg = 'var(--w3a-passkey-auth-menu2-seg-active-bg)';\n\n const rootStyle = React.useMemo<CSSVarStyle>(\n () => ({\n ...style,\n ...(loadingScreenDelayMs != null ? { '--w3a-waiting-delay': `${loadingScreenDelayMs}ms` } : null),\n }),\n [loadingScreenDelayMs, style],\n );\n\n const waitingSDKEventsText = React.useMemo(() => {\n if (!showSDKEvents) return '';\n if (\n controller.mode !== AuthMenuMode.Register &&\n controller.mode !== AuthMenuMode.Login &&\n controller.mode !== AuthMenuMode.Sync\n ) {\n return '';\n }\n const text = runtime.sdkFlow.eventsText?.trim() ?? '';\n if (text.length > 0) {\n const lastLine = text.split('\\n').filter(Boolean).slice(-1)[0] ?? '';\n return lastLine;\n }\n return controller.waiting ? 'Awaiting SDK events…' : '';\n }, [controller.mode, controller.waiting, runtime.sdkFlow.eventsText, showSDKEvents]);\n\n return (\n <div\n className={`w3a-signup-menu-root${className ? ` ${className}` : ''}`}\n data-mode={controller.mode}\n data-waiting={controller.waiting}\n data-scan-device={controller.showScanDevice}\n data-email-recovery={controller.showEmailRecovery}\n style={rootStyle}\n >\n <ContentSwitcher\n waiting={controller.waiting}\n waitingText={\n controller.mode === AuthMenuMode.Register\n ? 'Registering passkey…'\n : controller.mode === AuthMenuMode.Sync\n ? 'Syncing account…'\n : 'Waiting for Passkey…'\n }\n waitingSDKEventsText={waitingSDKEventsText}\n backButton={\n <button\n aria-label=\"Back\"\n onClick={() => {\n if (controller.showEmailRecovery) {\n controller.closeEmailRecovery();\n return;\n }\n controller.onResetToStart();\n }}\n className={`w3a-back-button${controller.waiting || controller.showScanDevice || controller.showEmailRecovery ? ' is-visible' : ''}`}\n >\n <ArrowLeftIcon size={18} strokeWidth={2.25} style={{ display: 'block' }} />\n </button>\n }\n showScanDevice={controller.showScanDevice}\n showQRCodeElement={\n <React.Suspense fallback={<div className=\"qr-loading\"><p>Loading QR…</p></div>}>\n <LazyShowQRCode\n isOpen={controller.linkDevice.isOpen}\n onClose={controller.linkDevice.onClose}\n onEvent={controller.linkDevice.onEvent}\n onError={controller.linkDevice.onError}\n />\n </React.Suspense>\n }\n showEmailRecovery={controller.showEmailRecovery}\n emailRecoveryElement={\n <EmailRecoverySlide\n tatchiPasskey={runtime.tatchiPasskey}\n accountId={runtime.targetAccountId}\n refreshLoginState={runtime.refreshLoginState}\n emailRecoveryOptions={emailRecoveryOptions}\n />\n }\n >\n <div className=\"w3a-header\">\n {header ?? (\n <div>\n <div className=\"w3a-title\">{controller.title.title}</div>\n <div className=\"w3a-subhead\">{controller.title.subtitle}</div>\n </div>\n )}\n </div>\n\n <PasskeyInput\n value={controller.currentValue}\n onChange={controller.onInputChange}\n placeholder={\n controller.mode === AuthMenuMode.Register\n ? 'Pick a username'\n : controller.mode === AuthMenuMode.Sync\n ? 'Leave blank to discover accounts'\n : 'Enter your username'\n }\n postfixText={controller.postfixText}\n isUsingExistingAccount={controller.isUsingExistingAccount}\n canProceed={controller.canShowContinue}\n onProceed={controller.onProceed}\n mode={controller.mode}\n secure={controller.secure}\n waiting={controller.waiting}\n />\n\n <SegmentedControl\n items={[\n { value: AuthMenuMode.Register, label: 'Register', className: 'register' },\n { value: AuthMenuMode.Login, label: 'Login', className: 'login' },\n { value: AuthMenuMode.Sync, label: 'Sync', className: 'sync' },\n ]}\n value={controller.mode}\n onValueChange={(v) => controller.onSegmentChange(v as AuthMenuMode)}\n activeBg={segActiveBg}\n />\n\n <div className=\"w3a-seg-help-row\">\n <div className=\"w3a-seg-help\" aria-live=\"polite\">\n {controller.mode === AuthMenuMode.Login && 'Sign in with your passkey'}\n {controller.mode === AuthMenuMode.Register && 'Create a new account'}\n {controller.mode === AuthMenuMode.Sync && 'Sync account (iCloud/Chrome sync)'}\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\n onClick={controller.openScanDevice}\n onPointerEnter={prefetchQRCode}\n onFocus={prefetchQRCode}\n onTouchStart={prefetchQRCode}\n className=\"w3a-link-device-btn\"\n >\n <QRCodeIcon width={18} height={18} strokeWidth={2} />\n Scan and Link Device\n </button>\n <button\n onClick={controller.openEmailRecovery}\n className=\"w3a-link-device-btn\"\n >\n <MailIcon size={18} strokeWidth={2} style={{ display: 'block' }} />\n Recover Account with Email\n </button>\n </div>\n </div>\n </ContentSwitcher>\n </div>\n );\n};\n\nexport default PasskeyAuthMenuClient;\n"],"mappings":"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"}
|