@nxgt/material 3.73.0 → 3.74.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 +24 -0
- package/README.md +3 -1
- package/dist/{alert-dialog-A8K8zai1.js → alert-dialog-BfO_ri-N.js} +1 -1
- package/dist/{async-slice-B8933IHY.js → async-slice-roMAJVzG.js} +1 -1
- package/dist/{button-C8moFnIT.js → button-DgenqmpS.js} +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-B6AY1E91.js → chip-CiDczNxO.js} +2 -2
- package/dist/{code-editor-DQZIKL54.js → code-editor-CohlhFsA.js} +5 -5
- package/dist/code-editor.js +5 -5
- package/dist/{code-language-items-8VL0aMKG.js → code-language-items-Cs8GLYDp.js} +2 -2
- package/dist/components/ui/display/seat-ring/seat-ring.css +26 -0
- package/dist/components/ui/feedback/feedback.css +2 -0
- package/dist/components/ui/feedback/moment/moment.css +22 -0
- package/dist/{components-Cvp2F9uk.js → components-y18qSFzl.js} +14136 -13891
- package/dist/components.js +28 -28
- package/dist/{dialog-WuLTwxkr.js → dialog-AGsB3bv4.js} +4 -4
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-tadySeGH.js → dropdown-menu-CzR6JP31.js} +1 -1
- package/dist/editor.js +10 -10
- package/dist/{empty-state-ZYiFSSBQ.js → empty-state-DjHGMp5F.js} +2 -2
- package/dist/{field-blur-BYR0yE5L.js → field-blur-CdASxjL7.js} +1 -1
- package/dist/{field-blur-context-bEhByoK-.js → field-blur-context-kZ4SD7xu.js} +1 -1
- package/dist/{hooks-GpwD8iDu.js → hooks-Dqq8O3Az.js} +2 -2
- package/dist/hooks.js +2 -2
- package/dist/{hover-card-BowaI_ra.js → hover-card-BPKqte4a.js} +1 -1
- package/dist/i18n.js +3 -3
- package/dist/{icon-badge-B1B0Lg02.js → icon-badge-B9uvDoyY.js} +3 -3
- package/dist/{icon-button-BbGU17cb.js → icon-button-Cr-DyDGg.js} +1 -1
- package/dist/lib/components/ui/collections/filter/bar/filter-bar-classes.d.ts +2 -2
- package/dist/lib/components/ui/collections/filter/bar/filter-bar-view.d.ts +1 -1
- package/dist/lib/components/ui/collections/filter/facets/filter-facets.d.ts +1 -1
- package/dist/lib/components/ui/collections/filter/query/types.d.ts +6 -0
- package/dist/lib/components/ui/collections/filter/query/view-types.d.ts +1 -0
- package/dist/lib/components/ui/collections/filter/sections/chips/filter-chip-body.d.ts +1 -1
- package/dist/lib/components/ui/collections/filter/sections/filter-search.d.ts +1 -0
- package/dist/lib/components/ui/collections/filter/sections/filter-sections-classes.d.ts +8 -0
- package/dist/lib/components/ui/collections/server-table/partials/server-table-empty-page.d.ts +4 -0
- package/dist/lib/components/ui/collections/server-table/types.d.ts +7 -1
- package/dist/lib/components/ui/display/highlighted-text/highlight-ranges.d.ts +11 -0
- package/dist/lib/components/ui/display/highlighted-text/highlighted-text.d.ts +16 -0
- package/dist/lib/components/ui/display/highlighted-text/index.d.ts +2 -0
- package/dist/lib/components/ui/display/index.d.ts +1 -0
- package/dist/lib/components/ui/display/list-tile/list-tile.d.ts +10 -1
- package/dist/lib/components/ui/display/list-tile/partials/list-tile-box.d.ts +16 -0
- package/dist/lib/components/ui/display/list-tile/partials/list-tile-classes.d.ts +3 -1
- package/dist/lib/components/ui/display/list-tile/partials/list-tile-line.d.ts +1 -1
- package/dist/lib/components/ui/display/list-tile/partials/list-tile-row.d.ts +1 -1
- package/dist/lib/components/ui/display/seat-ring/types.d.ts +6 -0
- package/dist/lib/components/ui/feedback/index.d.ts +1 -0
- package/dist/lib/components/ui/feedback/moment/index.d.ts +1 -0
- package/dist/lib/components/ui/feedback/moment/moment-body.d.ts +9 -0
- package/dist/lib/components/ui/feedback/moment/moment.d.ts +33 -0
- package/dist/lib/components/ui/fields/choice-list/choice-list-control.d.ts +17 -0
- package/dist/lib/components/ui/fields/choice-list/choice-list-focus.d.ts +7 -0
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/overlays/command/command-dialog.d.ts +8 -1
- package/dist/lib/i18n/resources/en/en.d.ts +4 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +5 -1
- package/dist/lib/i18n/resources/fr/fr.d.ts +4 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +5 -1
- package/dist/lib/i18n/resources/resources.d.ts +8 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +42 -42
- package/dist/map.js +8 -8
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +1 -1
- package/dist/{public-CFj2qn7l.js → public-DC9VQw4Z.js} +9 -9
- package/dist/{rich-code-block-B7Teg7-e.js → rich-code-block-DBSL9zEN.js} +5 -5
- package/dist/{sortable-provider-DU2zp_jn.js → sortable-provider-C4tk5esY.js} +2 -2
- package/dist/{spinner-C5Kb6MWu.js → spinner-B2MubVWb.js} +1 -1
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-B1JZg7mU.js → theme-toggle-BInlu21G.js} +1 -1
- package/dist/{toolbar-items-m_1FTFPQ.js → toolbar-items-CRJSx1MU.js} +3 -3
- package/dist/{translate-material-D1ndrd7a.js → translate-material-pVlPJ1v4.js} +1 -1
- package/dist/{translator-CtEC_AQa.js → translator-BoYCward.js} +10 -2
- package/dist/{typography-prQHb3gI.js → typography-B6YMbCge.js} +1 -1
- package/dist/{use-chat-composer-BAoUsyKN.js → use-chat-composer-Cn6yaeO0.js} +16 -16
- package/dist/{use-heading-spy-Bzj5mIUZ.js → use-heading-spy-B_Z4ArDh.js} +4 -4
- package/dist/{use-material-translation-C6H0B4kE.js → use-material-translation-CIS2n3RB.js} +1 -1
- package/dist/{use-return-focus-CkUX1HFl.js → use-return-focus-DNQtADAR.js} +1 -1
- package/docs/components/data-display.md +58 -5
- package/docs/components/data-table-filter-and-lists.md +8 -3
- package/docs/components/feedback-and-status.md +40 -0
- package/docs/components/form-fields.md +9 -2
- package/docs/components/overlays-and-menus.md +2 -1
- package/docs/guides/i18n.md +4 -1
- package/docs/guides/theming.md +4 -0
- package/docs/previews/data-display-highlightedtext.webp +0 -0
- package/docs/roadmap.md +1 -0
- package/docs/troubleshooting.md +4 -2
- package/lib/components/ui/display/seat-ring/seat-ring.css +26 -0
- package/lib/components/ui/feedback/feedback.css +2 -0
- package/lib/components/ui/feedback/moment/moment.css +22 -0
- package/package.json +2 -2
package/dist/pdf-reader.js
CHANGED
package/dist/print.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as e, t } from "./translate-material-
|
|
1
|
+
import { i as e, t } from "./translate-material-pVlPJ1v4.js";
|
|
2
2
|
import { Children as n, createContext as r, isValidElement as i, useCallback as a, useContext as o, useEffect as s, useMemo as c, useState as l } from "react";
|
|
3
3
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
4
4
|
import { resolvePdfFileName as f } from "@nxgt/material-core/pdf-file-name";
|
|
@@ -3,22 +3,22 @@ import { n as t } from "./ui.utils-CAnKTCw5.js";
|
|
|
3
3
|
import { t as n } from "./utils-BLfntITJ.js";
|
|
4
4
|
import { o as r } from "./dist-DVRQkaTK.js";
|
|
5
5
|
import { c as i, i as a, l as o, n as s, o as c, s as l } from "./dist-lmHmz_bu.js";
|
|
6
|
-
import { n as u, s as d } from "./spinner-
|
|
6
|
+
import { n as u, s as d } from "./spinner-B2MubVWb.js";
|
|
7
7
|
import { i as f } from "./dist-C4wtXCjf.js";
|
|
8
8
|
import { r as p, t as m } from "./in-dialog-Vwkyp-M5.js";
|
|
9
|
-
import { a as h, c as g, i as _, l as v, n as y, o as b, r as x, s as ee, t as te, u as ne } from "./use-return-focus-
|
|
10
|
-
import { c as S, d as C, f as w, i as T, l as re, n as ie, o as E, t as ae, u as D } from "./dropdown-menu-
|
|
11
|
-
import { S as oe, a as O, d as k, g as se, h as ce, i as le, m as ue, n as A, r as de, t as j, u as fe, w as pe } from "./toolbar-items-
|
|
12
|
-
import { t as me } from "./button-
|
|
13
|
-
import { t as M } from "./use-material-translation-
|
|
14
|
-
import { n as he, t as ge } from "./icon-button-
|
|
9
|
+
import { a as h, c as g, i as _, l as v, n as y, o as b, r as x, s as ee, t as te, u as ne } from "./use-return-focus-DNQtADAR.js";
|
|
10
|
+
import { c as S, d as C, f as w, i as T, l as re, n as ie, o as E, t as ae, u as D } from "./dropdown-menu-CzR6JP31.js";
|
|
11
|
+
import { S as oe, a as O, d as k, g as se, h as ce, i as le, m as ue, n as A, r as de, t as j, u as fe, w as pe } from "./toolbar-items-CRJSx1MU.js";
|
|
12
|
+
import { t as me } from "./button-DgenqmpS.js";
|
|
13
|
+
import { t as M } from "./use-material-translation-CIS2n3RB.js";
|
|
14
|
+
import { n as he, t as ge } from "./icon-button-Cr-DyDGg.js";
|
|
15
15
|
import { t as _e } from "./useEvent-2fKq-6w8.js";
|
|
16
16
|
import { n as ve, t as ye } from "./toggle-group-DXXlqid2.js";
|
|
17
17
|
import { i as be } from "./escape-owner-DpaP0lm1.js";
|
|
18
18
|
import { n as xe } from "./use-slice-reducer-BGkeGtML.js";
|
|
19
|
-
import { f as Se, r as Ce, t as we, u as Te } from "./dialog-
|
|
19
|
+
import { f as Se, r as Ce, t as we, u as Te } from "./dialog-AGsB3bv4.js";
|
|
20
20
|
import { r as Ee } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
21
|
-
import { n as De, t as Oe } from "./empty-state-
|
|
21
|
+
import { n as De, t as Oe } from "./empty-state-DjHGMp5F.js";
|
|
22
22
|
import { t as ke } from "./client-only.utils-3nHNzCki.js";
|
|
23
23
|
import { t as Ae } from "./use-scroll-away-PQRFZkT2.js";
|
|
24
24
|
import * as N from "react";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as e } from "./spinner-
|
|
2
|
-
import { c as t, n, t as r } from "./dropdown-menu-
|
|
3
|
-
import { t as i } from "./use-material-translation-
|
|
4
|
-
import { a, i as o, n as s, o as c, t as l } from "./code-language-items-
|
|
1
|
+
import { r as e } from "./spinner-B2MubVWb.js";
|
|
2
|
+
import { c as t, n, t as r } from "./dropdown-menu-CzR6JP31.js";
|
|
3
|
+
import { t as i } from "./use-material-translation-CIS2n3RB.js";
|
|
4
|
+
import { a, i as o, n as s, o as c, t as l } from "./code-language-items-Cs8GLYDp.js";
|
|
5
5
|
import { i as u, n as d, r as f, s as p } from "./dist-C3GR7kJd.js";
|
|
6
6
|
import { t as m } from "./code-block-spec-CGLKRhwD.js";
|
|
7
7
|
import { Suspense as h, lazy as g, useEffect as _, useRef as v, useState as y } from "react";
|
|
@@ -143,7 +143,7 @@ function M({ node: e, editor: t, updateAttributes: n, editable: r, wrap: a, onWr
|
|
|
143
143
|
}
|
|
144
144
|
//#endregion
|
|
145
145
|
//#region lib/components/ui/widgets/editor/extensions/code/code-block-open.tsx
|
|
146
|
-
var N = g(() => import("./code-editor-
|
|
146
|
+
var N = g(() => import("./code-editor-CohlhFsA.js").then((e) => e.n).then((e) => ({ default: e.CodeEditor })));
|
|
147
147
|
function P() {
|
|
148
148
|
let { t: e } = i();
|
|
149
149
|
return /* @__PURE__ */ b("div", {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { t } from "./dist-DVRQkaTK.js";
|
|
3
|
-
import { t as n } from "./use-material-translation-
|
|
4
|
-
import { t as r } from "./icon-button-
|
|
3
|
+
import { t as n } from "./use-material-translation-CIS2n3RB.js";
|
|
4
|
+
import { t as r } from "./icon-button-Cr-DyDGg.js";
|
|
5
5
|
import { t as i } from "./compose-refs-G4J4kaUA.js";
|
|
6
6
|
import a, { cloneElement as o, createContext as s, forwardRef as c, memo as l, useCallback as u, useContext as d, useEffect as f, useId as p, useLayoutEffect as m, useMemo as h, useReducer as g, useRef as _, useState as v } from "react";
|
|
7
7
|
import { jsx as y } from "react/jsx-runtime";
|
|
@@ -3,7 +3,7 @@ import { n as t, t as n } from "./utils-BLfntITJ.js";
|
|
|
3
3
|
import { i as r, o as i } from "./dist-DVRQkaTK.js";
|
|
4
4
|
import { a, c as o, i as s, l as c, n as l, o as u, r as d, s as f, t as p, u as m } from "./dist-lmHmz_bu.js";
|
|
5
5
|
import { a as h, c as g, d as _, i as v, l as y, o as b, r as x, t as S, u as C } from "./floating-ui.dom-KkZSW8_E.js";
|
|
6
|
-
import { t as w } from "./use-material-translation-
|
|
6
|
+
import { t as w } from "./use-material-translation-CIS2n3RB.js";
|
|
7
7
|
import * as T from "react";
|
|
8
8
|
import { useLayoutEffect as E, useRef as D, useSyncExternalStore as O } from "react";
|
|
9
9
|
import { jsx as k, jsxs as A } from "react/jsx-runtime";
|
package/dist/theme-picker.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { a as t, i as n, n as r, o as i, r as a, t as o } from "./bubble-input-B7BVd9fX.js";
|
|
3
3
|
import { a as s, r as c } from "./icon-sprites-CaYXzOL4.js";
|
|
4
|
-
import { t as l } from "./use-material-translation-
|
|
4
|
+
import { t as l } from "./use-material-translation-CIS2n3RB.js";
|
|
5
5
|
import { t as u } from "./use-theme-BCLireTd.js";
|
|
6
6
|
import { a as d, r as f } from "./theme-context-Cofk6vgs.js";
|
|
7
|
-
import { t as p } from "./theme-toggle-
|
|
7
|
+
import { t as p } from "./theme-toggle-BInlu21G.js";
|
|
8
8
|
import { n as m, t as h } from "./nxgt-theme-DA1IQe0O.js";
|
|
9
9
|
import { useContext as g } from "react";
|
|
10
10
|
import { jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./use-material-translation-
|
|
1
|
+
import { t as e } from "./use-material-translation-CIS2n3RB.js";
|
|
2
2
|
import { i as t } from "./theme-store-BdPp43cV.js";
|
|
3
3
|
import { n, t as r } from "./use-theme-BCLireTd.js";
|
|
4
4
|
import { r as i } from "./theme-context-Cofk6vgs.js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { o as t, r as n, t as r } from "./dist-DVRQkaTK.js";
|
|
3
3
|
import { a as i, c as a, i as o, l as s, r as c, s as l } from "./dist-lmHmz_bu.js";
|
|
4
|
-
import { C as u, S as d, d as f, f as p, m, p as h, r as g, u as _ } from "./spinner-
|
|
4
|
+
import { C as u, S as d, d as f, f as p, m, p as h, r as g, u as _ } from "./spinner-B2MubVWb.js";
|
|
5
5
|
import { i as v, n as y, r as b, t as x } from "./dist-C4wtXCjf.js";
|
|
6
6
|
import { a as S, c as C, l as w, o as T, r as ee, s as te, t as ne } from "./in-dialog-Vwkyp-M5.js";
|
|
7
|
-
import { A as re, M as ie, N as ae, b as oe, d as se, f as ce, i as le, j as ue, l as de, n as fe, o as pe, r as me, t as he, u as ge, y as _e } from "./dropdown-menu-
|
|
7
|
+
import { A as re, M as ie, N as ae, b as oe, d as se, f as ce, i as le, j as ue, l as de, n as fe, o as pe, r as me, t as he, u as ge, y as _e } from "./dropdown-menu-CzR6JP31.js";
|
|
8
8
|
import { a as ve, n as ye, r as be, t as xe } from "./dist-B7RjY7SL.js";
|
|
9
9
|
import { t as Se } from "./warn-once-C_e47JM8.js";
|
|
10
|
-
import { t as Ce } from "./use-material-translation-
|
|
10
|
+
import { t as Ce } from "./use-material-translation-CIS2n3RB.js";
|
|
11
11
|
import { i as we } from "./escape-owner-DpaP0lm1.js";
|
|
12
12
|
import * as E from "react";
|
|
13
13
|
import { createContext as D, useCallback as Te, useContext as O, useEffect as k, useId as Ee, useLayoutEffect as A, useMemo as j, useReducer as De, useRef as M, useState as N } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as e, l as t, r as n, s as r, t as i, u as a } from "./translator-
|
|
1
|
+
import { a as e, l as t, r as n, s as r, t as i, u as a } from "./translator-BoYCward.js";
|
|
2
2
|
import { createContext as o, useCallback as s, useContext as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
|
|
3
3
|
import { jsx as p } from "react/jsx-runtime";
|
|
4
4
|
//#region lib/i18n/material-resources-registry.ts
|
|
@@ -1355,6 +1355,7 @@ var r = {
|
|
|
1355
1355
|
stay: "Stay",
|
|
1356
1356
|
leave: "Leave"
|
|
1357
1357
|
},
|
|
1358
|
+
moment: { hint: "Press Escape or tap to dismiss." },
|
|
1358
1359
|
"stale-notice": {
|
|
1359
1360
|
title: "This record changed",
|
|
1360
1361
|
description: "Someone else saved this record before you. What you typed is kept. Reload the record to see their version.",
|
|
@@ -1437,7 +1438,10 @@ var r = {
|
|
|
1437
1438
|
leads: "{names} leads with {votes}",
|
|
1438
1439
|
"tied-between": "Tie between {names}, {votes} each"
|
|
1439
1440
|
},
|
|
1440
|
-
"seat-ring": {
|
|
1441
|
+
"seat-ring": {
|
|
1442
|
+
empty: "Empty seat",
|
|
1443
|
+
out: "Out"
|
|
1444
|
+
},
|
|
1441
1445
|
"secret-card": {
|
|
1442
1446
|
reveal: "Show secret",
|
|
1443
1447
|
revealed: "Secret revealed",
|
|
@@ -4329,6 +4333,7 @@ var r = {
|
|
|
4329
4333
|
stay: "Rester",
|
|
4330
4334
|
leave: "Quitter"
|
|
4331
4335
|
},
|
|
4336
|
+
moment: { hint: "Appuyez sur Échap ou touchez l'écran pour fermer." },
|
|
4332
4337
|
"stale-notice": {
|
|
4333
4338
|
title: "Cet enregistrement a changé",
|
|
4334
4339
|
description: "Quelqu’un d’autre a enregistré cet enregistrement avant vous. Ce que vous avez saisi est conservé. Rechargez l’enregistrement pour voir sa version.",
|
|
@@ -4411,7 +4416,10 @@ var r = {
|
|
|
4411
4416
|
leads: "{names} est en tête avec {votes}",
|
|
4412
4417
|
"tied-between": "Égalité entre {names}, {votes} chacun"
|
|
4413
4418
|
},
|
|
4414
|
-
"seat-ring": {
|
|
4419
|
+
"seat-ring": {
|
|
4420
|
+
empty: "Place libre",
|
|
4421
|
+
out: "Éliminé"
|
|
4422
|
+
},
|
|
4415
4423
|
"secret-card": {
|
|
4416
4424
|
reveal: "Afficher le secret",
|
|
4417
4425
|
revealed: "Secret révélé",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { t } from "./dist-DVRQkaTK.js";
|
|
3
|
-
import { n } from "./spinner-
|
|
3
|
+
import { n } from "./spinner-B2MubVWb.js";
|
|
4
4
|
import { jsx as r } from "react/jsx-runtime";
|
|
5
5
|
//#region lib/components/ui/primitives/typography/typography.variants.ts
|
|
6
6
|
var i = [
|
|
@@ -4,40 +4,40 @@ import { t as n } from "./utils-BLfntITJ.js";
|
|
|
4
4
|
import { n as r } from "./use-shape-morph-BKA_R5P5.js";
|
|
5
5
|
import { n as i, o as a, t as o } from "./dist-DVRQkaTK.js";
|
|
6
6
|
import { a as s, c, i as l, l as u, n as d, o as f, r as p, s as m, t as h } from "./dist-lmHmz_bu.js";
|
|
7
|
-
import { _ as g, a as _, b as v, c as y, g as b, h as x, i as S, n as C, o as w, r as T, s as E, t as D, v as O, x as k, y as A } from "./spinner-
|
|
7
|
+
import { _ as g, a as _, b as v, c as y, g as b, h as x, i as S, n as C, o as w, r as T, s as E, t as D, v as O, x as k, y as A } from "./spinner-B2MubVWb.js";
|
|
8
8
|
import { a as ee, i as j, n as M, r as N, t as te } from "./dist-C4wtXCjf.js";
|
|
9
9
|
import { i as ne, n as P } from "./in-dialog-Vwkyp-M5.js";
|
|
10
|
-
import { c as re, l as ie, n as F, r as ae, t as oe } from "./alert-dialog-
|
|
10
|
+
import { c as re, l as ie, n as F, r as ae, t as oe } from "./alert-dialog-BfO_ri-N.js";
|
|
11
11
|
import { A as se, C as I, D as ce, E as le, O as ue, S as de, T as fe, _ as pe, a as me, b as he, d as ge, f as _e, g as ve, h as ye, i as be, k as xe, l as Se, m as Ce, n as we, o as Te, p as Ee, r as De, s as Oe, t as ke, u as Ae, v as je, w as Me, x as Ne, y as Pe } from "./floating-ui.dom-KkZSW8_E.js";
|
|
12
|
-
import { D as Fe, E as Ie, N as Le, O as Re, c as ze, d as Be, f as Ve, i as He, k as Ue, m as We, n as Ge, o as Ke, p as qe, t as Je, u as Ye } from "./dropdown-menu-
|
|
13
|
-
import { a as Xe, i as Ze, n as Qe } from "./field-blur-context-
|
|
14
|
-
import { C as $e, S as et, a as tt, c as nt, d as rt, l as it, n as at, o as ot, s as st, u as ct } from "./toolbar-items-
|
|
12
|
+
import { D as Fe, E as Ie, N as Le, O as Re, c as ze, d as Be, f as Ve, i as He, k as Ue, m as We, n as Ge, o as Ke, p as qe, t as Je, u as Ye } from "./dropdown-menu-CzR6JP31.js";
|
|
13
|
+
import { a as Xe, i as Ze, n as Qe } from "./field-blur-context-kZ4SD7xu.js";
|
|
14
|
+
import { C as $e, S as et, a as tt, c as nt, d as rt, l as it, n as at, o as ot, s as st, u as ct } from "./toolbar-items-CRJSx1MU.js";
|
|
15
15
|
import { a as lt, i as ut, n as dt, o as ft, t as pt } from "./bubble-input-B7BVd9fX.js";
|
|
16
16
|
import { i as mt } from "./dist-B7RjY7SL.js";
|
|
17
17
|
import { o as ht, s as gt, t as _t } from "./use-click-lock-BZYtTmVt.js";
|
|
18
18
|
import { a as vt, r as yt } from "./icon-sprites-CaYXzOL4.js";
|
|
19
19
|
import { t as bt } from "./warn-once-C_e47JM8.js";
|
|
20
|
-
import { r as xt, t as St } from "./button-
|
|
21
|
-
import { a as Ct } from "./translator-
|
|
20
|
+
import { r as xt, t as St } from "./button-DgenqmpS.js";
|
|
21
|
+
import { a as Ct } from "./translator-BoYCward.js";
|
|
22
22
|
import { h as wt } from "./get-CTzJAwfc.js";
|
|
23
23
|
import { t as Tt } from "./isEmpty-F_g3jLf8.js";
|
|
24
|
-
import { t as L } from "./use-material-translation-
|
|
25
|
-
import { t as R } from "./icon-button-
|
|
24
|
+
import { t as L } from "./use-material-translation-CIS2n3RB.js";
|
|
25
|
+
import { t as R } from "./icon-button-Cr-DyDGg.js";
|
|
26
26
|
import { t as Et } from "./use-ssr-media-query-C6M5m8sf.js";
|
|
27
|
-
import { n as Dt, t as Ot } from "./typography-
|
|
27
|
+
import { n as Dt, t as Ot } from "./typography-B6YMbCge.js";
|
|
28
28
|
import { n as kt, t as At } from "./util-4heV2LPI.js";
|
|
29
29
|
import { t as jt } from "./useEvent-2fKq-6w8.js";
|
|
30
|
-
import { p as Mt } from "./field-blur-
|
|
30
|
+
import { p as Mt } from "./field-blur-CdASxjL7.js";
|
|
31
31
|
import { c as Nt, i as Pt, l as Ft, o as It, r as Lt, s as Rt, t as zt } from "./dist-C3GR7kJd.js";
|
|
32
32
|
import { a as Bt } from "./toggle-group-DXXlqid2.js";
|
|
33
33
|
import { n as Vt } from "./use-slice-reducer-BGkeGtML.js";
|
|
34
34
|
import { t as Ht } from "./browser-only-DQ94lWF8.js";
|
|
35
35
|
import { t as Ut } from "./compose-refs-G4J4kaUA.js";
|
|
36
|
-
import { n as Wt, r as Gt, t as Kt } from "./chip-
|
|
37
|
-
import { _ as qt, f as Jt, g as Yt, l as Xt, m as Zt, n as Qt, o as $t, r as en, s as tn, t as nn, u as rn, v as an, y as on } from "./dialog-
|
|
38
|
-
import { n as sn, t as cn } from "./icon-badge-
|
|
36
|
+
import { n as Wt, r as Gt, t as Kt } from "./chip-CiDczNxO.js";
|
|
37
|
+
import { _ as qt, f as Jt, g as Yt, l as Xt, m as Zt, n as Qt, o as $t, r as en, s as tn, t as nn, u as rn, v as an, y as on } from "./dialog-AGsB3bv4.js";
|
|
38
|
+
import { n as sn, t as cn } from "./icon-badge-B9uvDoyY.js";
|
|
39
39
|
import { r as ln } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
40
|
-
import { t as un } from "./empty-state-
|
|
40
|
+
import { t as un } from "./empty-state-DjHGMp5F.js";
|
|
41
41
|
import { t as dn } from "./skeleton-DSdtr2qc.js";
|
|
42
42
|
import { H as fn, V as pn, X as mn, bt as hn, it as gn, lt as _n, n as vn, t as yn, xt as bn, yt as xn } from "./dist-moutbfbd.js";
|
|
43
43
|
import { t as Sn } from "./markdown-Dw_uH7j7.js";
|
|
@@ -11321,7 +11321,7 @@ var DS = (e = {}) => Cn({
|
|
|
11321
11321
|
let [{ default: t }, { lowlight: n }, { richCodeBlock: r }] = await Promise.all([
|
|
11322
11322
|
import("./dist-CRMFGjng.js"),
|
|
11323
11323
|
import("./lowlight-OtcjU2Sa.js"),
|
|
11324
|
-
import("./rich-code-block-
|
|
11324
|
+
import("./rich-code-block-DBSL9zEN.js")
|
|
11325
11325
|
]);
|
|
11326
11326
|
return [r(t, {
|
|
11327
11327
|
lowlight: n,
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
|
-
import { a as t, c as n, d as r, i, n as a, r as o, t as s, u as c } from "./alert-dialog-
|
|
3
|
-
import { a as l } from "./button-
|
|
4
|
-
import { i as u } from "./translate-material-
|
|
5
|
-
import { t as d } from "./use-material-translation-
|
|
2
|
+
import { a as t, c as n, d as r, i, n as a, r as o, t as s, u as c } from "./alert-dialog-BfO_ri-N.js";
|
|
3
|
+
import { a as l } from "./button-DgenqmpS.js";
|
|
4
|
+
import { i as u } from "./translate-material-pVlPJ1v4.js";
|
|
5
|
+
import { t as d } from "./use-material-translation-CIS2n3RB.js";
|
|
6
6
|
import { _ as f, g as p, h as m, n as h, v as g, y as _ } from "./number.utils-BG_eEt5g.js";
|
|
7
7
|
import { useCallback as v, useEffect as y, useMemo as b, useRef as x, useState as S } from "react";
|
|
8
8
|
import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { o as e, r as t } from "./dist-DVRQkaTK.js";
|
|
2
2
|
import { a as n, c as r, i, l as a, o, r as s, s as c } from "./dist-lmHmz_bu.js";
|
|
3
|
-
import { C as l, S as u, w as d } from "./spinner-
|
|
3
|
+
import { C as l, S as u, w as d } from "./spinner-B2MubVWb.js";
|
|
4
4
|
import { c as f, i as p, l as m, o as h, r as g, s as ee } from "./in-dialog-Vwkyp-M5.js";
|
|
5
5
|
import { r as _ } from "./escape-owner-DpaP0lm1.js";
|
|
6
6
|
import * as v from "react";
|
|
@@ -13,6 +13,7 @@ from `@nxgt/material/components`.
|
|
|
13
13
|
| <img src="../previews/data-display-shape.webp" width="96" alt=""> | [Shape](#shape) | Material 3 Expressive's shapes as a backdrop, an icon container or a mask for a photo |
|
|
14
14
|
| <img src="../previews/data-display-badge.webp" width="96" alt=""> | [Badge](#badge) | Status pill, 20 px, in seven tones, soft or outlined, with an optional decorative `icon` before the words |
|
|
15
15
|
| <img src="../previews/data-display-countbadge.webp" width="96" alt=""> | [CountBadge](#countbadge) | Count in the corner of its children |
|
|
16
|
+
| <img src="../previews/data-display-highlightedtext.webp" width="96" alt=""> | [HighlightedText](#highlightedtext) | A string with the words of a search query in a themed `<mark>` |
|
|
16
17
|
| <img src="../previews/data-display-dayseparator.webp" width="96" alt=""> | [DaySeparator](#dayseparator) | "Today", "Yesterday" or the date between two hairlines |
|
|
17
18
|
| <img src="../previews/data-display-periodcards.webp" width="96" alt=""> | [PeriodCards](#periodcards) | Consecutive date ranges (terms, sprints) as cards, with a current marker and an optional link per card |
|
|
18
19
|
| <img src="../previews/data-display-chip.webp" width="96" alt=""> | [Chip](#chip) | Three looks and a dashed add pill, with slots, a selected state and a dismiss button |
|
|
@@ -147,6 +148,7 @@ import { SeatRing } from '@nxgt/material/components';
|
|
|
147
148
|
seats={[
|
|
148
149
|
{ id: 'ada', label: 'Ada Example', status: { label: 'Ready', tone: 'success' }, badge: 'Host' },
|
|
149
150
|
{ id: 'bo', label: 'Bo Sample', status: { label: 'Away', tone: 'warning' } },
|
|
151
|
+
{ id: 'cy', label: 'Cy Demo', out: true },
|
|
150
152
|
{ id: 'free', label: 'Free', empty: true },
|
|
151
153
|
]}
|
|
152
154
|
highlightedId="ada"
|
|
@@ -159,7 +161,7 @@ import { SeatRing } from '@nxgt/material/components';
|
|
|
159
161
|
|
|
160
162
|
| Prop | Type | Default | Notes |
|
|
161
163
|
| --- | --- | --- | --- |
|
|
162
|
-
| `seats` | `Seat[]` | required | `{ id, label, avatar?: { src?, fallback? }, status?: { label, tone? }, badge?, disabled?, empty? }`; clockwise from the top |
|
|
164
|
+
| `seats` | `Seat[]` | required | `{ id, label, avatar?: { src?, fallback? }, status?: { label, tone? }, badge?, disabled?, out?, empty? }`; clockwise from the top |
|
|
163
165
|
| `layout` | `'ring' \| 'grid'` | `'ring'` | `ring` falls back to the grid in a narrow box and past the seat limit (10 seats) |
|
|
164
166
|
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | seat width 4.75, 6 or 8rem; ring from a box of 32, 38 or 46rem; at most 10 seats on the circle |
|
|
165
167
|
| `selectionMode` | `'none' \| 'single' \| 'multiple'` | `'none'` | `none`: a list; otherwise a listbox |
|
|
@@ -183,6 +185,7 @@ no `style` attribute and a strict CSP is fine.
|
|
|
183
185
|
keys, Home and End move the focus (an empty seat is skipped); Space or Enter
|
|
184
186
|
picks, and pressing the chosen seat again clears it.
|
|
185
187
|
- A seat is named by its label and its status text, never by colour alone.
|
|
188
|
+
- `out: true` marks an eliminated seat: it stays visible, dimmed, with the name struck through, the avatar greyed and the word "Out" (`material.seat-ring.out`, "Éliminé" in French) written in it, so the word is part of the seat's name (label, status, "Out", then the badge); it stays pickable unless `disabled`. An empty seat ignores it. Seat status words ("Eliminated") remain the app's own.
|
|
186
189
|
- In a listbox, empty and `disabled` seats are `aria-disabled`, and a disabled
|
|
187
190
|
seat can be reached but not picked (in a list, `disabled` only dims the seat).
|
|
188
191
|
- Put no button in a selectable seat: interactive content (an "Invite" action
|
|
@@ -417,6 +420,35 @@ import { CountBadge, IconButton } from '@nxgt/material/components';
|
|
|
417
420
|
|
|
418
421
|
---
|
|
419
422
|
|
|
423
|
+
## HighlightedText
|
|
424
|
+
|
|
425
|
+

|
|
426
|
+
|
|
427
|
+
A string with the words of a search query in a themed `<mark>`. Case, accents and ligatures are folded (`œ` is `oe`, `æ` is `ae`, `ß` is `ss`), and a query word matches at the start of a word, as a search engine's normaliser does.
|
|
428
|
+
|
|
429
|
+
```tsx
|
|
430
|
+
import { HighlightedText, highlightRanges } from '@nxgt/material/components';
|
|
431
|
+
|
|
432
|
+
<HighlightedText text="Œuvres d'été" query="oeuvre ete" />
|
|
433
|
+
// <mark>Œuvre</mark>s d'<mark>été</mark>
|
|
434
|
+
|
|
435
|
+
// For a table or a custom renderer: offsets into the original text.
|
|
436
|
+
highlightRanges("Œuvres d'été", 'oeuvre ete'); // [[0, 5], [9, 12]]
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
| Prop | Type | Default | Effect |
|
|
440
|
+
| --- | --- | --- | --- |
|
|
441
|
+
| `text` | `string` | — | the string to show |
|
|
442
|
+
| `query` | `string` | — | search words; a blank query marks nothing |
|
|
443
|
+
| `locale` | `string` | runtime's | language for lowercasing |
|
|
444
|
+
| span props | | | `className` and the other `span` props go to the wrapping `span` |
|
|
445
|
+
|
|
446
|
+
`highlightRanges(text, query, locale?)` is pure and returns sorted, non-overlapping `[start, end)` offsets. The marks use theme tokens (readable in dark mode) and the system `Mark` colours in forced colours.
|
|
447
|
+
|
|
448
|
+
**Storybook:** `Data display/HighlightedText`
|
|
449
|
+
|
|
450
|
+
---
|
|
451
|
+
|
|
420
452
|
## DaySeparator
|
|
421
453
|
|
|
422
454
|

|
|
@@ -974,15 +1006,16 @@ A tile with an `href` ends with a discreet chevron after `trailing`: decorative
|
|
|
974
1006
|
| `linkComponent` | `AppShellLinkComponent` | plain `<a>` | the link element, as in the app shell: takes `href`, spreads every other prop, forwards `ref`. Defaults to the [`LinkComponentProvider`](./primitives.md#linkcomponentprovider)'s link when one is set. |
|
|
975
1007
|
| `onClick` | `MouseEventHandler` | — | renders a `<button>` |
|
|
976
1008
|
| `selected` | `boolean` | `false` | the current row: drawn selected; a link gets `aria-current="page"` (your own `aria-current` replaces it), a button `aria-pressed` |
|
|
977
|
-
| `toggle` | `Switch` props | — | makes the tile a switch row (see below): the whole row toggles a Switch at its end; `href`, `onClick`, `actions`, `chips`, `chevron` and `linkComponent` are refused beside it by type |
|
|
1009
|
+
| `toggle` | `Switch` props | — | makes the tile a switch row (see below): the whole row toggles a Switch at its end; `href`, `onClick`, `actions`, `chips`, `content`, `chevron` and `linkComponent` are refused beside it by type |
|
|
978
1010
|
| `size` | `'sm' \| 'md'` | `'md'` | `sm` is the dense row (with `chips`, the record row, see below) |
|
|
979
1011
|
| `leading`, `trailing`, `subtitle` | `ReactNode` | — | slots; `trailing` sits inside the link, so it holds decoration only |
|
|
980
1012
|
| `actions` | `ReactNode` | — | buttons at the end of the tile, outside the link, vertically centred (`data-slot="item-actions"`) |
|
|
981
1013
|
| `chips` | `ReactNode` | — | tags after the text, in the compact record row (see below); inside the link, so decoration only; part of the row's accessible name, keep labels short |
|
|
1014
|
+
| `content` | `ReactNode` | — | full-width content under the title row, inside the tile's box and outside its link or button: it may hold inputs and buttons (an expected value beside an editable field), and its clicks do not reach `onClick`. Not available on a `toggle` row |
|
|
982
1015
|
| `variant` | `'tonal' \| 'divided'` | `'tonal'` | `divided`: flat rows with no tonal surface, a hover tint and the record-row layout; the hairline comes with `as="li"` |
|
|
983
1016
|
| `inset` | `boolean` | `false` | With `variant="divided"`: 16px of inline padding (M3's list-item inset) in place of 4px, for a list inside a `Card`; the hairlines on the `<li>` still run edge to edge. Ignored by `tonal` |
|
|
984
1017
|
| `as` | `'li'` | — | renders the tile inside a `<li>`, for a `<ul>` you own |
|
|
985
|
-
| `disabled` | `boolean` | — | disables the link or button, and the `actions` with it |
|
|
1018
|
+
| `disabled` | `boolean` | — | disables the link or button, and the `actions` and `content` with it (both become inert) |
|
|
986
1019
|
|
|
987
1020
|
With a router, pass `linkComponent` so a click navigates on the client instead of reloading the page (React Router's `Link` takes `to`, so wrap it):
|
|
988
1021
|
|
|
@@ -999,7 +1032,27 @@ export function SettingsLink() {
|
|
|
999
1032
|
}
|
|
1000
1033
|
```
|
|
1001
1034
|
|
|
1002
|
-
A link tile's `trailing` sits inside its `<a>`, which cannot hold buttons. Put edit / remove / menu buttons in `actions`: they render outside the link, in the tile's box, while the link still covers the whole tile (a click on the text navigates, a click on a button does not) and hover and selected styles stay on the tile. Tab goes to the link, then to the buttons
|
|
1035
|
+
A link tile's `trailing` sits inside its `<a>`, which cannot hold buttons. Put edit / remove / menu buttons in `actions`: they render outside the link, in the tile's box, while the link still covers the whole tile (a click on the text navigates, a click on a button does not) and hover and selected styles stay on the tile. Tab goes to the link, then to the buttons, then to the controls of `content`. A tile without `href` renders `actions` the same way. With `actions`, `className`, `style` and `data-*` go on the tile's box and every other prop (`aria-label`, `id`, handlers…) on the link or button; `actions={null}` (or `false`) is no actions. and the text of a link tile with actions cannot be selected (the link is stretched over the tile).
|
|
1036
|
+
|
|
1037
|
+
**Content under the row.** `content` renders full-width under the title row, inside the tile's box and outside its link or button, so it may hold inputs and buttons (an expected value beside an editable field). Its clicks never reach the tile's `onClick`.
|
|
1038
|
+
|
|
1039
|
+
```tsx
|
|
1040
|
+
<ul className="m-0 list-none p-0">
|
|
1041
|
+
<ListTile
|
|
1042
|
+
as="li"
|
|
1043
|
+
variant="divided"
|
|
1044
|
+
title="Item"
|
|
1045
|
+
subtitle="SKU-1 · LOT-2"
|
|
1046
|
+
actions={<IconButton label="Remove" onClick={remove}><Trash2 /></IconButton>}
|
|
1047
|
+
content={
|
|
1048
|
+
<label className="flex items-center justify-between gap-2">
|
|
1049
|
+
Expected 12
|
|
1050
|
+
<NumberField aria-label="Counted" value={counted} onChange={setCounted} />
|
|
1051
|
+
</label>
|
|
1052
|
+
}
|
|
1053
|
+
/>
|
|
1054
|
+
</ul>
|
|
1055
|
+
```
|
|
1003
1056
|
|
|
1004
1057
|
```tsx
|
|
1005
1058
|
import { Pencil } from 'lucide-react';
|
|
@@ -1070,7 +1123,7 @@ function GuideList({ guides }: { guides: { to: string; title: string }[] }) {
|
|
|
1070
1123
|
}
|
|
1071
1124
|
```
|
|
1072
1125
|
|
|
1073
|
-
**A switch row.** `toggle` takes a Switch's props (`checked`, `defaultChecked`, `onCheckedChange`, `name`, `thumbIcons`…). The tile is then a `<label>` for the switch, so a press anywhere on the row toggles it; the switch is the one tab stop (Space or Enter), named by `title` and described by `subtitle`, and `disabled` on the tile disables it. A switch row is neither a link nor a button: `href`, `onClick`, `actions` and `chevron` do not apply, and `trailing` sits before the switch.
|
|
1126
|
+
**A switch row.** `toggle` takes a Switch's props (`checked`, `defaultChecked`, `onCheckedChange`, `name`, `thumbIcons`…). The tile is then a `<label>` for the switch, so a press anywhere on the row toggles it; the switch is the one tab stop (Space or Enter), named by `title` and described by `subtitle`, and `disabled` on the tile disables it. A switch row is neither a link nor a button: `href`, `onClick`, `actions`, `content` and `chevron` do not apply, and `trailing` sits before the switch.
|
|
1074
1127
|
|
|
1075
1128
|
```tsx
|
|
1076
1129
|
const [on, setOn] = useState(true);
|
|
@@ -1018,7 +1018,7 @@ export default function Students() {
|
|
|
1018
1018
|
table: [Cards and tiles](../guides/cards-and-tiles.md)).
|
|
1019
1019
|
|
|
1020
1020
|
Its props are `ServerTableProps<T>`; `filter` is a `ServerTableFilter`,
|
|
1021
|
-
`empty`
|
|
1021
|
+
`empty` an optional `ServerTableEmpty`, and `bulkActions` gets a
|
|
1022
1022
|
`ServerTableSelection`.
|
|
1023
1023
|
|
|
1024
1024
|
| Prop | Type | Default | Effect |
|
|
@@ -1045,7 +1045,7 @@ Its props are `ServerTableProps<T>`; `filter` is a `ServerTableFilter`,
|
|
|
1045
1045
|
| `filterRef` | `Ref<ServerTableFilterHandle>` | — | with `filter`: `filterRef.current.focus()` focuses the Filter's first control, the search, else the first quick filter, "Add filter" or "Filters (N)" the width shows |
|
|
1046
1046
|
| `sorting` | `createSorting(…)` | — | headers sorted from the URL; without it, no column is sortable (the server sorts, so pass `sorting` to let people sort), and the phone list bar shows only for selection |
|
|
1047
1047
|
| `filters` | `tableFilters(model)` | — | without `filter`: "nothing matches" and its clear |
|
|
1048
|
-
| `empty` | `ServerTableEmpty`: `{ none, noMatch, clear?, headingLevel?, iconStyle? }` |
|
|
1048
|
+
| `empty` | `ServerTableEmpty`: `{ none, noMatch, clear?, headingLevel?, iconStyle? }` | the `DataTable` default ("No data available", or "No results" when filtered) | the empty page. Leave it out when your page answers "nothing yet" and "nothing matches" itself and renders the table only when there are rows; the failure with Retry and the page past the last show either way. When given: `none` and `noMatch` are a title or a `ListEmptyPage` (`{ title, description?, illustration?, action? }`); `headingLevel` (default 2) is the level of its title and of the error's; `iconStyle` styles the scenes (see below) |
|
|
1049
1049
|
| `error` | `ServerTableError \| null` | — | the fetch failed: the failure and a Retry replace the rows |
|
|
1050
1050
|
| `onRetry` | `() => unknown` | — | the error's Retry; a returned promise keeps it loading |
|
|
1051
1051
|
| `onClearFilters` | `() => void` | focus the table | without `filter`, after "clear" |
|
|
@@ -1936,8 +1936,13 @@ function Notifications({ items }: { items: Notification[] }) {
|
|
|
1936
1936
|
the loader's own; see [A field's default](#a-fields-default)),
|
|
1937
1937
|
`resultCount`, `loading`; every other prop of `Filter variant="bar"`
|
|
1938
1938
|
(`quick`, `counts`, `previewCount`, `fieldProps`, `density`, `shortcuts`,
|
|
1939
|
-
`searchApply`, `searchMinLength`, `errors`, `label`...) passes through. There is no `query`,
|
|
1939
|
+
`searchApply`, `searchMinLength`, `searchAutoFocus`, `errors`, `label`...) passes through. There is no `query`,
|
|
1940
1940
|
`defaultQuery` nor `onQueryChange`: the URL is the query.
|
|
1941
|
+
- **Focus on arrival.** `searchAutoFocus` puts focus in the search field when
|
|
1942
|
+
the bar mounts (React's `autoFocus`, so it is right on the server too). Use it
|
|
1943
|
+
on a search page reached with an empty query; leave it off on a list page,
|
|
1944
|
+
where it would take focus from the page. `/` still focuses the field. `ServerTable`'s `filter` does not take
|
|
1945
|
+
`searchAutoFocus`, on purpose: a list page should not steal focus.
|
|
1941
1946
|
- **One write.** An edit writes the search, every `f=` and the aliased params,
|
|
1942
1947
|
drops the `reset` ones and keeps the page's others (a tab, a sort).
|
|
1943
1948
|
`onParamsChange` receives the next params for your router; the bar then
|
|
@@ -14,6 +14,7 @@ centre.
|
|
|
14
14
|
| <img src="../previews/feedback-status-stepupdialog.webp" width="96" alt=""> | [StepUpDialog](#stepupdialog) | "Confirm it's you": a dialog that asks for a one-time code, driven by props |
|
|
15
15
|
| <img src="../previews/feedback-status-unsaveddialog.webp" width="96" alt=""> | [UnsavedDialog](#unsaveddialog) | "Leave without saving?": a destructive confirm with Stay focused, used by the unsaved-changes guards |
|
|
16
16
|
| <img src="../previews/feedback-status-stalenotice.webp" width="96" alt=""> | [StaleNotice](#stalenotice) | "This record changed": a warning that another write came first, with one Reload action and no overwrite |
|
|
17
|
+
| | [Moment](#moment) | A full-screen one-off announcement (a player is eliminated, a role revealed): illustration, title, description and action, dismissed by Escape, a tap, its action or a timer |
|
|
17
18
|
| <img src="../previews/feedback-status-emptystate.webp" width="96" alt=""> | [EmptyState](#emptystate) | Illustration, title, description and action, by kind (empty, search, not-found, unauthorized) |
|
|
18
19
|
| <img src="../previews/feedback-status-pageloadfailed.webp" width="96" alt=""> | [PageLoadFailed](#pageloadfailed) | An empty state for a page opened at a cursor that failed, with a link back to the start |
|
|
19
20
|
| <img src="../previews/feedback-status-errorstate.webp" width="96" alt=""> | [ErrorState](#errorstate) | Failure block with Retry and technical details |
|
|
@@ -522,6 +523,45 @@ import { UnsavedDialog } from '@nxgt/material/components';
|
|
|
522
523
|
|
|
523
524
|
---
|
|
524
525
|
|
|
526
|
+
## Moment
|
|
527
|
+
|
|
528
|
+
A transient full-screen announcement for a dramatic one-off event: a player is eliminated, a role is revealed. It is a modal dialog named by its `title` (and described by its `description`), so a screen reader announces it as it opens. Focus moves into it and goes back to the element that had it when it closes; the page behind is inert. Escape, a tap anywhere, the close button and the `action` dismiss it, and so does `duration`. It fades in and its picture pops in; under `prefers-reduced-motion` both stop. The surface is the tone's container with the foreground colour on it, so it holds AA in light and dark, and it fills a phone.
|
|
529
|
+
|
|
530
|
+
```tsx
|
|
531
|
+
import { Moment } from '@nxgt/material/components';
|
|
532
|
+
import { Illustration } from '@nxgt/material/illustrations';
|
|
533
|
+
|
|
534
|
+
<Moment
|
|
535
|
+
open={eliminated != null}
|
|
536
|
+
onOpenChange={(open) => !open && setEliminated(null)}
|
|
537
|
+
duration={6000}
|
|
538
|
+
tone="error"
|
|
539
|
+
illustration={<Illustration scene="error" />}
|
|
540
|
+
title={`${eliminated?.name} was eliminated`}
|
|
541
|
+
description="The village chose her. She was the seer."
|
|
542
|
+
action={<Button onClick={nextNight}>Next night</Button>}
|
|
543
|
+
/>
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
| Prop | Type | Default | Effect |
|
|
547
|
+
| --- | --- | --- | --- |
|
|
548
|
+
| `open` | `boolean` | — | shown or not (controlled) |
|
|
549
|
+
| `onOpenChange` | `(open: boolean) => void` | — | called with `false` on every dismissal |
|
|
550
|
+
| `duration` | `number` (ms) | — | dismisses by itself after this long; unset: stays until dismissed |
|
|
551
|
+
| `illustration` | `ReactNode` | — | the picture (a scene, a pictogram, an icon); decorative, hidden from assistive technology |
|
|
552
|
+
| `title` | `ReactNode` | — | what happened; the accessible name |
|
|
553
|
+
| `description` | `ReactNode` | — | the line under it, in a `<p>` (phrasing content only) |
|
|
554
|
+
| `action` | `ReactNode` | — | a button or link; its click dismisses after its own handler, unless that handler calls `event.preventDefault()` |
|
|
555
|
+
| `tone` | `Tone` | `neutral` | the colour of the meaning: a named tone or one of your `AppTones` |
|
|
556
|
+
| `closeLabel` | `string` | translated | name of the close button |
|
|
557
|
+
| `className` | `string` | — | on the full-screen surface |
|
|
558
|
+
|
|
559
|
+
A tap anywhere dismisses, so keep text a reader must act on out of a short `duration`. Without a `description` the dialog is described by the hint `material.moment.hint` ("Press Escape or tap to dismiss."), read by assistive technology only. The close button is named by `material.buttons.close`.
|
|
560
|
+
|
|
561
|
+
**Storybook:** `Feedback & status/Moment` · **Vue:** not yet (a `vue` issue)
|
|
562
|
+
|
|
563
|
+
---
|
|
564
|
+
|
|
525
565
|
## StaleNotice
|
|
526
566
|
|
|
527
567
|

|
|
@@ -381,8 +381,15 @@ that focuses the first refused row's text input: the row of the first
|
|
|
381
381
|
built-in blank rule refused the list. An error on the list itself (too few
|
|
382
382
|
rows, no row marked) focuses its first control. So `shouldFocusError`,
|
|
383
383
|
`setFocus('choices')` and `setError('choices', …, { shouldFocus: true })` land
|
|
384
|
-
on the refused row when there is an error, and on the first control otherwise
|
|
385
|
-
|
|
384
|
+
on the refused row when there is an error, and on the first control otherwise.
|
|
385
|
+
A row path works too: `setFocus('choices.1.text')` and
|
|
386
|
+
`setError('choices.1.text', …, { shouldFocus: true })` (a server's refusal)
|
|
387
|
+
focus that row's text input. The form needs no `[aria-invalid="true"]` lookup.
|
|
388
|
+
|
|
389
|
+
```tsx
|
|
390
|
+
// After the server refused the second row:
|
|
391
|
+
form.setError('choices.1.text', { message }, { shouldFocus: true });
|
|
392
|
+
```
|
|
386
393
|
|
|
387
394
|
| Prop | Type | Default | What it does |
|
|
388
395
|
| --- | --- | --- | --- |
|
|
@@ -641,7 +641,7 @@ in a desktop application.
|
|
|
641
641
|
|
|
642
642
|

|
|
643
643
|
|
|
644
|
-
Command palette with filtering, groups and shortcuts. `CommandDialog` shows it in a modal.
|
|
644
|
+
Command palette with filtering, groups and shortcuts. `CommandDialog` shows it in a modal, with a visible close button (`showCloseButton`, on by default; `false` removes it) at the end of the input row: named "Close" (`material.buttons.close`) and 44px on a coarse pointer, since a phone has no Escape key.
|
|
645
645
|
|
|
646
646
|
```tsx
|
|
647
647
|
import {
|
|
@@ -700,6 +700,7 @@ children and they replace that, as before.
|
|
|
700
700
|
| `shouldFilter` (`Command`) | `boolean` | `true` | `false` when you filter the items yourself (server search) |
|
|
701
701
|
| `title` / `description` (`CommandDialog`) | `string` | `"Command Palette"` / `"Search for a command to run..."` (translated) | the dialog's title and description, inside the dialog and visually hidden |
|
|
702
702
|
| `mobilePresentation` (`CommandDialog`) | `'dialog' \| 'top' \| 'fullscreen'` | `'top'` | below 640 px: pinned under the top edge (so the input and the results stay above the on-screen keyboard), the whole screen, or the centred modal it was before |
|
|
703
|
+
| `showCloseButton` (`CommandDialog`) | `boolean` | `true` | a visible close button at the end of the input row, named `material.buttons.close` and 44 px on a coarse pointer; `false` leaves Escape and the backdrop |
|
|
703
704
|
| `commandProps` (`CommandDialog`) | `Pick<CommandProps, 'shouldFilter' \| 'value' \| 'onValueChange' \| 'loop' \| 'filter' \| 'label'>` | — | reaches the inner `Command`: `{ shouldFilter: false }` for a palette whose results come from a server (cmdk then does not hide them again by the typed text), `value` / `onValueChange` for the highlighted item, `label` for the input's accessible name. The input's sizing, the dialog's title and its focus stay as they are |
|
|
704
705
|
| `open`, `onOpenChange` (`CommandDialog`) | as `Dialog` | — | every other prop goes to the `Dialog` |
|
|
705
706
|
|
package/docs/guides/i18n.md
CHANGED
|
@@ -312,7 +312,7 @@ title), `show` "Show results", `show-count` (an ICU plural over `count`:
|
|
|
312
312
|
filters" (the list atop it); its Close is `material.buttons.close`.
|
|
313
313
|
|
|
314
314
|
Smaller labels follow the language the same way: `CommandDialog`'s default
|
|
315
|
-
title and description (`material.command.title` / `description`) and
|
|
315
|
+
title and description (`material.command.title` / `description`), its close button (`material.buttons.close`) and
|
|
316
316
|
`CommandList`'s accessible name (`material.command.list`); the filter's empty state and
|
|
317
317
|
`+N more` chip (`material.filter.empty` / `more`) and the Yes/No, From, Until
|
|
318
318
|
and Up to of its chips (`material.filter.value.*`; `formatFilterValue` takes
|
|
@@ -578,6 +578,9 @@ places that use them read:
|
|
|
578
578
|
| `material.table.labels.select-page` / `select-item` | Select all on this page / Select | Tout sélectionner sur cette page / Sélectionner | The cards list bar's select-all (its accessible name), and a card's checkbox (named "Select <title>"). Inside a `ServerTable`'s two-row phone header the select-all also shows `material.table.labels.select-all` ("Select all") as its short visible label |
|
|
579
579
|
| `material.table.labels.clear-selection` | Clear selection | Effacer la sélection | The cards list bar's button, shown while rows are selected; on a narrow list it is an icon button, and this string is its accessible name and tooltip |
|
|
580
580
|
| `material.table.labels.scroll-list` | Scrollable list | Liste défilante | The region of a cards or tiles list with `maxHeight` (`scrollLabel` overrides it) |
|
|
581
|
+
| `material.seat-ring.empty` | Empty seat | Place libre | `SeatRing`'s default empty seat (`renderEmptySeat` replaces it) |
|
|
582
|
+
| `material.seat-ring.out` | Out | Éliminé | the word written in a `SeatRing` seat with `out: true`, part of its accessible name |
|
|
583
|
+
| `material.moment.hint` | Press Escape or tap to dismiss. | Appuyez sur Échap ou touchez l'écran pour fermer. | `Moment`'s description for assistive technology when it has no `description` |
|
|
581
584
|
| `material.command.empty` | No results | Aucun résultat | `CommandEmpty` with no children |
|
|
582
585
|
| `material.pdf-reader.retry` | Retry | Réessayer | the `PdfReader` button |
|
|
583
586
|
|
package/docs/guides/theming.md
CHANGED
|
@@ -1171,6 +1171,10 @@ are, without growing what is painted (nothing changes for a mouse):
|
|
|
1171
1171
|
visible label (only an `aria-label`) is still its drawn size plus the
|
|
1172
1172
|
`.nxgt-touch-target` hit area: wrap it in a `<label>` of 44px, or give it a
|
|
1173
1173
|
label.
|
|
1174
|
+
- **A `FilterBar` chip is 44px tall and at least 44px wide**: the quick pills and toggles, the
|
|
1175
|
+
scope pill, an active condition's chip and the default hint (`height` and
|
|
1176
|
+
`min-width`, so a long label still grows it; a mouse keeps 24-28px), and
|
|
1177
|
+
"Add filter" and "Clear all" are 44px tall.
|
|
1174
1178
|
|
|
1175
1179
|
A toast covering a control is out of scope: it physically hides what is under
|
|
1176
1180
|
it.
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -371,6 +371,7 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
371
371
|
|
|
372
372
|
## Shipped
|
|
373
373
|
|
|
374
|
+
- **Moment (next minor)** — a transient full-screen announcement for a one-off event (a player is eliminated, a role is revealed): a modal dialog named by its title, with an illustration, description, action and tone, dismissed by Escape, a tap, its action or a timer, and no motion under reduced motion ([#2220](https://github.com/softistx/nxgt-material/issues/2220)).
|
|
374
375
|
- **RecordActionsMenu (next minor)** — one menu for a record's lifecycle: archive with an Undo toast (or confirm first with `archivePolicy="confirm"`), restore, and delete that always confirms and shows the backend's refusal, with `ConfirmDialog` gaining `details` and `refusal` slots.
|
|
375
376
|
- **Assistant approval card (next minor)** — `ChatActionProposal` shows an action an assistant proposes, with its status, deadline and Confirm / Reject, and `ChatToolActivity` is a compact row for a tool step in a chat thread ([#2134](https://github.com/softistx/nxgt-material/issues/2134)).
|
|
376
377
|
|
package/docs/troubleshooting.md
CHANGED
|
@@ -4891,8 +4891,10 @@ before this fix.
|
|
|
4891
4891
|
control of the list, whichever row was refused.
|
|
4892
4892
|
**Fix:** upgrade to the release that lists this fix in its changelog:
|
|
4893
4893
|
`shouldFocusError` and `setFocus(name)` focus the first refused row's text
|
|
4894
|
-
input
|
|
4895
|
-
|
|
4894
|
+
input, and so do `setFocus('choices.1.text')` and
|
|
4895
|
+
`setError('choices.1.text', …, { shouldFocus: true })` on a row path, as a
|
|
4896
|
+
server's refusal sets. Remove a workaround that queries `[aria-invalid="true"]`
|
|
4897
|
+
after submit. For the other fields, see the next entry.
|
|
4896
4898
|
|
|
4897
4899
|
### `setError(…, { shouldFocus: true })` or a failed submit does not focus the field
|
|
4898
4900
|
|