@nxgt/material 3.38.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 (112) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +3 -3
  3. package/dist/{async-slice-DqjtOYlO.js → async-slice-Dj0tAKRI.js} +2 -2
  4. package/dist/{button-D52ron-a.js → button-CTsT_LqL.js} +1 -1
  5. package/dist/charts.js +1733 -1364
  6. package/dist/{chip-0XYwSp9o.js → chip-DP7EyhtT.js} +1 -1
  7. package/dist/{code-editor-BetIXpJ6.js → code-editor-BWn0AXBf.js} +4 -4
  8. package/dist/code-editor.js +4 -4
  9. package/dist/{code-language-items-C7prxl_7.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-NoCZ44Ri.js → components-BUFDh6nQ.js} +16216 -15813
  13. package/dist/components.js +15 -15
  14. package/dist/{dialog-BCsT_aLo.js → dialog-uQld1gKm.js} +1 -1
  15. package/dist/dnd.js +1 -1
  16. package/dist/{dropdown-menu-Crt5QvTr.js → dropdown-menu-BA70o7HC.js} +1 -1
  17. package/dist/editor.js +7 -7
  18. package/dist/{empty-state-DFWq2CWB.js → empty-state-BzwyRX5J.js} +1 -1
  19. package/dist/hooks.js +2 -2
  20. package/dist/{i18n-provider-C0RBM8rH.js → i18n-provider-DkeMr5bw.js} +1 -1
  21. package/dist/i18n.js +5 -5
  22. package/dist/{icon-badge-XBoBIt_R.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/dates/date-field/date-field-content.d.ts +1 -1
  33. package/dist/lib/components/ui/dates/date-field/date-field-popover.d.ts +3 -1
  34. package/dist/lib/components/ui/dates/date-field/date-field-sheet-entry.d.ts +3 -2
  35. package/dist/lib/components/ui/dates/date-field/date-field-surface.d.ts +1 -1
  36. package/dist/lib/components/ui/dates/date-field/date-field-typed.d.ts +3 -3
  37. package/dist/lib/components/ui/dates/date-field/date-field.d.ts +23 -2
  38. package/dist/lib/components/ui/dates/date-field/use-typed-date.d.ts +3 -1
  39. package/dist/lib/components/ui/dates/date-field/use-zoned-content.d.ts +36 -0
  40. package/dist/lib/components/ui/dates/date-range-field/date-range-field.types.d.ts +1 -1
  41. package/dist/lib/components/ui/dates/picker-popover/hero-text.d.ts +1 -0
  42. package/dist/lib/components/ui/dates/picker-trigger/floating-clock.d.ts +7 -0
  43. package/dist/lib/components/ui/dates/picker-trigger/typed-day.d.ts +8 -0
  44. package/dist/lib/components/ui/dates/picker-trigger/use-zoned-date-props.d.ts +38 -0
  45. package/dist/lib/components/ui/dates/picker-trigger/use-zoned-value.d.ts +20 -0
  46. package/dist/lib/components/ui/dates/picker-trigger/zoned-bounds.d.ts +16 -0
  47. package/dist/lib/components/ui/dates/picker-trigger/zoned-matchers.d.ts +8 -0
  48. package/dist/lib/components/ui/dates/time-field/time-field.d.ts +14 -1
  49. package/dist/lib/components/ui/dates/time-field/time-form-field.d.ts +5 -1
  50. package/dist/lib/components/ui/dates/time-field/time-string-field.d.ts +3 -2
  51. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  52. package/dist/lib/components/ui/primitives/segmented-input/segment-date-time.d.ts +13 -0
  53. package/dist/lib/components/ui/primitives/segmented-input/segment-defs.d.ts +6 -0
  54. package/dist/lib/components/ui/primitives/segmented-input/segment-floating.d.ts +11 -0
  55. package/dist/lib/components/ui/primitives/segmented-input/segment-part.d.ts +19 -0
  56. package/dist/lib/components/ui/widgets/native-charts/core/point-tones.d.ts +17 -0
  57. package/dist/lib/components/ui/widgets/native-charts/core/reference-text.d.ts +30 -0
  58. package/dist/lib/components/ui/widgets/native-charts/core/reference.d.ts +45 -0
  59. package/dist/lib/components/ui/widgets/native-charts/core/summary.d.ts +3 -0
  60. package/dist/lib/components/ui/widgets/native-charts/core/table.d.ts +7 -0
  61. package/dist/lib/components/ui/widgets/native-charts/core/types.d.ts +25 -0
  62. package/dist/lib/components/ui/widgets/native-charts/hooks/chart-model-types.d.ts +18 -1
  63. package/dist/lib/components/ui/widgets/native-charts/hooks/model-parts.d.ts +3 -0
  64. package/dist/lib/components/ui/widgets/native-charts/hooks/model-series.d.ts +3 -0
  65. package/dist/lib/components/ui/widgets/native-charts/hooks/model-tones.d.ts +19 -0
  66. package/dist/lib/components/ui/widgets/native-charts/hooks/use-chart-model.d.ts +3 -3
  67. package/dist/lib/components/ui/widgets/native-charts/index.d.ts +1 -1
  68. package/dist/lib/components/ui/widgets/native-charts/line-chart/line-chart-types.d.ts +26 -1
  69. package/dist/lib/components/ui/widgets/native-charts/line-chart/line-geometry.d.ts +4 -0
  70. package/dist/lib/components/ui/widgets/native-charts/line-chart/partials/reference-marks.d.ts +17 -0
  71. package/dist/lib/components/ui/widgets/native-charts/line-chart/partials/tone-points.d.ts +11 -0
  72. package/dist/lib/components/ui/widgets/native-charts/partials/chart-tooltip.d.ts +3 -0
  73. package/dist/lib/i18n/resources/en/en.d.ts +23 -0
  74. package/dist/lib/i18n/resources/en/material.json.d.ts +23 -0
  75. package/dist/lib/i18n/resources/fr/fr.d.ts +23 -0
  76. package/dist/lib/i18n/resources/fr/material.json.d.ts +23 -0
  77. package/dist/lib/i18n/resources/resources.d.ts +46 -0
  78. package/dist/lib/i18n/translator.d.ts +1 -1
  79. package/dist/lib/lib/zoned-floating.d.ts +30 -0
  80. package/dist/lib/lib/zoned-instant.d.ts +16 -0
  81. package/dist/lib/lib/zoned.d.ts +11 -4
  82. package/dist/lib.js +1 -1
  83. package/dist/main.js +21 -21
  84. package/dist/map.js +4 -4
  85. package/dist/material.css +1 -1
  86. package/dist/pdf-reader.js +1 -1
  87. package/dist/print.js +2 -2
  88. package/dist/{public-CWIpzLzO.js → public-ib0sK0Hr.js} +6 -6
  89. package/dist/{rich-code-block-C4aBv4cA.js → rich-code-block-D_PTTZWQ.js} +4 -4
  90. package/dist/{sortable-provider-0uBi0zcP.js → sortable-provider-CrS51nKB.js} +1 -1
  91. package/dist/{spinner-CuxEwO0d.js → spinner-DLd_IHev.js} +1 -1
  92. package/dist/{stored-language-D8aemZhx.js → stored-language-B5SMR-W2.js} +46 -0
  93. package/dist/theme-picker.js +2 -2
  94. package/dist/{theme-toggle-ik5nV1P5.js → theme-toggle-wJYmnwgu.js} +1 -1
  95. package/dist/{toolbar-items-C97E5HRa.js → toolbar-items-BLjrk8uU.js} +2 -2
  96. package/dist/{translate-material-B84ufMSF.js → translate-material-BYRDtSEk.js} +2 -2
  97. package/dist/{translator-Bq8UHmvu.js → translator-C-_M57ZA.js} +1 -1
  98. package/dist/{use-chat-composer-DmDcEGp4.js → use-chat-composer-DrFgIE3T.js} +12 -12
  99. package/dist/{use-heading-spy-BgG7Q47k.js → use-heading-spy-wElRpO2G.js} +1 -1
  100. package/dist/{use-material-translation-CiYhVc39.js → use-material-translation-CFF73jk5.js} +2 -2
  101. package/docs/README.md +1 -1
  102. package/docs/components/data-table-filter-and-lists.md +59 -4
  103. package/docs/components/date-and-time.md +77 -3
  104. package/docs/components/rich-widgets.md +6 -0
  105. package/docs/guides/charts.md +78 -2
  106. package/docs/guides/forms.md +2 -2
  107. package/docs/guides/i18n.md +3 -2
  108. package/docs/roadmap.md +7 -0
  109. package/docs/troubleshooting.md +9 -1
  110. package/lib/components/components.css +1 -0
  111. package/lib/components/ui/widgets/native-charts/native-charts-reference.css +102 -0
  112. package/package.json +2 -2
@@ -1,3 +1,3 @@
1
- import { t as e } from "./public-CWIpzLzO.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-C0RBM8rH.js";
2
- import { t } from "./translate-material-B84ufMSF.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-BCsT_aLo.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-Crt5QvTr.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-C97E5HRa.js";
12
- import { t as N } from "./use-material-translation-CiYhVc39.js";
13
- import { t as _e } from "./button-D52ron-a.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-DFWq2CWB.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-Crt5QvTr.js";
3
- import { t as i } from "./use-material-translation-CiYhVc39.js";
4
- import { a, i as o, n as s, o as c, t as l } from "./code-language-items-C7prxl_7.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-BetIXpJ6.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-CiYhVc39.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-CiYhVc39.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" },
@@ -2222,6 +2223,7 @@ var t = {
2222
2223
  apply: "Apply",
2223
2224
  "no-range": "No dates yet",
2224
2225
  "type-date": "Type the date",
2226
+ "type-date-time": "Type the date and time",
2225
2227
  "type-range": "Type the dates",
2226
2228
  "select-date": "Select date",
2227
2229
  "select-dates": "Select dates",
@@ -2654,6 +2656,8 @@ var t = {
2654
2656
  "no-data": "No data to show",
2655
2657
  loading: "Loading chart",
2656
2658
  "status-value": "{series} {value}",
2659
+ "status-value-tone": "{series} {value} ({tone})",
2660
+ "table-tone": "{series} tone",
2657
2661
  "status-point": "{label}: {values}",
2658
2662
  "table-caption": "{title}: the data",
2659
2663
  "status-slice": "{label}: {value}, {share}",
@@ -2697,6 +2701,20 @@ var t = {
2697
2701
  "zoom-reset": "Reset zoom",
2698
2702
  "zoom-showing": "Showing {from} to {to}",
2699
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
+ },
2700
2718
  kind: {
2701
2719
  line: "line chart",
2702
2720
  area: "area chart",
@@ -2716,6 +2734,11 @@ var t = {
2716
2734
  range: "{count, plural, one {# point} other {# points}}, from {first} to {last}.",
2717
2735
  series: "{series}: from {start} to {end}, highest {max} ({maxAt}), lowest {min} ({minAt}).",
2718
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}",
2719
2742
  slices: "{count, plural, one {# slice} other {# slices}}, {total} in all.",
2720
2743
  largest: "Largest: {list}.",
2721
2744
  slice: "{label} {value} ({share})",
@@ -4759,6 +4782,7 @@ var t = {
4759
4782
  "error-hint": "Vérifiez votre connexion, puis réessayez.",
4760
4783
  "bulk-action": "{label} ({count})",
4761
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}",
4762
4786
  "bulk-more": "Plus"
4763
4787
  },
4764
4788
  "list-empty": { clear: "Effacer la recherche et les filtres" },
@@ -4969,6 +4993,7 @@ var t = {
4969
4993
  apply: "Appliquer",
4970
4994
  "no-range": "Aucune date",
4971
4995
  "type-date": "Saisir la date",
4996
+ "type-date-time": "Saisir la date et l’heure",
4972
4997
  "type-range": "Saisir les dates",
4973
4998
  "select-date": "Choisir la date",
4974
4999
  "select-dates": "Choisir les dates",
@@ -5401,6 +5426,8 @@ var t = {
5401
5426
  "no-data": "Aucune donnée à afficher",
5402
5427
  loading: "Chargement du graphique",
5403
5428
  "status-value": "{series} {value}",
5429
+ "status-value-tone": "{series} {value} ({tone})",
5430
+ "table-tone": "{series} : ton",
5404
5431
  "status-point": "{label} : {values}",
5405
5432
  "table-caption": "{title} : les données",
5406
5433
  "status-slice": "{label} : {value}, {share}",
@@ -5444,6 +5471,20 @@ var t = {
5444
5471
  "zoom-reset": "Réinitialiser le zoom",
5445
5472
  "zoom-showing": "Affichage de {from} à {to}",
5446
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
+ },
5447
5488
  kind: {
5448
5489
  line: "graphique en courbes",
5449
5490
  area: "graphique en aires",
@@ -5463,6 +5504,11 @@ var t = {
5463
5504
  range: "{count, plural, one {# point} other {# points}}, de {first} à {last}.",
5464
5505
  series: "{series} : de {start} à {end}, maximum {max} ({maxAt}), minimum {min} ({minAt}).",
5465
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}",
5466
5512
  slices: "{count, plural, one {# part} other {# parts}}, {total} au total.",
5467
5513
  largest: "Les plus grandes : {list}.",
5468
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-CiYhVc39.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-ik5nV1P5.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-CiYhVc39.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-Crt5QvTr.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-CiYhVc39.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-D8aemZhx.js";
2
- import { a as e, r as t } from "./translator-Bq8UHmvu.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-D8aemZhx.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-BCsT_aLo.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-Crt5QvTr.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-C97E5HRa.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-D8aemZhx.js";
18
- import { a as kt } from "./translator-Bq8UHmvu.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-CiYhVc39.js";
22
- import { t as Mt } from "./spinner-CuxEwO0d.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-D52ron-a.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-0XYwSp9o.js";
39
- import { n as dn, t as fn } from "./icon-badge-XBoBIt_R.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-DFWq2CWB.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-C4aBv4cA.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-C0RBM8rH.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-C0RBM8rH.js";
2
- import { t } from "./translate-material-B84ufMSF.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
@@ -177,7 +177,9 @@ export function Delivery() {
177
177
  | `onValueChange` | `(value?: Date) => void` | — | `undefined` when the day is unselected |
178
178
  | `entry` | `'typed'` | — | deprecated, no effect: the date is always typed in segments, with a button that opens the calendar (`'button'`, the 2.x trigger, was removed in 3.0) |
179
179
  | `clearable` | `boolean` | `!required` | a ✕ (named "Clear") that empties the typed field; shown only while it holds a date and is not `disabled` |
180
- | `showTimePicker` | `boolean` | — | adds a `TimePicker` and an OK button; the popover stays open. The time is picked there, not typed: the tiles, beside the calendar from 768px and under it in a sheet, with a Cancel button |
180
+ | `showTimePicker` | `boolean` | — | adds the time of day (a day click in the calendar keeps it): its hours and minutes (and AM / PM on a 12-hour clock) are typed in segments after the date, and a `TimePicker` with an OK button and a Cancel button sits beside the calendar from 768px and under it in a sheet; the popover stays open. Typed and picked are one value. The field has a value once the date and the time are both complete (see [Time zones and typed time](#time-zones-and-typed-time)) |
181
+ | `hourCycle` | `12 \| 24` | the language's | the clock of the typed time and of the picker (English 12, French 24); with `showTimePicker` |
182
+ | `timeZone` | IANA name (`'Europe/Paris'`) | the machine's zone | the field reads and writes the wall clock of that zone; `value` and `onValueChange` stay the true instant ([below](#time-zones-and-typed-time)) |
181
183
  | `placeholder`, `label`, `helperText`, `error`, `required` | | — | `label` and `helperText` sit beside the field; `error` and `required` its state. `placeholder` names a field with no label |
182
184
  | `disabled` | `boolean` | — | disables the field: no segment takes a key and the calendar cannot be opened |
183
185
  | `disabledDays` | react-day-picker's `Matcher \| Matcher[]` | — | days that cannot be picked (the calendar's `disabled`), e.g. `{ dayOfWeek: [0] }` |
@@ -257,6 +259,77 @@ resized, a phone turned) keeps the field as it is: a partial entry stays,
257
259
  and so do the "Open calendar" button and its focus; an open picker keeps
258
260
  the focus when it moves between the popover and the sheet.
259
261
 
262
+ ### Time zones and typed time
263
+
264
+ With `showTimePicker` the trigger reads `mm / dd / yyyy 09 : 30 AM` (the
265
+ locale's order and clock; `hourCycle` forces one). The time is typed like the
266
+ date: digits move on once a segment is full, a separator or an arrow moves
267
+ between segments, ArrowUp and ArrowDown step the focused one (wrapping), "a"
268
+ or "p" sets AM / PM, and a pasted "07/01/2026 9:30 PM" fills all of them. The
269
+ segments are in one `group` named by the label; "Hours", "Minutes" and
270
+ "AM / PM" are `spinbutton`s like the date's. On a phone, where the segments
271
+ are 44px wide, the time wraps whole under the date when the two do not fit.
272
+
273
+ A value needs the date and the time both complete: while one segment is empty
274
+ the field emits `undefined` (a partial entry stays on screen), so a form's
275
+ `required` rule refuses it, says so in the helper text and marks every segment
276
+ `aria-invalid`, exactly as for a half-typed date. The calendar, the tiles and
277
+ the segments edit the same value: a day picked in the calendar keeps the time
278
+ of day, and a time typed shows in the tiles when the picker opens. (Before,
279
+ with `showTimePicker`, a day picked in the calendar put the time back to
280
+ midnight.) On the phone's sheet the pencil's large field takes the time too
281
+ and is named `material.dates.type-date-time`.
282
+
283
+ `timeZone` (an IANA name such as `Europe/Paris`) makes the field a form for the
284
+ wall clock of that zone, whatever zone the browser runs in:
285
+
286
+ | | |
287
+ | --- | --- |
288
+ | `value`, `onValueChange` | the true instant, a `Date`, as without `timeZone` |
289
+ | Shown | the instant's wall clock in the zone: `2026-07-01T07:30:00Z` is `09:30` for `Europe/Paris` and `03:30` for `America/Toronto` |
290
+ | Typed or picked | read as the zone's wall clock: `09:30` typed with `Europe/Paris` emits `07:30Z` in summer and `08:30Z` in winter |
291
+ | `minDate`, `maxDate` | instants, compared as the days they fall on in the zone |
292
+ | `disablePast`, `disableFuture`, today's mark | today in the zone, not the machine's |
293
+ | `disabledDays` | `Date`s in a matcher are the days they fall on in the zone; a function sees the zone's days |
294
+ | Unknown name | read as `UTC` (as `ZonedTime` does) |
295
+ | No `timeZone` | the machine's zone, as before |
296
+
297
+ Daylight-saving changes have one rule each, the one of Temporal's
298
+ `compatible` mode:
299
+
300
+ - **A time that does not exist** (the clocks go forward: 02:30 on 29 March
301
+ 2026 in `Europe/Paris`) is read with the offset in force before the gap, so
302
+ it lands the length of the gap later: 03:30. The field shows 03:30 right
303
+ away.
304
+ - **A time that happens twice** (the clocks go back: 02:30 on 25 October 2026
305
+ in `Europe/Paris`) is the first occurrence, `00:30Z`. If the value being
306
+ edited already is the second occurrence (`01:30Z`), editing its minutes
307
+ keeps the second one, so the time never jumps an hour back under the typing.
308
+
309
+ The server renders the wall clock from `Intl` with the explicit zone, never
310
+ from the machine, so the HTML hydrates identically whatever zone the server
311
+ and the browser run in. Inside, the wall clock is a floating date (read
312
+ through UTC), so a time the browser's own clocks skip (02:30 Paris on the
313
+ day Toronto springs forward) is shown, typed and picked as it is. A
314
+ `disabledDays` matcher that holds a `Date` (`Date`, `{ before }`,
315
+ `{ after }`, `{ from, to }`, and lists of them) names the days those instants
316
+ fall on in the zone; a function matcher is given the zone's days. With no
317
+ value, a time picked first is dated today in the zone and must pass the
318
+ bounds (`disablePast`...).
319
+
320
+ ```tsx
321
+ <DateField
322
+ label="Starts"
323
+ timeZone="Europe/Paris"
324
+ showTimePicker
325
+ value={startsAt}
326
+ onValueChange={setStartsAt}
327
+ disablePast
328
+ />
329
+ ```
330
+
331
+ `DateFormField` takes the same props. `DateRangeField` has no `timeZone` (react-day-picker's own `timeZone` prop is no longer accepted by `DateField` or `DateRangeField`: use `DateField`'s `timeZone`, or drop it from a range).
332
+
260
333
  ### Pickers' surfaces
261
334
 
262
335
  The popover has 28px corners, a soft lift and 12px of
@@ -277,7 +350,7 @@ Storybook: `Date & time/Pickers surfaces/Phone sheet`, `/Popover` and `/Cancel`.
277
350
  **Emits:** `Date | undefined`.
278
351
  **Form wrapper:** `DateFormField` — `control` and `name`, see
279
352
  [forms](../guides/forms.md#the-pair) and [what each field emits](../guides/forms.md#what-each-field-emits).
280
- **Storybook:** `Date & time/DateField`, `Date & time/DateField/Typed entry`, `Date & time/DateField/Phone sheet` · **Vue:** `DateField`, `DateFormField` (`disabled-days`, same rules; the 2.x trigger only, no typed entry)
353
+ **Storybook:** `Date & time/DateField`, `Date & time/DateField/Typed entry`, `Date & time/DateField/Time zone`, `Date & time/DateField/Phone sheet` · **Vue:** `DateField`, `DateFormField` (`disabled-days`, same rules; the 2.x trigger only, no typed entry)
281
354
 
282
355
  ---
283
356
 
@@ -587,6 +660,7 @@ export function OpensAt() {
587
660
  | `value` | `Date` | — | only the hours and minutes are shown |
588
661
  | `onValueChange` | `(value?: Date) => void` | — | on every hour, minute or AM / PM change |
589
662
  | `size` | `'default' \| 'sm'` | `'default'` | `'sm'` is the compact 36px box (the field radius is unchanged) |
663
+ | `timeZone` | IANA name (`'Europe/Paris'`) | the machine's zone | the segments and the picker show the value's wall clock in that zone and what is typed or picked is read in it; `value` and `onValueChange` stay the true instant. The time lands on the value's day in the zone (today in the zone with no value). The same rules as `DateField`'s ([Time zones and typed time](#time-zones-and-typed-time)): a time skipped by the clocks moves to the end of the gap, a repeated one is the first, unless the value holds the second. `TimeFormField` takes it too; with `asString` the `'HH:mm'` string is the wall clock itself and `timeZone` has no effect, and `TimeStringField` has none |
590
664
  | `variant`, `hourCycle`, `minuteStep` | | `'tiles'`, the language's, `5` | passed to the `TimePicker` ([below](#timepicker)); `hourCycle` sets the segments' clock too |
591
665
  | `entry` | `'typed'` | — | deprecated, no effect: the time is always typed in segments, with a button that opens the picker (`'button'`, the 2.x trigger, was removed in 3.0) |
592
666
  | `clearable` | `boolean` | `!required` | a ✕ (named "Clear") that empties the typed field; shown only while it holds a time and is not `disabled` |
@@ -647,7 +721,7 @@ unchanged.
647
721
  state.
648
722
  **Form wrapper:** `TimeFormField` — `control` and `name` (plus `asString`), see
649
723
  [forms](../guides/forms.md#the-pair) and [what each field emits](../guides/forms.md#what-each-field-emits).
650
- **Storybook:** `Date & time/TimeField`, `Date & time/TimeField/Typed entry`, `Date & time/TimeField/Phone sheet` · **Vue:** `TimeField`, `TimeFormField` (the 2.x trigger only, no typed entry)
724
+ **Storybook:** `Date & time/TimeField`, `Date & time/TimeField/Typed entry`, `Date & time/TimeField/Time zone`, `Date & time/TimeField/Phone sheet` · **Vue:** `TimeField`, `TimeFormField` (the 2.x trigger only, no typed entry)
651
725
 
652
726
  ---
653
727
 
@@ -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`.