@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.
Files changed (76) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/README.md +3 -2
  3. package/dist/{async-slice-Cmvxrvn9.js → async-slice-HJY_VJjD.js} +2 -2
  4. package/dist/{button-qb9UpHF5.js → button-7BuUCGRm.js} +1 -1
  5. package/dist/charts.js +3 -3
  6. package/dist/{chip-BlmIjpiD.js → chip-kQOrHlDX.js} +2 -2
  7. package/dist/{code-editor-BYEpBp_U.js → code-editor-Ckc9TTCM.js} +6 -6
  8. package/dist/code-editor.js +54 -37
  9. package/dist/{code-language-items-Cqk4Fq61.js → code-language-items-rCPB0Xee.js} +2 -2
  10. package/dist/{components-j44ReRNq.js → components-TDDUQ1Y0.js} +9240 -9228
  11. package/dist/components.js +26 -26
  12. package/dist/{dialog-1BstKBvt.js → dialog-yfPkLqUQ.js} +4 -4
  13. package/dist/dnd.js +1 -1
  14. package/dist/{dropdown-menu-hoaocAS7.js → dropdown-menu-CiobN1wi.js} +1 -1
  15. package/dist/editor.js +9 -9
  16. package/dist/{empty-state-DEG9h7xk.js → empty-state-DA517HAb.js} +2 -2
  17. package/dist/{escape-owner-BvLBo_Al.js → escape-owner-r57kuPjn.js} +1 -1
  18. package/dist/{field-blur-BkeYPaWi.js → field-blur-DdvY0NQQ.js} +1 -1
  19. package/dist/{field-blur-context-Ba7iZVm_.js → field-blur-context-DbJQZkEB.js} +1 -1
  20. package/dist/hooks-CGnqFngB.js +187 -0
  21. package/dist/hooks.js +8 -102
  22. package/dist/{hover-card-C5DTU9P_.js → hover-card-DPs9huSs.js} +2 -2
  23. package/dist/{i18n-provider-BJDI-A5w.js → i18n-provider-BehR6cU7.js} +1 -1
  24. package/dist/i18n.js +5 -5
  25. package/dist/{icon-badge-9ZE6k7cn.js → icon-badge-C646JTOI.js} +3 -3
  26. package/dist/{icon-button-AwJtCkV5.js → icon-button-DvP0Gy3j.js} +1 -1
  27. package/dist/illustrations-game.js +2 -0
  28. package/dist/lib/components/ui/actions/load-more-footer/load-more-footer.d.ts +4 -2
  29. package/dist/lib/components/ui/display/list-tile/list-tile.d.ts +6 -0
  30. package/dist/lib/components/ui/display/list-tile/partials/list-tile-classes.d.ts +3 -1
  31. package/dist/lib/components/ui/display/list-tile/partials/list-tile-line.d.ts +1 -1
  32. package/dist/lib/components/ui/display/list-tile/partials/list-tile-toggle.d.ts +1 -1
  33. package/dist/lib/components/ui/layout/app-shell/activity-layout.types.d.ts +6 -3
  34. package/dist/lib/components/ui/layout/app-shell/index.d.ts +1 -1
  35. package/dist/lib/components/ui/layout/app-shell/route-transition.d.ts +20 -2
  36. package/dist/lib/components/ui/layout/app-shell/shapes-clear-content.d.ts +2 -1
  37. package/dist/lib/components/ui/widgets/code-editor/configure-monaco.d.ts +2 -0
  38. package/dist/lib/hooks/drafts-store.d.ts +4 -0
  39. package/dist/lib/hooks/index.d.ts +1 -0
  40. package/dist/lib/hooks/use-drafts.d.ts +75 -0
  41. package/dist/lib/i18n/resources/en/material.json.d.ts +1 -1
  42. package/dist/lib/i18n/resources/fr/material.json.d.ts +1 -1
  43. package/dist/lib/illustrations-game/index.d.ts +17 -0
  44. package/dist/lib.js +1 -1
  45. package/dist/main.js +43 -43
  46. package/dist/map.js +8 -8
  47. package/dist/material.css +1 -1
  48. package/dist/pdf-reader.js +1 -1
  49. package/dist/print.js +2 -2
  50. package/dist/{public-DEh75enl.js → public-BYsrhyPW.js} +9 -9
  51. package/dist/{rich-code-block-hJexXOdk.js → rich-code-block-WJxDWPPY.js} +5 -5
  52. package/dist/{sortable-provider-DE-MSfeJ.js → sortable-provider-oPjlhlZo.js} +2 -2
  53. package/dist/{spinner-CquTUxzt.js → spinner-C5lObWXT.js} +1 -1
  54. package/dist/{stored-language-BDzGeEAm.js → stored-language-B-tiWZU2.js} +2 -2
  55. package/dist/theme-picker.js +2 -2
  56. package/dist/{theme-toggle-DBgsBw8S.js → theme-toggle-CPEq5JG-.js} +1 -1
  57. package/dist/{toolbar-items-Bm1baIp6.js → toolbar-items-ByvXcMHm.js} +4 -4
  58. package/dist/{translate-material-Q67GD4co.js → translate-material-tUaLZUmT.js} +2 -2
  59. package/dist/{translator-CBhGdYun.js → translator-B9XjUDRu.js} +1 -1
  60. package/dist/{use-chat-composer-BlfhGDFp.js → use-chat-composer-CzOVaIed.js} +16 -16
  61. package/dist/{use-heading-spy-COxCWqWF.js → use-heading-spy-BOtygPFu.js} +1 -1
  62. package/dist/{use-material-translation-BZAy_ffS.js → use-material-translation-B5j3jZs7.js} +2 -2
  63. package/docs/components/buttons-and-actions.md +1 -0
  64. package/docs/components/data-display.md +1 -0
  65. package/docs/components/navigation-and-layout.md +1 -1
  66. package/docs/guides/app-shell.md +17 -0
  67. package/docs/guides/code-editor.md +8 -0
  68. package/docs/guides/csp.md +4 -0
  69. package/docs/guides/helpers.md +57 -0
  70. package/docs/guides/icon-motifs.md +3 -1
  71. package/docs/guides/illustrations.md +33 -1
  72. package/docs/guides/migrating-to-3.md +4 -2
  73. package/docs/previews/feedback-status-illustration-game.webp +0 -0
  74. package/docs/roadmap.md +1 -1
  75. package/docs/troubleshooting.md +9 -6
  76. package/package.json +7 -2
@@ -1,3 +1,3 @@
1
- import { t as e } from "./public-DEh75enl.js";
1
+ import { t as e } from "./public-BYsrhyPW.js";
2
2
  import { configurePdfReader as t } from "@nxgt/material-core/pdf-reader";
3
3
  export { e as PdfReader, t as configurePdfReader };
package/dist/print.js CHANGED
@@ -1,5 +1,5 @@
1
- import { r as e } from "./i18n-provider-BJDI-A5w.js";
2
- import { t } from "./translate-material-Q67GD4co.js";
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-CquTUxzt.js";
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-1BstKBvt.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-hoaocAS7.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-Bm1baIp6.js";
12
- import { t as _e } from "./button-qb9UpHF5.js";
13
- import { t as N } from "./use-material-translation-BZAy_ffS.js";
14
- import { n as ve, t as ye } from "./icon-button-AwJtCkV5.js";
15
- import { i as be } from "./escape-owner-BvLBo_Al.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-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-DEG9h7xk.js";
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-CquTUxzt.js";
2
- import { c as t, n, t as r } from "./dropdown-menu-hoaocAS7.js";
3
- import { t as i } from "./use-material-translation-BZAy_ffS.js";
4
- import { a, i as o, n as s, o as c, t as l } from "./code-language-items-Cqk4Fq61.js";
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-BYEpBp_U.js").then((e) => e.n).then((e) => ({ default: e.CodeEditor })));
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-BZAy_ffS.js";
4
- import { t as r } from "./icon-button-AwJtCkV5.js";
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-BZAy_ffS.js";
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 items could not be loaded",
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 suite n’a pas pu être chargée",
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"
@@ -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-BZAy_ffS.js";
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-DBgsBw8S.js";
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-BZAy_ffS.js";
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-CquTUxzt.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-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-hoaocAS7.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-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-BZAy_ffS.js";
11
- import { i as we } from "./escape-owner-BvLBo_Al.js";
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-BDzGeEAm.js";
2
- import { a as e, r as t, t as n } from "./translator-CBhGdYun.js";
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-BDzGeEAm.js";
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-CquTUxzt.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-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-1BstKBvt.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-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-hoaocAS7.js";
13
- import { a as gt, i as _t, n as vt } from "./field-blur-context-Ba7iZVm_.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-Bm1baIp6.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-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-qb9UpHF5.js";
21
- import "./stored-language-BDzGeEAm.js";
22
- import { a as Ut } from "./translator-CBhGdYun.js";
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-BZAy_ffS.js";
26
- import { t as R } from "./icon-button-AwJtCkV5.js";
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-BvLBo_Al.js";
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-BkeYPaWi.js";
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-BlmIjpiD.js";
38
- import { n as hn, t as gn } from "./icon-badge-9ZE6k7cn.js";
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-DEG9h7xk.js";
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-hJexXOdk.js")
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-BJDI-A5w.js";
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-BJDI-A5w.js";
2
- import { t } from "./translate-material-Q67GD4co.js";
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
@@ -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
@@ -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
@@ -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, the sidebar, header and
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`. An object turns it on and passes its props through, so the app
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
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 education sets, each in its own subpath.
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.
@@ -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 shell's `<ViewTransition>` animates every transition that changes
2728
- its content region, not only navigations: your `startTransition`,
2729
- `useDeferredValue` and Suspense reveals too. The Gallery's morph is the one
2730
- exception the shell makes itself.
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) or `classroom` (education) is only a scene when its set is registered; in an `EmptyState`, `illustration="no-patients"` or `"no-students"` is otherwise drawn as text.
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.59.1",
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.43.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",