@nxgt/material 3.45.0 → 3.47.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 +63 -0
- package/README.md +10 -3
- package/dist/{async-slice-D9LAUgth.js → async-slice-DlvKCKAa.js} +2 -2
- package/dist/{button-b_kruV_L.js → button-yaltbQmC.js} +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-6O3t9GXt.js → chip-BqWbbr1b.js} +1 -1
- package/dist/{code-editor-BtDOgUET.js → code-editor-C9qBNoYb.js} +4 -4
- package/dist/code-editor.js +4 -4
- package/dist/{code-language-items-374m-OK8.js → code-language-items-DAHtfQ7W.js} +2 -2
- package/dist/{components-BG-BTfJP.js → components-DFPy96C3.js} +16282 -14755
- package/dist/components.js +26 -26
- package/dist/{dialog-8Ua9uuJW.js → dialog-CCCcnTIx.js} +4 -4
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-DJEeT1XT.js → dropdown-menu-Df8785nt.js} +1 -1
- package/dist/editor.js +7 -7
- package/dist/{empty-state-CrhrmNqn.js → empty-state-DcF4TBzi.js} +1 -1
- package/dist/hooks.js +28 -40
- package/dist/{i18n-provider-hrtFm9jD.js → i18n-provider-C0fB0sEL.js} +1 -1
- package/dist/i18n.js +5 -5
- package/dist/{icon-badge-Cpke1tCf.js → icon-badge-aJ22mKGh.js} +1 -1
- package/dist/lib/components/ui/display/enrolment-card/enrolment-card.d.ts +12 -0
- package/dist/lib/components/ui/display/enrolment-card/index.d.ts +2 -0
- package/dist/lib/components/ui/display/enrolment-card/partials/enrolment-header.d.ts +14 -0
- package/dist/lib/components/ui/display/enrolment-card/partials/enrolment-verification.d.ts +15 -0
- package/dist/lib/components/ui/display/enrolment-card/types.d.ts +49 -0
- package/dist/lib/components/ui/display/enrolment-card/use-enrolment-card-labels.d.ts +3 -0
- package/dist/lib/components/ui/display/index.d.ts +2 -0
- package/dist/lib/components/ui/display/recovery-codes-status/index.d.ts +2 -0
- package/dist/lib/components/ui/display/recovery-codes-status/partials/recovery-count.d.ts +11 -0
- package/dist/lib/components/ui/display/recovery-codes-status/recovery-codes-status.d.ts +12 -0
- package/dist/lib/components/ui/display/recovery-codes-status/types.d.ts +44 -0
- package/dist/lib/components/ui/display/recovery-codes-status/use-recovery-codes-status-labels.d.ts +3 -0
- package/dist/lib/components/ui/display/timeline/index.d.ts +1 -1
- package/dist/lib/components/ui/display/timeline/partials/timeline-day-heading.d.ts +14 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-empty.d.ts +8 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-groups.d.ts +22 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-item-body.d.ts +13 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-item-card.d.ts +5 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-item-rail.d.ts +8 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-item-time.d.ts +12 -0
- package/dist/lib/components/ui/display/timeline/partials/timeline-skeleton.d.ts +4 -0
- package/dist/lib/components/ui/display/timeline/timeline-item.d.ts +13 -2
- package/dist/lib/components/ui/display/timeline/timeline-marker.d.ts +12 -0
- package/dist/lib/components/ui/display/timeline/timeline-rows.d.ts +23 -0
- package/dist/lib/components/ui/display/timeline/timeline.d.ts +32 -2
- package/dist/lib/components/ui/display/timeline/types.d.ts +6 -0
- package/dist/lib/components/ui/feedback/alert/alert.d.ts +7 -1
- package/dist/lib/components/ui/feedback/index.d.ts +1 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/index.d.ts +2 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-body.d.ts +15 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-footer.d.ts +22 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-header.d.ts +10 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/step-up-dialog.d.ts +16 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/types.d.ts +55 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/use-step-up-labels.d.ts +3 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/use-step-up-state.d.ts +12 -0
- package/dist/lib/components/ui/feedback/step-up-dialog/use-title-focus.d.ts +5 -0
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/fields/index.d.ts +1 -0
- package/dist/lib/components/ui/fields/verification-code/describe-verification.d.ts +53 -0
- package/dist/lib/components/ui/fields/verification-code/index.d.ts +4 -0
- package/dist/lib/components/ui/fields/verification-code/partials/code-input.d.ts +12 -0
- package/dist/lib/components/ui/fields/verification-code/partials/code-message.d.ts +11 -0
- package/dist/lib/components/ui/fields/verification-code/partials/code-slots.d.ts +18 -0
- package/dist/lib/components/ui/fields/verification-code/partials/code-surface.d.ts +12 -0
- package/dist/lib/components/ui/fields/verification-code/partials/form-actions.d.ts +14 -0
- package/dist/lib/components/ui/fields/verification-code/partials/label-row.d.ts +10 -0
- package/dist/lib/components/ui/fields/verification-code/partials/locked-alert.d.ts +17 -0
- package/dist/lib/components/ui/fields/verification-code/partials/method-switch.d.ts +8 -0
- package/dist/lib/components/ui/fields/verification-code/partials/recovery-input.d.ts +7 -0
- package/dist/lib/components/ui/fields/verification-code/partials/resend-line.d.ts +10 -0
- package/dist/lib/components/ui/fields/verification-code/partials/status-line.d.ts +10 -0
- package/dist/lib/components/ui/fields/verification-code/throttle.d.ts +10 -0
- package/dist/lib/components/ui/fields/verification-code/types.d.ts +138 -0
- package/dist/lib/components/ui/fields/verification-code/use-answer-focus.d.ts +32 -0
- package/dist/lib/components/ui/fields/verification-code/use-code-entry.d.ts +43 -0
- package/dist/lib/components/ui/fields/verification-code/use-code-lock.d.ts +36 -0
- package/dist/lib/components/ui/fields/verification-code/use-code-resend.d.ts +29 -0
- package/dist/lib/components/ui/fields/verification-code/use-code-submit.d.ts +23 -0
- package/dist/lib/components/ui/fields/verification-code/use-entry-anchors.d.ts +6 -0
- package/dist/lib/components/ui/fields/verification-code/use-focus-on-switch.d.ts +7 -0
- package/dist/lib/components/ui/fields/verification-code/use-resend-focus.d.ts +20 -0
- package/dist/lib/components/ui/fields/verification-code/use-resend.d.ts +11 -0
- package/dist/lib/components/ui/fields/verification-code/use-short-reminder.d.ts +24 -0
- package/dist/lib/components/ui/fields/verification-code/use-stale-answer.d.ts +52 -0
- package/dist/lib/components/ui/fields/verification-code/use-throttle-focus.d.ts +16 -0
- package/dist/lib/components/ui/fields/verification-code/use-throttle.d.ts +10 -0
- package/dist/lib/components/ui/fields/verification-code/use-typed-value.d.ts +18 -0
- package/dist/lib/components/ui/fields/verification-code/use-verification-labels.d.ts +3 -0
- package/dist/lib/components/ui/fields/verification-code/verification-code.d.ts +11 -0
- package/dist/lib/components/ui/fields/verification-code/verification-lock-provider.d.ts +54 -0
- package/dist/lib/components/ui/layout/stepper/partials/header-nav.d.ts +10 -0
- package/dist/lib/components/ui/layout/stepper/partials/header-segments.d.ts +6 -0
- package/dist/lib/components/ui/layout/stepper/partials/header-summary.d.ts +12 -0
- package/dist/lib/components/ui/layout/stepper/partials/stepper-content.d.ts +8 -0
- package/dist/lib/components/ui/layout/stepper/partials/stepper-step-text.d.ts +13 -0
- package/dist/lib/components/ui/layout/stepper/stepper-connector.d.ts +6 -0
- package/dist/lib/components/ui/layout/stepper/stepper-header.d.ts +12 -0
- package/dist/lib/components/ui/layout/stepper/stepper-icon.d.ts +5 -0
- package/dist/lib/components/ui/layout/stepper/stepper-layout.d.ts +25 -0
- package/dist/lib/components/ui/layout/stepper/stepper-step.d.ts +9 -2
- package/dist/lib/components/ui/layout/stepper/stepper.d.ts +13 -3
- package/dist/lib/components/ui/overlays/dialog/dialog-parts.d.ts +8 -1
- package/dist/lib/i18n/resources/en/en.d.ts +59 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +61 -2
- package/dist/lib/i18n/resources/fr/fr.d.ts +59 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +61 -2
- package/dist/lib/i18n/resources/resources.d.ts +118 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +43 -43
- package/dist/map.js +4 -4
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +2 -2
- package/dist/{public-DPPmNtZB.js → public-zVb_Nq_D.js} +6 -6
- package/dist/{rich-code-block-KQYR0qt3.js → rich-code-block-DMWZZJma.js} +4 -4
- package/dist/{sortable-provider-hPPTMtJA.js → sortable-provider-DstbgMVf.js} +1 -1
- package/dist/{spinner-Dd0os4cb.js → spinner-C4CgDEYm.js} +1 -1
- package/dist/{stored-language-Blyb68vN.js → stored-language-IaL1Ftn_.js} +122 -4
- package/dist/styles.css +8 -0
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-BDRRkkiA.js → theme-toggle-CGW2_K54.js} +1 -1
- package/dist/{toolbar-items-D3hw7XZE.js → toolbar-items-CsLGJMEJ.js} +2 -2
- package/dist/{translate-material-CdJBbURx.js → translate-material-v9u-e7Kd.js} +2 -2
- package/dist/{translator-38JuN_VD.js → translator-Dk4_qE6U.js} +1 -1
- package/dist/{use-chat-composer-utGkZQ6X.js → use-chat-composer-Brcb5f7r.js} +12 -12
- package/dist/{use-heading-spy-bTccmEMF.js → use-heading-spy-DjKixjLm.js} +43 -31
- package/dist/{use-material-translation-DLsfkMxp.js → use-material-translation-DOkTaWK_.js} +2 -2
- package/docs/README.md +1 -0
- package/docs/components/README.md +1 -1
- package/docs/components/buttons-and-actions.md +2 -1
- package/docs/components/data-display.md +133 -4
- package/docs/components/feedback-and-status.md +113 -1
- package/docs/components/form-fields.md +163 -0
- package/docs/components/navigation-and-layout.md +66 -23
- package/docs/components/overlays-and-menus.md +3 -1
- package/docs/guides/i18n.md +4 -1
- package/docs/guides/ssr.md +3 -1
- package/docs/guides/two-factor.md +78 -0
- package/docs/previews/data-display-enrolmentcard.webp +0 -0
- package/docs/previews/data-display-recoverycodesstatus.webp +0 -0
- package/docs/previews/data-display-timeline.webp +0 -0
- package/docs/previews/feedback-status-stepupdialog.webp +0 -0
- package/docs/previews/form-fields-verificationcode.webp +0 -0
- package/docs/previews/navigation-layout-stepper.webp +0 -0
- package/docs/roadmap.md +30 -0
- package/lib/styles.css +8 -0
- package/package.json +2 -2
package/docs/guides/i18n.md
CHANGED
|
@@ -334,7 +334,10 @@ names of its −/+ buttons, "Increase hours" / "Decrease hours" /
|
|
|
334
334
|
"Increase minutes" / "Decrease minutes"
|
|
335
335
|
(`material['duration-field']['increase-hours']` and the three others); the status a
|
|
336
336
|
`Stepper` step announces after its title, "Completed" or "Error"
|
|
337
|
-
(`material.stepper.completed` / `error`, "Terminée" / "Erreur" in French);
|
|
337
|
+
(`material.stepper.completed` / `error`, "Terminée" / "Erreur" in French); the
|
|
338
|
+
Stepper's phone header (`material.stepper.step-of`, `back`, `next`, `optional`,
|
|
339
|
+
`attention`, `failed`) and the Timeline's day-heading count (`material.timeline.events`; its
|
|
340
|
+
"Today" and "Yesterday" are `DaySeparator`'s); and
|
|
338
341
|
the pagination buttons' names and text: `PaginationPrevious` /
|
|
339
342
|
`PaginationNext`'s "Previous" / "Next" (`material.pagination.previous` /
|
|
340
343
|
`next`), `PaginationFirst` / `PaginationLast`'s "First" / "Last"
|
package/docs/guides/ssr.md
CHANGED
|
@@ -167,8 +167,10 @@ State the server cannot know must be resolved the same way on both sides:
|
|
|
167
167
|
| Language | no `localStorage`: `defaultLanguage` | Resolve it from the request and pass `initialLanguage` to `I18nProvider`. See [i18n](i18n.md#server-rendering) |
|
|
168
168
|
| Theme | no preference: light | An inline boot script in `<head>`, and `suppressHydrationWarning` on `<html>`. See [theming](theming.md#no-flash-on-load-a-boot-script) |
|
|
169
169
|
| `formatAmount`, `formatDate` | the server's locale and time zone, unless you pass them | Use `useFormatters({ timeZone })`, which follows the `I18nProvider` language, or pass `locale` and `timeZone` (`createFormatters` binds them). A date-only `YYYY-MM-DD` is the same everywhere. See [printing](printing.md#formatamount-and-formatdate) |
|
|
170
|
-
| Screen width, `prefers-color-scheme` (`useIsMobile`, `useTheme`, `AppHeader`, `DataTable`, `TimeField`, `
|
|
170
|
+
| Screen width, `prefers-color-scheme` (`useIsMobile`, `useTheme`, `AppHeader`, `DataTable`, `TimeField`, `PaneLayout`, `ListDetailsLayout`, the code blocks, …) | no screen: a desktop, light | Nothing: a hydrating client renders the same, then switches on a phone or a dark screen |
|
|
171
171
|
| An attribute's `DATETIME` / `TIME` instant (`AttributesSummary`, `AttributesEditor`), the opening hours' first day of the week | the server's time zone and Intl data differ from the browser's | Nothing: the instant is written in UTC and the week starts on the language's first day until mount, then the viewer's zone and the locale's week info take over, so hydration matches |
|
|
172
|
+
| `Stepper` layout, `Timeline` sides | CSS breakpoints and a container query, no screen width in JavaScript | Nothing: server and client markup are the same |
|
|
173
|
+
| `Timeline` `grouped` | the server's time zone and clock differ from the browser's | Pass `timeZone` and `now` to group on the server too; without them the day headings appear after mount (the items do not remount) |
|
|
172
174
|
| Step form (`createStepFormSlice`) | no `localStorage`: step 0 | Nothing with `useSliceReducer`: a hydrating client renders step 0, then resumes. A slice in a Redux store: see [forms](forms.md#a-multi-step-form) |
|
|
173
175
|
| Zod messages | no `localStorage`: English | Pass the request's language, `zodLocaleError({ language })`, where the server formats messages. See [forms](forms.md#validation-messages) |
|
|
174
176
|
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Two-step verification
|
|
2
|
+
|
|
3
|
+
A one-time code is asked for at five moments of an account's life: signing in,
|
|
4
|
+
confirming a sensitive action ("step-up"), turning an authenticator app on,
|
|
5
|
+
making new recovery codes and turning it off. The components below draw all of
|
|
6
|
+
them. They are **driven by props**: your server, session or store says what
|
|
7
|
+
happened (`attemptsLeft`, `error`, `locked`, `pending`), and the components
|
|
8
|
+
keep only the typed value, the focus and the submit guard. Nothing is fetched
|
|
9
|
+
inside them.
|
|
10
|
+
|
|
11
|
+
| Moment | Component | Page |
|
|
12
|
+
| --- | --- | --- |
|
|
13
|
+
| The code field and its states (wrong, expired, busy, locked, resent) | `VerificationCode` | [Form fields](../components/form-fields.md#verificationcode) |
|
|
14
|
+
| Sign-in's second step | `AuthCard` holding a `VerificationCode` | [Navigation and layout](../components/navigation-and-layout.md#authcard) |
|
|
15
|
+
| "Confirm it's you" before a sensitive action | `StepUpDialog` | [Feedback and status](../components/feedback-and-status.md#stepupdialog) |
|
|
16
|
+
| Turning an authenticator app on | `EnrolmentCard` (over `EnrolmentSecret`) | [Data display](../components/data-display.md#enrolmentcard) |
|
|
17
|
+
| Recovery codes: how many are left, a new set | `RecoveryCodesStatus`, then `RecoveryCodes` | [Data display](../components/data-display.md#recoverycodesstatus) |
|
|
18
|
+
| A notice with a way out ("Continue", "Retry") | `Alert` with `actions` | [Feedback and status](../components/feedback-and-status.md#alert) |
|
|
19
|
+
| The page-wide lock | `VerificationLockProvider`, `useVerificationLock` | [Form fields](../components/form-fields.md#verificationcode) |
|
|
20
|
+
|
|
21
|
+
## Wire it once
|
|
22
|
+
|
|
23
|
+
Put one `VerificationLockProvider` around the screens that ask for a code. An
|
|
24
|
+
authenticator or recovery code that is `locked`, or has `attemptsLeft: 0`,
|
|
25
|
+
locks every such field under the provider until the page is loaded again: a
|
|
26
|
+
remount, a step change or closing the dialog does not lift it. An e-mailed
|
|
27
|
+
code is never held by it. Without a provider the lock covers the document.
|
|
28
|
+
|
|
29
|
+
Then map your answer to props, in one place:
|
|
30
|
+
|
|
31
|
+
```tsx
|
|
32
|
+
import { VerificationCode } from '@nxgt/material/components';
|
|
33
|
+
|
|
34
|
+
<VerificationCode
|
|
35
|
+
via="secondFactor" // or 'email'
|
|
36
|
+
attemptsLeft={answer?.attemptsLeft}
|
|
37
|
+
error={answer?.error} // 'invalid' | 'expired' | 'failed' | 'throttled' | a node
|
|
38
|
+
retryAfter={answer?.retryAfter} // seconds, with 'throttled'
|
|
39
|
+
locked={answer?.locked}
|
|
40
|
+
pending={pending}
|
|
41
|
+
onSubmit={(code, { kind }) => send(code, kind)} // 'code' | 'recovery'
|
|
42
|
+
onResend={via === 'email' ? sendAgain : undefined}
|
|
43
|
+
/>;
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The framework-free part (`createVerificationLock`, `normalizeRecoveryCode`) is
|
|
47
|
+
in `@nxgt/material-core/two-factor`.
|
|
48
|
+
|
|
49
|
+
## Replacing what an app wrote itself
|
|
50
|
+
|
|
51
|
+
| An app's own | Replace with | Notes |
|
|
52
|
+
| --- | --- | --- |
|
|
53
|
+
| A "confirm it's you" dialog with a state machine (asking, failed, code, expired, confirmed) | `StepUpDialog` | Keep your state; map it to `via`, `requestError`, `error`, `attemptsLeft`, `pending`, `confirming`. Leave `via` out while the code is requested. The replay of the blocked action stays yours |
|
|
54
|
+
| A code input with a "use a recovery code" switch, in a sign-in step, an activation or a turn-off | `VerificationCode` (`allowRecovery` by default for `via="secondFactor"`; `destructive` for turning off) | The recovery code is trimmed and cut at 40; `kind` tells you which it is |
|
|
55
|
+
| A card with the QR code, the key, a sessions note and a first code | `EnrolmentCard` | `sessionsNotice` is a default, your wording or `false`; `status` is a line over the field |
|
|
56
|
+
| A card with the codes left and a "new codes" action | `RecoveryCodesStatus`, then the existing `RecoveryCodes` for the new set | `remaining` is `null` when not known; `requireCode={false}` is a plain button |
|
|
57
|
+
| A "this is required" notice with a link | `Alert` with `actions` (a `LinkButton`) | The wording stays yours |
|
|
58
|
+
| A "3 tries left" or "locked" message the app kept in its own state | `attemptsLeft` and `locked` | A wrong code empties and focuses the field; no tries left locks an app code and expires an e-mailed one |
|
|
59
|
+
| A hand-made lock that survives a remount or a closed dialog | `VerificationLockProvider` | `useVerificationLock()` reads it from the rest of the app |
|
|
60
|
+
| Cancel buttons drawn `outlined` or `ghost` | nothing: they are tonal | `cancelVariant` on `StepUpDialog` and `EnrolmentCard` restores another look |
|
|
61
|
+
|
|
62
|
+
What stays in the app: every request, the mapping of a server error to the
|
|
63
|
+
props above, where the challenge is kept, the replay of the action a step-up
|
|
64
|
+
unblocked, the leave guard around the new recovery codes, and all wording
|
|
65
|
+
(`labels`, or your translations under `material.*`).
|
|
66
|
+
|
|
67
|
+
## On a phone and for assistive technology
|
|
68
|
+
|
|
69
|
+
Every control has a 44 px target on a coarse pointer, the slots shrink to fit
|
|
70
|
+
320 px, and the dialog's footer stays one row (`DialogFooter`'s
|
|
71
|
+
`stackOnPhone={false}`). A refusal after a submit is the field's accessible description (the focus goes
|
|
72
|
+
there); one polite live region announces what the focus does not read, such
|
|
73
|
+
as a new code; the lock is a `role="alert"` that takes the focus when the
|
|
74
|
+
form's own answer locked it, and describes the disabled field. The code field
|
|
75
|
+
is `autocomplete="one-time-code"`. In a test, find it with
|
|
76
|
+
`getByRole('textbox', { name: 'Code' })`.
|
|
77
|
+
|
|
78
|
+
React only for now; the Vue twin is a `vue` issue.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -330,6 +330,36 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
330
330
|
|
|
331
331
|
## Shipped
|
|
332
332
|
|
|
333
|
+
- **Stepper and Timeline, expressive** — both have a new look by default, with
|
|
334
|
+
the same props. `Stepper` shows the current step as a cookie, a completed one
|
|
335
|
+
as a circle with a check and a failed one in the error container, joined by
|
|
336
|
+
thick tracks that fill with a spring; below `sm` a header card ("Step 3 of
|
|
337
|
+
5", a segmented bar, Back and Next with `onChange`) replaces the steps, and
|
|
338
|
+
the layout no longer depends on JavaScript, so the server and the client
|
|
339
|
+
match. `Step` gains `optional` and `content`. `Timeline` has shaped markers
|
|
340
|
+
by tone, cards for items with `children`, alternating sides in a wide
|
|
341
|
+
container (`layout="rail"` for one rail) and `grouped` day headings (`DaySeparator`, level
|
|
342
|
+
set with `headingLevel`), with
|
|
343
|
+
`timeZone` and `now` to group on the server. React only for now; the Vue
|
|
344
|
+
twin is a `vue` issue.
|
|
345
|
+
[Stepper](components/navigation-and-layout.md#stepper) ·
|
|
346
|
+
[Timeline](components/data-display.md#timeline)
|
|
347
|
+
- **Two-step verification** — the pieces every app rebuilt for a one-time
|
|
348
|
+
code. `VerificationCode` is the form (app or e-mailed code, "Use a recovery
|
|
349
|
+
code", resend, wrong with the tries left, expired, busy, locked, throttled
|
|
350
|
+
with `retryAfter`: Resend waits, and waits again if it is answered throttled
|
|
351
|
+
again), and
|
|
352
|
+
`VerificationLockProvider` keeps a locked app code locked page-wide.
|
|
353
|
+
`StepUpDialog` is "Confirm it's you"; `EnrolmentCard` turns an authenticator
|
|
354
|
+
app on; `RecoveryCodesStatus` shows the codes left and makes a new set.
|
|
355
|
+
`Alert` takes `actions` and `DialogFooter` `stackOnPhone`; the new Cancel
|
|
356
|
+
buttons are tonal and take `cancelVariant`. The framework-free part is in
|
|
357
|
+
`@nxgt/material-core/two-factor`. React only for now; the Vue port is a
|
|
358
|
+
`vue` issue.
|
|
359
|
+
[Two-step verification guide](guides/two-factor.md) ·
|
|
360
|
+
[VerificationCode](components/form-fields.md#verificationcode) ·
|
|
361
|
+
[StepUpDialog](components/feedback-and-status.md#stepupdialog) ·
|
|
362
|
+
[EnrolmentCard](components/data-display.md#enrolmentcard)
|
|
333
363
|
- **One filter model: defaults, a scope, a refusal, `FilterBar`** — a filter
|
|
334
364
|
field says what an absent value means and what role it plays, so a list can
|
|
335
365
|
start narrowed and a page can keep a value the user never clears.
|
package/lib/styles.css
CHANGED
|
@@ -157,3 +157,11 @@
|
|
|
157
157
|
bottom: -0.1875rem;
|
|
158
158
|
transform: rotate(-45deg) scale(0.75);
|
|
159
159
|
}
|
|
160
|
+
|
|
161
|
+
/* A state change on a Stepper's shape: a small spring-in (no motion under
|
|
162
|
+
* prefers-reduced-motion: the catalogue's reduced-motion rule ends it). */
|
|
163
|
+
@keyframes nxgt-pop {
|
|
164
|
+
from {
|
|
165
|
+
transform: scale(0.55);
|
|
166
|
+
}
|
|
167
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxgt/material",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.47.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"email": "stevegires@gmail.com"
|
|
@@ -362,7 +362,7 @@
|
|
|
362
362
|
"docs:previews": "rm -rf node_modules/.cache/nxgt-preview-free/missing && NXGT_PREVIEW_FREE=1 vitest run --project previews && bun .storybook/preview-free-report.ts"
|
|
363
363
|
},
|
|
364
364
|
"dependencies": {
|
|
365
|
-
"@nxgt/material-core": "^0.
|
|
365
|
+
"@nxgt/material-core": "^0.41.0",
|
|
366
366
|
"@base-ui/react": "^1.6.0",
|
|
367
367
|
"@dnd-kit/core": "^6.3.1",
|
|
368
368
|
"@dnd-kit/sortable": "^10.0.0",
|