@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.
Files changed (149) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/README.md +10 -3
  3. package/dist/{async-slice-D9LAUgth.js → async-slice-DlvKCKAa.js} +2 -2
  4. package/dist/{button-b_kruV_L.js → button-yaltbQmC.js} +1 -1
  5. package/dist/charts.js +3 -3
  6. package/dist/{chip-6O3t9GXt.js → chip-BqWbbr1b.js} +1 -1
  7. package/dist/{code-editor-BtDOgUET.js → code-editor-C9qBNoYb.js} +4 -4
  8. package/dist/code-editor.js +4 -4
  9. package/dist/{code-language-items-374m-OK8.js → code-language-items-DAHtfQ7W.js} +2 -2
  10. package/dist/{components-BG-BTfJP.js → components-DFPy96C3.js} +16282 -14755
  11. package/dist/components.js +26 -26
  12. package/dist/{dialog-8Ua9uuJW.js → dialog-CCCcnTIx.js} +4 -4
  13. package/dist/dnd.js +1 -1
  14. package/dist/{dropdown-menu-DJEeT1XT.js → dropdown-menu-Df8785nt.js} +1 -1
  15. package/dist/editor.js +7 -7
  16. package/dist/{empty-state-CrhrmNqn.js → empty-state-DcF4TBzi.js} +1 -1
  17. package/dist/hooks.js +28 -40
  18. package/dist/{i18n-provider-hrtFm9jD.js → i18n-provider-C0fB0sEL.js} +1 -1
  19. package/dist/i18n.js +5 -5
  20. package/dist/{icon-badge-Cpke1tCf.js → icon-badge-aJ22mKGh.js} +1 -1
  21. package/dist/lib/components/ui/display/enrolment-card/enrolment-card.d.ts +12 -0
  22. package/dist/lib/components/ui/display/enrolment-card/index.d.ts +2 -0
  23. package/dist/lib/components/ui/display/enrolment-card/partials/enrolment-header.d.ts +14 -0
  24. package/dist/lib/components/ui/display/enrolment-card/partials/enrolment-verification.d.ts +15 -0
  25. package/dist/lib/components/ui/display/enrolment-card/types.d.ts +49 -0
  26. package/dist/lib/components/ui/display/enrolment-card/use-enrolment-card-labels.d.ts +3 -0
  27. package/dist/lib/components/ui/display/index.d.ts +2 -0
  28. package/dist/lib/components/ui/display/recovery-codes-status/index.d.ts +2 -0
  29. package/dist/lib/components/ui/display/recovery-codes-status/partials/recovery-count.d.ts +11 -0
  30. package/dist/lib/components/ui/display/recovery-codes-status/recovery-codes-status.d.ts +12 -0
  31. package/dist/lib/components/ui/display/recovery-codes-status/types.d.ts +44 -0
  32. package/dist/lib/components/ui/display/recovery-codes-status/use-recovery-codes-status-labels.d.ts +3 -0
  33. package/dist/lib/components/ui/display/timeline/index.d.ts +1 -1
  34. package/dist/lib/components/ui/display/timeline/partials/timeline-day-heading.d.ts +14 -0
  35. package/dist/lib/components/ui/display/timeline/partials/timeline-empty.d.ts +8 -0
  36. package/dist/lib/components/ui/display/timeline/partials/timeline-groups.d.ts +22 -0
  37. package/dist/lib/components/ui/display/timeline/partials/timeline-item-body.d.ts +13 -0
  38. package/dist/lib/components/ui/display/timeline/partials/timeline-item-card.d.ts +5 -0
  39. package/dist/lib/components/ui/display/timeline/partials/timeline-item-rail.d.ts +8 -0
  40. package/dist/lib/components/ui/display/timeline/partials/timeline-item-time.d.ts +12 -0
  41. package/dist/lib/components/ui/display/timeline/partials/timeline-skeleton.d.ts +4 -0
  42. package/dist/lib/components/ui/display/timeline/timeline-item.d.ts +13 -2
  43. package/dist/lib/components/ui/display/timeline/timeline-marker.d.ts +12 -0
  44. package/dist/lib/components/ui/display/timeline/timeline-rows.d.ts +23 -0
  45. package/dist/lib/components/ui/display/timeline/timeline.d.ts +32 -2
  46. package/dist/lib/components/ui/display/timeline/types.d.ts +6 -0
  47. package/dist/lib/components/ui/feedback/alert/alert.d.ts +7 -1
  48. package/dist/lib/components/ui/feedback/index.d.ts +1 -0
  49. package/dist/lib/components/ui/feedback/step-up-dialog/index.d.ts +2 -0
  50. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-body.d.ts +15 -0
  51. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-footer.d.ts +22 -0
  52. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-header.d.ts +10 -0
  53. package/dist/lib/components/ui/feedback/step-up-dialog/step-up-dialog.d.ts +16 -0
  54. package/dist/lib/components/ui/feedback/step-up-dialog/types.d.ts +55 -0
  55. package/dist/lib/components/ui/feedback/step-up-dialog/use-step-up-labels.d.ts +3 -0
  56. package/dist/lib/components/ui/feedback/step-up-dialog/use-step-up-state.d.ts +12 -0
  57. package/dist/lib/components/ui/feedback/step-up-dialog/use-title-focus.d.ts +5 -0
  58. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  59. package/dist/lib/components/ui/fields/index.d.ts +1 -0
  60. package/dist/lib/components/ui/fields/verification-code/describe-verification.d.ts +53 -0
  61. package/dist/lib/components/ui/fields/verification-code/index.d.ts +4 -0
  62. package/dist/lib/components/ui/fields/verification-code/partials/code-input.d.ts +12 -0
  63. package/dist/lib/components/ui/fields/verification-code/partials/code-message.d.ts +11 -0
  64. package/dist/lib/components/ui/fields/verification-code/partials/code-slots.d.ts +18 -0
  65. package/dist/lib/components/ui/fields/verification-code/partials/code-surface.d.ts +12 -0
  66. package/dist/lib/components/ui/fields/verification-code/partials/form-actions.d.ts +14 -0
  67. package/dist/lib/components/ui/fields/verification-code/partials/label-row.d.ts +10 -0
  68. package/dist/lib/components/ui/fields/verification-code/partials/locked-alert.d.ts +17 -0
  69. package/dist/lib/components/ui/fields/verification-code/partials/method-switch.d.ts +8 -0
  70. package/dist/lib/components/ui/fields/verification-code/partials/recovery-input.d.ts +7 -0
  71. package/dist/lib/components/ui/fields/verification-code/partials/resend-line.d.ts +10 -0
  72. package/dist/lib/components/ui/fields/verification-code/partials/status-line.d.ts +10 -0
  73. package/dist/lib/components/ui/fields/verification-code/throttle.d.ts +10 -0
  74. package/dist/lib/components/ui/fields/verification-code/types.d.ts +138 -0
  75. package/dist/lib/components/ui/fields/verification-code/use-answer-focus.d.ts +32 -0
  76. package/dist/lib/components/ui/fields/verification-code/use-code-entry.d.ts +43 -0
  77. package/dist/lib/components/ui/fields/verification-code/use-code-lock.d.ts +36 -0
  78. package/dist/lib/components/ui/fields/verification-code/use-code-resend.d.ts +29 -0
  79. package/dist/lib/components/ui/fields/verification-code/use-code-submit.d.ts +23 -0
  80. package/dist/lib/components/ui/fields/verification-code/use-entry-anchors.d.ts +6 -0
  81. package/dist/lib/components/ui/fields/verification-code/use-focus-on-switch.d.ts +7 -0
  82. package/dist/lib/components/ui/fields/verification-code/use-resend-focus.d.ts +20 -0
  83. package/dist/lib/components/ui/fields/verification-code/use-resend.d.ts +11 -0
  84. package/dist/lib/components/ui/fields/verification-code/use-short-reminder.d.ts +24 -0
  85. package/dist/lib/components/ui/fields/verification-code/use-stale-answer.d.ts +52 -0
  86. package/dist/lib/components/ui/fields/verification-code/use-throttle-focus.d.ts +16 -0
  87. package/dist/lib/components/ui/fields/verification-code/use-throttle.d.ts +10 -0
  88. package/dist/lib/components/ui/fields/verification-code/use-typed-value.d.ts +18 -0
  89. package/dist/lib/components/ui/fields/verification-code/use-verification-labels.d.ts +3 -0
  90. package/dist/lib/components/ui/fields/verification-code/verification-code.d.ts +11 -0
  91. package/dist/lib/components/ui/fields/verification-code/verification-lock-provider.d.ts +54 -0
  92. package/dist/lib/components/ui/layout/stepper/partials/header-nav.d.ts +10 -0
  93. package/dist/lib/components/ui/layout/stepper/partials/header-segments.d.ts +6 -0
  94. package/dist/lib/components/ui/layout/stepper/partials/header-summary.d.ts +12 -0
  95. package/dist/lib/components/ui/layout/stepper/partials/stepper-content.d.ts +8 -0
  96. package/dist/lib/components/ui/layout/stepper/partials/stepper-step-text.d.ts +13 -0
  97. package/dist/lib/components/ui/layout/stepper/stepper-connector.d.ts +6 -0
  98. package/dist/lib/components/ui/layout/stepper/stepper-header.d.ts +12 -0
  99. package/dist/lib/components/ui/layout/stepper/stepper-icon.d.ts +5 -0
  100. package/dist/lib/components/ui/layout/stepper/stepper-layout.d.ts +25 -0
  101. package/dist/lib/components/ui/layout/stepper/stepper-step.d.ts +9 -2
  102. package/dist/lib/components/ui/layout/stepper/stepper.d.ts +13 -3
  103. package/dist/lib/components/ui/overlays/dialog/dialog-parts.d.ts +8 -1
  104. package/dist/lib/i18n/resources/en/en.d.ts +59 -0
  105. package/dist/lib/i18n/resources/en/material.json.d.ts +61 -2
  106. package/dist/lib/i18n/resources/fr/fr.d.ts +59 -0
  107. package/dist/lib/i18n/resources/fr/material.json.d.ts +61 -2
  108. package/dist/lib/i18n/resources/resources.d.ts +118 -0
  109. package/dist/lib/i18n/translator.d.ts +1 -1
  110. package/dist/lib.js +1 -1
  111. package/dist/main.js +43 -43
  112. package/dist/map.js +4 -4
  113. package/dist/material.css +1 -1
  114. package/dist/pdf-reader.js +1 -1
  115. package/dist/print.js +2 -2
  116. package/dist/{public-DPPmNtZB.js → public-zVb_Nq_D.js} +6 -6
  117. package/dist/{rich-code-block-KQYR0qt3.js → rich-code-block-DMWZZJma.js} +4 -4
  118. package/dist/{sortable-provider-hPPTMtJA.js → sortable-provider-DstbgMVf.js} +1 -1
  119. package/dist/{spinner-Dd0os4cb.js → spinner-C4CgDEYm.js} +1 -1
  120. package/dist/{stored-language-Blyb68vN.js → stored-language-IaL1Ftn_.js} +122 -4
  121. package/dist/styles.css +8 -0
  122. package/dist/theme-picker.js +2 -2
  123. package/dist/{theme-toggle-BDRRkkiA.js → theme-toggle-CGW2_K54.js} +1 -1
  124. package/dist/{toolbar-items-D3hw7XZE.js → toolbar-items-CsLGJMEJ.js} +2 -2
  125. package/dist/{translate-material-CdJBbURx.js → translate-material-v9u-e7Kd.js} +2 -2
  126. package/dist/{translator-38JuN_VD.js → translator-Dk4_qE6U.js} +1 -1
  127. package/dist/{use-chat-composer-utGkZQ6X.js → use-chat-composer-Brcb5f7r.js} +12 -12
  128. package/dist/{use-heading-spy-bTccmEMF.js → use-heading-spy-DjKixjLm.js} +43 -31
  129. package/dist/{use-material-translation-DLsfkMxp.js → use-material-translation-DOkTaWK_.js} +2 -2
  130. package/docs/README.md +1 -0
  131. package/docs/components/README.md +1 -1
  132. package/docs/components/buttons-and-actions.md +2 -1
  133. package/docs/components/data-display.md +133 -4
  134. package/docs/components/feedback-and-status.md +113 -1
  135. package/docs/components/form-fields.md +163 -0
  136. package/docs/components/navigation-and-layout.md +66 -23
  137. package/docs/components/overlays-and-menus.md +3 -1
  138. package/docs/guides/i18n.md +4 -1
  139. package/docs/guides/ssr.md +3 -1
  140. package/docs/guides/two-factor.md +78 -0
  141. package/docs/previews/data-display-enrolmentcard.webp +0 -0
  142. package/docs/previews/data-display-recoverycodesstatus.webp +0 -0
  143. package/docs/previews/data-display-timeline.webp +0 -0
  144. package/docs/previews/feedback-status-stepupdialog.webp +0 -0
  145. package/docs/previews/form-fields-verificationcode.webp +0 -0
  146. package/docs/previews/navigation-layout-stepper.webp +0 -0
  147. package/docs/roadmap.md +30 -0
  148. package/lib/styles.css +8 -0
  149. package/package.json +2 -2
@@ -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); and
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"
@@ -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`, `Stepper`, `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 |
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.
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.45.0",
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.40.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",