@dloizides/auth-web 1.12.0 → 1.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +431 -363
- package/dist/index.d.mts +119 -45
- package/dist/index.d.ts +119 -45
- package/dist/index.js +191 -57
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +191 -58
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -129,18 +129,6 @@ interface AuthScreenProps {
|
|
|
129
129
|
/** The screen-level auth composition: one centered card the controls share. */
|
|
130
130
|
declare function AuthScreen({ children, theme: themeProp, testID, cardTestID, maxWidth, title, subtitle, footer, }: Readonly<AuthScreenProps>): ReactElement;
|
|
131
131
|
|
|
132
|
-
/**
|
|
133
|
-
* Label bags for the auth components.
|
|
134
|
-
*
|
|
135
|
-
* `@dloizides/auth-web` ships **no** translation framework — it is i18n-agnostic
|
|
136
|
-
* by design (each app already owns its own i18n). Every user-facing string a
|
|
137
|
-
* component renders is supplied by the consuming app through a typed `labels`
|
|
138
|
-
* prop. The app passes strings it has already localised with `FM()` / `t()`.
|
|
139
|
-
*
|
|
140
|
-
* Each bag has a `DEFAULT_*` constant (English) so a component renders sensibly
|
|
141
|
-
* with no `labels` prop and a consuming app can spread-override only the keys
|
|
142
|
-
* it wants to change.
|
|
143
|
-
*/
|
|
144
132
|
/** Strings rendered by `<LoginForm>`. */
|
|
145
133
|
interface LoginFormLabels {
|
|
146
134
|
title: string;
|
|
@@ -162,6 +150,8 @@ interface LoginFormLabels {
|
|
|
162
150
|
/** Shown when one or both fields are empty on submit. */
|
|
163
151
|
missingFields: string;
|
|
164
152
|
}
|
|
153
|
+
declare const DEFAULT_LOGIN_LABELS: LoginFormLabels;
|
|
154
|
+
|
|
165
155
|
/** Strings rendered by `<ForgotPasswordForm>`. */
|
|
166
156
|
interface ForgotPasswordFormLabels {
|
|
167
157
|
title: string;
|
|
@@ -189,6 +179,9 @@ interface ForgotPasswordFieldsLabels extends ForgotPasswordFormLabels {
|
|
|
189
179
|
/** The "close" button shown on the success state. */
|
|
190
180
|
close: string;
|
|
191
181
|
}
|
|
182
|
+
declare const DEFAULT_FORGOT_PASSWORD_LABELS: ForgotPasswordFormLabels;
|
|
183
|
+
declare const DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS: ForgotPasswordFieldsLabels;
|
|
184
|
+
|
|
192
185
|
/** Strings rendered by `<OtpForm>` — the two-step email-OTP login form. */
|
|
193
186
|
interface OtpFormLabels {
|
|
194
187
|
/** Title shown on the request-a-code step. */
|
|
@@ -224,6 +217,8 @@ interface OtpFormLabels {
|
|
|
224
217
|
/** The "use a different email" link text — returns to step 1. */
|
|
225
218
|
changeEmail: string;
|
|
226
219
|
}
|
|
220
|
+
declare const DEFAULT_OTP_LABELS: OtpFormLabels;
|
|
221
|
+
|
|
227
222
|
/** Strings rendered by `<PinForm>` — the single-step event-PIN login form. */
|
|
228
223
|
interface PinFormLabels {
|
|
229
224
|
/** Title shown above the PIN field. */
|
|
@@ -241,6 +236,8 @@ interface PinFormLabels {
|
|
|
241
236
|
/** Generic "that PIN was wrong / expired / locked out" message. */
|
|
242
237
|
invalidPin: string;
|
|
243
238
|
}
|
|
239
|
+
declare const DEFAULT_PIN_LABELS: PinFormLabels;
|
|
240
|
+
|
|
244
241
|
/**
|
|
245
242
|
* Strings rendered by `<DevicePinUnlockScreen>` — the returning-device unlock
|
|
246
243
|
* gate. `{name}` / `{count}` placeholders are substituted by the component.
|
|
@@ -336,6 +333,10 @@ interface DevicePinSettingsLabels {
|
|
|
336
333
|
/** Error shown when disabling fails. */
|
|
337
334
|
disableFailed: string;
|
|
338
335
|
}
|
|
336
|
+
declare const DEFAULT_DEVICE_PIN_UNLOCK_LABELS: DevicePinUnlockLabels;
|
|
337
|
+
declare const DEFAULT_DEVICE_PIN_ENROLL_LABELS: DevicePinEnrollLabels;
|
|
338
|
+
declare const DEFAULT_DEVICE_PIN_SETTINGS_LABELS: DevicePinSettingsLabels;
|
|
339
|
+
|
|
339
340
|
/** Strings rendered by `<PasskeyLoginButton>` — the login-surface passkey CTA. */
|
|
340
341
|
interface PasskeyLoginLabels {
|
|
341
342
|
/** The "sign in with a passkey" button. */
|
|
@@ -365,6 +366,9 @@ interface PasskeySettingsLabels {
|
|
|
365
366
|
/** Success line shown after returning from a registration. */
|
|
366
367
|
registeredSuccess: string;
|
|
367
368
|
}
|
|
369
|
+
declare const DEFAULT_PASSKEY_LOGIN_LABELS: PasskeyLoginLabels;
|
|
370
|
+
declare const DEFAULT_PASSKEY_SETTINGS_LABELS: PasskeySettingsLabels;
|
|
371
|
+
|
|
368
372
|
/** Strings rendered by `<PreferredMethodSettingsCard>` — the cross-device default-method picker. */
|
|
369
373
|
interface PreferredMethodSettingsLabels {
|
|
370
374
|
title: string;
|
|
@@ -391,6 +395,9 @@ interface PreferredMethodHintLabels {
|
|
|
391
395
|
/** Full sentence shown when the cached preference is passkey. */
|
|
392
396
|
passkey: string;
|
|
393
397
|
}
|
|
398
|
+
declare const DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS: PreferredMethodSettingsLabels;
|
|
399
|
+
declare const DEFAULT_PREFERRED_METHOD_HINT_LABELS: PreferredMethodHintLabels;
|
|
400
|
+
|
|
394
401
|
/** Strings rendered by `<DemoCredentialsHint>` — the public-demo credentials panel. */
|
|
395
402
|
interface DemoCredentialsHintLabels {
|
|
396
403
|
/** Panel heading (e.g. "Demo access"). */
|
|
@@ -405,7 +412,20 @@ interface DemoCredentialsHintLabels {
|
|
|
405
412
|
useCredentials: string;
|
|
406
413
|
/** Accessibility hint for that button. */
|
|
407
414
|
useCredentialsHint: string;
|
|
415
|
+
/**
|
|
416
|
+
* The collapsed disclosure trigger (e.g. "Try the demo").
|
|
417
|
+
*
|
|
418
|
+
* Keep the word "demo" in it. This one line is the ONLY thing an evaluator
|
|
419
|
+
* scanning the page has to find, so it must be searchable by the word they
|
|
420
|
+
* are looking for — a coy label like "Just looking?" is discreet at the cost
|
|
421
|
+
* of being undiscoverable, which defeats the point of shipping a demo.
|
|
422
|
+
*/
|
|
423
|
+
toggle: string;
|
|
424
|
+
/** Accessibility hint for the disclosure trigger. */
|
|
425
|
+
toggleHint: string;
|
|
408
426
|
}
|
|
427
|
+
declare const DEFAULT_DEMO_CREDENTIALS_HINT_LABELS: DemoCredentialsHintLabels;
|
|
428
|
+
|
|
409
429
|
/** Strings rendered by `<ResetPasswordForm>`. */
|
|
410
430
|
interface ResetPasswordFormLabels {
|
|
411
431
|
title: string;
|
|
@@ -427,19 +447,6 @@ interface ResetPasswordFormLabels {
|
|
|
427
447
|
/** Error: a network / 5xx failure. */
|
|
428
448
|
errorNetwork: string;
|
|
429
449
|
}
|
|
430
|
-
declare const DEFAULT_LOGIN_LABELS: LoginFormLabels;
|
|
431
|
-
declare const DEFAULT_FORGOT_PASSWORD_LABELS: ForgotPasswordFormLabels;
|
|
432
|
-
declare const DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS: ForgotPasswordFieldsLabels;
|
|
433
|
-
declare const DEFAULT_OTP_LABELS: OtpFormLabels;
|
|
434
|
-
declare const DEFAULT_PIN_LABELS: PinFormLabels;
|
|
435
|
-
declare const DEFAULT_DEVICE_PIN_UNLOCK_LABELS: DevicePinUnlockLabels;
|
|
436
|
-
declare const DEFAULT_DEVICE_PIN_ENROLL_LABELS: DevicePinEnrollLabels;
|
|
437
|
-
declare const DEFAULT_DEVICE_PIN_SETTINGS_LABELS: DevicePinSettingsLabels;
|
|
438
|
-
declare const DEFAULT_PASSKEY_LOGIN_LABELS: PasskeyLoginLabels;
|
|
439
|
-
declare const DEFAULT_PASSKEY_SETTINGS_LABELS: PasskeySettingsLabels;
|
|
440
|
-
declare const DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS: PreferredMethodSettingsLabels;
|
|
441
|
-
declare const DEFAULT_PREFERRED_METHOD_HINT_LABELS: PreferredMethodHintLabels;
|
|
442
|
-
declare const DEFAULT_DEMO_CREDENTIALS_HINT_LABELS: DemoCredentialsHintLabels;
|
|
443
450
|
declare const DEFAULT_RESET_PASSWORD_LABELS: ResetPasswordFormLabels;
|
|
444
451
|
|
|
445
452
|
/**
|
|
@@ -464,17 +471,8 @@ declare const enum PrefillIntent {
|
|
|
464
471
|
}
|
|
465
472
|
|
|
466
473
|
/**
|
|
467
|
-
* `<LoginForm
|
|
468
|
-
*
|
|
469
|
-
* The "themeable component" half of the package design: drop it in, pass a
|
|
470
|
-
* `client`, a `theme` (or wrap in `<AuthThemeProvider>`) and a localised
|
|
471
|
-
* `labels` bag, and you have a branded login surface. It is built on the
|
|
472
|
-
* headless `useBffAuth` hook, so the ready-made and custom-layout paths share
|
|
473
|
-
* one code path.
|
|
474
|
-
*
|
|
475
|
-
* The package ships no router and no i18n. `onSuccess` hands the signed-in
|
|
476
|
-
* `BffUser` back to the app, which decides where to navigate (typically via
|
|
477
|
-
* `resolvePostLoginRoute`). All copy comes from `labels`.
|
|
474
|
+
* Props for `<LoginForm>`, split out of the component file to keep the render
|
|
475
|
+
* body under the component size limit. Purely a type module — no runtime code.
|
|
478
476
|
*/
|
|
479
477
|
|
|
480
478
|
interface LoginFormProps {
|
|
@@ -531,6 +529,21 @@ interface LoginFormProps {
|
|
|
531
529
|
*/
|
|
532
530
|
prefillIntent?: PrefillIntent;
|
|
533
531
|
}
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* `<LoginForm>` — the ready-made, themeable password-login form.
|
|
535
|
+
*
|
|
536
|
+
* The "themeable component" half of the package design: drop it in, pass a
|
|
537
|
+
* `client`, a `theme` (or wrap in `<AuthThemeProvider>`) and a localised
|
|
538
|
+
* `labels` bag, and you have a branded login surface. It is built on the
|
|
539
|
+
* headless `useBffAuth` hook, so the ready-made and custom-layout paths share
|
|
540
|
+
* one code path.
|
|
541
|
+
*
|
|
542
|
+
* The package ships no router and no i18n. `onSuccess` hands the signed-in
|
|
543
|
+
* `BffUser` back to the app, which decides where to navigate (typically via
|
|
544
|
+
* `resolvePostLoginRoute`). All copy comes from `labels`.
|
|
545
|
+
*/
|
|
546
|
+
|
|
534
547
|
/** Themeable password-login form built on `useBffAuth`. */
|
|
535
548
|
declare function LoginForm({ client, theme: themeProp, labels: labelsProp, onSuccess, onForgotPassword, onSignUp, testIdPrefix, chromeless, initialUsername, initialPassword, prefillNonce, prefillIntent, }: Readonly<LoginFormProps>): ReactElement;
|
|
536
549
|
|
|
@@ -1284,7 +1297,35 @@ interface PreferredMethodHintProps {
|
|
|
1284
1297
|
declare function PreferredMethodHint({ method, theme: themeProp, labels: labelsProp, testIdPrefix, }: Readonly<PreferredMethodHintProps>): ReactElement | null;
|
|
1285
1298
|
|
|
1286
1299
|
/**
|
|
1287
|
-
* `<DemoCredentialsHint>`
|
|
1300
|
+
* How `<DemoCredentialsHint>` presents itself on the login surface.
|
|
1301
|
+
*
|
|
1302
|
+
* The two variants answer opposite questions, and the choice is a product
|
|
1303
|
+
* decision rather than a styling one:
|
|
1304
|
+
*
|
|
1305
|
+
* - `Panel` assumes the page exists FOR the demo — a sales/marketing console
|
|
1306
|
+
* where every visitor is an evaluator. It advertises loudly.
|
|
1307
|
+
* - `Disclosure` assumes the page is a real customer's front door that ALSO
|
|
1308
|
+
* happens to offer a demo. Real account holders outnumber evaluators, so the
|
|
1309
|
+
* demo collapses behind one quiet line of text and costs them nothing.
|
|
1310
|
+
*
|
|
1311
|
+
* `Disclosure` is the default because the second case is the common one across
|
|
1312
|
+
* the estate: every product login screen is a page paying customers use daily.
|
|
1313
|
+
*
|
|
1314
|
+
* ⚠️ "Discreet" is achieved with SIZE, WEIGHT and POSITION — never by lowering
|
|
1315
|
+
* contrast. Both variants draw their text from `colors.textSecondary`, a token
|
|
1316
|
+
* every app already holds to the WCAG AA 4.5:1 floor. Dimming this further with
|
|
1317
|
+
* opacity would trade an accessibility guarantee for a visual preference; if a
|
|
1318
|
+
* consuming app's `textSecondary` fails AA, that is the app's token to fix.
|
|
1319
|
+
*/
|
|
1320
|
+
declare const enum DemoCredentialsHintVariant {
|
|
1321
|
+
/** Always-open inset panel with a brand rail. The original presentation. */
|
|
1322
|
+
Panel = "panel",
|
|
1323
|
+
/** One quiet "try the demo" line that expands the credentials on tap. */
|
|
1324
|
+
Disclosure = "disclosure"
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* `<DemoCredentialsHint>` — the public-demo credentials surface.
|
|
1288
1329
|
*
|
|
1289
1330
|
* Mount on the login surface of a product with an OPEN demo account whose
|
|
1290
1331
|
* credentials are already published (typically on the marketing site). It shows
|
|
@@ -1300,9 +1341,36 @@ declare function PreferredMethodHint({ method, theme: themeProp, labels: labelsP
|
|
|
1300
1341
|
* Fails closed: no credentials (or a half-configured pair) renders `null` — zero
|
|
1301
1342
|
* DOM — so a misconfigured env var can never publish an empty demo panel.
|
|
1302
1343
|
*
|
|
1303
|
-
*
|
|
1304
|
-
*
|
|
1305
|
-
*
|
|
1344
|
+
* ## Two variants, and why the default changed in 1.13.0
|
|
1345
|
+
*
|
|
1346
|
+
* Originally this only rendered an always-open panel above the form. That is
|
|
1347
|
+
* right for a page whose whole purpose IS the demo, and wrong for the far more
|
|
1348
|
+
* common case: a login screen paying customers use every day, where an
|
|
1349
|
+
* unmissable "here are some credentials" block is noise at best and a trust
|
|
1350
|
+
* problem at worst.
|
|
1351
|
+
*
|
|
1352
|
+
* `DemoCredentialsHintVariant.Disclosure` — now the default — collapses the
|
|
1353
|
+
* whole thing to one quiet line ("Try the demo") that expands on tap. Pass
|
|
1354
|
+
* `variant={DemoCredentialsHintVariant.Panel}` to keep the original block.
|
|
1355
|
+
*
|
|
1356
|
+
* ⚠️ Two things this deliberately does NOT do to achieve discretion:
|
|
1357
|
+
*
|
|
1358
|
+
* - **It does not lower contrast.** The trigger uses `colors.textSecondary`,
|
|
1359
|
+
* the same AA-held token as every other piece of helper copy. Discretion is
|
|
1360
|
+
* carried by size, placement and the absence of chrome.
|
|
1361
|
+
* - **It does not hide from assistive tech.** The trigger is a real focusable
|
|
1362
|
+
* button carrying `accessibilityState.expanded`, so a screen reader
|
|
1363
|
+
* announces both that it exists and whether it is open. Visually quiet must
|
|
1364
|
+
* not mean absent — a demo nobody can find is a demo nobody uses.
|
|
1365
|
+
*
|
|
1366
|
+
* ## Layout stability
|
|
1367
|
+
*
|
|
1368
|
+
* The expanded body renders BELOW the trigger, and the component is designed to
|
|
1369
|
+
* sit BELOW `<LoginForm>` (see the zygos login route). Expanding therefore grows
|
|
1370
|
+
* the card downward and never displaces the username or password inputs the
|
|
1371
|
+
* visitor may already be interacting with. Mounting it ABOVE the form would make
|
|
1372
|
+
* every expansion shove the fields down the page — precisely the jarring
|
|
1373
|
+
* behaviour a disclosure exists to avoid.
|
|
1306
1374
|
*/
|
|
1307
1375
|
|
|
1308
1376
|
interface DemoCredentialsHintProps {
|
|
@@ -1311,6 +1379,11 @@ interface DemoCredentialsHintProps {
|
|
|
1311
1379
|
* username or password — renders nothing at all.
|
|
1312
1380
|
*/
|
|
1313
1381
|
credentials?: DemoCredentials;
|
|
1382
|
+
/**
|
|
1383
|
+
* Presentation. Defaults to `Disclosure` (one quiet expandable line); pass
|
|
1384
|
+
* `Panel` for the original always-open block.
|
|
1385
|
+
*/
|
|
1386
|
+
variant?: DemoCredentialsHintVariant;
|
|
1314
1387
|
/** Explicit theme; overrides any `<AuthThemeProvider>`. */
|
|
1315
1388
|
theme?: AuthTheme;
|
|
1316
1389
|
/** Localised copy. Partial — unspecified keys fall back to English defaults. */
|
|
@@ -1319,13 +1392,13 @@ interface DemoCredentialsHintProps {
|
|
|
1319
1392
|
testIdPrefix?: string;
|
|
1320
1393
|
/**
|
|
1321
1394
|
* Called with the resolved credentials when the user taps "use these
|
|
1322
|
-
* credentials". Omit to render
|
|
1323
|
-
*
|
|
1395
|
+
* credentials". Omit to render read-only (no button) — the values are still
|
|
1396
|
+
* selectable, so a visitor can copy them by hand.
|
|
1324
1397
|
*/
|
|
1325
1398
|
onUse?: (credentials: DemoCredentials) => void;
|
|
1326
1399
|
}
|
|
1327
|
-
/** Themeable public-demo credentials
|
|
1328
|
-
declare function DemoCredentialsHint({ credentials, theme: themeProp, labels: labelsProp, testIdPrefix, onUse, }: Readonly<DemoCredentialsHintProps>): ReactElement | null;
|
|
1400
|
+
/** Themeable public-demo credentials surface. Renders `null` when there is no demo. */
|
|
1401
|
+
declare function DemoCredentialsHint({ credentials, variant, theme: themeProp, labels: labelsProp, testIdPrefix, onUse, }: Readonly<DemoCredentialsHintProps>): ReactElement | null;
|
|
1329
1402
|
|
|
1330
1403
|
/**
|
|
1331
1404
|
* React context for the `AuthTheme`.
|
|
@@ -1436,6 +1509,7 @@ declare const AuthTestIds: {
|
|
|
1436
1509
|
readonly demoCredentialsUsername: "auth-demo-credentials-username";
|
|
1437
1510
|
readonly demoCredentialsPassword: "auth-demo-credentials-password";
|
|
1438
1511
|
readonly demoCredentialsUseButton: "auth-demo-credentials-use";
|
|
1512
|
+
readonly demoCredentialsToggle: "auth-demo-credentials-toggle";
|
|
1439
1513
|
};
|
|
1440
1514
|
/** Apply an optional prefix to a base test ID. */
|
|
1441
1515
|
declare function withTestIdPrefix(baseId: string, prefix?: string): string;
|
|
@@ -2253,4 +2327,4 @@ declare function validatePasswordPolicy(password: string): PasswordPolicyError[]
|
|
|
2253
2327
|
/** `true` when the password satisfies every policy rule. */
|
|
2254
2328
|
declare function isPasswordValid(password: string): boolean;
|
|
2255
2329
|
|
|
2256
|
-
export { AuthScreen, type AuthScreenProps, AuthTestIds, type AuthTheme, type AuthThemeColors, AuthThemeProvider, type AuthThemeProviderProps, type AuthThemeRadii, type AuthThemeSpacing, type AuthThemeTypography, BffAuthStatus, type BffDeviceState, type BffLoginConfig, type BffLogoutClient, type CreateBffAuthClientOptions, DEFAULT_AUTH_CARD_MAX_WIDTH, DEFAULT_DEMO_CREDENTIALS_HINT_LABELS, DEFAULT_DEVICE_PIN_ENROLL_LABELS, DEFAULT_DEVICE_PIN_SETTINGS_LABELS, DEFAULT_DEVICE_PIN_UNLOCK_LABELS, DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS, DEFAULT_FORGOT_PASSWORD_LABELS, DEFAULT_LOGIN_LABELS, DEFAULT_OTP_LABELS, DEFAULT_PASSKEY_LOGIN_LABELS, DEFAULT_PASSKEY_SETTINGS_LABELS, DEFAULT_PIN_LABELS, DEFAULT_PREFERRED_METHOD_HINT_LABELS, DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS, DEFAULT_RESET_PASSWORD_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, type DemoCredentialsHintLabels, type DemoCredentialsHintProps, type DemoCredentialsHintWiring, type DemoCredentialsLoginFormProps, type DevicePinCapableClient, type DevicePinDisableCapableClient, type DevicePinEnrollCapableClient, DevicePinEnrollErrorKey, DevicePinEnrollForm, type DevicePinEnrollFormProps, type DevicePinEnrollLabels, type DevicePinEnrollResult, DevicePinErrorKey, DevicePinInput, type DevicePinInputProps, DevicePinLengthPicker, type DevicePinLengthPickerProps, DevicePinOffer, type DevicePinOfferProps, DevicePinSettingsCard, type DevicePinSettingsCardProps, type DevicePinSettingsLabels, type DevicePinUnlockCapableClient, type DevicePinUnlockLabels, type DevicePinUnlockResult, DevicePinUnlockScreen, type DevicePinUnlockScreenProps, type DevicePinUnlockedUser, ForgotPasswordFields, type ForgotPasswordFieldsLabels, type ForgotPasswordFieldsProps, ForgotPasswordForm, type ForgotPasswordFormLabels, type ForgotPasswordFormProps, type LoginConfigCapableClient, LoginForm, type LoginFormLabels, type LoginFormProps, OtpForm, type OtpFormLabels, type OtpFormProps, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, type PasskeyErrorCode, PasskeyLoginButton, type PasskeyLoginButtonProps, type PasskeyLoginLabels, PasskeySettingsCard, type PasskeySettingsCardProps, type PasskeySettingsLabels, PasswordPolicyError, type PerformBffLogoutOptions, PinForm, type PinFormLabels, type PinFormProps, type PreferencesClientOptions, type PreferredMethodClient, PreferredMethodHint, type PreferredMethodHintLabels, type PreferredMethodHintProps, PreferredMethodSettingsCard, type PreferredMethodSettingsCardProps, type PreferredMethodSettingsLabels, PrefillIntent, ResetPasswordError, ResetPasswordForm, type ResetPasswordFormLabels, type ResetPasswordFormProps, type RoleRoute, type RoleRouteTable, type UseBffAuthOptions, type UseBffAuthResult, type UseBffForgotPasswordOptions, type UseBffLoginConfigResult, type UseBffResetPasswordOptions, type UseDemoCredentialsOptions, type UseDemoCredentialsResult, type UseDevicePinDisableArgs, type UseDevicePinDisableResult, type UseDevicePinEnrollArgs, type UseDevicePinEnrollResult, type UseDevicePinUnlockArgs, type UseDevicePinUnlockResult, type UseForgotPasswordSubmitArgs, type UseForgotPasswordSubmitResult, type UseOtpLoginOptions, type UseOtpLoginResult, type UsePasskeyCeremonyOptions, type UsePasskeyCeremonyResult, type UsePinLoginOptions, type UsePinLoginResult, type UsePreferredMethodSettingArgs, type UsePreferredMethodSettingResult, type UseResetPasswordFormArgs, type UseResetPasswordFormResult, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createPreferencesClient, defaultAuthTheme, isAllowedPinDigits, isPasswordValid, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, resolveAccessibleRoutes, resolveDemoCredentials, resolvePostLoginRoute, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
|
|
2330
|
+
export { AuthScreen, type AuthScreenProps, AuthTestIds, type AuthTheme, type AuthThemeColors, AuthThemeProvider, type AuthThemeProviderProps, type AuthThemeRadii, type AuthThemeSpacing, type AuthThemeTypography, BffAuthStatus, type BffDeviceState, type BffLoginConfig, type BffLogoutClient, type CreateBffAuthClientOptions, DEFAULT_AUTH_CARD_MAX_WIDTH, DEFAULT_DEMO_CREDENTIALS_HINT_LABELS, DEFAULT_DEVICE_PIN_ENROLL_LABELS, DEFAULT_DEVICE_PIN_SETTINGS_LABELS, DEFAULT_DEVICE_PIN_UNLOCK_LABELS, DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS, DEFAULT_FORGOT_PASSWORD_LABELS, DEFAULT_LOGIN_LABELS, DEFAULT_OTP_LABELS, DEFAULT_PASSKEY_LOGIN_LABELS, DEFAULT_PASSKEY_SETTINGS_LABELS, DEFAULT_PIN_LABELS, DEFAULT_PREFERRED_METHOD_HINT_LABELS, DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS, DEFAULT_RESET_PASSWORD_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, type DemoCredentialsHintLabels, type DemoCredentialsHintProps, DemoCredentialsHintVariant, type DemoCredentialsHintWiring, type DemoCredentialsLoginFormProps, type DevicePinCapableClient, type DevicePinDisableCapableClient, type DevicePinEnrollCapableClient, DevicePinEnrollErrorKey, DevicePinEnrollForm, type DevicePinEnrollFormProps, type DevicePinEnrollLabels, type DevicePinEnrollResult, DevicePinErrorKey, DevicePinInput, type DevicePinInputProps, DevicePinLengthPicker, type DevicePinLengthPickerProps, DevicePinOffer, type DevicePinOfferProps, DevicePinSettingsCard, type DevicePinSettingsCardProps, type DevicePinSettingsLabels, type DevicePinUnlockCapableClient, type DevicePinUnlockLabels, type DevicePinUnlockResult, DevicePinUnlockScreen, type DevicePinUnlockScreenProps, type DevicePinUnlockedUser, ForgotPasswordFields, type ForgotPasswordFieldsLabels, type ForgotPasswordFieldsProps, ForgotPasswordForm, type ForgotPasswordFormLabels, type ForgotPasswordFormProps, type LoginConfigCapableClient, LoginForm, type LoginFormLabels, type LoginFormProps, OtpForm, type OtpFormLabels, type OtpFormProps, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, type PasskeyErrorCode, PasskeyLoginButton, type PasskeyLoginButtonProps, type PasskeyLoginLabels, PasskeySettingsCard, type PasskeySettingsCardProps, type PasskeySettingsLabels, PasswordPolicyError, type PerformBffLogoutOptions, PinForm, type PinFormLabels, type PinFormProps, type PreferencesClientOptions, type PreferredMethodClient, PreferredMethodHint, type PreferredMethodHintLabels, type PreferredMethodHintProps, PreferredMethodSettingsCard, type PreferredMethodSettingsCardProps, type PreferredMethodSettingsLabels, PrefillIntent, ResetPasswordError, ResetPasswordForm, type ResetPasswordFormLabels, type ResetPasswordFormProps, type RoleRoute, type RoleRouteTable, type UseBffAuthOptions, type UseBffAuthResult, type UseBffForgotPasswordOptions, type UseBffLoginConfigResult, type UseBffResetPasswordOptions, type UseDemoCredentialsOptions, type UseDemoCredentialsResult, type UseDevicePinDisableArgs, type UseDevicePinDisableResult, type UseDevicePinEnrollArgs, type UseDevicePinEnrollResult, type UseDevicePinUnlockArgs, type UseDevicePinUnlockResult, type UseForgotPasswordSubmitArgs, type UseForgotPasswordSubmitResult, type UseOtpLoginOptions, type UseOtpLoginResult, type UsePasskeyCeremonyOptions, type UsePasskeyCeremonyResult, type UsePinLoginOptions, type UsePinLoginResult, type UsePreferredMethodSettingArgs, type UsePreferredMethodSettingResult, type UseResetPasswordFormArgs, type UseResetPasswordFormResult, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createPreferencesClient, defaultAuthTheme, isAllowedPinDigits, isPasswordValid, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, resolveAccessibleRoutes, resolveDemoCredentials, resolvePostLoginRoute, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
|
package/dist/index.d.ts
CHANGED
|
@@ -129,18 +129,6 @@ interface AuthScreenProps {
|
|
|
129
129
|
/** The screen-level auth composition: one centered card the controls share. */
|
|
130
130
|
declare function AuthScreen({ children, theme: themeProp, testID, cardTestID, maxWidth, title, subtitle, footer, }: Readonly<AuthScreenProps>): ReactElement;
|
|
131
131
|
|
|
132
|
-
/**
|
|
133
|
-
* Label bags for the auth components.
|
|
134
|
-
*
|
|
135
|
-
* `@dloizides/auth-web` ships **no** translation framework — it is i18n-agnostic
|
|
136
|
-
* by design (each app already owns its own i18n). Every user-facing string a
|
|
137
|
-
* component renders is supplied by the consuming app through a typed `labels`
|
|
138
|
-
* prop. The app passes strings it has already localised with `FM()` / `t()`.
|
|
139
|
-
*
|
|
140
|
-
* Each bag has a `DEFAULT_*` constant (English) so a component renders sensibly
|
|
141
|
-
* with no `labels` prop and a consuming app can spread-override only the keys
|
|
142
|
-
* it wants to change.
|
|
143
|
-
*/
|
|
144
132
|
/** Strings rendered by `<LoginForm>`. */
|
|
145
133
|
interface LoginFormLabels {
|
|
146
134
|
title: string;
|
|
@@ -162,6 +150,8 @@ interface LoginFormLabels {
|
|
|
162
150
|
/** Shown when one or both fields are empty on submit. */
|
|
163
151
|
missingFields: string;
|
|
164
152
|
}
|
|
153
|
+
declare const DEFAULT_LOGIN_LABELS: LoginFormLabels;
|
|
154
|
+
|
|
165
155
|
/** Strings rendered by `<ForgotPasswordForm>`. */
|
|
166
156
|
interface ForgotPasswordFormLabels {
|
|
167
157
|
title: string;
|
|
@@ -189,6 +179,9 @@ interface ForgotPasswordFieldsLabels extends ForgotPasswordFormLabels {
|
|
|
189
179
|
/** The "close" button shown on the success state. */
|
|
190
180
|
close: string;
|
|
191
181
|
}
|
|
182
|
+
declare const DEFAULT_FORGOT_PASSWORD_LABELS: ForgotPasswordFormLabels;
|
|
183
|
+
declare const DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS: ForgotPasswordFieldsLabels;
|
|
184
|
+
|
|
192
185
|
/** Strings rendered by `<OtpForm>` — the two-step email-OTP login form. */
|
|
193
186
|
interface OtpFormLabels {
|
|
194
187
|
/** Title shown on the request-a-code step. */
|
|
@@ -224,6 +217,8 @@ interface OtpFormLabels {
|
|
|
224
217
|
/** The "use a different email" link text — returns to step 1. */
|
|
225
218
|
changeEmail: string;
|
|
226
219
|
}
|
|
220
|
+
declare const DEFAULT_OTP_LABELS: OtpFormLabels;
|
|
221
|
+
|
|
227
222
|
/** Strings rendered by `<PinForm>` — the single-step event-PIN login form. */
|
|
228
223
|
interface PinFormLabels {
|
|
229
224
|
/** Title shown above the PIN field. */
|
|
@@ -241,6 +236,8 @@ interface PinFormLabels {
|
|
|
241
236
|
/** Generic "that PIN was wrong / expired / locked out" message. */
|
|
242
237
|
invalidPin: string;
|
|
243
238
|
}
|
|
239
|
+
declare const DEFAULT_PIN_LABELS: PinFormLabels;
|
|
240
|
+
|
|
244
241
|
/**
|
|
245
242
|
* Strings rendered by `<DevicePinUnlockScreen>` — the returning-device unlock
|
|
246
243
|
* gate. `{name}` / `{count}` placeholders are substituted by the component.
|
|
@@ -336,6 +333,10 @@ interface DevicePinSettingsLabels {
|
|
|
336
333
|
/** Error shown when disabling fails. */
|
|
337
334
|
disableFailed: string;
|
|
338
335
|
}
|
|
336
|
+
declare const DEFAULT_DEVICE_PIN_UNLOCK_LABELS: DevicePinUnlockLabels;
|
|
337
|
+
declare const DEFAULT_DEVICE_PIN_ENROLL_LABELS: DevicePinEnrollLabels;
|
|
338
|
+
declare const DEFAULT_DEVICE_PIN_SETTINGS_LABELS: DevicePinSettingsLabels;
|
|
339
|
+
|
|
339
340
|
/** Strings rendered by `<PasskeyLoginButton>` — the login-surface passkey CTA. */
|
|
340
341
|
interface PasskeyLoginLabels {
|
|
341
342
|
/** The "sign in with a passkey" button. */
|
|
@@ -365,6 +366,9 @@ interface PasskeySettingsLabels {
|
|
|
365
366
|
/** Success line shown after returning from a registration. */
|
|
366
367
|
registeredSuccess: string;
|
|
367
368
|
}
|
|
369
|
+
declare const DEFAULT_PASSKEY_LOGIN_LABELS: PasskeyLoginLabels;
|
|
370
|
+
declare const DEFAULT_PASSKEY_SETTINGS_LABELS: PasskeySettingsLabels;
|
|
371
|
+
|
|
368
372
|
/** Strings rendered by `<PreferredMethodSettingsCard>` — the cross-device default-method picker. */
|
|
369
373
|
interface PreferredMethodSettingsLabels {
|
|
370
374
|
title: string;
|
|
@@ -391,6 +395,9 @@ interface PreferredMethodHintLabels {
|
|
|
391
395
|
/** Full sentence shown when the cached preference is passkey. */
|
|
392
396
|
passkey: string;
|
|
393
397
|
}
|
|
398
|
+
declare const DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS: PreferredMethodSettingsLabels;
|
|
399
|
+
declare const DEFAULT_PREFERRED_METHOD_HINT_LABELS: PreferredMethodHintLabels;
|
|
400
|
+
|
|
394
401
|
/** Strings rendered by `<DemoCredentialsHint>` — the public-demo credentials panel. */
|
|
395
402
|
interface DemoCredentialsHintLabels {
|
|
396
403
|
/** Panel heading (e.g. "Demo access"). */
|
|
@@ -405,7 +412,20 @@ interface DemoCredentialsHintLabels {
|
|
|
405
412
|
useCredentials: string;
|
|
406
413
|
/** Accessibility hint for that button. */
|
|
407
414
|
useCredentialsHint: string;
|
|
415
|
+
/**
|
|
416
|
+
* The collapsed disclosure trigger (e.g. "Try the demo").
|
|
417
|
+
*
|
|
418
|
+
* Keep the word "demo" in it. This one line is the ONLY thing an evaluator
|
|
419
|
+
* scanning the page has to find, so it must be searchable by the word they
|
|
420
|
+
* are looking for — a coy label like "Just looking?" is discreet at the cost
|
|
421
|
+
* of being undiscoverable, which defeats the point of shipping a demo.
|
|
422
|
+
*/
|
|
423
|
+
toggle: string;
|
|
424
|
+
/** Accessibility hint for the disclosure trigger. */
|
|
425
|
+
toggleHint: string;
|
|
408
426
|
}
|
|
427
|
+
declare const DEFAULT_DEMO_CREDENTIALS_HINT_LABELS: DemoCredentialsHintLabels;
|
|
428
|
+
|
|
409
429
|
/** Strings rendered by `<ResetPasswordForm>`. */
|
|
410
430
|
interface ResetPasswordFormLabels {
|
|
411
431
|
title: string;
|
|
@@ -427,19 +447,6 @@ interface ResetPasswordFormLabels {
|
|
|
427
447
|
/** Error: a network / 5xx failure. */
|
|
428
448
|
errorNetwork: string;
|
|
429
449
|
}
|
|
430
|
-
declare const DEFAULT_LOGIN_LABELS: LoginFormLabels;
|
|
431
|
-
declare const DEFAULT_FORGOT_PASSWORD_LABELS: ForgotPasswordFormLabels;
|
|
432
|
-
declare const DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS: ForgotPasswordFieldsLabels;
|
|
433
|
-
declare const DEFAULT_OTP_LABELS: OtpFormLabels;
|
|
434
|
-
declare const DEFAULT_PIN_LABELS: PinFormLabels;
|
|
435
|
-
declare const DEFAULT_DEVICE_PIN_UNLOCK_LABELS: DevicePinUnlockLabels;
|
|
436
|
-
declare const DEFAULT_DEVICE_PIN_ENROLL_LABELS: DevicePinEnrollLabels;
|
|
437
|
-
declare const DEFAULT_DEVICE_PIN_SETTINGS_LABELS: DevicePinSettingsLabels;
|
|
438
|
-
declare const DEFAULT_PASSKEY_LOGIN_LABELS: PasskeyLoginLabels;
|
|
439
|
-
declare const DEFAULT_PASSKEY_SETTINGS_LABELS: PasskeySettingsLabels;
|
|
440
|
-
declare const DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS: PreferredMethodSettingsLabels;
|
|
441
|
-
declare const DEFAULT_PREFERRED_METHOD_HINT_LABELS: PreferredMethodHintLabels;
|
|
442
|
-
declare const DEFAULT_DEMO_CREDENTIALS_HINT_LABELS: DemoCredentialsHintLabels;
|
|
443
450
|
declare const DEFAULT_RESET_PASSWORD_LABELS: ResetPasswordFormLabels;
|
|
444
451
|
|
|
445
452
|
/**
|
|
@@ -464,17 +471,8 @@ declare const enum PrefillIntent {
|
|
|
464
471
|
}
|
|
465
472
|
|
|
466
473
|
/**
|
|
467
|
-
* `<LoginForm
|
|
468
|
-
*
|
|
469
|
-
* The "themeable component" half of the package design: drop it in, pass a
|
|
470
|
-
* `client`, a `theme` (or wrap in `<AuthThemeProvider>`) and a localised
|
|
471
|
-
* `labels` bag, and you have a branded login surface. It is built on the
|
|
472
|
-
* headless `useBffAuth` hook, so the ready-made and custom-layout paths share
|
|
473
|
-
* one code path.
|
|
474
|
-
*
|
|
475
|
-
* The package ships no router and no i18n. `onSuccess` hands the signed-in
|
|
476
|
-
* `BffUser` back to the app, which decides where to navigate (typically via
|
|
477
|
-
* `resolvePostLoginRoute`). All copy comes from `labels`.
|
|
474
|
+
* Props for `<LoginForm>`, split out of the component file to keep the render
|
|
475
|
+
* body under the component size limit. Purely a type module — no runtime code.
|
|
478
476
|
*/
|
|
479
477
|
|
|
480
478
|
interface LoginFormProps {
|
|
@@ -531,6 +529,21 @@ interface LoginFormProps {
|
|
|
531
529
|
*/
|
|
532
530
|
prefillIntent?: PrefillIntent;
|
|
533
531
|
}
|
|
532
|
+
|
|
533
|
+
/**
|
|
534
|
+
* `<LoginForm>` — the ready-made, themeable password-login form.
|
|
535
|
+
*
|
|
536
|
+
* The "themeable component" half of the package design: drop it in, pass a
|
|
537
|
+
* `client`, a `theme` (or wrap in `<AuthThemeProvider>`) and a localised
|
|
538
|
+
* `labels` bag, and you have a branded login surface. It is built on the
|
|
539
|
+
* headless `useBffAuth` hook, so the ready-made and custom-layout paths share
|
|
540
|
+
* one code path.
|
|
541
|
+
*
|
|
542
|
+
* The package ships no router and no i18n. `onSuccess` hands the signed-in
|
|
543
|
+
* `BffUser` back to the app, which decides where to navigate (typically via
|
|
544
|
+
* `resolvePostLoginRoute`). All copy comes from `labels`.
|
|
545
|
+
*/
|
|
546
|
+
|
|
534
547
|
/** Themeable password-login form built on `useBffAuth`. */
|
|
535
548
|
declare function LoginForm({ client, theme: themeProp, labels: labelsProp, onSuccess, onForgotPassword, onSignUp, testIdPrefix, chromeless, initialUsername, initialPassword, prefillNonce, prefillIntent, }: Readonly<LoginFormProps>): ReactElement;
|
|
536
549
|
|
|
@@ -1284,7 +1297,35 @@ interface PreferredMethodHintProps {
|
|
|
1284
1297
|
declare function PreferredMethodHint({ method, theme: themeProp, labels: labelsProp, testIdPrefix, }: Readonly<PreferredMethodHintProps>): ReactElement | null;
|
|
1285
1298
|
|
|
1286
1299
|
/**
|
|
1287
|
-
* `<DemoCredentialsHint>`
|
|
1300
|
+
* How `<DemoCredentialsHint>` presents itself on the login surface.
|
|
1301
|
+
*
|
|
1302
|
+
* The two variants answer opposite questions, and the choice is a product
|
|
1303
|
+
* decision rather than a styling one:
|
|
1304
|
+
*
|
|
1305
|
+
* - `Panel` assumes the page exists FOR the demo — a sales/marketing console
|
|
1306
|
+
* where every visitor is an evaluator. It advertises loudly.
|
|
1307
|
+
* - `Disclosure` assumes the page is a real customer's front door that ALSO
|
|
1308
|
+
* happens to offer a demo. Real account holders outnumber evaluators, so the
|
|
1309
|
+
* demo collapses behind one quiet line of text and costs them nothing.
|
|
1310
|
+
*
|
|
1311
|
+
* `Disclosure` is the default because the second case is the common one across
|
|
1312
|
+
* the estate: every product login screen is a page paying customers use daily.
|
|
1313
|
+
*
|
|
1314
|
+
* ⚠️ "Discreet" is achieved with SIZE, WEIGHT and POSITION — never by lowering
|
|
1315
|
+
* contrast. Both variants draw their text from `colors.textSecondary`, a token
|
|
1316
|
+
* every app already holds to the WCAG AA 4.5:1 floor. Dimming this further with
|
|
1317
|
+
* opacity would trade an accessibility guarantee for a visual preference; if a
|
|
1318
|
+
* consuming app's `textSecondary` fails AA, that is the app's token to fix.
|
|
1319
|
+
*/
|
|
1320
|
+
declare const enum DemoCredentialsHintVariant {
|
|
1321
|
+
/** Always-open inset panel with a brand rail. The original presentation. */
|
|
1322
|
+
Panel = "panel",
|
|
1323
|
+
/** One quiet "try the demo" line that expands the credentials on tap. */
|
|
1324
|
+
Disclosure = "disclosure"
|
|
1325
|
+
}
|
|
1326
|
+
|
|
1327
|
+
/**
|
|
1328
|
+
* `<DemoCredentialsHint>` — the public-demo credentials surface.
|
|
1288
1329
|
*
|
|
1289
1330
|
* Mount on the login surface of a product with an OPEN demo account whose
|
|
1290
1331
|
* credentials are already published (typically on the marketing site). It shows
|
|
@@ -1300,9 +1341,36 @@ declare function PreferredMethodHint({ method, theme: themeProp, labels: labelsP
|
|
|
1300
1341
|
* Fails closed: no credentials (or a half-configured pair) renders `null` — zero
|
|
1301
1342
|
* DOM — so a misconfigured env var can never publish an empty demo panel.
|
|
1302
1343
|
*
|
|
1303
|
-
*
|
|
1304
|
-
*
|
|
1305
|
-
*
|
|
1344
|
+
* ## Two variants, and why the default changed in 1.13.0
|
|
1345
|
+
*
|
|
1346
|
+
* Originally this only rendered an always-open panel above the form. That is
|
|
1347
|
+
* right for a page whose whole purpose IS the demo, and wrong for the far more
|
|
1348
|
+
* common case: a login screen paying customers use every day, where an
|
|
1349
|
+
* unmissable "here are some credentials" block is noise at best and a trust
|
|
1350
|
+
* problem at worst.
|
|
1351
|
+
*
|
|
1352
|
+
* `DemoCredentialsHintVariant.Disclosure` — now the default — collapses the
|
|
1353
|
+
* whole thing to one quiet line ("Try the demo") that expands on tap. Pass
|
|
1354
|
+
* `variant={DemoCredentialsHintVariant.Panel}` to keep the original block.
|
|
1355
|
+
*
|
|
1356
|
+
* ⚠️ Two things this deliberately does NOT do to achieve discretion:
|
|
1357
|
+
*
|
|
1358
|
+
* - **It does not lower contrast.** The trigger uses `colors.textSecondary`,
|
|
1359
|
+
* the same AA-held token as every other piece of helper copy. Discretion is
|
|
1360
|
+
* carried by size, placement and the absence of chrome.
|
|
1361
|
+
* - **It does not hide from assistive tech.** The trigger is a real focusable
|
|
1362
|
+
* button carrying `accessibilityState.expanded`, so a screen reader
|
|
1363
|
+
* announces both that it exists and whether it is open. Visually quiet must
|
|
1364
|
+
* not mean absent — a demo nobody can find is a demo nobody uses.
|
|
1365
|
+
*
|
|
1366
|
+
* ## Layout stability
|
|
1367
|
+
*
|
|
1368
|
+
* The expanded body renders BELOW the trigger, and the component is designed to
|
|
1369
|
+
* sit BELOW `<LoginForm>` (see the zygos login route). Expanding therefore grows
|
|
1370
|
+
* the card downward and never displaces the username or password inputs the
|
|
1371
|
+
* visitor may already be interacting with. Mounting it ABOVE the form would make
|
|
1372
|
+
* every expansion shove the fields down the page — precisely the jarring
|
|
1373
|
+
* behaviour a disclosure exists to avoid.
|
|
1306
1374
|
*/
|
|
1307
1375
|
|
|
1308
1376
|
interface DemoCredentialsHintProps {
|
|
@@ -1311,6 +1379,11 @@ interface DemoCredentialsHintProps {
|
|
|
1311
1379
|
* username or password — renders nothing at all.
|
|
1312
1380
|
*/
|
|
1313
1381
|
credentials?: DemoCredentials;
|
|
1382
|
+
/**
|
|
1383
|
+
* Presentation. Defaults to `Disclosure` (one quiet expandable line); pass
|
|
1384
|
+
* `Panel` for the original always-open block.
|
|
1385
|
+
*/
|
|
1386
|
+
variant?: DemoCredentialsHintVariant;
|
|
1314
1387
|
/** Explicit theme; overrides any `<AuthThemeProvider>`. */
|
|
1315
1388
|
theme?: AuthTheme;
|
|
1316
1389
|
/** Localised copy. Partial — unspecified keys fall back to English defaults. */
|
|
@@ -1319,13 +1392,13 @@ interface DemoCredentialsHintProps {
|
|
|
1319
1392
|
testIdPrefix?: string;
|
|
1320
1393
|
/**
|
|
1321
1394
|
* Called with the resolved credentials when the user taps "use these
|
|
1322
|
-
* credentials". Omit to render
|
|
1323
|
-
*
|
|
1395
|
+
* credentials". Omit to render read-only (no button) — the values are still
|
|
1396
|
+
* selectable, so a visitor can copy them by hand.
|
|
1324
1397
|
*/
|
|
1325
1398
|
onUse?: (credentials: DemoCredentials) => void;
|
|
1326
1399
|
}
|
|
1327
|
-
/** Themeable public-demo credentials
|
|
1328
|
-
declare function DemoCredentialsHint({ credentials, theme: themeProp, labels: labelsProp, testIdPrefix, onUse, }: Readonly<DemoCredentialsHintProps>): ReactElement | null;
|
|
1400
|
+
/** Themeable public-demo credentials surface. Renders `null` when there is no demo. */
|
|
1401
|
+
declare function DemoCredentialsHint({ credentials, variant, theme: themeProp, labels: labelsProp, testIdPrefix, onUse, }: Readonly<DemoCredentialsHintProps>): ReactElement | null;
|
|
1329
1402
|
|
|
1330
1403
|
/**
|
|
1331
1404
|
* React context for the `AuthTheme`.
|
|
@@ -1436,6 +1509,7 @@ declare const AuthTestIds: {
|
|
|
1436
1509
|
readonly demoCredentialsUsername: "auth-demo-credentials-username";
|
|
1437
1510
|
readonly demoCredentialsPassword: "auth-demo-credentials-password";
|
|
1438
1511
|
readonly demoCredentialsUseButton: "auth-demo-credentials-use";
|
|
1512
|
+
readonly demoCredentialsToggle: "auth-demo-credentials-toggle";
|
|
1439
1513
|
};
|
|
1440
1514
|
/** Apply an optional prefix to a base test ID. */
|
|
1441
1515
|
declare function withTestIdPrefix(baseId: string, prefix?: string): string;
|
|
@@ -2253,4 +2327,4 @@ declare function validatePasswordPolicy(password: string): PasswordPolicyError[]
|
|
|
2253
2327
|
/** `true` when the password satisfies every policy rule. */
|
|
2254
2328
|
declare function isPasswordValid(password: string): boolean;
|
|
2255
2329
|
|
|
2256
|
-
export { AuthScreen, type AuthScreenProps, AuthTestIds, type AuthTheme, type AuthThemeColors, AuthThemeProvider, type AuthThemeProviderProps, type AuthThemeRadii, type AuthThemeSpacing, type AuthThemeTypography, BffAuthStatus, type BffDeviceState, type BffLoginConfig, type BffLogoutClient, type CreateBffAuthClientOptions, DEFAULT_AUTH_CARD_MAX_WIDTH, DEFAULT_DEMO_CREDENTIALS_HINT_LABELS, DEFAULT_DEVICE_PIN_ENROLL_LABELS, DEFAULT_DEVICE_PIN_SETTINGS_LABELS, DEFAULT_DEVICE_PIN_UNLOCK_LABELS, DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS, DEFAULT_FORGOT_PASSWORD_LABELS, DEFAULT_LOGIN_LABELS, DEFAULT_OTP_LABELS, DEFAULT_PASSKEY_LOGIN_LABELS, DEFAULT_PASSKEY_SETTINGS_LABELS, DEFAULT_PIN_LABELS, DEFAULT_PREFERRED_METHOD_HINT_LABELS, DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS, DEFAULT_RESET_PASSWORD_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, type DemoCredentialsHintLabels, type DemoCredentialsHintProps, type DemoCredentialsHintWiring, type DemoCredentialsLoginFormProps, type DevicePinCapableClient, type DevicePinDisableCapableClient, type DevicePinEnrollCapableClient, DevicePinEnrollErrorKey, DevicePinEnrollForm, type DevicePinEnrollFormProps, type DevicePinEnrollLabels, type DevicePinEnrollResult, DevicePinErrorKey, DevicePinInput, type DevicePinInputProps, DevicePinLengthPicker, type DevicePinLengthPickerProps, DevicePinOffer, type DevicePinOfferProps, DevicePinSettingsCard, type DevicePinSettingsCardProps, type DevicePinSettingsLabels, type DevicePinUnlockCapableClient, type DevicePinUnlockLabels, type DevicePinUnlockResult, DevicePinUnlockScreen, type DevicePinUnlockScreenProps, type DevicePinUnlockedUser, ForgotPasswordFields, type ForgotPasswordFieldsLabels, type ForgotPasswordFieldsProps, ForgotPasswordForm, type ForgotPasswordFormLabels, type ForgotPasswordFormProps, type LoginConfigCapableClient, LoginForm, type LoginFormLabels, type LoginFormProps, OtpForm, type OtpFormLabels, type OtpFormProps, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, type PasskeyErrorCode, PasskeyLoginButton, type PasskeyLoginButtonProps, type PasskeyLoginLabels, PasskeySettingsCard, type PasskeySettingsCardProps, type PasskeySettingsLabels, PasswordPolicyError, type PerformBffLogoutOptions, PinForm, type PinFormLabels, type PinFormProps, type PreferencesClientOptions, type PreferredMethodClient, PreferredMethodHint, type PreferredMethodHintLabels, type PreferredMethodHintProps, PreferredMethodSettingsCard, type PreferredMethodSettingsCardProps, type PreferredMethodSettingsLabels, PrefillIntent, ResetPasswordError, ResetPasswordForm, type ResetPasswordFormLabels, type ResetPasswordFormProps, type RoleRoute, type RoleRouteTable, type UseBffAuthOptions, type UseBffAuthResult, type UseBffForgotPasswordOptions, type UseBffLoginConfigResult, type UseBffResetPasswordOptions, type UseDemoCredentialsOptions, type UseDemoCredentialsResult, type UseDevicePinDisableArgs, type UseDevicePinDisableResult, type UseDevicePinEnrollArgs, type UseDevicePinEnrollResult, type UseDevicePinUnlockArgs, type UseDevicePinUnlockResult, type UseForgotPasswordSubmitArgs, type UseForgotPasswordSubmitResult, type UseOtpLoginOptions, type UseOtpLoginResult, type UsePasskeyCeremonyOptions, type UsePasskeyCeremonyResult, type UsePinLoginOptions, type UsePinLoginResult, type UsePreferredMethodSettingArgs, type UsePreferredMethodSettingResult, type UseResetPasswordFormArgs, type UseResetPasswordFormResult, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createPreferencesClient, defaultAuthTheme, isAllowedPinDigits, isPasswordValid, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, resolveAccessibleRoutes, resolveDemoCredentials, resolvePostLoginRoute, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
|
|
2330
|
+
export { AuthScreen, type AuthScreenProps, AuthTestIds, type AuthTheme, type AuthThemeColors, AuthThemeProvider, type AuthThemeProviderProps, type AuthThemeRadii, type AuthThemeSpacing, type AuthThemeTypography, BffAuthStatus, type BffDeviceState, type BffLoginConfig, type BffLogoutClient, type CreateBffAuthClientOptions, DEFAULT_AUTH_CARD_MAX_WIDTH, DEFAULT_DEMO_CREDENTIALS_HINT_LABELS, DEFAULT_DEVICE_PIN_ENROLL_LABELS, DEFAULT_DEVICE_PIN_SETTINGS_LABELS, DEFAULT_DEVICE_PIN_UNLOCK_LABELS, DEFAULT_FORGOT_PASSWORD_FIELDS_LABELS, DEFAULT_FORGOT_PASSWORD_LABELS, DEFAULT_LOGIN_LABELS, DEFAULT_OTP_LABELS, DEFAULT_PASSKEY_LOGIN_LABELS, DEFAULT_PASSKEY_SETTINGS_LABELS, DEFAULT_PIN_LABELS, DEFAULT_PREFERRED_METHOD_HINT_LABELS, DEFAULT_PREFERRED_METHOD_SETTINGS_LABELS, DEFAULT_RESET_PASSWORD_LABELS, DEVICE_PIN_ALLOWED_DIGITS, DEVICE_PIN_DEFAULT_DIGITS, DemoCredentialsHint, type DemoCredentialsHintLabels, type DemoCredentialsHintProps, DemoCredentialsHintVariant, type DemoCredentialsHintWiring, type DemoCredentialsLoginFormProps, type DevicePinCapableClient, type DevicePinDisableCapableClient, type DevicePinEnrollCapableClient, DevicePinEnrollErrorKey, DevicePinEnrollForm, type DevicePinEnrollFormProps, type DevicePinEnrollLabels, type DevicePinEnrollResult, DevicePinErrorKey, DevicePinInput, type DevicePinInputProps, DevicePinLengthPicker, type DevicePinLengthPickerProps, DevicePinOffer, type DevicePinOfferProps, DevicePinSettingsCard, type DevicePinSettingsCardProps, type DevicePinSettingsLabels, type DevicePinUnlockCapableClient, type DevicePinUnlockLabels, type DevicePinUnlockResult, DevicePinUnlockScreen, type DevicePinUnlockScreenProps, type DevicePinUnlockedUser, ForgotPasswordFields, type ForgotPasswordFieldsLabels, type ForgotPasswordFieldsProps, ForgotPasswordForm, type ForgotPasswordFormLabels, type ForgotPasswordFormProps, type LoginConfigCapableClient, LoginForm, type LoginFormLabels, type LoginFormProps, OtpForm, type OtpFormLabels, type OtpFormProps, OtpLoginStep, PASSWORD_MAX_LENGTH, PASSWORD_MIN_LENGTH, PasskeyCeremonyMode, PasskeyCeremonyStatus, type PasskeyErrorCode, PasskeyLoginButton, type PasskeyLoginButtonProps, type PasskeyLoginLabels, PasskeySettingsCard, type PasskeySettingsCardProps, type PasskeySettingsLabels, PasswordPolicyError, type PerformBffLogoutOptions, PinForm, type PinFormLabels, type PinFormProps, type PreferencesClientOptions, type PreferredMethodClient, PreferredMethodHint, type PreferredMethodHintLabels, type PreferredMethodHintProps, PreferredMethodSettingsCard, type PreferredMethodSettingsCardProps, type PreferredMethodSettingsLabels, PrefillIntent, ResetPasswordError, ResetPasswordForm, type ResetPasswordFormLabels, type ResetPasswordFormProps, type RoleRoute, type RoleRouteTable, type UseBffAuthOptions, type UseBffAuthResult, type UseBffForgotPasswordOptions, type UseBffLoginConfigResult, type UseBffResetPasswordOptions, type UseDemoCredentialsOptions, type UseDemoCredentialsResult, type UseDevicePinDisableArgs, type UseDevicePinDisableResult, type UseDevicePinEnrollArgs, type UseDevicePinEnrollResult, type UseDevicePinUnlockArgs, type UseDevicePinUnlockResult, type UseForgotPasswordSubmitArgs, type UseForgotPasswordSubmitResult, type UseOtpLoginOptions, type UseOtpLoginResult, type UsePasskeyCeremonyOptions, type UsePasskeyCeremonyResult, type UsePinLoginOptions, type UsePinLoginResult, type UsePreferredMethodSettingArgs, type UsePreferredMethodSettingResult, type UseResetPasswordFormArgs, type UseResetPasswordFormResult, cachePreferredMethod, clearCachedPreferredMethod, collectUserRoles, createBffAuthClient, createPreferencesClient, defaultAuthTheme, isAllowedPinDigits, isPasswordValid, isValidForgotPasswordEmail, performBffLogout, readCachedPreferredMethod, readPasskeyError, readPasskeyRegistered, resolveAccessibleRoutes, resolveDemoCredentials, resolvePostLoginRoute, startPasskeyLogin, startPasskeyRegistration, syncPreferredMethodFromServer, useAuthTheme, useBffAuth, useBffForgotPassword, useBffLoginConfig, useBffResetPassword, useDemoCredentials, useDevicePinDisable, useDevicePinEnroll, useDevicePinUnlock, useForgotPasswordSubmit, useOtpLogin, usePasskeyCeremony, usePinLogin, usePreferredMethodSetting, useResetPasswordForm, validatePasswordPolicy, withTestIdPrefix };
|