@nxgt/material 3.59.1 → 3.62.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 +36 -0
- package/README.md +3 -2
- package/dist/{async-slice-Cmvxrvn9.js → async-slice-HJY_VJjD.js} +2 -2
- package/dist/{button-qb9UpHF5.js → button-7BuUCGRm.js} +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-BlmIjpiD.js → chip-kQOrHlDX.js} +2 -2
- package/dist/{code-editor-BYEpBp_U.js → code-editor-Ckc9TTCM.js} +6 -6
- package/dist/code-editor.js +54 -37
- package/dist/{code-language-items-Cqk4Fq61.js → code-language-items-rCPB0Xee.js} +2 -2
- package/dist/{components-j44ReRNq.js → components-TDDUQ1Y0.js} +9240 -9228
- package/dist/components.js +26 -26
- package/dist/{dialog-1BstKBvt.js → dialog-yfPkLqUQ.js} +4 -4
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-hoaocAS7.js → dropdown-menu-CiobN1wi.js} +1 -1
- package/dist/editor.js +9 -9
- package/dist/{empty-state-DEG9h7xk.js → empty-state-DA517HAb.js} +2 -2
- package/dist/{escape-owner-BvLBo_Al.js → escape-owner-r57kuPjn.js} +1 -1
- package/dist/{field-blur-BkeYPaWi.js → field-blur-DdvY0NQQ.js} +1 -1
- package/dist/{field-blur-context-Ba7iZVm_.js → field-blur-context-DbJQZkEB.js} +1 -1
- package/dist/hooks-CGnqFngB.js +187 -0
- package/dist/hooks.js +8 -102
- package/dist/{hover-card-C5DTU9P_.js → hover-card-DPs9huSs.js} +2 -2
- package/dist/{i18n-provider-BJDI-A5w.js → i18n-provider-BehR6cU7.js} +1 -1
- package/dist/i18n.js +5 -5
- package/dist/{icon-badge-9ZE6k7cn.js → icon-badge-C646JTOI.js} +3 -3
- package/dist/{icon-button-AwJtCkV5.js → icon-button-DvP0Gy3j.js} +1 -1
- package/dist/illustrations-game.js +2 -0
- package/dist/lib/components/ui/actions/load-more-footer/load-more-footer.d.ts +4 -2
- package/dist/lib/components/ui/display/list-tile/list-tile.d.ts +6 -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-toggle.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/activity-layout.types.d.ts +6 -3
- package/dist/lib/components/ui/layout/app-shell/index.d.ts +1 -1
- package/dist/lib/components/ui/layout/app-shell/route-transition.d.ts +20 -2
- package/dist/lib/components/ui/layout/app-shell/shapes-clear-content.d.ts +2 -1
- package/dist/lib/components/ui/widgets/code-editor/configure-monaco.d.ts +2 -0
- package/dist/lib/hooks/drafts-store.d.ts +4 -0
- package/dist/lib/hooks/index.d.ts +1 -0
- package/dist/lib/hooks/use-drafts.d.ts +75 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +1 -1
- package/dist/lib/i18n/resources/fr/material.json.d.ts +1 -1
- package/dist/lib/illustrations-game/index.d.ts +17 -0
- package/dist/lib.js +1 -1
- package/dist/main.js +43 -43
- package/dist/map.js +8 -8
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +2 -2
- package/dist/{public-DEh75enl.js → public-BYsrhyPW.js} +9 -9
- package/dist/{rich-code-block-hJexXOdk.js → rich-code-block-WJxDWPPY.js} +5 -5
- package/dist/{sortable-provider-DE-MSfeJ.js → sortable-provider-oPjlhlZo.js} +2 -2
- package/dist/{spinner-CquTUxzt.js → spinner-C5lObWXT.js} +1 -1
- package/dist/{stored-language-BDzGeEAm.js → stored-language-B-tiWZU2.js} +2 -2
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-DBgsBw8S.js → theme-toggle-CPEq5JG-.js} +1 -1
- package/dist/{toolbar-items-Bm1baIp6.js → toolbar-items-ByvXcMHm.js} +4 -4
- package/dist/{translate-material-Q67GD4co.js → translate-material-tUaLZUmT.js} +2 -2
- package/dist/{translator-CBhGdYun.js → translator-B9XjUDRu.js} +1 -1
- package/dist/{use-chat-composer-BlfhGDFp.js → use-chat-composer-CzOVaIed.js} +16 -16
- package/dist/{use-heading-spy-COxCWqWF.js → use-heading-spy-BOtygPFu.js} +1 -1
- package/dist/{use-material-translation-BZAy_ffS.js → use-material-translation-B5j3jZs7.js} +2 -2
- package/docs/components/buttons-and-actions.md +1 -0
- package/docs/components/data-display.md +1 -0
- package/docs/components/navigation-and-layout.md +1 -1
- package/docs/guides/app-shell.md +17 -0
- package/docs/guides/code-editor.md +8 -0
- package/docs/guides/csp.md +4 -0
- package/docs/guides/helpers.md +57 -0
- package/docs/guides/icon-motifs.md +3 -1
- package/docs/guides/illustrations.md +33 -1
- package/docs/guides/migrating-to-3.md +4 -2
- package/docs/previews/feedback-status-illustration-game.webp +0 -0
- package/docs/roadmap.md +1 -1
- package/docs/troubleshooting.md +9 -6
- package/package.json +7 -2
package/dist/pdf-reader.js
CHANGED
package/dist/print.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as e } from "./i18n-provider-
|
|
2
|
-
import { t } from "./translate-material-
|
|
1
|
+
import { r as e } from "./i18n-provider-BehR6cU7.js";
|
|
2
|
+
import { t } from "./translate-material-tUaLZUmT.js";
|
|
3
3
|
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";
|
|
4
4
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
5
5
|
import { resolvePdfFileName as f } from "@nxgt/material-core/pdf-file-name";
|
|
@@ -3,21 +3,21 @@ 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-C5lObWXT.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 { C as h, D as g, E as _, O as v, S as y, T as b, _ as x, f as S, g as ee, k as te, r as ne, t as C, u as re, w } from "./dialog-
|
|
10
|
-
import { c as T, d as ie, f as E, i as ae, l as oe, n as se, o as D, t as ce, u as O } from "./dropdown-menu-
|
|
11
|
-
import { S as le, a as k, d as A, g as ue, h as de, i as fe, m as pe, n as j, r as me, t as M, u as he, w as ge } from "./toolbar-items-
|
|
12
|
-
import { t as _e } from "./button-
|
|
13
|
-
import { t as N } from "./use-material-translation-
|
|
14
|
-
import { n as ve, t as ye } from "./icon-button-
|
|
15
|
-
import { i as be } from "./escape-owner-
|
|
9
|
+
import { C as h, D as g, E as _, O as v, S as y, T as b, _ as x, f as S, g as ee, k as te, r as ne, t as C, u as re, w } from "./dialog-yfPkLqUQ.js";
|
|
10
|
+
import { c as T, d as ie, f as E, i as ae, l as oe, n as se, o as D, t as ce, u as O } from "./dropdown-menu-CiobN1wi.js";
|
|
11
|
+
import { S as le, a as k, d as A, g as ue, h as de, i as fe, m as pe, n as j, r as me, t as M, u as he, w as ge } from "./toolbar-items-ByvXcMHm.js";
|
|
12
|
+
import { t as _e } from "./button-7BuUCGRm.js";
|
|
13
|
+
import { t as N } from "./use-material-translation-B5j3jZs7.js";
|
|
14
|
+
import { n as ve, t as ye } from "./icon-button-DvP0Gy3j.js";
|
|
15
|
+
import { i as be } from "./escape-owner-r57kuPjn.js";
|
|
16
16
|
import { t as xe } from "./useEvent-2fKq-6w8.js";
|
|
17
17
|
import { n as Se, t as Ce } from "./toggle-group-BkH23Jk4.js";
|
|
18
18
|
import { n as we } from "./use-slice-reducer-BGkeGtML.js";
|
|
19
19
|
import { r as Te } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
20
|
-
import { n as Ee, t as De } from "./empty-state-
|
|
20
|
+
import { n as Ee, t as De } from "./empty-state-DA517HAb.js";
|
|
21
21
|
import { t as Oe } from "./client-only.utils-3nHNzCki.js";
|
|
22
22
|
import { t as ke } from "./use-scroll-away-PQRFZkT2.js";
|
|
23
23
|
import * as P 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-C5lObWXT.js";
|
|
2
|
+
import { c as t, n, t as r } from "./dropdown-menu-CiobN1wi.js";
|
|
3
|
+
import { t as i } from "./use-material-translation-B5j3jZs7.js";
|
|
4
|
+
import { a, i as o, n as s, o as c, t as l } from "./code-language-items-rCPB0Xee.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-Ckc9TTCM.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-B5j3jZs7.js";
|
|
4
|
+
import { t as r } from "./icon-button-DvP0Gy3j.js";
|
|
5
5
|
import { t as i } from "./compose-refs-DZ0iIVF-.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-B5j3jZs7.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";
|
|
@@ -1298,7 +1298,7 @@ var t = {
|
|
|
1298
1298
|
"load-more": {
|
|
1299
1299
|
shown: "Showing {shown} of {total}",
|
|
1300
1300
|
"shown-count": "{shown, plural, one {# shown} other {# shown}}",
|
|
1301
|
-
failed: "The next
|
|
1301
|
+
failed: "The next page could not be loaded",
|
|
1302
1302
|
retry: "Try again",
|
|
1303
1303
|
"page-failed-title": "This page could not be loaded",
|
|
1304
1304
|
"back-to-start": "Back to the start"
|
|
@@ -4181,7 +4181,7 @@ var t = {
|
|
|
4181
4181
|
"load-more": {
|
|
4182
4182
|
shown: "Affichage de {shown} sur {total}",
|
|
4183
4183
|
"shown-count": "{shown, plural, one {# affiché} other {# affichés}}",
|
|
4184
|
-
failed: "La
|
|
4184
|
+
failed: "La page suivante n’a pas pu être chargée",
|
|
4185
4185
|
retry: "Réessayer",
|
|
4186
4186
|
"page-failed-title": "Cette page n’a pas pu être chargée",
|
|
4187
4187
|
"back-to-start": "Retour au début"
|
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-B5j3jZs7.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-CPEq5JG-.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-B5j3jZs7.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,14 +1,14 @@
|
|
|
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-C5lObWXT.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-CiobN1wi.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-
|
|
11
|
-
import { i as we } from "./escape-owner-
|
|
10
|
+
import { t as Ce } from "./use-material-translation-B5j3jZs7.js";
|
|
11
|
+
import { i as we } from "./escape-owner-r57kuPjn.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";
|
|
14
14
|
import { Fragment as P, jsx as F, jsxs as I } from "react/jsx-runtime";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./stored-language-
|
|
2
|
-
import { a as e, r as t, t as n } from "./translator-
|
|
1
|
+
import "./stored-language-B-tiWZU2.js";
|
|
2
|
+
import { a as e, r as t, t as n } from "./translator-B9XjUDRu.js";
|
|
3
3
|
//#region lib/i18n/translate-material.ts
|
|
4
4
|
var r = /* @__PURE__ */ new WeakMap();
|
|
5
5
|
function i(e) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./is-production-GLw59WU8.js";
|
|
2
|
-
import { a as t, i as n, r, t as i } from "./stored-language-
|
|
2
|
+
import { a as t, i as n, r, t as i } from "./stored-language-B-tiWZU2.js";
|
|
3
3
|
import { t as a } from "./get-CTzJAwfc.js";
|
|
4
4
|
//#region ../../node_modules/@formatjs/fast-memoize/index.js
|
|
5
5
|
function o(e, t) {
|
|
@@ -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-C5lObWXT.js";
|
|
8
8
|
import { a as ee, i as j, n as te, r as M, t as ne } from "./dist-C4wtXCjf.js";
|
|
9
9
|
import { i as re, n as N, t as ie } from "./in-dialog-Vwkyp-M5.js";
|
|
10
|
-
import { A as ae, C as P, D as oe, E as se, O as ce, S as F, T as le, _ as ue, b as de, f as fe, g as pe, k as me, l as he, m as ge, n as _e, o as ve, r as ye, s as be, t as xe, u as Se, v as Ce, w as we, x as Te, y as Ee } from "./dialog-
|
|
10
|
+
import { A as ae, C as P, D as oe, E as se, O as ce, S as F, T as le, _ as ue, b as de, f as fe, g as pe, k as me, l as he, m as ge, n as _e, o as ve, r as ye, s as be, t as xe, u as Se, v as Ce, w as we, x as Te, y as Ee } from "./dialog-yfPkLqUQ.js";
|
|
11
11
|
import { A as De, C as Oe, D as ke, E as Ae, O as je, S as Me, T as Ne, _ as Pe, a as Fe, b as Ie, d as Le, f as Re, g as ze, h as Be, i as Ve, k as He, l as Ue, m as We, n as Ge, o as Ke, p as qe, r as Je, s as Ye, t as Xe, u as Ze, v as Qe, w as $e, x as et, y as tt } from "./floating-ui.dom-KkZSW8_E.js";
|
|
12
|
-
import { D as nt, E as rt, N as it, O as at, c as ot, d as I, f as st, i as ct, k as lt, m as ut, n as dt, o as ft, p as pt, t as mt, u as ht } from "./dropdown-menu-
|
|
13
|
-
import { a as gt, i as _t, n as vt } from "./field-blur-context-
|
|
14
|
-
import { C as yt, S as bt, a as xt, c as St, d as Ct, l as wt, n as Tt, o as Et, s as Dt, u as Ot } from "./toolbar-items-
|
|
12
|
+
import { D as nt, E as rt, N as it, O as at, c as ot, d as I, f as st, i as ct, k as lt, m as ut, n as dt, o as ft, p as pt, t as mt, u as ht } from "./dropdown-menu-CiobN1wi.js";
|
|
13
|
+
import { a as gt, i as _t, n as vt } from "./field-blur-context-DbJQZkEB.js";
|
|
14
|
+
import { C as yt, S as bt, a as xt, c as St, d as Ct, l as wt, n as Tt, o as Et, s as Dt, u as Ot } from "./toolbar-items-ByvXcMHm.js";
|
|
15
15
|
import { a as kt, i as At, n as jt, o as Mt, t as Nt } from "./bubble-input-B7BVd9fX.js";
|
|
16
16
|
import { i as Pt } from "./dist-B7RjY7SL.js";
|
|
17
17
|
import { o as Ft, s as It, t as Lt } from "./use-click-lock-BZYtTmVt.js";
|
|
18
18
|
import { a as Rt, r as zt } from "./icon-sprites-CaYXzOL4.js";
|
|
19
19
|
import { t as Bt } from "./warn-once-C_e47JM8.js";
|
|
20
|
-
import { r as Vt, t as Ht } from "./button-
|
|
21
|
-
import "./stored-language-
|
|
22
|
-
import { a as Ut } from "./translator-
|
|
20
|
+
import { r as Vt, t as Ht } from "./button-7BuUCGRm.js";
|
|
21
|
+
import "./stored-language-B-tiWZU2.js";
|
|
22
|
+
import { a as Ut } from "./translator-B9XjUDRu.js";
|
|
23
23
|
import { h as Wt } from "./get-CTzJAwfc.js";
|
|
24
24
|
import { t as Gt } from "./isEmpty-F_g3jLf8.js";
|
|
25
|
-
import { t as L } from "./use-material-translation-
|
|
26
|
-
import { t as R } from "./icon-button-
|
|
25
|
+
import { t as L } from "./use-material-translation-B5j3jZs7.js";
|
|
26
|
+
import { t as R } from "./icon-button-DvP0Gy3j.js";
|
|
27
27
|
import { t as Kt } from "./use-ssr-media-query-C6M5m8sf.js";
|
|
28
|
-
import { a as qt, i as Jt, o as Yt } from "./escape-owner-
|
|
28
|
+
import { a as qt, i as Jt, o as Yt } from "./escape-owner-r57kuPjn.js";
|
|
29
29
|
import { n as Xt, t as Zt } from "./util-4heV2LPI.js";
|
|
30
30
|
import { t as Qt } from "./useEvent-2fKq-6w8.js";
|
|
31
|
-
import { f as $t } from "./field-blur-
|
|
31
|
+
import { f as $t } from "./field-blur-DdvY0NQQ.js";
|
|
32
32
|
import { c as en, i as tn, l as nn, o as rn, r as an, s as on, t as sn } from "./dist-C3GR7kJd.js";
|
|
33
33
|
import { i as cn } from "./toggle-group-BkH23Jk4.js";
|
|
34
34
|
import { n as ln } from "./use-slice-reducer-BGkeGtML.js";
|
|
35
35
|
import { t as un } from "./browser-only-DQ94lWF8.js";
|
|
36
36
|
import { t as dn } from "./compose-refs-DZ0iIVF-.js";
|
|
37
|
-
import { n as fn, r as pn, t as mn } from "./chip-
|
|
38
|
-
import { n as hn, t as gn } from "./icon-badge-
|
|
37
|
+
import { n as fn, r as pn, t as mn } from "./chip-kQOrHlDX.js";
|
|
38
|
+
import { n as hn, t as gn } from "./icon-badge-C646JTOI.js";
|
|
39
39
|
import { r as _n } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
40
|
-
import { t as vn } from "./empty-state-
|
|
40
|
+
import { t as vn } from "./empty-state-DA517HAb.js";
|
|
41
41
|
import { t as yn } from "./skeleton-DSdtr2qc.js";
|
|
42
42
|
import { H as bn, V as xn, X as Sn, bt as Cn, it as wn, lt as Tn, n as En, t as Dn, xt as On, yt as kn } from "./dist-moutbfbd.js";
|
|
43
43
|
import { t as An } from "./markdown-Dw_uH7j7.js";
|
|
@@ -11424,7 +11424,7 @@ var dC = (e = {}) => jn({
|
|
|
11424
11424
|
let [{ default: t }, { lowlight: n }, { richCodeBlock: r }] = await Promise.all([
|
|
11425
11425
|
import("./dist-CRMFGjng.js"),
|
|
11426
11426
|
import("./lowlight-OtcjU2Sa.js"),
|
|
11427
|
-
import("./rich-code-block-
|
|
11427
|
+
import("./rich-code-block-WJxDWPPY.js")
|
|
11428
11428
|
]);
|
|
11429
11429
|
return [r(t, {
|
|
11430
11430
|
lowlight: n,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as e } from "./i18n-provider-
|
|
1
|
+
import { r as e } from "./i18n-provider-BehR6cU7.js";
|
|
2
2
|
import { _ as t, g as n, h as r, n as i, v as a, y as o } from "./number.utils-BG_eEt5g.js";
|
|
3
3
|
import { useCallback as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
|
|
4
4
|
import { busySettler as f, busySettler as p, createSubmitGuard as m, createSubmitGuard as h } from "@nxgt/material-core/submit-guard";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as e } from "./i18n-provider-
|
|
2
|
-
import { t } from "./translate-material-
|
|
1
|
+
import { r as e } from "./i18n-provider-BehR6cU7.js";
|
|
2
|
+
import { t } from "./translate-material-tUaLZUmT.js";
|
|
3
3
|
import { useCallback as n } from "react";
|
|
4
4
|
//#region lib/i18n/use-material-translation.ts
|
|
5
5
|
function r() {
|
|
@@ -997,6 +997,7 @@ import { LoadMoreFooter } from '@nxgt/material/components';
|
|
|
997
997
|
| `hasMore` | `boolean` | — | `false` renders nothing, not even the count |
|
|
998
998
|
| `loading` | `boolean` | `false` | the button (or the retry) spins and ignores clicks |
|
|
999
999
|
| `failed` | `boolean` | `false` | an error alert with a tonal "Try again" replaces the button |
|
|
1000
|
+
| `showCount` | `boolean` | `true` | `false` hides the "Showing N of M" line (keep it for a list whose header already announces the count in its own `role="status"`); the button and the failed alert stay |
|
|
1000
1001
|
| `label` | `string` | `"Load more"` (translated) | the load button's text; the button is expanded here |
|
|
1001
1002
|
| `onLoad` | `() => void` | — | loads the next page; the retry calls it too |
|
|
1002
1003
|
|
|
@@ -967,6 +967,7 @@ A tile with an `href` ends with a discreet chevron after `trailing`: decorative
|
|
|
967
967
|
| `actions` | `ReactNode` | — | buttons at the end of the tile, outside the link, vertically centred (`data-slot="item-actions"`) |
|
|
968
968
|
| `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 |
|
|
969
969
|
| `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"` |
|
|
970
|
+
| `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` |
|
|
970
971
|
| `as` | `'li'` | — | renders the tile inside a `<li>`, for a `<ul>` you own |
|
|
971
972
|
| `disabled` | `boolean` | — | disables the link or button, and the `actions` with it |
|
|
972
973
|
|
|
@@ -91,7 +91,7 @@ phone's menu sheet pad clear of `env(safe-area-inset-*)`, as classes; see the
|
|
|
91
91
|
| `asideSide` / `asideWidth` / `asideFrom` / `asideSticky` / `asideStack` | `'start' \| 'end'` / `'sm' \| 'md' \| 'lg' \| string` / `'lg' \| 'xl' \| '2xl'` / `boolean` / `'before' \| 'after'` | `'end'` / `'md'` / `'xl'` / `true` / `'after'` | `ActivityContent`: the panel's side, width (16, 20, 24rem), breakpoint, stickiness and stacking order (see the [app shell guide](../guides/app-shell.md#a-side-panel-and-a-readable-width)) |
|
|
92
92
|
| `align` | `'start' \| 'center'` | `'start'` | `ActivityLayout`, `AppSidebar`: the collapsed rail's entries sit right under the brand, or `'center'` for centred in the height below it |
|
|
93
93
|
| `backdrop` | `ReactNode \| false` | — | `ActivityLayout`: an exception to the theme's background (drawn by default; Lavande's is the built-in gradient and blobs); `false` draws a plain page. A node is a decorative background behind the frame: a `Background` preset from `@nxgt/material/backgrounds`. Rendered in an `inert`, `aria-hidden` layer as wide as the content column and one viewport high, fixed in the viewport while the content scrolls; the chrome (app bar, breadcrumb, tabs strip) is lightly translucent and frosted over it (80%, 87% for the sidebar, breadcrumb and tabs strip, 92% and no blur under `prefers-reduced-transparency` or without `backdrop-filter`), and the lists, tables and cards stay opaque; `--nxgt-backdrop-chrome` sets the chrome's fill and `--nxgt-backdrop-surface` the lists'. See [Use a background preset behind the shell](../guides/app-shell.md#use-a-background-preset-behind-the-shell) |
|
|
94
|
-
| `routeTransition` | `boolean \| Omit<ViewTransitionProps, 'children' \| 'ref'>` | `true` | `ActivityLayout`: React's `<ViewTransition>` around the content region, so a navigation cross-fades it. `false` renders none (your app has its own boundary); an object passes `default` / `update` classes, `name`, callbacks through. See [Route transitions](../guides/app-shell.md#route-transitions) |
|
|
94
|
+
| `routeTransition` | `boolean \| Omit<ViewTransitionProps, 'children' \| 'ref'>` | `true` | `ActivityLayout`: React's `<ViewTransition>` around the content region, so a navigation cross-fades it (by default only when the pathname changes, not on a search change, a fetcher or a revalidation). `false` renders none (your app has its own boundary); an object passes `default` / `update` classes, `name`, callbacks through. `ROUTE_TRANSITION_CLASS` (`'nxgt-route'`) is exported for nested boundaries. See [Route transitions](../guides/app-shell.md#route-transitions) |
|
|
95
95
|
|
|
96
96
|
The active entry is the longest match across the whole menu, segment-aware.
|
|
97
97
|
`AppBreadcrumb` reads `handle.breadcrumb` from `useMatches()`, so the shell
|
package/docs/guides/app-shell.md
CHANGED
|
@@ -768,6 +768,23 @@ pass `viewTransition` or wrap a navigation in `flushSync`.
|
|
|
768
768
|
</ActivityLayout>
|
|
769
769
|
```
|
|
770
770
|
|
|
771
|
+
By default the region fades only when the **pathname** changes. React Router
|
|
772
|
+
runs a `?tab=` change, a list search, a fetcher submit and a revalidation as
|
|
773
|
+
untyped transitions too; they update the page without fading it (and typing in
|
|
774
|
+
a search field is not interrupted). An explicit value is used as is, with no
|
|
775
|
+
gate. To fade on every transition, as before, give the class yourself:
|
|
776
|
+
`routeTransition={{ default: 'nxgt-route' }}`. An app that gated the update on
|
|
777
|
+
the pathname with a ref (`update: pathnameChanged ? 'nxgt-route' : 'none'`) can
|
|
778
|
+
drop it. A nested `<ViewTransition>` takes the same timing from the exported
|
|
779
|
+
`ROUTE_TRANSITION_CLASS` (`'nxgt-route'`):
|
|
780
|
+
|
|
781
|
+
```tsx
|
|
782
|
+
import { ViewTransition } from 'react';
|
|
783
|
+
import { ROUTE_TRANSITION_CLASS } from '@nxgt/material/components';
|
|
784
|
+
|
|
785
|
+
<ViewTransition default={ROUTE_TRANSITION_CLASS}>{tabs}</ViewTransition>
|
|
786
|
+
```
|
|
787
|
+
|
|
771
788
|
Tune it with an object, the props of React's `<ViewTransition>` (`default`,
|
|
772
789
|
`update`, `name`, `onEnter`…), or turn it off:
|
|
773
790
|
|
|
@@ -141,6 +141,14 @@ JSON, TypeScript/JavaScript, HTML and CSS each need their own worker (the
|
|
|
141
141
|
generic one throws "Missing requestHandler" for theirs); a worker you leave
|
|
142
142
|
out only matters if an editor uses that language.
|
|
143
143
|
|
|
144
|
+
`configureMonaco` also gives the `<style>` elements Monaco injects (the
|
|
145
|
+
editor, context menus, widgets) the page's CSP nonce (`getCspNonce()`, read when
|
|
146
|
+
the element is created), so a `style-src-elem 'nonce-…'` policy accepts them
|
|
147
|
+
and you need no `document.createElement` patch of your own. It changes nothing
|
|
148
|
+
when the page has no nonce; see the [CSP guide](csp.md). Bundling the workers
|
|
149
|
+
as above keeps `worker-src 'self'` enough (Vite's `?worker` emits them as
|
|
150
|
+
files); the CDN default needs `worker-src blob:`.
|
|
151
|
+
|
|
144
152
|
`monaco-editor` (0.56 and later: the paths above) is then a dependency of
|
|
145
153
|
your app; this library's own stories run Monaco this way. Or serve Monaco's files from
|
|
146
154
|
your origin: copy its `min/vs` folder to your public files and call
|
package/docs/guides/csp.md
CHANGED
|
@@ -57,6 +57,10 @@ configureMonaco({ paths: { vs: '/monaco/vs' } });
|
|
|
57
57
|
Or bundle Monaco with your app and pass the instance:
|
|
58
58
|
[code editor guide](code-editor.md#self-hosting-monaco).
|
|
59
59
|
|
|
60
|
+
`configureMonaco` also puts the page nonce on the `<style>` elements Monaco
|
|
61
|
+
creates, so `style-src-elem 'self' 'nonce-…'` is enough for the editor's own
|
|
62
|
+
styles. Bundle its workers as the guide shows to keep `worker-src 'self'`.
|
|
63
|
+
|
|
60
64
|
### Packages the app imports itself
|
|
61
65
|
|
|
62
66
|
`zod` and `@monaco-editor/react` are dependencies of the library, and
|
package/docs/guides/helpers.md
CHANGED
|
@@ -139,6 +139,7 @@ Vue: the Redux helpers are Pinia store factories: `defineLocalStore`
|
|
|
139
139
|
| `useScrollAway(ref?, { threshold? })` | True while the reader scrolls down (by `threshold`, 24 px, since the scroll last turned); false scrolling up, at the top or at the end. Folds an extended `Fab`. Without `ref`, the window; false on the server. See [Fab](../components/buttons-and-actions.md#fab). |
|
|
140
140
|
| `useCountdown(duration, { paused?, onExpire?, key? })` | Seconds left of `duration` (the clock `CountdownTimer` draws), for a button or a message that waits: ticks on the client only, `duration` on the server and first render. A new `duration` **or a new `key`** starts over, so the same `retryAfter` twice restarts it. See [below](#usecountdown). |
|
|
141
141
|
| `useSubmitOnce(busy?)` | One submit in flight: wraps a submit handler so a double click or a second Enter is dropped until the request ends (the handler's promise, or `busy` back to false). See [below](#usesubmitonce). |
|
|
142
|
+
| `useDrafts<T>(storageKey, { serialize?, parse?, storage? })`, `clearDrafts(storageKey, storage?)` | Unsent values kept by key in `sessionStorage`: `{ get, set, drop, clear, keys, loaded }`. Read after the first render (no hydration mismatch), storage errors swallowed, `drop(key)` once saved; `clearDrafts` empties a store key without a hook (sign-out). See [below](#usedrafts). |
|
|
142
143
|
| `createSubmitGuard()`, `busySettler(guard)` | The framework-free guard behind `useSubmitOnce` (`@nxgt/material-core/submit-guard`): `{ once(run, { settleSync? }), settle(run?), pendingRun() }`, and the function that settles it from a busy flag. |
|
|
143
144
|
|
|
144
145
|
```tsx
|
|
@@ -293,6 +294,62 @@ Outside React, `createSubmitGuard()` from `@nxgt/material-core/submit-guard`
|
|
|
293
294
|
`busySettler(guard)` returns the function to call with each value of a busy
|
|
294
295
|
flag. Storybook: `Guides/Hooks/useSubmitOnce`.
|
|
295
296
|
|
|
297
|
+
### `useDrafts`
|
|
298
|
+
|
|
299
|
+
Long answers are lost when the reader jumps to another step or reloads. The
|
|
300
|
+
hook keeps unsent values by key in the tab's `sessionStorage`; `storageKey`
|
|
301
|
+
names the store (one per form) and each field has its own key inside it.
|
|
302
|
+
|
|
303
|
+
```tsx
|
|
304
|
+
import { Textarea } from '@nxgt/material/components';
|
|
305
|
+
import { useDrafts } from '@nxgt/material/hooks';
|
|
306
|
+
|
|
307
|
+
export function Answer({ save }: { save: (text: string) => Promise<void> }) {
|
|
308
|
+
const drafts = useDrafts<string>('quiz-1');
|
|
309
|
+
return (
|
|
310
|
+
<form
|
|
311
|
+
onSubmit={async (event) => {
|
|
312
|
+
event.preventDefault();
|
|
313
|
+
await save(drafts.get('q3') ?? '');
|
|
314
|
+
drafts.drop('q3'); // saved: the draft goes
|
|
315
|
+
}}
|
|
316
|
+
>
|
|
317
|
+
<Textarea
|
|
318
|
+
value={drafts.get('q3') ?? ''}
|
|
319
|
+
onChange={(event) => drafts.set('q3', event.target.value)}
|
|
320
|
+
/>
|
|
321
|
+
<p>{drafts.keys.length} unsaved</p>
|
|
322
|
+
</form>
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
- **SSR-safe.** The first render, on the server and on the client, has no
|
|
328
|
+
drafts; they are read in an effect and `loaded` turns true.
|
|
329
|
+
- **Storage errors are swallowed.** A private window, a blocked or full
|
|
330
|
+
store, or a damaged entry reads and writes as no draft.
|
|
331
|
+
- **Written at once.** `set`, `drop` and `clear` write the store in the call,
|
|
332
|
+
so a `drop` or `clear` before `loaded` wins over the stored copy. When no
|
|
333
|
+
draft is left the store key is removed. `keys` lists the unsaved ones.
|
|
334
|
+
- **Values that are not strings.** The default serialiser is JSON; pass
|
|
335
|
+
`serialize` and `parse` (throw or return `undefined` to ignore an entry).
|
|
336
|
+
- **Another store.** `storage` takes a getter, preferred because nothing
|
|
337
|
+
touches `window` during render: `useDrafts('quiz-1', { storage: () => localStorage })`.
|
|
338
|
+
A store object is accepted too.
|
|
339
|
+
- **A new `storageKey`** starts from that key's drafts (`loaded` false until
|
|
340
|
+
they are read); the old key's drafts stay in the store under the old key.
|
|
341
|
+
- **Two instances on one key** read at mount and merge on write; they do not
|
|
342
|
+
update each other live. Share one instance (props or context) when both
|
|
343
|
+
must follow.
|
|
344
|
+
- **Sign-out.** `clearDrafts('quiz-1')` (same optional `storage`) empties the
|
|
345
|
+
store key without a mounted hook; call it where the session ends.
|
|
346
|
+
- **Why not `react-use`'s `useSessionStorage`?** It holds one value per hook
|
|
347
|
+
call, reads storage during the first render (a hydration mismatch) and
|
|
348
|
+
throws when storage is blocked. `useDrafts` holds many keys in one store key,
|
|
349
|
+
renders the same on server and client, and never throws.
|
|
350
|
+
|
|
351
|
+
Storybook: `Guides/Hooks/useDrafts` (remount restores, `drop`, key change).
|
|
352
|
+
|
|
296
353
|
## `@nxgt/material/i18n`
|
|
297
354
|
|
|
298
355
|
| Export | What it does |
|
|
@@ -138,7 +138,7 @@ An `Illustration` draws a hero icon on a Material 3 Expressive plate, with two
|
|
|
138
138
|
to four satellites. There are twelve base scenes (`empty`, `no-results`,
|
|
139
139
|
`not-found`, `error`, `offline`, `success`, `welcome`, `forbidden`,
|
|
140
140
|
`maintenance`, `invitation`, `sign-in`, `empty-inbox`) and two domain sets of
|
|
141
|
-
ten, **health** and **education**, each its own subpath so an app that does not
|
|
141
|
+
ten, **health** and **education**, plus **game** (eleven scenes for games and events), each its own subpath so an app that does not
|
|
142
142
|
import one does not carry it:
|
|
143
143
|
|
|
144
144
|
<img src="../previews/feedback-status-illustration.webp" width="480" alt="The twelve base illustration scenes">
|
|
@@ -147,6 +147,8 @@ import one does not carry it:
|
|
|
147
147
|
|
|
148
148
|
<img src="../previews/feedback-status-illustration-education.webp" width="480" alt="The ten education scenes">
|
|
149
149
|
|
|
150
|
+
<img src="../previews/feedback-status-illustration-game.webp" width="480" alt="The eleven game scenes">
|
|
151
|
+
|
|
150
152
|
- `IllustrationDefaults` is opt-in: without it (and without a `hero`) an
|
|
151
153
|
`EmptyState` or `ErrorState` draws the same built-in art as before. An
|
|
152
154
|
`illustration` prop wins over it, `illustration={false}` hides the media, and
|
|
@@ -5,7 +5,7 @@ on a Material 3 Expressive plate, two to four satellite icons around it, a
|
|
|
5
5
|
dashed ring and a few sparkles. There are twelve scenes: `empty`, `no-results`,
|
|
6
6
|
`not-found`, `error`, `offline`, `success`, `welcome`, `forbidden`,
|
|
7
7
|
`maintenance`, `invitation`, `sign-in` and `empty-inbox`, and two domain sets of
|
|
8
|
-
ten more each, health and education, in their own entries ([health](#scene-sets-the-health-scenes) and [education](#scene-sets-the-education-scenes)). The icons are
|
|
8
|
+
ten more each, health and education, in their own entries ([health](#scene-sets-the-health-scenes) and [education](#scene-sets-the-education-scenes)), and eleven for games ([game](#scene-sets-the-game-scenes)). The icons are
|
|
9
9
|
[Font Awesome](https://fontawesome.com) sprites **your app serves** (see
|
|
10
10
|
[Icons](../getting-started.md#icons)): the package ships no icon artwork, so it
|
|
11
11
|
works with the sprites your licence covers. The [icon motifs guide](icon-motifs.md) shows them next to the icon backgrounds, the sky and the themes, and lists the suggested names that are Pro only, with Free neighbours.
|
|
@@ -146,6 +146,38 @@ the icon names the set draws, hero first. Some of them (`backpack`,
|
|
|
146
146
|
`clipboard-list-check`, `books`, `file-chart-column`) are Font Awesome Pro
|
|
147
147
|
icons: serve a Pro sprite, or set `edition="free"` on `IconSpritesProvider`, which draws their Free twins (see the [Free edition](icon-motifs.md#the-free-edition)).
|
|
148
148
|
|
|
149
|
+
## Scene sets: the game scenes
|
|
150
|
+
|
|
151
|
+
`@nxgt/material/illustrations/game` holds eleven scenes for a game, a quiz, a
|
|
152
|
+
community or an event app: `night-sky`, `village`, five character pictograms
|
|
153
|
+
(`seer`, `healer`, `archer`, `cupid`, `wolf`), `victory`, `empty-table`,
|
|
154
|
+
`waiting-players` and `connection-lost`. It works exactly like the other sets,
|
|
155
|
+
and they register side by side. Use them where a screen is empty, waiting,
|
|
156
|
+
failed, celebrating or opening: a lobby with no players, a round that waits, a
|
|
157
|
+
dropped connection, a winner, a night-phase hero. Keep them away from behind
|
|
158
|
+
data.
|
|
159
|
+
|
|
160
|
+
<img src="../previews/feedback-status-illustration-game.webp" width="480" alt="The eleven game scenes">
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
import { Illustration, IllustrationDefaults } from '@nxgt/material/illustrations';
|
|
164
|
+
import { GAME_SCENES } from '@nxgt/material/illustrations/game';
|
|
165
|
+
import { EmptyState } from '@nxgt/material/components';
|
|
166
|
+
|
|
167
|
+
<IllustrationDefaults sets={[GAME_SCENES]}>
|
|
168
|
+
<Illustration scene="night-sky" /> {/* decorative: aria-hidden */}
|
|
169
|
+
<Illustration scene="victory" title="Victory" /> {/* role="img" + aria-label */}
|
|
170
|
+
<EmptyState illustration="empty-table" title="No one at the table" />
|
|
171
|
+
</IllustrationDefaults>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Colours come from the theme's tone tokens (light and dark follow the theme),
|
|
175
|
+
motion stops under `prefers-reduced-motion`, and a scene is 120, 190 or 280 px
|
|
176
|
+
wide (`size`), never wider than its container. The `night-sky` scene is
|
|
177
|
+
unrelated to the `night-sky` Background preset. Every icon is in the Free sheet, so `edition="free"`
|
|
178
|
+
needs no substitution; `GAME_SUGGESTED_ICONS` lists the names, hero first.
|
|
179
|
+
Importing the entry adds the ids to `SceneId`.
|
|
180
|
+
|
|
149
181
|
## Turn them on for an app
|
|
150
182
|
|
|
151
183
|
`IllustrationDefaults` opts a subtree in: every default-size `EmptyState` and
|
|
@@ -59,7 +59,8 @@ component`). As a peer there is one copy, your app's.
|
|
|
59
59
|
## ActivityLayout animates route changes (`routeTransition`)
|
|
60
60
|
|
|
61
61
|
3.0 wraps the content region of `ActivityLayout` in React's `<ViewTransition>`,
|
|
62
|
-
on by default: a navigation cross-fades the page
|
|
62
|
+
on by default: a navigation cross-fades the page (only when the pathname
|
|
63
|
+
changes; see [Route transitions](./app-shell.md#route-transitions)), the sidebar, header and
|
|
63
64
|
breadcrumb staying still. Back and Forward may not animate (React skips view
|
|
64
65
|
transitions for synchronous popstate updates).
|
|
65
66
|
|
|
@@ -92,7 +93,8 @@ shell's off with `routeTransition={false}`, or remove yours:
|
|
|
92
93
|
```
|
|
93
94
|
|
|
94
95
|
The prop is `routeTransition?: boolean | Omit<ViewTransitionProps, 'children' | 'ref'>`,
|
|
95
|
-
default `true
|
|
96
|
+
default `true` (it fades only when the pathname changes; see
|
|
97
|
+
[Route transitions](./app-shell.md#route-transitions)). An object turns it on and passes its props through, so the app
|
|
96
98
|
can pick its own classes: `routeTransition={{ default: 'my-route' }}`.
|
|
97
99
|
|
|
98
100
|
**Nested boundaries.** An inner `<ViewTransition>` takes the mutation from the
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -250,7 +250,7 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
250
250
|
(`name` for a key, `range` for a value), as it does for the icon keys.
|
|
251
251
|
|
|
252
252
|
- **More illustration sets** — finance, travel and tech scenes beside the
|
|
253
|
-
health and
|
|
253
|
+
health, education and game sets, each in its own subpath.
|
|
254
254
|
- **More generic scenes** — further base scenes for `Illustration` beyond the
|
|
255
255
|
twelve it draws today (`forbidden`, `maintenance`, `invitation`, `sign-in`
|
|
256
256
|
and `empty-inbox` are among them), added on demand.
|
package/docs/troubleshooting.md
CHANGED
|
@@ -2724,10 +2724,12 @@ See [Route transitions](./guides/app-shell.md#route-transitions).
|
|
|
2724
2724
|
**When:** after upgrading to `@nxgt/material` 3.0, a filter, a tab switch, a
|
|
2725
2725
|
`useDeferredValue` update or a lazy part loading inside `ActivityLayout`'s
|
|
2726
2726
|
content fades the whole page, as a navigation does.
|
|
2727
|
-
**Why:** the
|
|
2728
|
-
|
|
2729
|
-
`
|
|
2730
|
-
|
|
2727
|
+
**Why:** the default fades the region only when the pathname changes, so a
|
|
2728
|
+
filter or a `?tab=` change does not fade it. Two cases still do: an explicit
|
|
2729
|
+
`routeTransition={{ default: 'nxgt-route' }}`, which animates every transition
|
|
2730
|
+
that changes the region (your `startTransition`, `useDeferredValue`, Suspense
|
|
2731
|
+
reveals), and a Suspense reveal or a transition that changes the pathname on the
|
|
2732
|
+
default. The Gallery's morph is the one exception the shell makes itself.
|
|
2731
2733
|
**Fix:** give your transition a type and map that type to `'none'`:
|
|
2732
2734
|
|
|
2733
2735
|
```tsx
|
|
@@ -7801,14 +7803,15 @@ z.config({ jitless: true });
|
|
|
7801
7803
|
### `Illustration: … Drawing the built-in art instead.`
|
|
7802
7804
|
|
|
7803
7805
|
**When:** a development-only `console.warn`, once per message, from an `Illustration` (or an `EmptyState` / `ErrorState` with `illustration`) that cannot be built. The page does not break: the built-in art of the scene's kind is drawn, and production builds do it silently.
|
|
7804
|
-
**Why:** the scene id is in no table (`"patient-record" is not a scene of the table`), an icon name is not valid, or the style is not one Font Awesome 7.3.1 draws. A domain id such as `patient-record` (health)
|
|
7806
|
+
**Why:** the scene id is in no table (`"patient-record" is not a scene of the table`), an icon name is not valid, or the style is not one Font Awesome 7.3.1 draws. A domain id such as `patient-record` (health) `classroom` (education) or `village` (game) is only a scene when its set is registered; in an `EmptyState`, `illustration="no-patients"`, `"no-students"` or `"empty-table"` is otherwise drawn as text.
|
|
7805
7807
|
**Fix:** register the set once for the subtree, or pass it to the one `Illustration`; and take `iconStyle` from the 37 sprite file names (a bad name is a type error):
|
|
7806
7808
|
|
|
7807
7809
|
```tsx
|
|
7808
7810
|
import { EDUCATION_SCENES } from '@nxgt/material/illustrations/education';
|
|
7811
|
+
import { GAME_SCENES } from '@nxgt/material/illustrations/game';
|
|
7809
7812
|
import { HEALTH_SCENES } from '@nxgt/material/illustrations/health';
|
|
7810
7813
|
|
|
7811
|
-
<IllustrationDefaults sets={[HEALTH_SCENES, EDUCATION_SCENES]}>
|
|
7814
|
+
<IllustrationDefaults sets={[HEALTH_SCENES, EDUCATION_SCENES, GAME_SCENES]}>
|
|
7812
7815
|
<EmptyState illustration="no-patients" />
|
|
7813
7816
|
</IllustrationDefaults>;
|
|
7814
7817
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxgt/material",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.62.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"email": "stevegires@gmail.com"
|
|
@@ -105,6 +105,11 @@
|
|
|
105
105
|
"types": "./dist/lib/illustrations-education/index.d.ts",
|
|
106
106
|
"require": "./dist/illustrations-education.js"
|
|
107
107
|
},
|
|
108
|
+
"./illustrations/game": {
|
|
109
|
+
"import": "./dist/illustrations-game.js",
|
|
110
|
+
"types": "./dist/lib/illustrations-game/index.d.ts",
|
|
111
|
+
"require": "./dist/illustrations-game.js"
|
|
112
|
+
},
|
|
108
113
|
"./themes": {
|
|
109
114
|
"import": "./dist/themes.js",
|
|
110
115
|
"types": "./dist/lib/themes/index.d.ts",
|
|
@@ -367,7 +372,7 @@
|
|
|
367
372
|
"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"
|
|
368
373
|
},
|
|
369
374
|
"dependencies": {
|
|
370
|
-
"@nxgt/material-core": "^0.
|
|
375
|
+
"@nxgt/material-core": "^0.44.0",
|
|
371
376
|
"@base-ui/react": "^1.6.0",
|
|
372
377
|
"@dnd-kit/core": "^6.3.1",
|
|
373
378
|
"@dnd-kit/sortable": "^10.0.0",
|