@nxgt/material 3.39.0 → 3.41.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 (83) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +3 -3
  3. package/dist/{async-slice-BtUexP2l.js → async-slice-Dj0tAKRI.js} +2 -2
  4. package/dist/{button-CCAYSsgh.js → button-CTsT_LqL.js} +1 -1
  5. package/dist/charts.js +1733 -1364
  6. package/dist/{chip-Corr637n.js → chip-DP7EyhtT.js} +1 -1
  7. package/dist/{code-editor-B8_ny_jT.js → code-editor-BWn0AXBf.js} +4 -4
  8. package/dist/code-editor.js +4 -4
  9. package/dist/{code-language-items-1E5Qmfzb.js → code-language-items-CCRuLYpA.js} +2 -2
  10. package/dist/components/components.css +1 -0
  11. package/dist/components/ui/widgets/native-charts/native-charts-reference.css +102 -0
  12. package/dist/{components-CTKlqX8g.js → components-BUFDh6nQ.js} +5261 -5133
  13. package/dist/components.js +15 -15
  14. package/dist/{dialog-DGlnqBbX.js → dialog-uQld1gKm.js} +1 -1
  15. package/dist/dnd.js +1 -1
  16. package/dist/{dropdown-menu-B-buMTGc.js → dropdown-menu-BA70o7HC.js} +1 -1
  17. package/dist/editor.js +7 -7
  18. package/dist/{empty-state-DKgPt475.js → empty-state-BzwyRX5J.js} +1 -1
  19. package/dist/hooks.js +2 -2
  20. package/dist/{i18n-provider-Bc7bdIRW.js → i18n-provider-DkeMr5bw.js} +1 -1
  21. package/dist/i18n.js +5 -5
  22. package/dist/{icon-badge-BzLsPW3c.js → icon-badge-D_z5BGbc.js} +1 -1
  23. package/dist/lib/charts/index.d.ts +3 -1
  24. package/dist/lib/components/ui/collections/server-table/bulk-action-targets.d.ts +18 -0
  25. package/dist/lib/components/ui/collections/server-table/bulk-action.d.ts +50 -3
  26. package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-buttons.d.ts +5 -3
  27. package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-focus.d.ts +31 -0
  28. package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-more.d.ts +24 -0
  29. package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-notice.d.ts +16 -0
  30. package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-texts.d.ts +9 -0
  31. package/dist/lib/components/ui/collections/server-table/server-table.d.ts +1 -1
  32. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  33. package/dist/lib/components/ui/widgets/native-charts/core/point-tones.d.ts +17 -0
  34. package/dist/lib/components/ui/widgets/native-charts/core/reference-text.d.ts +30 -0
  35. package/dist/lib/components/ui/widgets/native-charts/core/reference.d.ts +45 -0
  36. package/dist/lib/components/ui/widgets/native-charts/core/summary.d.ts +3 -0
  37. package/dist/lib/components/ui/widgets/native-charts/core/table.d.ts +7 -0
  38. package/dist/lib/components/ui/widgets/native-charts/core/types.d.ts +25 -0
  39. package/dist/lib/components/ui/widgets/native-charts/hooks/chart-model-types.d.ts +18 -1
  40. package/dist/lib/components/ui/widgets/native-charts/hooks/model-parts.d.ts +3 -0
  41. package/dist/lib/components/ui/widgets/native-charts/hooks/model-series.d.ts +3 -0
  42. package/dist/lib/components/ui/widgets/native-charts/hooks/model-tones.d.ts +19 -0
  43. package/dist/lib/components/ui/widgets/native-charts/hooks/use-chart-model.d.ts +3 -3
  44. package/dist/lib/components/ui/widgets/native-charts/index.d.ts +1 -1
  45. package/dist/lib/components/ui/widgets/native-charts/line-chart/line-chart-types.d.ts +26 -1
  46. package/dist/lib/components/ui/widgets/native-charts/line-chart/line-geometry.d.ts +4 -0
  47. package/dist/lib/components/ui/widgets/native-charts/line-chart/partials/reference-marks.d.ts +17 -0
  48. package/dist/lib/components/ui/widgets/native-charts/line-chart/partials/tone-points.d.ts +11 -0
  49. package/dist/lib/components/ui/widgets/native-charts/partials/chart-tooltip.d.ts +3 -0
  50. package/dist/lib/i18n/resources/en/en.d.ts +22 -0
  51. package/dist/lib/i18n/resources/en/material.json.d.ts +22 -0
  52. package/dist/lib/i18n/resources/fr/fr.d.ts +22 -0
  53. package/dist/lib/i18n/resources/fr/material.json.d.ts +22 -0
  54. package/dist/lib/i18n/resources/resources.d.ts +44 -0
  55. package/dist/lib/i18n/translator.d.ts +1 -1
  56. package/dist/lib.js +1 -1
  57. package/dist/main.js +21 -21
  58. package/dist/map.js +4 -4
  59. package/dist/material.css +1 -1
  60. package/dist/pdf-reader.js +1 -1
  61. package/dist/print.js +2 -2
  62. package/dist/{public-CNlIuQOj.js → public-ib0sK0Hr.js} +6 -6
  63. package/dist/{rich-code-block-Jo0OLy0J.js → rich-code-block-D_PTTZWQ.js} +4 -4
  64. package/dist/{sortable-provider-DgIo378H.js → sortable-provider-CrS51nKB.js} +1 -1
  65. package/dist/{spinner-BTR8rVN9.js → spinner-DLd_IHev.js} +1 -1
  66. package/dist/{stored-language-Bbwcy-Pv.js → stored-language-B5SMR-W2.js} +44 -0
  67. package/dist/theme-picker.js +2 -2
  68. package/dist/{theme-toggle-DMZ_3HiG.js → theme-toggle-wJYmnwgu.js} +1 -1
  69. package/dist/{toolbar-items-D3SPTgXE.js → toolbar-items-BLjrk8uU.js} +2 -2
  70. package/dist/{translate-material-CRF13PON.js → translate-material-BYRDtSEk.js} +2 -2
  71. package/dist/{translator-D7AVZCfQ.js → translator-C-_M57ZA.js} +1 -1
  72. package/dist/{use-chat-composer-D3kvp8Fw.js → use-chat-composer-DrFgIE3T.js} +12 -12
  73. package/dist/{use-heading-spy-uyhOQV2O.js → use-heading-spy-wElRpO2G.js} +1 -1
  74. package/dist/{use-material-translation-kISeB-fY.js → use-material-translation-CFF73jk5.js} +2 -2
  75. package/docs/README.md +1 -1
  76. package/docs/components/data-table-filter-and-lists.md +59 -4
  77. package/docs/components/rich-widgets.md +6 -0
  78. package/docs/guides/charts.md +78 -2
  79. package/docs/guides/i18n.md +1 -1
  80. package/docs/roadmap.md +7 -0
  81. package/lib/components/components.css +1 -0
  82. package/lib/components/ui/widgets/native-charts/native-charts-reference.css +102 -0
  83. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
- import { t as e } from "./public-CNlIuQOj.js";
1
+ import { t as e } from "./public-ib0sK0Hr.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-Bc7bdIRW.js";
2
- import { t } from "./translate-material-CRF13PON.js";
1
+ import { r as e } from "./i18n-provider-DkeMr5bw.js";
2
+ import { t } from "./translate-material-BYRDtSEk.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";
@@ -6,18 +6,18 @@ import { c as i, i as a, l as o, n as s, o as c, s as l } from "./dist-lmHmz_bu.
6
6
  import { a as u, o as d } from "./tooltip-CkttDIab.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-DGlnqBbX.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-B-buMTGc.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-D3SPTgXE.js";
12
- import { t as N } from "./use-material-translation-kISeB-fY.js";
13
- import { t as _e } from "./button-CCAYSsgh.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-uQld1gKm.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-BA70o7HC.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-BLjrk8uU.js";
12
+ import { t as N } from "./use-material-translation-CFF73jk5.js";
13
+ import { t as _e } from "./button-CTsT_LqL.js";
14
14
  import { n as ve, t as ye } from "./icon-button-CN9r5TNE.js";
15
15
  import { t as be } from "./useEvent-2fKq-6w8.js";
16
16
  import { n as xe, t as Se } from "./toggle-group-BMJNcFAC.js";
17
17
  import { o as Ce } from "./escape-owner-C4W_sOAU.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-DKgPt475.js";
20
+ import { n as Ee, t as De } from "./empty-state-BzwyRX5J.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 { ArrowLeft as Ae, BookOpenText as je, ChevronDown as Me, ChevronLeft as Ne, ChevronRight as Pe, ChevronUp as Fe, Download as Ie, Eraser as Le, FileText as Re, FileWarning as ze, FileX2 as Be, Highlighter as Ve, KeyRound as He, LayoutGrid as Ue, List as We, Loader2 as Ge, Maximize as Ke, MessageSquareText as qe, Minimize as Je, MoreVertical as Ye, MousePointer2 as Xe, MoveHorizontal as Ze, PanelLeft as Qe, Pen as $e, PencilLine as et, Printer as tt, RotateCw as nt, Search as rt, StickyNote as it, Type as at, Underline as ot, Undo2 as st, Volume2 as ct, X as lt, XIcon as ut, ZoomIn as dt, ZoomOut as ft } from "lucide-react";
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./tooltip-CkttDIab.js";
2
- import { c as t, n, t as r } from "./dropdown-menu-B-buMTGc.js";
3
- import { t as i } from "./use-material-translation-kISeB-fY.js";
4
- import { a, i as o, n as s, o as c, t as l } from "./code-language-items-1E5Qmfzb.js";
2
+ import { c as t, n, t as r } from "./dropdown-menu-BA70o7HC.js";
3
+ import { t as i } from "./use-material-translation-CFF73jk5.js";
4
+ import { a, i as o, n as s, o as c, t as l } from "./code-language-items-CCRuLYpA.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 { Check as h, ChevronDown as g, Copy as _, Maximize2 as v, WrapText as y } from "lucide-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 = x(() => import("./code-editor-B8_ny_jT.js").then((e) => e.n).then((e) => ({ default: e.CodeEditor })));
146
+ var N = x(() => import("./code-editor-BWn0AXBf.js").then((e) => e.n).then((e) => ({ default: e.CodeEditor })));
147
147
  function P() {
148
148
  let { t: e } = i();
149
149
  return /* @__PURE__ */ T("div", {
@@ -1,6 +1,6 @@
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-kISeB-fY.js";
3
+ import { t as n } from "./use-material-translation-CFF73jk5.js";
4
4
  import { t as r } from "./icon-button-CN9r5TNE.js";
5
5
  import { t as i } from "./compose-refs-DZ0iIVF-.js";
6
6
  import { GripVertical as a } from "lucide-react";
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { o as t } from "./tooltip-CkttDIab.js";
3
- import { t as n } from "./use-material-translation-kISeB-fY.js";
3
+ import { t as n } from "./use-material-translation-CFF73jk5.js";
4
4
  import { jsx as r } from "react/jsx-runtime";
5
5
  //#region lib/components/ui/feedback/spinner/spinner.tsx
6
6
  var i = t("transition-all duration-500", {
@@ -2012,6 +2012,7 @@ var t = {
2012
2012
  "error-hint": "Check your connection, then try again.",
2013
2013
  "bulk-action": "{label} ({count})",
2014
2014
  "bulk-action-name": "{label} {count, plural, one {# row} other {# rows}}",
2015
+ "bulk-max-notice": "Select {max, plural, one {# row} other {# rows}} or fewer to {label}",
2015
2016
  "bulk-more": "More"
2016
2017
  },
2017
2018
  "list-empty": { clear: "Clear search and filters" },
@@ -2655,6 +2656,8 @@ var t = {
2655
2656
  "no-data": "No data to show",
2656
2657
  loading: "Loading chart",
2657
2658
  "status-value": "{series} {value}",
2659
+ "status-value-tone": "{series} {value} ({tone})",
2660
+ "table-tone": "{series} tone",
2658
2661
  "status-point": "{label}: {values}",
2659
2662
  "table-caption": "{title}: the data",
2660
2663
  "status-slice": "{label}: {value}, {share}",
@@ -2698,6 +2701,20 @@ var t = {
2698
2701
  "zoom-reset": "Reset zoom",
2699
2702
  "zoom-showing": "Showing {from} to {to}",
2700
2703
  "zoom-range": "{from} to {to}",
2704
+ tone: {
2705
+ primary: "Primary",
2706
+ secondary: "Secondary",
2707
+ tertiary: "Tertiary",
2708
+ success: "Success",
2709
+ info: "Info",
2710
+ warning: "Warning",
2711
+ error: "Error",
2712
+ neutral: "Neutral"
2713
+ },
2714
+ reference: {
2715
+ band: "{label}: {from} to {to}",
2716
+ threshold: "{label}: {value}"
2717
+ },
2701
2718
  kind: {
2702
2719
  line: "line chart",
2703
2720
  area: "area chart",
@@ -2717,6 +2734,11 @@ var t = {
2717
2734
  range: "{count, plural, one {# point} other {# points}}, from {first} to {last}.",
2718
2735
  series: "{series}: from {start} to {end}, highest {max} ({maxAt}), lowest {min} ({minAt}).",
2719
2736
  hidden: "Hidden: {series}.",
2737
+ bands: "Reference ranges: {list}.",
2738
+ thresholds: "Thresholds: {list}.",
2739
+ outside: "{series}: {count} of {total, plural, one {# point} other {# points}} outside {band}.",
2740
+ tones: "{series}: {list}, of {total, plural, one {# point} other {# points}}.",
2741
+ "tone-count": "{count} {tone}",
2720
2742
  slices: "{count, plural, one {# slice} other {# slices}}, {total} in all.",
2721
2743
  largest: "Largest: {list}.",
2722
2744
  slice: "{label} {value} ({share})",
@@ -4760,6 +4782,7 @@ var t = {
4760
4782
  "error-hint": "Vérifiez votre connexion, puis réessayez.",
4761
4783
  "bulk-action": "{label} ({count})",
4762
4784
  "bulk-action-name": "{label} : {count, plural, one {# ligne} other {# lignes}}",
4785
+ "bulk-max-notice": "Sélectionnez {max, plural, one {# ligne} other {# lignes}} ou moins pour {label}",
4763
4786
  "bulk-more": "Plus"
4764
4787
  },
4765
4788
  "list-empty": { clear: "Effacer la recherche et les filtres" },
@@ -5403,6 +5426,8 @@ var t = {
5403
5426
  "no-data": "Aucune donnée à afficher",
5404
5427
  loading: "Chargement du graphique",
5405
5428
  "status-value": "{series} {value}",
5429
+ "status-value-tone": "{series} {value} ({tone})",
5430
+ "table-tone": "{series} : ton",
5406
5431
  "status-point": "{label} : {values}",
5407
5432
  "table-caption": "{title} : les données",
5408
5433
  "status-slice": "{label} : {value}, {share}",
@@ -5446,6 +5471,20 @@ var t = {
5446
5471
  "zoom-reset": "Réinitialiser le zoom",
5447
5472
  "zoom-showing": "Affichage de {from} à {to}",
5448
5473
  "zoom-range": "{from} à {to}",
5474
+ tone: {
5475
+ primary: "Principal",
5476
+ secondary: "Secondaire",
5477
+ tertiary: "Tertiaire",
5478
+ success: "Succès",
5479
+ info: "Information",
5480
+ warning: "Alerte",
5481
+ error: "Erreur",
5482
+ neutral: "Neutre"
5483
+ },
5484
+ reference: {
5485
+ band: "{label} : de {from} à {to}",
5486
+ threshold: "{label} : {value}"
5487
+ },
5449
5488
  kind: {
5450
5489
  line: "graphique en courbes",
5451
5490
  area: "graphique en aires",
@@ -5465,6 +5504,11 @@ var t = {
5465
5504
  range: "{count, plural, one {# point} other {# points}}, de {first} à {last}.",
5466
5505
  series: "{series} : de {start} à {end}, maximum {max} ({maxAt}), minimum {min} ({minAt}).",
5467
5506
  hidden: "Masquées : {series}.",
5507
+ bands: "Plages de référence : {list}.",
5508
+ thresholds: "Seuils : {list}.",
5509
+ outside: "{series} : {count} sur {total, plural, one {# point} other {# points}} hors de {band}.",
5510
+ tones: "{series} : {list}, sur {total, plural, one {# point} other {# points}}.",
5511
+ "tone-count": "{count} {tone}",
5468
5512
  slices: "{count, plural, one {# part} other {# parts}}, {total} au total.",
5469
5513
  largest: "Les plus grandes : {list}.",
5470
5514
  slice: "{label} {value} ({share})",
@@ -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
- import { t as s } from "./use-material-translation-kISeB-fY.js";
3
+ import { t as s } from "./use-material-translation-CFF73jk5.js";
4
4
  import { a as c, r as l } from "./icon-sprites-CaYXzOL4.js";
5
5
  import { t as u } from "./use-theme-DMcyJ52N.js";
6
6
  import { a as d, r as f } from "./theme-context-Cofk6vgs.js";
7
- import { t as p } from "./theme-toggle-DMZ_3HiG.js";
7
+ import { t as p } from "./theme-toggle-wJYmnwgu.js";
8
8
  import { n as m, t as h } from "./nxgt-theme-ZS945iMP.js";
9
9
  import { Check as g } from "lucide-react";
10
10
  import { useContext as _ } from "react";
@@ -1,4 +1,4 @@
1
- import { t as e } from "./use-material-translation-kISeB-fY.js";
1
+ import { t as e } from "./use-material-translation-CFF73jk5.js";
2
2
  import { i as t } from "./theme-store-CSl51uNH.js";
3
3
  import { n, t as r } from "./use-theme-DMcyJ52N.js";
4
4
  import { r as i } from "./theme-context-Cofk6vgs.js";
@@ -4,9 +4,9 @@ import { a as i, c as a, i as o, l as s, r as c, s as l } from "./dist-lmHmz_bu.
4
4
  import { b as u, c as d, d as f, f as p, l as m, t as h, u as g, x as _ } from "./tooltip-CkttDIab.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 E } from "./in-dialog-Vwkyp-M5.js";
7
- import { A as ne, M as re, N as ie, b as ae, d as oe, f as se, i as ce, j as le, l as ue, n as de, o as fe, r as pe, t as me, u as he, y as ge } from "./dropdown-menu-B-buMTGc.js";
7
+ import { A as ne, M as re, N as ie, b as ae, d as oe, f as se, i as ce, j as le, l as ue, n as de, o as fe, r as pe, t as me, u as he, y as ge } from "./dropdown-menu-BA70o7HC.js";
8
8
  import { a as _e, n as ve, r as ye, t as be } from "./dist-B7RjY7SL.js";
9
- import { t as xe } from "./use-material-translation-kISeB-fY.js";
9
+ import { t as xe } from "./use-material-translation-CFF73jk5.js";
10
10
  import { t as Se } from "./warn-once-C_e47JM8.js";
11
11
  import { o as Ce } from "./escape-owner-C4W_sOAU.js";
12
12
  import { ChevronLeft as we, ChevronRightIcon as Te, MoreVertical as Ee } from "lucide-react";
@@ -1,5 +1,5 @@
1
- import "./stored-language-Bbwcy-Pv.js";
2
- import { a as e, r as t } from "./translator-D7AVZCfQ.js";
1
+ import "./stored-language-B5SMR-W2.js";
2
+ import { a as e, r as t } from "./translator-C-_M57ZA.js";
3
3
  //#region lib/i18n/translate-material.ts
4
4
  function n(n, r, i, a) {
5
5
  if (n) for (let e of /* @__PURE__ */ new Set([n, n.split("-")[0]])) {
@@ -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-Bbwcy-Pv.js";
2
+ import { a as t, i as n, r, t as i } from "./stored-language-B5SMR-W2.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) {
@@ -7,21 +7,21 @@ import { a as o, c as s, i as c, l, n as u, o as d, r as f, s as p, t as m } fro
7
7
  import { _ as h, a as g, g as _, h as v, m as y, o as b, p as x, t as S, v as C, y as w } from "./tooltip-CkttDIab.js";
8
8
  import { a as T, i as E, n as D, r as O, t as k } from "./dist-C4wtXCjf.js";
9
9
  import { i as A, n as ee, t as j } from "./in-dialog-Vwkyp-M5.js";
10
- import { A as M, C as N, D as te, E as ne, O as P, S as re, T as ie, _ as F, b as ae, f as oe, g as se, k as I, l as ce, m as le, n as ue, o as de, r as fe, s as pe, t as me, u as he, v as ge, w as _e, x as ve, y as ye } from "./dialog-DGlnqBbX.js";
10
+ import { A as M, C as N, D as te, E as ne, O as P, S as re, T as ie, _ as F, b as ae, f as oe, g as se, k as I, l as ce, m as le, n as ue, o as de, r as fe, s as pe, t as me, u as he, v as ge, w as _e, x as ve, y as ye } from "./dialog-uQld1gKm.js";
11
11
  import { A as be, C as xe, D as Se, E as Ce, O as we, S as Te, T as Ee, _ as De, a as Oe, b as ke, d as Ae, f as je, g as Me, h as Ne, i as Pe, k as Fe, l as Ie, m as Le, n as Re, o as ze, p as Be, r as Ve, s as He, t as Ue, u as We, v as Ge, w as Ke, x as qe, y as Je } from "./floating-ui.dom-KkZSW8_E.js";
12
- import { D as Ye, E as Xe, N as Ze, O as Qe, c as $e, d as et, f as tt, i as nt, k as rt, m as it, n as at, o as ot, p as st, t as ct, u as lt } from "./dropdown-menu-B-buMTGc.js";
12
+ import { D as Ye, E as Xe, N as Ze, O as Qe, c as $e, d as et, f as tt, i as nt, k as rt, m as it, n as at, o as ot, p as st, t as ct, u as lt } from "./dropdown-menu-BA70o7HC.js";
13
13
  import { a as ut, i as dt, n as ft } from "./field-blur-context-Cft9s7Hg.js";
14
- import { C as pt, S as mt, a as ht, c as gt, d as _t, l as vt, n as yt, o as bt, s as xt, u as St } from "./toolbar-items-D3SPTgXE.js";
14
+ import { C as pt, S as mt, a as ht, c as gt, d as _t, l as vt, n as yt, o as bt, s as xt, u as St } from "./toolbar-items-BLjrk8uU.js";
15
15
  import { a as Ct, i as wt, n as Tt, o as Et, t as Dt } from "./bubble-input-B7BVd9fX.js";
16
16
  import { i as Ot } from "./dist-B7RjY7SL.js";
17
- import "./stored-language-Bbwcy-Pv.js";
18
- import { a as kt } from "./translator-D7AVZCfQ.js";
17
+ import "./stored-language-B5SMR-W2.js";
18
+ import { a as kt } from "./translator-C-_M57ZA.js";
19
19
  import { h as At } from "./get-CTzJAwfc.js";
20
20
  import { t as jt } from "./isEmpty-F_g3jLf8.js";
21
- import { t as L } from "./use-material-translation-kISeB-fY.js";
22
- import { t as Mt } from "./spinner-BTR8rVN9.js";
21
+ import { t as L } from "./use-material-translation-CFF73jk5.js";
22
+ import { t as Mt } from "./spinner-DLd_IHev.js";
23
23
  import { a as Nt } from "./button-tones-BwuVvAmd.js";
24
- import { a as Pt, i as Ft, o as It, r as Lt, t as Rt } from "./button-CCAYSsgh.js";
24
+ import { a as Pt, i as Ft, o as It, r as Lt, t as Rt } from "./button-CTsT_LqL.js";
25
25
  import { t as R } from "./icon-button-CN9r5TNE.js";
26
26
  import { a as zt, r as Bt } from "./icon-sprites-CaYXzOL4.js";
27
27
  import { t as Vt } from "./use-ssr-media-query-C6M5m8sf.js";
@@ -35,10 +35,10 @@ import { a as tn, i as nn, o as rn } from "./escape-owner-C4W_sOAU.js";
35
35
  import { n as an } from "./use-slice-reducer-BGkeGtML.js";
36
36
  import { t as on } from "./browser-only-DQ94lWF8.js";
37
37
  import { t as sn } from "./compose-refs-DZ0iIVF-.js";
38
- import { n as cn, r as ln, t as un } from "./chip-Corr637n.js";
39
- import { n as dn, t as fn } from "./icon-badge-BzLsPW3c.js";
38
+ import { n as cn, r as ln, t as un } from "./chip-DP7EyhtT.js";
39
+ import { n as dn, t as fn } from "./icon-badge-D_z5BGbc.js";
40
40
  import { r as pn } from "./use-csp-nonce-ZKs9k-ov.js";
41
- import { t as mn } from "./empty-state-DKgPt475.js";
41
+ import { t as mn } from "./empty-state-BzwyRX5J.js";
42
42
  import { t as hn } from "./skeleton-DSdtr2qc.js";
43
43
  import { H as gn, V as _n, X as vn, bt as yn, it as bn, lt as xn, n as Sn, t as Cn, xt as wn, yt as Tn } from "./dist-moutbfbd.js";
44
44
  import { t as En } from "./markdown-Dw_uH7j7.js";
@@ -10909,7 +10909,7 @@ var jS = (e = {}) => Dn({
10909
10909
  let [{ default: t }, { lowlight: n }, { richCodeBlock: r }] = await Promise.all([
10910
10910
  import("./dist-CRMFGjng.js"),
10911
10911
  import("./lowlight-OtcjU2Sa.js"),
10912
- import("./rich-code-block-Jo0OLy0J.js")
10912
+ import("./rich-code-block-D_PTTZWQ.js")
10913
10913
  ]);
10914
10914
  return [r(t, {
10915
10915
  lowlight: n,
@@ -1,4 +1,4 @@
1
- import { r as e } from "./i18n-provider-Bc7bdIRW.js";
1
+ import { r as e } from "./i18n-provider-DkeMr5bw.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 } from "react";
4
4
  //#region ../../node_modules/date-fns/locale/fr/_lib/formatDistance.js
@@ -1,5 +1,5 @@
1
- import { r as e } from "./i18n-provider-Bc7bdIRW.js";
2
- import { t } from "./translate-material-CRF13PON.js";
1
+ import { r as e } from "./i18n-provider-DkeMr5bw.js";
2
+ import { t } from "./translate-material-BYRDtSEk.js";
3
3
  import { useCallback as n } from "react";
4
4
  //#region lib/i18n/use-material-translation.ts
5
5
  function r() {
package/docs/README.md CHANGED
@@ -9,7 +9,7 @@ detail: every option, the second example, and the traps.
9
9
  | [Components](components/README.md) | You are looking for a component — one preview per category, then one page per category |
10
10
  | [Forms](guides/forms.md) | You are building a form: the field / `*FormField` pair, React Hook Form + Zod, what each field emits, server errors, multi-step forms |
11
11
  | [Themes for your app](guides/themes.md) | You define your own themes: `defineTheme` modules, the Vite plugin's `themes` option, the `nxgt-theme` command and its CI check, the tone warnings |
12
- | [Charts](guides/charts.md) | You draw charts with `@nxgt/material/charts`: each chart, the shared props, zoom and phone scroll, the keyboard, accessibility, theming the `--chart-1..5` tokens, and moving off the Nivo charts, removed in 3.0 |
12
+ | [Charts](guides/charts.md) | You draw charts with `@nxgt/material/charts`: each chart, the shared props, reference bands, thresholds and point tones, zoom and phone scroll, the keyboard, accessibility, theming the `--chart-1..5` tokens, and moving off the Nivo charts, removed in 3.0 |
13
13
  | [Cards and tiles](guides/cards-and-tiles.md) | You want a `DataTable` as a list of cards or tiles: `layout`, `renderCard`, `renderTile`, the card's one link, selection, the sort control, columns by the list's width |
14
14
  | [DataGrid](guides/data-grid.md) | You are building an editable grid: columns and editors, save modes and conflicts, resizing, hiding and reordering columns, paste, fill and series, undo, totals, long lists, phones, custom editors, CSP |
15
15
  | [Code editor](guides/code-editor.md) | You want `CodeEditor` or `CodeDiff` in a theme preset or your own (`defineCodeTheme`), several themes on one page, Monaco bundled instead of the CDN, or the new `@nxgt/material/code-editor` import (the reader look, the view props, the `ref` handle and the file tabs are in the component's own page) |
@@ -861,12 +861,12 @@ export default function Students() {
861
861
  ```
862
862
  - **Bulk actions that count and run only their rows.** `bulkActions` also
863
863
  takes a list of `ServerTableBulkAction<T>` (`{ id, label, icon?, appliesTo?,
864
- onClick, variant?, color?, loading? }`). Each button reads "Label (n)", n
864
+ name?, max?, maxNotice?, onClick, variant?, color?, loading? }`). Each button reads "Label (n)", n
865
865
  being the selected rows the action applies to, and is named "Label n rows"
866
866
  (`material.server-table.bulk-action` and `bulk-action-name`, English and
867
867
  French); `variant` (default `'tonal'`) and `color` (`'destructive'` for a
868
868
  destructive one) style the button, `loading` makes it busy; the type is
869
- exported as `ServerTableBulkAction`. It is not rendered when n is 0, so 5 rows selected with none
869
+ exported as `ServerTableBulkAction`, with `ServerTableBulkContext`. It is not rendered when n is 0, so 5 rows selected with none
870
870
  archived show no "Restore". `onClick(ids, selection, rows)` receives only
871
871
  those ids and rows. An action without `appliesTo` applies to the whole
872
872
  selection: it shows the selection's size and gets every id. **Across
@@ -880,6 +880,61 @@ export default function Students() {
880
880
  (an action without it still gets every selected id). A row's snapshot is
881
881
  dropped when it is deselected, when the selection is cleared and when the
882
882
  query changes.
883
+
884
+ **Name, maximum and focus (`name`, `max`, `maxNotice`, `onClick`'s fourth
885
+ argument).** All three are optional and additive:
886
+ - `name: (count) => string` is the button's accessible name and tooltip,
887
+ e.g. `(n) => `Archive ${n} people``, instead of the generic "Archive 2
888
+ rows". Start it with the visible `label`: the button reads "Archive (2)",
889
+ and a name that begins with it lets speech input ("click Archive") and
890
+ screen readers agree (WCAG 2.5.3, Label in Name). It applies to the
891
+ toolbar, the phone's bar and the More menu's items alike.
892
+ - `max: 100` is the most rows one call takes, counted on the rows the action
893
+ applies to. Above it the button is replaced by `maxNotice`: a short muted
894
+ text, by default "Select 100 rows or fewer to archive"
895
+ (`material.server-table.bulk-max-notice`, English and French), or your own
896
+ node or `(count, max) => node`. The notice is told politely once, when the
897
+ action goes past `max`; moving from 101 to 102 rows says nothing more.
898
+ Under `max` again, the button returns. On a phone an action in the bar
899
+ shows the notice inline; one in the More menu is a disabled item whose
900
+ notice is its description (`aria-describedby`), so it reads under its label.
901
+ - `onClick(ids, selection, rows, { trigger, focusTrigger })`: `trigger` is the
902
+ button the action started from (the "More" button for a More-menu item),
903
+ and `focusTrigger()` gives it the focus back, found again at call time, so
904
+ it works after a re-render. When the action is gone by then (its count fell
905
+ to 0, or past `max`) the focus goes to the next bulk action, else "More",
906
+ else the table's "Select all" (the table itself without one), never the
907
+ body. A handler that takes three parameters stays valid.
908
+ ```tsx
909
+ const [confirm, setConfirm] = useState<{ ids: string[]; focus: () => void } | null>(null);
910
+ <ServerTable<Person>
911
+ {...props}
912
+ bulkActions={[
913
+ {
914
+ id: 'archive',
915
+ label: 'Archive',
916
+ appliesTo: (person) => !person.archived,
917
+ name: (n) => `Archive ${n} ${n === 1 ? 'person' : 'people'}`,
918
+ max: 100,
919
+ onClick: (ids, _selection, _rows, { focusTrigger }) =>
920
+ setConfirm({ ids, focus: focusTrigger }),
921
+ },
922
+ ]}
923
+ />
924
+ <Dialog open={confirm != null} onOpenChange={(open) => !open && setConfirm(null)}>
925
+ <DialogContent
926
+ // Without this, the focus goes back to what Radix remembers, which is
927
+ // gone when the action was in the More menu or has disappeared.
928
+ onCloseAutoFocus={(event) => {
929
+ event.preventDefault();
930
+ confirm?.focus();
931
+ }}
932
+ >
933
+ {/* … */}
934
+ </DialogContent>
935
+ </Dialog>
936
+ ```
937
+
883
938
  ```tsx
884
939
  <ServerTable<Item>
885
940
  {...props}
@@ -932,7 +987,7 @@ Its props are `ServerTableProps<T>`; `filter` is a `ServerTableFilter`,
932
987
  | `error` | `ServerTableError \| null` | — | the fetch failed: the failure and a Retry replace the rows |
933
988
  | `onRetry` | `() => unknown` | — | the error's Retry; a returned promise keeps it loading |
934
989
  | `onClearFilters` | `() => void` | focus the table | without `filter`, after "clear" |
935
- | `bulkActions` | `(ids, selection: ServerTableSelection) => ReactNode \| ServerTableBulkAction<T>[]` | — | the selection's toolbar: your own buttons, or a list of actions with `appliesTo` that each count and run only the rows they apply to |
990
+ | `bulkActions` | `(ids, selection: ServerTableSelection) => ReactNode \| ServerTableBulkAction<T>[]` | — | the selection's toolbar: your own buttons, or a list of actions (`appliesTo`, `name`, `max`, `maxNotice`; `onClick` also gets a `ServerTableBulkContext`) that each count and run only the rows they apply to |
936
991
  | `enableRowSelection`, `rowSelectionDisabledReason` | `boolean \| (row) => boolean`, `(row) => string \| undefined` | all rows, no reason | with `bulkActions`: which rows can be selected, and why one cannot ([DataTable](#datatable)) |
937
992
  | `pageHref` | `(params) => string` | `` `?${params}` `` | Previous / Next hrefs |
938
993
  | `pagingNames` | `{ after?, trail? }` | `after`, `trail` | the cursor's params |
@@ -965,7 +1020,7 @@ rows (the bulk bar is not drawn under it). With the declarative list form of
965
1020
  line rather than scroll, and past the third action the rest go into a "More"
966
1021
  menu (`material.server-table.bulk-more`), each item keeping its count. From
967
1022
  768px the buttons read "Label (n)" as before. When the focused button
968
- disappears the focus goes to the next one, else to "Select all". The function
1023
+ disappears the focus goes to the next one, else to "More", else to "Select all"; an action past `max` shows its notice there (an inline text, or a disabled More item). The function
969
1024
  form (`bulkActions={(ids) => node}`) is drawn whole in the row, so keep it to
970
1025
  one or two compact buttons; the footer's polite status still tells the selection once. The cards'
971
1026
  own list bar row is gone in this layout; the names, the sort menu and the
@@ -278,6 +278,12 @@ import { LineChart } from '@nxgt/material/charts';
278
278
  />;
279
279
  ```
280
280
 
281
+ A line chart can be read against a reference: `bands` shade a range of the
282
+ value axis (a normal range), `thresholds` draw labelled lines and `pointTone`
283
+ rings the values that need a word, which the tooltip, the summary and the
284
+ "View data" table repeat
285
+ ([guide](../guides/charts.md#reading-values-against-a-reference)).
286
+
281
287
  Parts: `LineChart`, `AreaChart`, `BarChart`, `PieChart`, `DonutChart`, `Gauge`,
282
288
  `RadialBarChart`, `FunnelChart`, `HeatmapChart`, `RadarChart`, `ScatterChart`,
283
289
  `ComboChart`.
@@ -63,7 +63,7 @@ export function SalesChart() {
63
63
  plot of the right height; the plot is drawn once the browser has measured its
64
64
  width, with its final geometry (the entry motion only runs after that).
65
65
  Nothing mismatches on hydration.
66
- - **Types:** `ChartRow`, `RowKey`, `ChartValue`, `ChartSeries`, `ChartAxis`, `ChartXAxis`,
66
+ - **Types:** `ChartRow`, `RowKey`, `ChartValue`, `ChartSeries`, `ChartAxis`, `ChartXAxis`, `ChartBand`, `ChartThreshold`,
67
67
  `ChartPoint`, `ChartBaseProps`, `ChartColor`, `ChartShape`, `ChartSlice`,
68
68
  `ScatterSeries`, `ScatterPoint`, `ComboSeries`, `ChartRange`,
69
69
  `ChartZoomOptions`, `ChartScrollOptions`, `ChartRangeProps`, `HeatColumn`,
@@ -203,6 +203,80 @@ The funnel is one series, so it takes no `legend`, `hidden` or `grid`; the round
203
203
  charts take no `grid`, and the heat map no `hidden`, `grid` or `patterns` (these
204
204
  are left out of their props types).
205
205
 
206
+ ## Reading values against a reference
207
+
208
+ `LineChart` (and `AreaChart`, which takes the same props) can draw the range a
209
+ value is read against, so it is not painted outside the chart where the
210
+ tooltip, the summary and the table would miss it.
211
+
212
+ ```tsx
213
+ 'use client';
214
+ import { LineChart } from '@nxgt/material/charts';
215
+ import type { ChartBand, ChartPoint, ChartThreshold } from '@nxgt/material/charts';
216
+
217
+ // Module-level (or memoized): the arrays and the function key the summary and the table.
218
+ const bands: ChartBand[] = [
219
+ { from: 40, to: 60, label: 'Normal range', tone: 'success' },
220
+ ];
221
+ const thresholds: ChartThreshold[] = [
222
+ { value: 70, label: 'Upper limit', tone: 'error' },
223
+ { value: 30, label: 'Lower limit', tone: 'info', dash: false },
224
+ ];
225
+ const toneOf = (point: ChartPoint) =>
226
+ point.value > 70 ? 'error' : point.value > 60 ? 'warning' : point.value < 40 ? 'info' : undefined;
227
+
228
+ <LineChart
229
+ title="Daily readings"
230
+ data={readings}
231
+ x="day"
232
+ series={[{ key: 'reading', label: 'Reading' }]}
233
+ points
234
+ bands={bands}
235
+ thresholds={thresholds}
236
+ pointTone={toneOf}
237
+ toneLabels={{ error: 'Critical', warning: 'High', info: 'Low' }}
238
+ />;
239
+ ```
240
+
241
+ | Prop | Effect |
242
+ | --- | --- |
243
+ | `bands` | `{ from, to, label, tone? }[]`: a wash across the plot behind the lines, with its `label` inside it at the left. `from` and `to` may come in either order. |
244
+ | `thresholds` | `{ value, label, tone?, dash? }[]`: a horizontal line behind the series with its `label` above it at the right end; dashed unless `dash: false`. |
245
+ | `pointTone` | `(point: ChartPoint, series: ChartSeries) => Tone \| undefined`: the tone of one value. It is given the point `onPointClick` gets, so `point.index` is the row of the full `data` even when the chart is zoomed. |
246
+ | `toneLabels` | `{ [tone]: word }`: the word of each tone, in your language and domain. Unset, the library's neutral word ("Error", translated by `material.charts.tone.*`); an app tone you declared falls back to its own name. |
247
+
248
+ **The value axis holds them.** Unless `yAxis.min` and `yAxis.max` pin it, the
249
+ axis grows to include every band end and threshold, so none is out of view.
250
+ With a pinned axis a band is clipped to the plot and a threshold outside it is
251
+ not drawn (it stays in the summary and the table). The scales are the chart's
252
+ own, so a `zoom` window, a phone `scroll` and a resize keep them right.
253
+
254
+ **The words are carried everywhere the picture is.**
255
+
256
+ - The **tooltip** and the **live status** add the tone's word to a toned
257
+ value: `Day 4: Reading 63 (High)`.
258
+ - The **summary** lists the ranges and lines (`Reference ranges: Normal range:
259
+ 40 to 60. Thresholds: Upper limit: 70`), says how many values of each series
260
+ lie outside each band (`Reading: 5 of 12 points outside Normal range.`) and
261
+ counts the tones (`Reading: 2 High, 1 Critical, 2 Low, of 12 points.`). Over
262
+ a `zoom` window it counts the window's rows.
263
+ - **View data** gets a column after each toned series (`Reading tone`) and a
264
+ list of the ranges and lines under the table.
265
+
266
+ **Never colour alone.** A toned point is drawn as a ring in the tone's colour
267
+ round the value (the series' own shape inside the ring with `patterns`), so it
268
+ differs from an untoned dot by its form. A band is a decorative tint: the
269
+ label, the summary and the table carry its meaning. Labels use the tone's text
270
+ colour (4.5:1) on a card-coloured halo, lines and rings hold 3:1, and in
271
+ forced colours the band is outlined and the lines, labels and rings use system
272
+ colours. Nothing animates: reduced motion changes nothing here. Labels are
273
+ cut to 45% of the plot's width, and a label in a right-to-left script is set
274
+ right to left (the plot itself is never mirrored, see
275
+ [Right-to-left pages](#right-to-left-pages)).
276
+
277
+ A custom `tooltip` function receives the points as before; read the tone from
278
+ your own `pointTone` if it should show the word.
279
+
206
280
  ## Shared props
207
281
 
208
282
  Every chart takes the shared props (`ChartBaseProps`):
@@ -398,7 +472,9 @@ keyboard behaviour.
398
472
  contrast alone, so the heat map is exempt from the 3:1 non-text rule for that
399
473
  step, and **View data** (the whole matrix as a table) is the accessible
400
474
  fallback; the number in a cell keeps 4.5:1 against its own fill.
401
- - **Never colour alone:** `patterns` adds shapes, dashes and fill patterns.
475
+ - **Never colour alone:** `patterns` adds shapes, dashes and fill patterns; a
476
+ toned point is a ring and its word is in the tooltip, the summary and the
477
+ table ([Reading values against a reference](#reading-values-against-a-reference)).
402
478
  - **Reduced motion:** with `prefers-reduced-motion`, the final geometry shows at
403
479
  once with a short 120ms fade; there is no bounce, draw-in or morph, and the
404
480
  crosshair jumps.
@@ -404,7 +404,7 @@ fichier.") when it cannot show it, `material.file-preview.download`
404
404
  "Seuls les premiers {size} de ce fichier sont affichés.") under a text cut
405
405
  by the size cap; the text or Markdown it shows scrolls in a region named by
406
406
  `material.file-preview.content` ("Contents of {name}", "Contenu de {name}").
407
- A `ServerTable` bulk action with a list entry reads `material.server-table.bulk-action` ("{label} ({count})", the same in French) and is named by `material.server-table.bulk-action-name` ("{label} {count, plural, one {# row} other {# rows}}"; "{label} : {count, plural, one {# ligne} other {# lignes}}").
407
+ A `ServerTable` bulk action with a list entry reads `material.server-table.bulk-action` ("{label} ({count})", the same in French) and is named by `material.server-table.bulk-action-name` ("{label} {count, plural, one {# row} other {# rows}}"; "{label} : {count, plural, one {# ligne} other {# lignes}}"). Past the action's `max` the notice that replaces its button reads `material.server-table.bulk-max-notice` ("Select {max, plural, one {# row} other {# rows}} or fewer to {label}"; "Sélectionnez {max, plural, one {# ligne} other {# lignes}} ou moins pour {label}"), unless the action gives its `maxNotice`; an action's `name` replaces `bulk-action-name`.
408
408
  `ServerTable`'s own live region (without `filter`) says
409
409
  `material.server-table.results` once a new query is answered ("{count,
410
410
  plural, =0 {No results} one {# result} other {# results}}"; "{count, plural,
package/docs/roadmap.md CHANGED
@@ -482,6 +482,13 @@ version they shipped in, and planned entries may name the major they target.
482
482
  slider handles) and a phone scroll that opens on the latest point. The
483
483
  light `--chart-4` is now a purple. Client-only, like `/editor`.
484
484
  ([Charts](guides/charts.md))
485
+ - **Reference bands, thresholds and point tones on the line chart** — `bands`
486
+ shade a range of the value axis, `thresholds` draw labelled lines, and
487
+ `pointTone` rings the values that need a word (`toneLabels` gives the words).
488
+ The words reach the tooltip, the live status, the summary (values outside a
489
+ band, tone counts) and a tone column of "View data"; the axis grows to hold
490
+ them and a zoom window keeps them right.
491
+ ([Reading values against a reference](guides/charts.md#reading-values-against-a-reference))
485
492
 
486
493
  - **The page's title in the app bar, a text breadcrumb root and the tenant in the menu** —
487
494
  a route's `handle.title` (a node, or a function of the match like
@@ -150,6 +150,7 @@
150
150
  @import "./ui/widgets/native-charts/native-charts-round.css";
151
151
  @import "./ui/widgets/native-charts/native-charts-heat.css";
152
152
  @import "./ui/widgets/native-charts/native-charts-points.css";
153
+ @import "./ui/widgets/native-charts/native-charts-reference.css";
153
154
  @import "./ui/widgets/native-charts/native-charts-zoom.css";
154
155
  /* The editor's documents: `.nxgt-prose`, shared with the viewer. */
155
156
  @import "./editor-prose.css";