@nxgt/material 3.93.0 → 3.94.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 (92) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/README.md +2 -1
  3. package/dist/{alert-dialog-D37eph4I.js → alert-dialog-BaqK-rmd.js} +1 -1
  4. package/dist/{async-slice-BSqwhAj-.js → async-slice-BfNpIJAH.js} +1 -1
  5. package/dist/{button-CG9SBAT-.js → button-CozGHXAv.js} +1 -1
  6. package/dist/{calculator-YD3I3y-I.js → calculator-BIx6cwgU.js} +10 -10
  7. package/dist/calculator-field.js +6 -6
  8. package/dist/{calculator-segment-Cjec9zi7.js → calculator-segment-BsaxUtzL.js} +1 -1
  9. package/dist/calculator.js +1 -1
  10. package/dist/charts.js +3 -3
  11. package/dist/{chip-BbUSBl3i.js → chip-DMEUGYdC.js} +2 -2
  12. package/dist/{code-editor-ZEM7AAcs.js → code-editor-BWfky-aN.js} +4 -4
  13. package/dist/code-editor.js +4 -4
  14. package/dist/{code-language-items-CAuHPrHd.js → code-language-items-BUaNYJuw.js} +2 -2
  15. package/dist/{components-CuFTrmGy.js → components-CZpdAQMh.js} +19525 -19105
  16. package/dist/components.js +38 -38
  17. package/dist/{conversion-variant-DmEtTCSP.js → conversion-variant-aIBhul_U.js} +3 -3
  18. package/dist/{currency-field-CabGnVO9.js → currency-field-IcEMAcAw.js} +5 -5
  19. package/dist/{dialog-Jhpx6ulb.js → dialog-H40HjqXN.js} +3 -3
  20. package/dist/dnd.js +1 -1
  21. package/dist/{dropdown-menu-nl0Q3tQ2.js → dropdown-menu-CawkIlW8.js} +1 -1
  22. package/dist/editor.js +442 -442
  23. package/dist/{empty-state-mrJuqph3.js → empty-state-sRVjgCis.js} +1 -1
  24. package/dist/{financial-variant-P8gFA9aI.js → financial-variant-Bqo9-swy.js} +5 -5
  25. package/dist/{hooks-CjSpziWf.js → hooks-BTj_WJm9.js} +2 -2
  26. package/dist/hooks.js +2 -2
  27. package/dist/{hover-card-BNb1M8ij.js → hover-card-BZU1DWGY.js} +1 -1
  28. package/dist/i18n.js +3 -3
  29. package/dist/{icon-badge-CVMHwdFm.js → icon-badge-CXgvqMsM.js} +1 -1
  30. package/dist/{icon-button-Ch0PThsa.js → icon-button-B9WjQ3RO.js} +1 -1
  31. package/dist/{input-group-CPMSQcBx.js → input-group-Df9vp2EZ.js} +1 -1
  32. package/dist/lib/components/ui/display/entity-header/entity-metadata.d.ts +0 -7
  33. package/dist/lib/components/ui/display/entity-header/entity-stats.d.ts +2 -1
  34. package/dist/lib/components/ui/display/markdown/markdown.d.ts +2 -2
  35. package/dist/lib/components/ui/display/markdown/rehype-katex-classes.d.ts +21 -0
  36. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  37. package/dist/lib/components/ui/fields/index.d.ts +1 -0
  38. package/dist/lib/components/ui/fields/markdown-textarea-field/index.d.ts +2 -0
  39. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-preview.d.ts +6 -0
  40. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-syntax-help.d.ts +4 -0
  41. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-tabs.d.ts +13 -0
  42. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-textarea-field.d.ts +23 -0
  43. package/dist/lib/components/ui/fields/markdown-textarea-field/markdown-textarea-form-field.d.ts +3 -0
  44. package/dist/lib/components/ui/fields/markdown-textarea-field/use-text-value.d.ts +6 -0
  45. package/dist/lib/components/ui/widgets/education/questions/index.d.ts +1 -1
  46. package/dist/lib/components/ui/widgets/education/questions/partials/question-hints.d.ts +9 -0
  47. package/dist/lib/components/ui/widgets/education/questions/partials/question-reveal.d.ts +13 -0
  48. package/dist/lib/components/ui/widgets/education/questions/partials/rich-text.d.ts +17 -0
  49. package/dist/lib/components/ui/widgets/education/questions/types.d.ts +40 -1
  50. package/dist/lib/i18n/resources/en/en.d.ts +24 -0
  51. package/dist/lib/i18n/resources/en/material.json.d.ts +24 -0
  52. package/dist/lib/i18n/resources/fr/fr.d.ts +24 -0
  53. package/dist/lib/i18n/resources/fr/material.json.d.ts +24 -0
  54. package/dist/lib/i18n/resources/resources.d.ts +48 -0
  55. package/dist/lib/i18n/translator.d.ts +1 -1
  56. package/dist/lib.js +1 -1
  57. package/dist/main.js +54 -54
  58. package/dist/map.js +7 -7
  59. package/dist/material.css +1 -1
  60. package/dist/pdf-reader.js +1 -1
  61. package/dist/{percent-field-TWyupyr_.js → percent-field-DrI4_J7x.js} +1 -1
  62. package/dist/{picker-surface-CoNsDWxX.js → picker-surface-D2aYI4v7.js} +4 -4
  63. package/dist/{popover-BA1U82Wk.js → popover-QQYPWzw6.js} +1 -1
  64. package/dist/{pos-types-BQqv-kb6.js → pos-types-BIeZGGAs.js} +1 -1
  65. package/dist/{pos-variant-D043n5y8.js → pos-variant-Cdn1AVoA.js} +4 -4
  66. package/dist/print.js +1 -1
  67. package/dist/{programmer-variant-jneMqtLs.js → programmer-variant-CMBybkqw.js} +2 -2
  68. package/dist/{public-DgrbdeZj.js → public-CPxFxbi4.js} +9 -9
  69. package/dist/{rich-code-block-CGNjHawR.js → rich-code-block-DKJ8eKzL.js} +5 -5
  70. package/dist/{scientific-variant-1L7brNNT.js → scientific-variant-CXL1ayb7.js} +2 -2
  71. package/dist/{sortable-provider-DZLV_svg.js → sortable-provider-BYqwwyr1.js} +2 -2
  72. package/dist/{spinner-CQqRWxAW.js → spinner-D7ol2n_-.js} +1 -1
  73. package/dist/{tabs-DQTx3C8e.js → tabs-DyiFTy5g.js} +1 -1
  74. package/dist/theme-picker.js +2 -2
  75. package/dist/{theme-toggle-3NQ3VmJH.js → theme-toggle-QZ0bIrg9.js} +1 -1
  76. package/dist/{toolbar-items-BYCdJGUf.js → toolbar-items-BpOEBsSt.js} +4 -4
  77. package/dist/{translate-material-jxfcGlD5.js → translate-material-DlMetRSJ.js} +1 -1
  78. package/dist/{translator-6XuDmqUJ.js → translator-VtzVrnLm.js} +48 -0
  79. package/dist/{use-chat-composer-1eb4I1kM.js → use-chat-composer-DQ2rTD_q.js} +17 -17
  80. package/dist/{use-heading-spy-CzPujlKr.js → use-heading-spy-17B5xa7B.js} +4 -4
  81. package/dist/{use-material-translation-BUPqNmAg.js → use-material-translation-Cx5u36V5.js} +1 -1
  82. package/dist/{use-return-focus-B_enQxp5.js → use-return-focus-S7g7q_Yn.js} +1 -1
  83. package/docs/components/data-display.md +7 -6
  84. package/docs/components/form-fields.md +39 -0
  85. package/docs/components/rich-widgets.md +29 -0
  86. package/docs/guides/csp.md +20 -8
  87. package/docs/guides/forms.md +1 -0
  88. package/docs/guides/i18n.md +1 -1
  89. package/docs/previews/data-display-entityheader.webp +0 -0
  90. package/docs/previews/form-fields-markdowntextareafield.webp +0 -0
  91. package/docs/troubleshooting.md +22 -6
  92. package/package.json +1 -1
@@ -1,3 +1,3 @@
1
- import { t as e } from "./public-DgrbdeZj.js";
1
+ import { t as e } from "./public-CPxFxbi4.js";
2
2
  import { configurePdfReader as t } from "@nxgt/material-core/pdf-reader";
3
3
  export { e as PdfReader, t as configurePdfReader };
@@ -1,4 +1,4 @@
1
- import { r as e } from "./currency-field-CabGnVO9.js";
1
+ import { r as e } from "./currency-field-IcEMAcAw.js";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  //#region lib/components/ui/fields/percent-field/percent-field.tsx
4
4
  function n({ min: n = 0, max: r = 100, step: i = 1, ...a }) {
@@ -1,9 +1,9 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { r as t, t as n } from "./in-dialog-D61Yeaol.js";
3
- import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "./use-return-focus-B_enQxp5.js";
4
- import { i as p, o as m, r as h, t as g } from "./popover-BA1U82Wk.js";
5
- import { t as _ } from "./use-material-translation-BUPqNmAg.js";
6
- import { n as v, t as y } from "./icon-button-Ch0PThsa.js";
3
+ import { a as r, c as i, i as a, l as o, n as s, o as c, r as l, s as u, t as d, u as f } from "./use-return-focus-S7g7q_Yn.js";
4
+ import { i as p, o as m, r as h, t as g } from "./popover-QQYPWzw6.js";
5
+ import { t as _ } from "./use-material-translation-Cx5u36V5.js";
6
+ import { n as v, t as y } from "./icon-button-B9WjQ3RO.js";
7
7
  import { t as b } from "./use-ssr-media-query-C6M5m8sf.js";
8
8
  import { i as x } from "./escape-owner-DpaP0lm1.js";
9
9
  import * as S from "react";
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { o as t, r as n } from "./dist-DVRQkaTK.js";
3
3
  import { i as r, r as i, t as a } from "./dist-DWZXlCZR.js";
4
- import { S as o, d as s, f as c, l, p as u, u as d, x as f } from "./spinner-CQqRWxAW.js";
4
+ import { S as o, d as s, f as c, l, p as u, u as d, x as f } from "./spinner-D7ol2n_-.js";
5
5
  import { a as p, i as m, r as h } from "./dist-DHdUUM1w.js";
6
6
  import { a as g, c as _, l as v, o as y, r as b, s as x, t as S } from "./in-dialog-D61Yeaol.js";
7
7
  import { i as C } from "./escape-owner-DpaP0lm1.js";
@@ -1,4 +1,4 @@
1
- import { t as e } from "./use-material-translation-BUPqNmAg.js";
1
+ import { t as e } from "./use-material-translation-Cx5u36V5.js";
2
2
  import { n as t } from "./calculator-context-BugcKuVG.js";
3
3
  import { t as n } from "./calculator-announce-DRd2c6Dq.js";
4
4
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
@@ -1,11 +1,11 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { t } from "./use-material-translation-BUPqNmAg.js";
3
- import { t as n } from "./icon-button-Ch0PThsa.js";
2
+ import { t } from "./use-material-translation-Cx5u36V5.js";
3
+ import { t as n } from "./icon-button-B9WjQ3RO.js";
4
4
  import { n as r } from "./calculator-context-BugcKuVG.js";
5
- import { a as i, n as a, r as o, t as s } from "./pos-types-BQqv-kb6.js";
5
+ import { a as i, n as a, r as o, t as s } from "./pos-types-BIeZGGAs.js";
6
6
  import { i as c, n as l, s as u } from "./key-layout-cR79xfGE.js";
7
7
  import { n as d, t as f } from "./currency-B-r3ig11.js";
8
- import { t as p } from "./calculator-segment-Cjec9zi7.js";
8
+ import { t as p } from "./calculator-segment-BsaxUtzL.js";
9
9
  import { useId as m, useState as h } from "react";
10
10
  import { Fragment as g, jsx as _, jsxs as v } from "react/jsx-runtime";
11
11
  import { ChevronDown as y, X as b } from "lucide-react";
package/dist/print.js CHANGED
@@ -1,4 +1,4 @@
1
- import { i as e, t } from "./translate-material-jxfcGlD5.js";
1
+ import { i as e, t } from "./translate-material-DlMetRSJ.js";
2
2
  import { Children as n, createContext as r, isValidElement as i, useCallback as a, useContext as o, useEffect as s, useMemo as c, useState as l } from "react";
3
3
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
4
4
  import { resolvePdfFileName as f } from "@nxgt/material-core/pdf-file-name";
@@ -1,9 +1,9 @@
1
- import { t as e } from "./use-material-translation-BUPqNmAg.js";
1
+ import { t as e } from "./use-material-translation-Cx5u36V5.js";
2
2
  import { t } from "./toggle-FeCCJqbg.js";
3
3
  import { n } from "./calculator-context-BugcKuVG.js";
4
4
  import { i as r, n as i, s as a } from "./key-layout-cR79xfGE.js";
5
5
  import { t as o } from "./programmer-word-CNCF7DJF.js";
6
- import { t as s } from "./calculator-segment-Cjec9zi7.js";
6
+ import { t as s } from "./calculator-segment-BsaxUtzL.js";
7
7
  import { useId as c, useState as l } from "react";
8
8
  import { jsx as u, jsxs as d } from "react/jsx-runtime";
9
9
  import { calculate as f, formatExpression as p, sessionOptions as m, toCanonical as h, tokenize as g } from "@nxgt/material-core/calculator";
@@ -3,25 +3,25 @@ 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 { i, n as a, r as o } from "./dist-DWZXlCZR.js";
6
- import { o as s } from "./spinner-CQqRWxAW.js";
6
+ import { o as s } from "./spinner-D7ol2n_-.js";
7
7
  import { a as c, i as l, n as u } from "./dist-DHdUUM1w.js";
8
8
  import { i as d } from "./dist-DOK3zo5C.js";
9
9
  import { r as f, t as p } from "./in-dialog-D61Yeaol.js";
10
- import { a as m, c as h, i as g, l as _, n as v, o as ee, r as y, s as b, t as te, u as ne } from "./use-return-focus-B_enQxp5.js";
11
- import { c as x, d as S, f as C, i as w, l as T, n as E, o as D, t as re, u as O } from "./dropdown-menu-nl0Q3tQ2.js";
12
- import { a as k, b as ie, d as ae, f as oe, i as se, n as A, o as ce, r as le, s as j, t as M, u as ue, v as de } from "./toolbar-items-BYCdJGUf.js";
10
+ import { a as m, c as h, i as g, l as _, n as v, o as ee, r as y, s as b, t as te, u as ne } from "./use-return-focus-S7g7q_Yn.js";
11
+ import { c as x, d as S, f as C, i as w, l as T, n as E, o as D, t as re, u as O } from "./dropdown-menu-CawkIlW8.js";
12
+ import { a as k, b as ie, d as ae, f as oe, i as se, n as A, o as ce, r as le, s as j, t as M, u as ue, v as de } from "./toolbar-items-BpOEBsSt.js";
13
13
  import { t as fe } from "./dist-DkQbkF9T.js";
14
- import { t as pe } from "./button-CG9SBAT-.js";
15
- import { t as N } from "./use-material-translation-BUPqNmAg.js";
16
- import { n as me, t as he } from "./icon-button-Ch0PThsa.js";
14
+ import { t as pe } from "./button-CozGHXAv.js";
15
+ import { t as N } from "./use-material-translation-Cx5u36V5.js";
16
+ import { n as me, t as he } from "./icon-button-B9WjQ3RO.js";
17
17
  import { t as ge } from "./useEvent-2fKq-6w8.js";
18
18
  import { n as _e, t as ve } from "./toggle-group-CVMxEpWi.js";
19
19
  import { i as ye } from "./escape-owner-DpaP0lm1.js";
20
20
  import { n as be } from "./use-slice-reducer-BGkeGtML.js";
21
21
  import { t as xe } from "./input-CC2joTjB.js";
22
22
  import { r as Se } from "./use-csp-nonce-ZKs9k-ov.js";
23
- import { n as Ce, t as we } from "./empty-state-mrJuqph3.js";
24
- import { r as Te, t as Ee, u as De } from "./dialog-Jhpx6ulb.js";
23
+ import { n as Ce, t as we } from "./empty-state-sRVjgCis.js";
24
+ import { r as Te, t as Ee, u as De } from "./dialog-H40HjqXN.js";
25
25
  import { t as Oe } from "./client-only.utils-3nHNzCki.js";
26
26
  import { t as ke } from "./use-scroll-away-PQRFZkT2.js";
27
27
  import * as P from "react";
@@ -1,7 +1,7 @@
1
- import { n as e } from "./spinner-CQqRWxAW.js";
2
- import { c as t, n, t as r } from "./dropdown-menu-nl0Q3tQ2.js";
3
- import { t as i } from "./use-material-translation-BUPqNmAg.js";
4
- import { a, i as o, n as s, o as c, t as l } from "./code-language-items-CAuHPrHd.js";
1
+ import { n as e } from "./spinner-D7ol2n_-.js";
2
+ import { c as t, n, t as r } from "./dropdown-menu-CawkIlW8.js";
3
+ import { t as i } from "./use-material-translation-Cx5u36V5.js";
4
+ import { a, i as o, n as s, o as c, t as l } from "./code-language-items-BUaNYJuw.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-ZEM7AAcs.js").then((e) => e.n).then((e) => ({ default: e.CodeEditor })));
146
+ var N = g(() => import("./code-editor-BWfky-aN.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,9 +1,9 @@
1
- import { t as e } from "./use-material-translation-BUPqNmAg.js";
1
+ import { t as e } from "./use-material-translation-Cx5u36V5.js";
2
2
  import { t } from "./toggle-FeCCJqbg.js";
3
3
  import { n } from "./calculator-context-BugcKuVG.js";
4
4
  import { i as r, o as i } from "./key-layout-cR79xfGE.js";
5
5
  import { t as a } from "./standard-layout-BuSRr3TY.js";
6
- import { t as o } from "./calculator-segment-Cjec9zi7.js";
6
+ import { t as o } from "./calculator-segment-BsaxUtzL.js";
7
7
  import { jsx as s, jsxs as c } from "react/jsx-runtime";
8
8
  import { scientificOptions as l } from "@nxgt/material-core/calculator/scientific";
9
9
  //#region lib/components/ui/widgets/calculator/variants/scientific/scientific-layout.ts
@@ -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-BUPqNmAg.js";
4
- import { t as r } from "./icon-button-Ch0PThsa.js";
3
+ import { t as n } from "./use-material-translation-Cx5u36V5.js";
4
+ import { t as r } from "./icon-button-B9WjQ3RO.js";
5
5
  import { t as i } from "./compose-refs-G4J4kaUA.js";
6
6
  import a, { cloneElement as o, createContext as s, forwardRef as c, memo as l, useCallback as u, useContext as d, useEffect as f, useId as p, useLayoutEffect as m, useMemo as h, useReducer as g, useRef as _, useState as v } from "react";
7
7
  import { jsx as y } from "react/jsx-runtime";
@@ -5,7 +5,7 @@ import { a as i, i as a, n as o, r as s, t as c } from "./dist-DWZXlCZR.js";
5
5
  import { a as l, i as u, n as d, r as f, t as p } from "./dist-DHdUUM1w.js";
6
6
  import { a as m, c as h, d as g, i as _, l as v, o as y, r as b, t as x, u as S } from "./floating-ui.dom-KkZSW8_E.js";
7
7
  import { t as C } from "./dist-DkQbkF9T.js";
8
- import { t as w } from "./use-material-translation-BUPqNmAg.js";
8
+ import { t as w } from "./use-material-translation-Cx5u36V5.js";
9
9
  import * as T from "react";
10
10
  import { useLayoutEffect as E, useRef as D, useSyncExternalStore as O } from "react";
11
11
  import { jsx as k, jsxs as A } from "react/jsx-runtime";
@@ -3,7 +3,7 @@ import { n as t } from "./dist-DVRQkaTK.js";
3
3
  import { i as n, r, t as i } from "./dist-DWZXlCZR.js";
4
4
  import { a, i as o, r as s } from "./dist-DHdUUM1w.js";
5
5
  import { i as c, n as l, r as u, t as d } from "./dist-DOK3zo5C.js";
6
- import { t as f } from "./use-material-translation-BUPqNmAg.js";
6
+ import { t as f } from "./use-material-translation-Cx5u36V5.js";
7
7
  import * as p from "react";
8
8
  import { createContext as m, useCallback as h, useContext as g, useEffect as ee, useLayoutEffect as _, useRef as v, useState as te } from "react";
9
9
  import { Fragment as ne, jsx as y, jsxs as b } from "react/jsx-runtime";
@@ -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-CQwVSoU3.js";
3
3
  import { a as s, r as c } from "./icon-sprites-CaYXzOL4.js";
4
- import { t as l } from "./use-material-translation-BUPqNmAg.js";
4
+ import { t as l } from "./use-material-translation-Cx5u36V5.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-3NQ3VmJH.js";
7
+ import { t as p } from "./theme-toggle-QZ0bIrg9.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-BUPqNmAg.js";
1
+ import { t as e } from "./use-material-translation-Cx5u36V5.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,15 +1,15 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { o as t, t as n } from "./dist-DVRQkaTK.js";
3
3
  import { i as r, r as i } from "./dist-DWZXlCZR.js";
4
- import { n as a } from "./spinner-CQqRWxAW.js";
4
+ import { n as a } from "./spinner-D7ol2n_-.js";
5
5
  import { a as o } from "./dist-DHdUUM1w.js";
6
6
  import { i as s, n as c, r as l, t as u } from "./dist-DOK3zo5C.js";
7
7
  import { t as d } from "./in-dialog-D61Yeaol.js";
8
- import { A as f, M as p, N as m, b as h, d as g, f as _, i as v, j as y, l as b, n as x, o as S, r as C, t as w, u as T, y as ee } from "./dropdown-menu-nl0Q3tQ2.js";
9
- import { a as te, n as ne } from "./popover-BA1U82Wk.js";
8
+ import { A as f, M as p, N as m, b as h, d as g, f as _, i as v, j as y, l as b, n as x, o as S, r as C, t as w, u as T, y as ee } from "./dropdown-menu-CawkIlW8.js";
9
+ import { a as te, n as ne } from "./popover-QQYPWzw6.js";
10
10
  import { i as re, n as ie, r as ae, t as oe } from "./dist-BZe2evxL.js";
11
11
  import { t as se } from "./warn-once-C_e47JM8.js";
12
- import { t as ce } from "./use-material-translation-BUPqNmAg.js";
12
+ import { t as ce } from "./use-material-translation-Cx5u36V5.js";
13
13
  import * as E from "react";
14
14
  import { createContext as D, useCallback as le, useContext as O, useEffect as k, useId as ue, useLayoutEffect as A, useMemo as j, useReducer as de, useRef as M, useState as N } from "react";
15
15
  import { Fragment as P, jsx as F, jsxs as I } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { a as e, l as t, r as n, s as r, t as i, u as a } from "./translator-6XuDmqUJ.js";
1
+ import { a as e, l as t, r as n, s as r, t as i, u as a } from "./translator-VtzVrnLm.js";
2
2
  import { createContext as o, useCallback as s, useContext as c, useEffect as l, useMemo as u, useRef as d, useState as f } from "react";
3
3
  import { jsx as p } from "react/jsx-runtime";
4
4
  //#region lib/i18n/material-resources-registry.ts
@@ -365,6 +365,17 @@ var r = {
365
365
  hint: "Hint",
366
366
  "show-hint": "Show hint",
367
367
  "hide-hint": "Hide hint",
368
+ rich: {
369
+ hints: "Hints",
370
+ "show-next-hint": "Show hint {number} of {total}",
371
+ "hint-n": "Hint {number} of {total}",
372
+ "option-explanations": "About each answer",
373
+ references: "References",
374
+ "new-tab": "(external link)",
375
+ examples: "Examples",
376
+ "example-input": "Input",
377
+ "example-expected": "Expected"
378
+ },
368
379
  correct: "Correct!",
369
380
  incorrect: "Not quite",
370
381
  unanswered: "Not answered",
@@ -1320,6 +1331,19 @@ var r = {
1320
1331
  unit: "Unit",
1321
1332
  "unit-named": "{label} unit"
1322
1333
  },
1334
+ "markdown-textarea-field": {
1335
+ write: "Write",
1336
+ preview: "Preview",
1337
+ mode: "Editor mode",
1338
+ empty: "Nothing to preview",
1339
+ help: "Formatting help",
1340
+ "help-bold": "Bold",
1341
+ "help-list": "List",
1342
+ "help-code": "Code",
1343
+ "help-inline-math": "Math in a line",
1344
+ "help-block-math": "Math on its own line",
1345
+ "help-escape": "A literal dollar sign"
1346
+ },
1323
1347
  "textarea-field": { count: "{count}/{max}" },
1324
1348
  skeleton: { loading: "Loading" },
1325
1349
  chip: {
@@ -3850,6 +3874,17 @@ var r = {
3850
3874
  hint: "Indice",
3851
3875
  "show-hint": "Afficher l’indice",
3852
3876
  "hide-hint": "Masquer l’indice",
3877
+ rich: {
3878
+ hints: "Indices",
3879
+ "show-next-hint": "Afficher l’indice {number} sur {total}",
3880
+ "hint-n": "Indice {number} sur {total}",
3881
+ "option-explanations": "À propos de chaque réponse",
3882
+ references: "Références",
3883
+ "new-tab": "(lien externe)",
3884
+ examples: "Exemples",
3885
+ "example-input": "Entrée",
3886
+ "example-expected": "Attendu"
3887
+ },
3853
3888
  correct: "Bonne réponse !",
3854
3889
  incorrect: "Pas tout à fait",
3855
3890
  unanswered: "Sans réponse",
@@ -4805,6 +4840,19 @@ var r = {
4805
4840
  unit: "Unité",
4806
4841
  "unit-named": "Unité de {label}"
4807
4842
  },
4843
+ "markdown-textarea-field": {
4844
+ write: "Écrire",
4845
+ preview: "Aperçu",
4846
+ mode: "Mode de l'éditeur",
4847
+ empty: "Rien à prévisualiser",
4848
+ help: "Aide à la mise en forme",
4849
+ "help-bold": "Gras",
4850
+ "help-list": "Liste",
4851
+ "help-code": "Code",
4852
+ "help-inline-math": "Formule dans une ligne",
4853
+ "help-block-math": "Formule sur sa propre ligne",
4854
+ "help-escape": "Un signe dollar littéral"
4855
+ },
4808
4856
  "textarea-field": { count: "{count}/{max}" },
4809
4857
  skeleton: { loading: "Chargement" },
4810
4858
  chip: {
@@ -4,28 +4,28 @@ 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 { i as s, n as c, r as l, t as u } from "./dist-DWZXlCZR.js";
7
- import { _ as d, a as f, b as p, g as m, h, i as g, m as _, n as v, o as y, r as b, s as x, t as S, v as C, y as w } from "./spinner-CQqRWxAW.js";
7
+ import { _ as d, a as f, b as p, g as m, h, i as g, m as _, n as v, o as y, r as b, s as x, t as S, v as C, y as w } from "./spinner-D7ol2n_-.js";
8
8
  import { a as T, i as E, n as D, r as O, t as k } from "./dist-DHdUUM1w.js";
9
9
  import { a as A, i as ee } from "./dist-DOK3zo5C.js";
10
10
  import { i as j, n as M } from "./in-dialog-D61Yeaol.js";
11
- import { c as N, l as P, n as te, r as F, t as ne } from "./alert-dialog-D37eph4I.js";
11
+ import { c as N, l as P, n as te, r as F, t as ne } from "./alert-dialog-BaqK-rmd.js";
12
12
  import { A as re, C as ie, D as ae, E as oe, O as se, S as I, T as ce, _ as le, a as ue, b as de, d as fe, f as pe, g as me, h as he, i as ge, k as _e, l as ve, m as ye, n as be, o as xe, p as Se, r as Ce, s as we, t as Te, u as Ee, v as De, w as Oe, x as ke, y as Ae } from "./floating-ui.dom-KkZSW8_E.js";
13
- import { D as je, E as Me, N as Ne, O as Pe, c as Fe, d as Ie, f as Le, i as Re, k as ze, m as Be, n as Ve, o as He, p as Ue, t as We, u as Ge } from "./dropdown-menu-nl0Q3tQ2.js";
13
+ import { D as je, E as Me, N as Ne, O as Pe, c as Fe, d as Ie, f as Le, i as Re, k as ze, m as Be, n as Ve, o as He, p as Ue, t as We, u as Ge } from "./dropdown-menu-CawkIlW8.js";
14
14
  import { a as Ke, i as qe, n as Je } from "./field-blur-context-BLGgf_3z.js";
15
- import { i as Ye, n as Xe, r as Ze, t as Qe } from "./popover-BA1U82Wk.js";
15
+ import { i as Ye, n as Xe, r as Ze, t as Qe } from "./popover-QQYPWzw6.js";
16
16
  import { a as $e, i as et, n as tt, o as nt, t as rt } from "./bubble-input-CQwVSoU3.js";
17
- import { d as it, n as at, r as ot, t as st } from "./tabs-DQTx3C8e.js";
18
- import { a as ct, n as lt, o as ut, s as dt, v as ft, y as pt } from "./toolbar-items-BYCdJGUf.js";
17
+ import { d as it, n as at, r as ot, t as st } from "./tabs-DyiFTy5g.js";
18
+ import { a as ct, n as lt, o as ut, s as dt, v as ft, y as pt } from "./toolbar-items-BpOEBsSt.js";
19
19
  import { t as mt } from "./dist-DkQbkF9T.js";
20
20
  import { o as ht, s as gt, t as _t } from "./use-click-lock-Bwg_caHO.js";
21
21
  import { a as vt, r as yt } from "./icon-sprites-CaYXzOL4.js";
22
22
  import { t as bt } from "./warn-once-C_e47JM8.js";
23
- import { r as xt, t as St } from "./button-CG9SBAT-.js";
24
- import { a as Ct } from "./translator-6XuDmqUJ.js";
23
+ import { r as xt, t as St } from "./button-CozGHXAv.js";
24
+ import { a as Ct } from "./translator-VtzVrnLm.js";
25
25
  import { h as wt } from "./get-CTzJAwfc.js";
26
26
  import { t as Tt } from "./isEmpty-F_g3jLf8.js";
27
- import { t as L } from "./use-material-translation-BUPqNmAg.js";
28
- import { t as R } from "./icon-button-Ch0PThsa.js";
27
+ import { t as L } from "./use-material-translation-Cx5u36V5.js";
28
+ import { t as R } from "./icon-button-B9WjQ3RO.js";
29
29
  import { t as Et } from "./use-ssr-media-query-C6M5m8sf.js";
30
30
  import { n as Dt, t as Ot } from "./typography-CYEquVeb.js";
31
31
  import { n as kt, t as At } from "./util-4heV2LPI.js";
@@ -36,15 +36,15 @@ import { a as Bt } from "./toggle-group-CVMxEpWi.js";
36
36
  import { n as Vt } from "./use-slice-reducer-BGkeGtML.js";
37
37
  import { t as Ht } from "./browser-only-DQ94lWF8.js";
38
38
  import { t as Ut } from "./compose-refs-G4J4kaUA.js";
39
- import { n as Wt, r as Gt, t as Kt } from "./chip-BbUSBl3i.js";
39
+ import { n as Wt, r as Gt, t as Kt } from "./chip-DMEUGYdC.js";
40
40
  import { c as qt, o as Jt, r as Yt, s as Xt, t as Zt } from "./input-CC2joTjB.js";
41
- import { i as Qt, n as $t, t as en } from "./input-group-CPMSQcBx.js";
41
+ import { i as Qt, n as $t, t as en } from "./input-group-Df9vp2EZ.js";
42
42
  import { t as tn } from "./text-field-BAdY-kpO.js";
43
43
  import { r as nn } from "./use-csp-nonce-ZKs9k-ov.js";
44
- import { t as rn } from "./empty-state-mrJuqph3.js";
44
+ import { t as rn } from "./empty-state-sRVjgCis.js";
45
45
  import { t as an } from "./skeleton-DSdtr2qc.js";
46
- import { l as on, n as sn, o as cn, r as ln, s as un, t as dn, u as fn } from "./dialog-Jhpx6ulb.js";
47
- import { t as pn } from "./icon-badge-CVMHwdFm.js";
46
+ import { l as on, n as sn, o as cn, r as ln, s as un, t as dn, u as fn } from "./dialog-H40HjqXN.js";
47
+ import { t as pn } from "./icon-badge-CXgvqMsM.js";
48
48
  import { H as mn, V as hn, X as gn, bt as _n, it as vn, lt as yn, n as bn, t as xn, xt as Sn, yt as Cn } from "./dist-moutbfbd.js";
49
49
  import { t as wn } from "./markdown-Dw_uH7j7.js";
50
50
  import { r as Tn, t as En } from "./create-store-Dqp-PLLn.js";
@@ -11180,7 +11180,7 @@ var eS = (e = {}) => Tn({
11180
11180
  let [{ default: t }, { lowlight: n }, { richCodeBlock: r }] = await Promise.all([
11181
11181
  import("./dist-CRMFGjng.js"),
11182
11182
  import("./lowlight-OtcjU2Sa.js"),
11183
- import("./rich-code-block-CGNjHawR.js")
11183
+ import("./rich-code-block-DKJ8eKzL.js")
11184
11184
  ]);
11185
11185
  return [r(t, {
11186
11186
  lowlight: n,
@@ -23886,4 +23886,4 @@ function PL({ value: e, onSend: t, placeholder: n, disabled: r, isLoading: i, se
23886
23886
  };
23887
23887
  }
23888
23888
  //#endregion
23889
- export { rP as $, gv as $n, vg as $r, PT as $t, zF as A, Hl as Ai, mb as An, b_ as Ar, dk as At, dF as B, zs as Bi, Vy as Bn, n_ as Br, xD as Bt, GI as C, q as Ci, $b as Cn, j_ as Cr, Zk as Ct, rI as D, ql as Di, gb as Dn, C_ as Dr, Ok as Dt, oI as E, Yl as Ei, xb as En, k_ as Er, Mk as Et, bF as F, xl as Fi, Wy as Fn, d_ as Fr, AD as Ft, jP as G, Qv as Gn, Jg as Gr, jE as Gt, oF as H, gs as Hi, Ay as Hn, e_ as Hr, RE as Ht, _F as I, bl as Ii, qy as In, l_ as Ir, ED as It, EP as J, Tv as Jn, Vg as Jr, fE as Jt, AP as K, Yv as Kn, Gg as Kr, mE as Kt, hF as L, Hs as Li, Gy as Ln, c_ as Lr, DD as Lt, SF as M, Pl as Mi, Zy as Mn, v_ as Mr, zO as Mt, CF as N, Nl as Ni, Yy as Nn, g_ as Nr, kD as Nt, JF as O, Wl as Oi, pb as On, T_ as Or, Tk as Ot, yF as P, Sl as Pi, Jy as Pn, u_ as Pr, jD as Pt, uP as Q, bv as Qn, yg as Qr, FT as Qt, fF as R, Is as Ri, Ky as Rn, a_ as Rr, OD as Rt, qI as S, J as Si, nx as Sn, M_ as Sr, Qk as St, uI as T, Zl as Ti, Pb as Tn, E_ as Tr, Ik as Tt, cF as U, _s as Ui, ty as Un, $g as Ur, FE as Ut, lF as V, Cs as Vi, My as Vn, t_ as Vr, yD as Vt, sF as W, oy as Wn, Qg as Wr, PE as Wt, xP as X, kv as Xn, Tg as Xr, $ as Xt, SP as Y, Cv as Yn, zg as Yr, dE as Yt, vP as Z, Sv as Zn, Sg as Zr, IT as Zt, gL as _, Vf as _i, Kx as _n, P_ as _r, uA as _t, AL as a, ng as ai, LC as an, fv as ar, kj as at, sL as b, ld as bi, px as bn, N_ as br, iA as bt, DL as c, Bh as ci, AC as cn, av as cr, gj as ct, wL as d, Z as di, vC as dn, J_ as dr, sj as dt, mg as ei, NT as en, vv as er, QN as et, SL as f, ph as fi, gC as fn, G_ as fr, tj as ft, bL as g, Bf as gi, Qx as gn, F_ as gr, hA as gt, xL as h, X as hi, eS as hn, L_ as hr, _A as ht, ML as i, ag as ii, UC as in, dv as ir, Aj as it, OF as j, Fl as ji, ob as jn, S_ as jr, $O as jt, GF as k, Ul as ki, hb as kn, x_ as kr, mk as kt, EL as l, Fh as li, DC as ln, Y_ as lr, hj as lt, yL as m, Qm as mi, dC as mn, B_ as mr, FA as mt, PL as n, dg as ni, AT as nn, hv as nr, sM as nt, kL as o, eg as oi, MC as on, ov as or, Oj as ot, vL as p, dh as pi, fC as pn, K_ as pr, ZA as pt, DP as q, wv as qn, Wg as qr, pE as qt, jL as r, lg as ri, kT as rn, uv as rr, Bj as rt, OL as s, Yh as si, jC as sn, sv as sr, Dj as st, NL as t, fg as ti, jT as tn, mv as tr, cM as tt, TL as u, Mh as ui, wC as un, q_ as ur, fj as ut, _L as v, Jd as vi, Sx as vn, I_ as vr, lA as vt, WI as w, eu as wi, Wb as wn, A_ as wr, Hk as wt, QI as x, Xu as xi, ux as xn, z_ as xr, tA as xt, hL as y, Rd as yi, xx as yn, R_ as yr, cA as yt, uF as z, Ps as zi, Hy as zn, r_ as zr, TD as zt };
23889
+ export { rP as $, bv as $n, yg as $r, PT as $t, zF as A, Ul as Ai, mb as An, x_ as Ar, dk as At, dF as B, Ps as Bi, Hy as Bn, r_ as Br, xD as Bt, GI as C, J as Ci, $b as Cn, M_ as Cr, Zk as Ct, rI as D, Yl as Di, gb as Dn, k_ as Dr, Ok as Dt, oI as E, Zl as Ei, xb as En, E_ as Er, Mk as Et, bF as F, Sl as Fi, Jy as Fn, u_ as Fr, AD as Ft, jP as G, oy as Gn, Qg as Gr, jE as Gt, oF as H, Cs as Hi, My as Hn, t_ as Hr, RE as Ht, _F as I, xl as Ii, Wy as In, d_ as Ir, ED as It, EP as J, wv as Jn, Wg as Jr, fE as Jt, AP as K, Qv as Kn, Jg as Kr, mE as Kt, hF as L, bl as Li, qy as Ln, l_ as Lr, DD as Lt, SF as M, Fl as Mi, Zy as Mn, S_ as Mr, zO as Mt, CF as N, Pl as Ni, Xy as Nn, v_ as Nr, kD as Nt, JF as O, ql as Oi, pb as On, C_ as Or, Tk as Ot, yF as P, Nl as Pi, Yy as Pn, g_ as Pr, jD as Pt, uP as Q, Sv as Qn, Sg as Qr, FT as Qt, fF as R, Hs as Ri, Gy as Rn, c_ as Rr, OD as Rt, qI as S, Xu as Si, nx as Sn, z_ as Sr, Qk as St, uI as T, eu as Ti, Pb as Tn, A_ as Tr, Ik as Tt, cF as U, gs as Ui, Ay as Un, e_ as Ur, FE as Ut, lF as V, zs as Vi, Vy as Vn, n_ as Vr, yD as Vt, sF as W, _s as Wi, ty as Wn, $g as Wr, PE as Wt, xP as X, Cv as Xn, zg as Xr, $ as Xt, SP as Y, Tv as Yn, Vg as Yr, dE as Yt, vP as Z, kv as Zn, Tg as Zr, IT as Zt, gL as _, Bf as _i, Kx as _n, F_ as _r, uA as _t, AL as a, ag as ai, LC as an, dv as ar, kj as at, sL as b, Rd as bi, px as bn, R_ as br, iA as bt, DL as c, Yh as ci, AC as cn, sv as cr, gj as ct, wL as d, Mh as di, vC as dn, q_ as dr, sj as dt, vg as ei, NT as en, gv as er, QN as et, SL as f, Z as fi, gC as fn, J_ as fr, tj as ft, bL as g, X as gi, Qx as gn, L_ as gr, hA as gt, xL as h, Qm as hi, eS as hn, B_ as hr, _A as ht, ML as i, lg as ii, UC as in, uv as ir, Aj as it, OF as j, Hl as ji, ob as jn, b_ as jr, $O as jt, GF as k, Wl as ki, hb as kn, T_ as kr, mk as kt, EL as l, Bh as li, DC as ln, av as lr, hj as lt, yL as m, dh as mi, dC as mn, K_ as mr, FA as mt, PL as n, fg as ni, AT as nn, mv as nr, sM as nt, kL as o, ng as oi, MC as on, fv as or, Oj as ot, vL as p, ph as pi, fC as pn, G_ as pr, ZA as pt, DP as q, Yv as qn, Gg as qr, pE as qt, jL as r, dg as ri, kT as rn, hv as rr, Bj as rt, OL as s, eg as si, jC as sn, ov as sr, Dj as st, NL as t, mg as ti, jT as tn, vv as tr, cM as tt, TL as u, Fh as ui, wC as un, Y_ as ur, fj as ut, _L as v, Vf as vi, Sx as vn, P_ as vr, lA as vt, WI as w, q as wi, Wb as wn, j_ as wr, Hk as wt, QI as x, ld as xi, ux as xn, N_ as xr, tA as xt, hL as y, Jd as yi, xx as yn, I_ as yr, cA as yt, uF as z, Is as zi, Ky as zn, a_ as zr, TD as zt };
@@ -1,8 +1,8 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { a as t, c as n, d as r, i, n as a, r as o, t as s, u as c } from "./alert-dialog-D37eph4I.js";
3
- import { a as l } from "./button-CG9SBAT-.js";
4
- import { i as u } from "./translate-material-jxfcGlD5.js";
5
- import { t as d } from "./use-material-translation-BUPqNmAg.js";
2
+ import { a as t, c as n, d as r, i, n as a, r as o, t as s, u as c } from "./alert-dialog-BaqK-rmd.js";
3
+ import { a as l } from "./button-CozGHXAv.js";
4
+ import { i as u } from "./translate-material-DlMetRSJ.js";
5
+ import { t as d } from "./use-material-translation-Cx5u36V5.js";
6
6
  import { _ as f, g as p, h as m, t as h, v as g, y as _ } from "./date.utils-JTEIo3mM.js";
7
7
  import { useCallback as v, useEffect as y, useMemo as b, useRef as x, useState as S } from "react";
8
8
  import { Fragment as C, jsx as w, jsxs as T } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- import { i as e, t } from "./translate-material-jxfcGlD5.js";
1
+ import { i as e, t } from "./translate-material-DlMetRSJ.js";
2
2
  import { useCallback as n } from "react";
3
3
  //#region lib/i18n/use-material-translation.ts
4
4
  function r() {
@@ -1,6 +1,6 @@
1
1
  import { o as e, r as t } from "./dist-DVRQkaTK.js";
2
2
  import { i as n, n as r, r as i, t as a } from "./dist-DWZXlCZR.js";
3
- import { C as o, S as s, x as c } from "./spinner-CQqRWxAW.js";
3
+ import { C as o, S as s, x as c } from "./spinner-D7ol2n_-.js";
4
4
  import { a as l, i as u, r as d } from "./dist-DHdUUM1w.js";
5
5
  import { c as f, i as p, l as m, o as h, r as g, s as ee } from "./in-dialog-D61Yeaol.js";
6
6
  import { r as te } from "./escape-owner-DpaP0lm1.js";
@@ -1053,12 +1053,12 @@ import { Badge, EntityHeader } from '@nxgt/material/components';
1053
1053
  | `headingLevel` | `1 \| 2 \| 3` | `1` | the title's heading level: pass `2` or `3` when the page already has its `h1` (a list title beside a detail header); the look does not change |
1054
1054
  | `icon`, `status` | `ReactNode` | — | before and after the title; `icon` is decoration, shown in an `aria-hidden` badge, so put nothing meaningful or focusable there; for a control, use `leading` |
1055
1055
  | `leading` | `ReactNode` | — | an interactive control at the band's start, such as a [Switcher](selection-and-choice.md#switcher) of either variant: drawn as it is, at its natural size (at most 18rem wide beside the title, from a 384px band; narrower, it takes the band's width), in the accessibility tree, with no badge and no `aria-hidden`; on a phone it takes the band's width above the title. **It replaces `icon` when both are given** (a development warning says so). Root `data-slot="entity-header-leading"` |
1056
- | `metadata` | `{ label: string; value: ReactNode }[]` | `[]` | facts under the title, a description list: a muted label beside its value, no colon; a link in a value is drawn in the primary text colour (`text-primary-text`), not the prose link's info blue, and `nxgt-plain-link` still opts out |
1056
+ | `metadata` | `{ label: string; value: ReactNode }[]` | `[]` | facts under the title, a description list laid out as a grid of equal columns (as many as the width allows, one per 9.5rem at least): a small muted label above its value, no colon, a long value wraps inside its column; a link or a text button in a value keeps the text's height (its own `min-h-11` is dropped; on a touch pointer its 44px tap target is a hit area that adds no height), and a link in a value is drawn in the primary text colour (`text-primary-text`), not the prose link's info blue, and `nxgt-plain-link` still opts out |
1057
1057
  | `stats` | `EntityStat[]` | `[]` | figures (counts, a mean) as compact `size="sm"` [StatCard](#statcard) tiles in a `StatCardGroup` (2×2 on a phone, a wrapping row beside) under the metadata; a `tone` paints a tile, `0` is a figure, an empty value drops the tile (see Stats below) |
1058
1058
  | `actions` | `ResponsiveButtonProps[] \| ReactNode` | `[]` | an array becomes responsive buttons (icon-only on phones) |
1059
1059
  | `surface` | `'card' \| 'none'` | `'card'` | `'none'` draws the header flat (no background, padding or shadow) for a header that sits directly on a page band or inside a surface of its own, so surfaces do not nest; the layout is unchanged |
1060
1060
 
1061
- The root carries `data-slot="entity-header"`; the metadata is a `dl` with `data-slot="entity-metadata"` (a muted `dt` label beside its `dd` value, no colon), and the actions sit in `data-slot="entity-header-actions"` (absent when there are none). Inside an EntityHeader that replaces the old `summary-data` slot and its `Label:` text, so update a selector or a test that read "Label: value".
1061
+ The root carries `data-slot="entity-header"`; the metadata is a `dl` with `data-slot="entity-metadata"` (a muted `dt` label above its `dd` value in a grid cell, no colon), and the actions sit in `data-slot="entity-header-actions"` (absent when there are none). Inside an EntityHeader that replaces the old `summary-data` slot and its `Label:` text, so update a selector or a test that read "Label: value".
1062
1062
 
1063
1063
  **Flat, on a page band.** `surface="none"` drops the header's own card; `className` still merges.
1064
1064
 
@@ -1696,10 +1696,11 @@ The full `Markdown` (maths, diagrams and highlighted code) runs under a strict
1696
1696
  nonce CSP with no `unsafe-inline`, no `unsafe-eval`, no `style-src-attr` and no
1697
1697
  `img-src data:` (`img-src blob:` for the diagrams): wrap the app in `NonceProvider` and see the
1698
1698
  [CSP guide](../guides/csp.md#markdown-katex-mermaid-and-code-under-a-strict-csp)
1699
- (`Data display/Markdown > StrictCsp` plays it under that policy). Two things
1700
- only: a server-rendered page that has math needs `style-src-attr 'unsafe-inline'`
1701
- (KaTeX's server markup carries inline `style` attributes), and mermaid's mindmap
1702
- and architecture diagrams add a `<style>` to `<head>`. `math={false}` and
1699
+ (`Data display/Markdown > StrictCsp` plays it under that policy). Server-rendered
1700
+ math included: KaTeX's inline `style` attributes become classes plus one
1701
+ `<style>` that takes the `NonceProvider` nonce, so math needs `NonceProvider`
1702
+ under a nonce policy. One thing is left: mermaid's mindmap and architecture
1703
+ diagrams add an un-nonced `<style>` to `<head>`. `math={false}` and
1703
1704
  `mermaid={false}` stay for a restricted GFM-only mode.
1704
1705
 
1705
1706
  Mermaid diagrams render in the browser only, after mount; on the server the
@@ -15,6 +15,7 @@ for the value type each one writes. Everything is imported from
15
15
  | <img src="../previews/form-fields-choicelistfield.webp" width="96" alt=""> | [ChoiceListField](#choicelistfield) | An editable list of answer choices with correct marks |
16
16
  | <img src="../previews/form-fields-textfield.webp" width="96" alt=""> | [TextField](#textfield) | Labelled input with adornments and helper text |
17
17
  | <img src="../previews/form-fields-textareafield.webp" width="96" alt=""> | [TextareaField](#textareafield) | Labelled textarea with row sizing and a counter |
18
+ | <img src="../previews/form-fields-markdowntextareafield.webp" width="96" alt=""> | [MarkdownTextareaField](#markdowntextareafield) | Textarea for Markdown and math with a Write / Preview tab list |
18
19
  | <img src="../previews/form-fields-emailfield.webp" width="96" alt=""> | [EmailField](#emailfield) | Validates on blur, `mailto:` button |
19
20
  | <img src="../previews/form-fields-passwordfield.webp" width="96" alt=""> | [PasswordField](#passwordfield) | Show / hide toggle and a strength meter |
20
21
  | <img src="../previews/form-fields-numberfield.webp" width="96" alt=""> | [NumberField](#numberfield) | `number \| null` with clamping and +/− buttons |
@@ -524,6 +525,44 @@ stores `string`.
524
525
 
525
526
  ---
526
527
 
528
+ ## MarkdownTextareaField
529
+
530
+ ![MarkdownTextareaField](../previews/form-fields-markdowntextareafield.webp)
531
+
532
+ Textarea for Markdown and KaTeX math with a **Write / Preview** tab list, the
533
+ usual label, helper text, error and `maxLength` counter, and a collapsed
534
+ formatting help (bold, list, code, `$…$`, `$$…$$`, escaping `\$`). The preview
535
+ is rendered by [`Markdown`](./data-display.md#markdown); raw HTML is never rendered.
536
+
537
+ ```tsx
538
+ import { MarkdownTextareaField, MarkdownTextareaFormField } from '@nxgt/material/components';
539
+
540
+ <MarkdownTextareaField label="Prompt" maxLength={4000} helperText="Markdown and $math$." />
541
+
542
+ <MarkdownTextareaFormField control={control} name="prompt" label="Prompt" maxLength={4000} />
543
+ ```
544
+
545
+ | Prop | Type | Default | Effect |
546
+ | --- | --- | --- | --- |
547
+ | `minRows` | `number` | `6` | minimum height of the textarea and the preview, in lines |
548
+ | `maxLength` | `number` | — | shows an `n/max` counter, red when over |
549
+ | `showCount` | `boolean` | `true` when `maxLength` is set | force the counter on or off |
550
+ | `math` | `boolean` | `true` | render `$…$` and `$$…$$` in the preview |
551
+ | `mermaid` | `boolean` | `false` | draw ```` ```mermaid ```` fences in the preview |
552
+ | `showHelp` | `boolean` | `true` | the formatting help under the field |
553
+ | `previewClassName` | `string` | — | class of the preview panel |
554
+ | `error` | `boolean` | — | error outline and helper colour |
555
+
556
+ The Write / Preview toggle is a `tablist` (arrow keys move between the tabs);
557
+ the textarea stays mounted while Preview shows. Text labels use the
558
+ `material.markdown-textarea-field.*` i18n keys.
559
+
560
+ **Emits:** the native `ChangeEvent<HTMLTextAreaElement>`; `MarkdownTextareaFormField`
561
+ stores `string`.
562
+ **Form wrapper:** `MarkdownTextareaFormField` — `control` and `name`, see
563
+ [forms](../guides/forms.md#the-pair) and [what each field emits](../guides/forms.md#what-each-field-emits).
564
+ **Storybook:** `Form fields/MarkdownTextareaField` · **Vue:** none yet
565
+
527
566
  ## EmailField
528
567
 
529
568
  ![EmailField](../previews/form-fields-emailfield.webp)
@@ -2834,8 +2834,37 @@ French bundle — see [i18n](../guides/i18n.md).
2834
2834
  | `QuestionCard` `preview` | `boolean` | `false` | an author's preview, `<QuestionCard question={q} preview />`: forces `revealed` and `readOnly`, drops `onValueChange`, and shows the marks (the `question.correct` options marked, the expected text or number filled in) and the `explanation`, with no verdict banner. `verdict` and `showFeedback` are always ignored in a preview; `value` is ignored when the question has a `correct` — an `open` or `code` question has none, so pass its reference answer as `value`. Not for a learner's attempt |
2835
2835
  | `QuestionCard` `readOnly` / `busy` | `boolean` | `false` | `readOnly`: an answer already submitted, shown without the revealed marks; `busy`: read-only and `aria-busy` while it is saved; every kind honours both |
2836
2836
  | new strings | `material.education.kind-open`, `kind-code`, `code-placeholder` | — | English fallbacks and a French bundle |
2837
+ | `Question` `markdown` | `boolean` | `false` | draws the `prompt`, the string option labels, `explanation`, option explanations and hints as Markdown with math (`$x^2$`), through the safe `Markdown` (raw HTML is not rendered, mermaid off). The prompt, option labels and the verdict's "Correct answer" use an inline form (paragraph unwrapped, no lists or headings) so the HTML stays valid in a `<legend>` or a label; explanations and hints keep blocks |
2838
+ | `Question` `hints` | `string[]` | — | revealed one at a time behind a "Show hint 1 of N" button; the focus moves to the hint just shown and the hint's name is "Hint 1 of N" (one announcement). Hidden once revealed. The single `hint` is deprecated (kept: a Show / Hide toggle), ignored when `hints` is set |
2839
+ | `QuestionOption` `explanation` | `string` | — | why this option is right or wrong; a list "About each answer" under the card once revealed or in a `preview` |
2840
+ | `Question` `references` | `{ title: string; url?: string }[]` | — | a labelled "References" list once revealed or in a `preview`; a safe `url` is a link, an external one with `rel="noopener noreferrer"` |
2841
+ | `Question` `kind: 'code'` | `starterCode?`, `examples?: { input, expected }[]` | — | `starterCode` fills the field while there is no draft (`value` null or undefined; an empty string is a draft), it reaches `onValueChange` on the first edit only; `examples` is a table (Input, Expected) above the field |
2842
+ | new strings | `material.quiz.rich.*` | — | English fallbacks and a French bundle (React only for now) |
2837
2843
  | `QuestionCard` `variant` / `density` / `showShortcuts` / `number` / `showFeedback` | — | `'card'`, `'comfortable'`, `false`, —, `true` | framed or plain, spacing, key badges, "Question 2", the verdict banner (for a card with marks and no banner, use `preview`) |
2838
2844
 
2845
+ A quiz question with Markdown, math, progressive hints and references:
2846
+
2847
+ ```tsx
2848
+ <QuestionCard
2849
+ question={{
2850
+ id: 'q1',
2851
+ kind: 'choice',
2852
+ markdown: true,
2853
+ prompt: 'Solve $2x + 6 = 14$',
2854
+ options: [
2855
+ { id: 'a', label: '$x = 4$', explanation: 'Subtract 6, then divide by 2.' },
2856
+ { id: 'b', label: '$x = 10$', explanation: 'You added 6 instead.' },
2857
+ ],
2858
+ correct: 'a',
2859
+ hints: ['Isolate $x$.', 'Subtract 6 from both sides.'],
2860
+ references: [{ title: 'Linear equations', url: 'https://example.org/linear' }],
2861
+ }}
2862
+ value={value}
2863
+ onValueChange={setValue}
2864
+ revealed={checked}
2865
+ />
2866
+ ```
2867
+
2839
2868
  An open answer and a code answer, with the code editor from its own subpath
2840
2869
  (it is client-only, so load it lazily in an SSR app):
2841
2870