@nxgt/material 2.14.0 → 2.16.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 (75) hide show
  1. package/CHANGELOG.md +66 -0
  2. package/dist/{_Uint8Array-QCcRMhXd.js → _Uint8Array-CjLUgWgf.js} +1 -1
  3. package/dist/{_overRest-C21ZmKyH.js → _overRest-HfSwfmH1.js} +1 -1
  4. package/dist/{async-slice-TBZ6Taw2.js → async-slice-CsE3hkCD.js} +2 -2
  5. package/dist/{blockDiagram-BEXU5L5S-Cn9cG3vt.js → blockDiagram-BEXU5L5S-DSNWJcbS.js} +2 -2
  6. package/dist/{chunk-3FUC2YCW-XrT5pZo5.js → chunk-3FUC2YCW-CcZvlyvW.js} +2 -2
  7. package/dist/{chunk-7M6MHVWA-Uf-8NCRF.js → chunk-7M6MHVWA-21OdxoBq.js} +1 -1
  8. package/dist/{chunk-GNY47TPC-CGgBmY0O.js → chunk-GNY47TPC-BZdgq2LF.js} +4 -4
  9. package/dist/{chunk-NETBCI7D-g-jPsM9q.js → chunk-NETBCI7D-CAgvlb0w.js} +1 -1
  10. package/dist/{chunk-Z7XXMR3K-BzO1efzA.js → chunk-Z7XXMR3K-BSXPgLtN.js} +1 -1
  11. package/dist/{classDiagram-v2-NBCMYWYE-7WgpfVcn.js → classDiagram-v2-NBCMYWYE-D_BHO1iT.js} +2 -2
  12. package/dist/{components-qTUjhFuo.js → components-Bkdm6jn6.js} +23187 -23162
  13. package/dist/components.js +4 -4
  14. package/dist/{dagre-6A5THRUB-BOuRxJdA.js → dagre-6A5THRUB-CsnftAPx.js} +11 -11
  15. package/dist/{diagram-22UHCM2B-CF0vLJbn.js → diagram-22UHCM2B-D0yPa8vo.js} +2 -2
  16. package/dist/{diagram-3UASUU5V-RLo-MTfV.js → diagram-3UASUU5V-f8LIX2sj.js} +1 -1
  17. package/dist/dnd.js +1 -1
  18. package/dist/{elk-276RUBZZ-Dr2yBM7k.js → elk-276RUBZZ-DI8bDQAL.js} +3 -3
  19. package/dist/{erDiagram-OPXOYQCR-l7kPZ4FO.js → erDiagram-OPXOYQCR-BGHFtxmB.js} +2 -2
  20. package/dist/{field-blur-BKGVq9_k.js → field-blur-C-5K6U1F.js} +4 -4
  21. package/dist/{flowDiagram-KWPJA3E3-BQEK3XTl.js → flowDiagram-KWPJA3E3-CnFLTW-3.js} +3 -3
  22. package/dist/{ganttDiagram-FUAMR5RP-WYm8XV7U.js → ganttDiagram-FUAMR5RP-B5uyVKE4.js} +1 -1
  23. package/dist/{graphlib-CbcZi5bx.js → graphlib-BqO9Go2u.js} +6 -6
  24. package/dist/hooks.js +2 -2
  25. package/dist/{i18n-provider-D5hkauu6.js → i18n-provider-C3SlA4J0.js} +1 -1
  26. package/dist/i18n.js +6 -6
  27. package/dist/{isArrayLikeObject-COiPdhFP.js → isArrayLikeObject-83P1fvEs.js} +3 -3
  28. package/dist/{isEmpty-B7UlCLih.js → isEmpty-C2z3Hypl.js} +3 -3
  29. package/dist/{journeyDiagram-ZHPQQLJL-p90NnenY.js → journeyDiagram-ZHPQQLJL-CKtbGcVT.js} +1 -1
  30. package/dist/lib/components/ui/dates/calendar/use-stable-component.d.ts +10 -0
  31. package/dist/lib/components/ui/dates/date-field/date-field-trigger.d.ts +1 -1
  32. package/dist/lib/components/ui/dates/date-range-field/date-range-field-trigger.d.ts +1 -1
  33. package/dist/lib/components/ui/dates/picker-trigger/use-trigger-locale.d.ts +10 -0
  34. package/dist/lib/components/ui/display/chip/chip.d.ts +18 -3
  35. package/dist/lib/components/ui/display/chip/chip.variants.d.ts +10 -0
  36. package/dist/lib/components/ui/display/chip/index.d.ts +1 -0
  37. package/dist/lib/components/ui/display/chip/partials/chip-dismiss-button.d.ts +3 -1
  38. package/dist/lib/components/ui/primitives/typography/typography.d.ts +7 -2
  39. package/dist/lib/components/ui/selection/select-field/select-field.d.ts +5 -2
  40. package/dist/lib/i18n/resources/en/material.json.d.ts +1 -1
  41. package/dist/lib/i18n/resources/fr/material.json.d.ts +1 -1
  42. package/dist/lib.js +3 -3
  43. package/dist/main.js +10 -10
  44. package/dist/map.js +2 -2
  45. package/dist/material.css +1 -1
  46. package/dist/{merge-KEf_u3Zy.js → merge-CZIEHTTe.js} +4 -4
  47. package/dist/{mermaid.core-CW8DO1T1.js → mermaid.core-Cp75fWA9.js} +21 -21
  48. package/dist/{mindmap-definition-NLK3R4M7-DJcCg9PL.js → mindmap-definition-NLK3R4M7-CFYIlEfW.js} +2 -2
  49. package/dist/{pieDiagram-5QR66LMP-b_dHXzkV.js → pieDiagram-5QR66LMP-CjvtBYDr.js} +1 -1
  50. package/dist/print.js +2 -2
  51. package/dist/{quadrantDiagram-O4NWA36T-BSqAcBs7.js → quadrantDiagram-O4NWA36T-DPj8ndqA.js} +1 -1
  52. package/dist/{requirementDiagram-PLB6GJNP-BcxkmIFp.js → requirementDiagram-PLB6GJNP-DjVFwRJg.js} +2 -2
  53. package/dist/{sankeyDiagram-IPEJSGJF-aD5r_n1q.js → sankeyDiagram-IPEJSGJF-63wsgHUY.js} +1 -1
  54. package/dist/{sortable-provider-C8mr3XP2.js → sortable-provider-Chbn1x1i.js} +1 -1
  55. package/dist/{stateDiagram-v2-GCMORJYK-Ct9ylaoP.js → stateDiagram-v2-GCMORJYK-DNc8m371.js} +2 -2
  56. package/dist/{stored-language-g121Yv0w.js → stored-language-DPqzxRmf.js} +2 -2
  57. package/dist/{swimlanes-2SLR337P-BwCqwEoR.js → swimlanes-2SLR337P-B7_gOJxx.js} +3 -3
  58. package/dist/{swimlanesDiagram-TC7HE7FX-WxBGUt0w.js → swimlanesDiagram-TC7HE7FX-tqlBrGuu.js} +3 -3
  59. package/dist/{timeline-definition-EJHVYXUP-5Q8GU13Q.js → timeline-definition-EJHVYXUP-DIA9CBZK.js} +1 -1
  60. package/dist/{translate-material-D3Hp_AI5.js → translate-material-CqB-j9WD.js} +2 -2
  61. package/dist/{translator-BMFC0lBV.js → translator-DTl9h__E.js} +1 -1
  62. package/dist/{use-heading-spy-wlOv87q3.js → use-heading-spy-C1KA3PrF.js} +2 -2
  63. package/dist/{use-material-translation-BGFp1yXp.js → use-material-translation-DMa4Xrnd.js} +2 -2
  64. package/dist/{usecaseDiagram-POWQR4AR-CzGOd4ic.js → usecaseDiagram-POWQR4AR-FMjCkoxs.js} +2 -2
  65. package/dist/{xychartDiagram-PMCCYNJV-Bh_1zZoW.js → xychartDiagram-PMCCYNJV-B76HOkCh.js} +1 -1
  66. package/docs/components/data-display.md +10 -2
  67. package/docs/components/data-table-filter-and-lists.md +5 -2
  68. package/docs/components/date-and-time.md +6 -0
  69. package/docs/components/feedback-and-status.md +3 -1
  70. package/docs/components/primitives.md +10 -2
  71. package/docs/components/selection-and-choice.md +2 -1
  72. package/docs/guides/i18n.md +2 -0
  73. package/docs/roadmap.md +33 -15
  74. package/docs/troubleshooting.md +81 -0
  75. package/package.json +2 -2
@@ -1,7 +1,7 @@
1
- import { S as e, _ as t, g as n, p as r, v as i, w as a, x as o } from "./translator-BMFC0lBV.js";
2
- import { n as s, r as c } from "./_overRest-C21ZmKyH.js";
3
- import { a as l, c as u, d, i as f, l as p, n as m, p as h, r as g, t as _, u as v } from "./_Uint8Array-QCcRMhXd.js";
4
- import { n as y, r as b, t as x } from "./isArrayLikeObject-COiPdhFP.js";
1
+ import { S as e, _ as t, g as n, p as r, v as i, w as a, x as o } from "./translator-DTl9h__E.js";
2
+ import { n as s, r as c } from "./_overRest-HfSwfmH1.js";
3
+ import { a as l, c as u, d, i as f, l as p, n as m, p as h, r as g, t as _, u as v } from "./_Uint8Array-CjLUgWgf.js";
4
+ import { n as y, r as b, t as x } from "./isArrayLikeObject-83P1fvEs.js";
5
5
  //#region ../../node_modules/lodash-es/_baseCreate.js
6
6
  var S = Object.create, C = function() {
7
7
  function e() {}
@@ -8,9 +8,9 @@ import { a as he } from "./chunk-MBY4JIJT-BFIqOe-8.js";
8
8
  import "./chunk-7PRAP22T-0C6_H8Li.js";
9
9
  import "./chunk-7INBJB4K-k-I67NSP.js";
10
10
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
11
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
11
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
12
12
  import "./chunk-UA2S7LBM-ChuksCDg.js";
13
- import { n as ge } from "./chunk-GNY47TPC-CGgBmY0O.js";
13
+ import { n as ge } from "./chunk-GNY47TPC-BZdgq2LF.js";
14
14
  import { n as _e, t as ve } from "./chunk-LNGE3PJU-DJjGTS7O.js";
15
15
  //#region ../../node_modules/es-toolkit/dist/compat/_internal/isPrototype.mjs
16
16
  function ye(e) {
@@ -302,7 +302,7 @@ var qe = "c4", Je = {
302
302
  id: Ye,
303
303
  detector: /* @__PURE__ */ p((e) => /^\s*(graph|flowchart)/.test(e), "detector"),
304
304
  loader: /* @__PURE__ */ p(async () => {
305
- let { diagram: e } = await import("./flowDiagram-KWPJA3E3-BQEK3XTl.js");
305
+ let { diagram: e } = await import("./flowDiagram-KWPJA3E3-CnFLTW-3.js");
306
306
  return {
307
307
  id: Ye,
308
308
  diagram: e
@@ -312,7 +312,7 @@ var qe = "c4", Je = {
312
312
  id: Ze,
313
313
  detector: /* @__PURE__ */ p((e) => /^\s*agentflow-beta\b/.test(e), "detector"),
314
314
  loader: /* @__PURE__ */ p(async () => {
315
- let { diagram: e } = await import("./diagram-22UHCM2B-CF0vLJbn.js");
315
+ let { diagram: e } = await import("./diagram-22UHCM2B-D0yPa8vo.js");
316
316
  return {
317
317
  id: Ze,
318
318
  diagram: e
@@ -322,7 +322,7 @@ var qe = "c4", Je = {
322
322
  id: $e,
323
323
  detector: /* @__PURE__ */ p((e) => /^\s*swimlane-beta\b/.test(e), "detector"),
324
324
  loader: /* @__PURE__ */ p(async () => {
325
- let { diagram: e } = await import("./swimlanesDiagram-TC7HE7FX-WxBGUt0w.js");
325
+ let { diagram: e } = await import("./swimlanesDiagram-TC7HE7FX-tqlBrGuu.js");
326
326
  return {
327
327
  id: $e,
328
328
  diagram: e
@@ -332,7 +332,7 @@ var qe = "c4", Je = {
332
332
  id: tt,
333
333
  detector: /* @__PURE__ */ p((e) => /^\s*erDiagram/.test(e), "detector"),
334
334
  loader: /* @__PURE__ */ p(async () => {
335
- let { diagram: e } = await import("./erDiagram-OPXOYQCR-l7kPZ4FO.js");
335
+ let { diagram: e } = await import("./erDiagram-OPXOYQCR-BGHFtxmB.js");
336
336
  return {
337
337
  id: tt,
338
338
  diagram: e
@@ -352,7 +352,7 @@ var qe = "c4", Je = {
352
352
  id: at,
353
353
  detector: /* @__PURE__ */ p((e) => /^\s*gantt/.test(e), "detector"),
354
354
  loader: /* @__PURE__ */ p(async () => {
355
- let { diagram: e } = await import("./ganttDiagram-FUAMR5RP-WYm8XV7U.js");
355
+ let { diagram: e } = await import("./ganttDiagram-FUAMR5RP-B5uyVKE4.js");
356
356
  return {
357
357
  id: at,
358
358
  diagram: e
@@ -372,7 +372,7 @@ var qe = "c4", Je = {
372
372
  id: lt,
373
373
  detector: /* @__PURE__ */ p((e) => /^\s*pie/.test(e), "detector"),
374
374
  loader: /* @__PURE__ */ p(async () => {
375
- let { diagram: e } = await import("./pieDiagram-5QR66LMP-b_dHXzkV.js");
375
+ let { diagram: e } = await import("./pieDiagram-5QR66LMP-CjvtBYDr.js");
376
376
  return {
377
377
  id: lt,
378
378
  diagram: e
@@ -382,7 +382,7 @@ var qe = "c4", Je = {
382
382
  id: dt,
383
383
  detector: /* @__PURE__ */ p((e) => /^\s*quadrantChart/.test(e), "detector"),
384
384
  loader: /* @__PURE__ */ p(async () => {
385
- let { diagram: e } = await import("./quadrantDiagram-O4NWA36T-BSqAcBs7.js");
385
+ let { diagram: e } = await import("./quadrantDiagram-O4NWA36T-DPj8ndqA.js");
386
386
  return {
387
387
  id: dt,
388
388
  diagram: e
@@ -392,7 +392,7 @@ var qe = "c4", Je = {
392
392
  id: pt,
393
393
  detector: /* @__PURE__ */ p((e) => /^\s*xychart(-beta)?/.test(e), "detector"),
394
394
  loader: /* @__PURE__ */ p(async () => {
395
- let { diagram: e } = await import("./xychartDiagram-PMCCYNJV-Bh_1zZoW.js");
395
+ let { diagram: e } = await import("./xychartDiagram-PMCCYNJV-B76HOkCh.js");
396
396
  return {
397
397
  id: pt,
398
398
  diagram: e
@@ -402,7 +402,7 @@ var qe = "c4", Je = {
402
402
  id: ht,
403
403
  detector: /* @__PURE__ */ p((e) => /^\s*requirement(Diagram)?/.test(e), "detector"),
404
404
  loader: /* @__PURE__ */ p(async () => {
405
- let { diagram: e } = await import("./requirementDiagram-PLB6GJNP-BcxkmIFp.js");
405
+ let { diagram: e } = await import("./requirementDiagram-PLB6GJNP-DjVFwRJg.js");
406
406
  return {
407
407
  id: ht,
408
408
  diagram: e
@@ -422,7 +422,7 @@ var qe = "c4", Je = {
422
422
  id: yt,
423
423
  detector: /* @__PURE__ */ p((e) => /^\s*classDiagram/.test(e), "detector"),
424
424
  loader: /* @__PURE__ */ p(async () => {
425
- let { diagram: e } = await import("./classDiagram-v2-NBCMYWYE-7WgpfVcn.js");
425
+ let { diagram: e } = await import("./classDiagram-v2-NBCMYWYE-D_BHO1iT.js");
426
426
  return {
427
427
  id: yt,
428
428
  diagram: e
@@ -432,7 +432,7 @@ var qe = "c4", Je = {
432
432
  id: xt,
433
433
  detector: /* @__PURE__ */ p((e) => /^\s*stateDiagram/.test(e), "detector"),
434
434
  loader: /* @__PURE__ */ p(async () => {
435
- let { diagram: e } = await import("./stateDiagram-v2-GCMORJYK-Ct9ylaoP.js");
435
+ let { diagram: e } = await import("./stateDiagram-v2-GCMORJYK-DNc8m371.js");
436
436
  return {
437
437
  id: xt,
438
438
  diagram: e
@@ -442,7 +442,7 @@ var qe = "c4", Je = {
442
442
  id: Ct,
443
443
  detector: /* @__PURE__ */ p((e) => /^\s*journey/.test(e), "detector"),
444
444
  loader: /* @__PURE__ */ p(async () => {
445
- let { diagram: e } = await import("./journeyDiagram-ZHPQQLJL-p90NnenY.js");
445
+ let { diagram: e } = await import("./journeyDiagram-ZHPQQLJL-CKtbGcVT.js");
446
446
  return {
447
447
  id: Ct,
448
448
  diagram: e
@@ -460,7 +460,7 @@ var qe = "c4", Je = {
460
460
  id: Ot,
461
461
  detector: /* @__PURE__ */ p((e, t = {}) => /^\s*flowchart-elk/.test(e) ? (t.layout = "elk", !0) : !1, "detector"),
462
462
  loader: /* @__PURE__ */ p(async () => {
463
- let { diagram: e } = await import("./flowDiagram-KWPJA3E3-BQEK3XTl.js");
463
+ let { diagram: e } = await import("./flowDiagram-KWPJA3E3-CnFLTW-3.js");
464
464
  return {
465
465
  id: Ot,
466
466
  diagram: e
@@ -470,7 +470,7 @@ var qe = "c4", Je = {
470
470
  id: At,
471
471
  detector: /* @__PURE__ */ p((e) => /^\s*timeline/.test(e), "detector"),
472
472
  loader: /* @__PURE__ */ p(async () => {
473
- let { diagram: e } = await import("./timeline-definition-EJHVYXUP-5Q8GU13Q.js");
473
+ let { diagram: e } = await import("./timeline-definition-EJHVYXUP-DIA9CBZK.js");
474
474
  return {
475
475
  id: At,
476
476
  diagram: e
@@ -480,7 +480,7 @@ var qe = "c4", Je = {
480
480
  id: Mt,
481
481
  detector: /* @__PURE__ */ p((e) => /^\s*mindmap/.test(e), "detector"),
482
482
  loader: /* @__PURE__ */ p(async () => {
483
- let { diagram: e } = await import("./mindmap-definition-NLK3R4M7-DJcCg9PL.js");
483
+ let { diagram: e } = await import("./mindmap-definition-NLK3R4M7-CFYIlEfW.js");
484
484
  return {
485
485
  id: Mt,
486
486
  diagram: e
@@ -500,7 +500,7 @@ var qe = "c4", Je = {
500
500
  id: It,
501
501
  detector: /* @__PURE__ */ p((e) => /^\s*sankey(-beta)?/.test(e), "detector"),
502
502
  loader: /* @__PURE__ */ p(async () => {
503
- let { diagram: e } = await import("./sankeyDiagram-IPEJSGJF-aD5r_n1q.js");
503
+ let { diagram: e } = await import("./sankeyDiagram-IPEJSGJF-63wsgHUY.js");
504
504
  return {
505
505
  id: It,
506
506
  diagram: e
@@ -530,7 +530,7 @@ var qe = "c4", Je = {
530
530
  id: Ht,
531
531
  detector: /* @__PURE__ */ p((e) => /^\s*block(-beta)?/.test(e), "detector"),
532
532
  loader: /* @__PURE__ */ p(async () => {
533
- let { diagram: e } = await import("./blockDiagram-BEXU5L5S-Cn9cG3vt.js");
533
+ let { diagram: e } = await import("./blockDiagram-BEXU5L5S-DSNWJcbS.js");
534
534
  return {
535
535
  id: Ht,
536
536
  diagram: e
@@ -590,7 +590,7 @@ var qe = "c4", Je = {
590
590
  id: en,
591
591
  detector: /* @__PURE__ */ p((e) => /^\s*treemap/.test(e), "detector"),
592
592
  loader: /* @__PURE__ */ p(async () => {
593
- let { diagram: e } = await import("./diagram-3UASUU5V-RLo-MTfV.js");
593
+ let { diagram: e } = await import("./diagram-3UASUU5V-f8LIX2sj.js");
594
594
  return {
595
595
  id: en,
596
596
  diagram: e
@@ -600,7 +600,7 @@ var qe = "c4", Je = {
600
600
  id: nn,
601
601
  detector: /* @__PURE__ */ p((e) => /^\s*usecase-beta(?:\s|$)/.test(e), "detector"),
602
602
  loader: /* @__PURE__ */ p(async () => {
603
- let { diagram: e } = await import("./usecaseDiagram-POWQR4AR-CzGOd4ic.js");
603
+ let { diagram: e } = await import("./usecaseDiagram-POWQR4AR-FMjCkoxs.js");
604
604
  return {
605
605
  id: nn,
606
606
  diagram: e
@@ -7,11 +7,11 @@ import "./chunk-MBY4JIJT-BFIqOe-8.js";
7
7
  import "./chunk-7PRAP22T-0C6_H8Li.js";
8
8
  import "./chunk-7INBJB4K-k-I67NSP.js";
9
9
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
10
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
10
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
11
11
  import { t as u } from "./chunk-XXDRQBXY-dKXxu_aj.js";
12
12
  import { t as d } from "./chunk-WEXAMYUT-CbFOhEve.js";
13
13
  import "./chunk-UA2S7LBM-ChuksCDg.js";
14
- import { r as f, t as p } from "./chunk-GNY47TPC-CGgBmY0O.js";
14
+ import { r as f, t as p } from "./chunk-GNY47TPC-BZdgq2LF.js";
15
15
  //#region ../../node_modules/uuid/dist/stringify.js
16
16
  var m = [];
17
17
  for (let e = 0; e < 256; ++e) m.push((e + 256).toString(16).slice(1));
@@ -1,4 +1,4 @@
1
- import { ct as e, ot as t } from "./components-qTUjhFuo.js";
1
+ import { ct as e, ot as t } from "./components-Bkdm6jn6.js";
2
2
  import { n } from "./src-CsLQInsN.js";
3
3
  import { i as r, p as i } from "./chunk-ZIGJFQKS-9VXArDKF.js";
4
4
  import { t as a } from "./ordinal-DwxdXP1t.js";
package/dist/print.js CHANGED
@@ -1,5 +1,5 @@
1
- import { r as e } from "./i18n-provider-D5hkauu6.js";
2
- import { t } from "./translate-material-D3Hp_AI5.js";
1
+ import { r as e } from "./i18n-provider-C3SlA4J0.js";
2
+ import { t } from "./translate-material-CqB-j9WD.js";
3
3
  import { jsx as n, jsxs as r } from "react/jsx-runtime";
4
4
  import { Children as i, createContext as a, isValidElement as o, useCallback as s, useContext as c, useEffect as l, useMemo as u, useState as d } from "react";
5
5
  import { OBJECT_URL_TTL_MS as f, downloadPdfFile as p } from "@nxgt/material-core/pdf-download";
@@ -1,4 +1,4 @@
1
- import { rt as e } from "./components-qTUjhFuo.js";
1
+ import { rt as e } from "./components-Bkdm6jn6.js";
2
2
  import { n as t, t as n } from "./src-CsLQInsN.js";
3
3
  import { n as r } from "./chunk-Y2CYZVJY-BAad7w_K.js";
4
4
  import { D as i, H as a, U as o, a as s, c, f as l, q as u, v as d, w as f, x as p, y as m, z as h } from "./chunk-O7XYJQB3-BChweQ_V.js";
@@ -8,11 +8,11 @@ import "./chunk-7PRAP22T-0C6_H8Li.js";
8
8
  import { a as p, i as m, o as h, r as g } from "./chunk-J5ZVWO5B-DmRRmhon.js";
9
9
  import "./chunk-7INBJB4K-k-I67NSP.js";
10
10
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
11
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
11
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
12
12
  import { t as _ } from "./chunk-XXDRQBXY-dKXxu_aj.js";
13
13
  import { t as v } from "./chunk-WEXAMYUT-CbFOhEve.js";
14
14
  import "./chunk-UA2S7LBM-ChuksCDg.js";
15
- import { r as y, t as b } from "./chunk-GNY47TPC-CGgBmY0O.js";
15
+ import { r as y, t as b } from "./chunk-GNY47TPC-BZdgq2LF.js";
16
16
  //#region ../../node_modules/mermaid/dist/chunks/mermaid.core/requirementDiagram-PLB6GJNP.mjs
17
17
  var x = (function() {
18
18
  var e = /* @__PURE__ */ n(function(e, t, n, r) {
@@ -1,4 +1,4 @@
1
- import { V as e } from "./components-qTUjhFuo.js";
1
+ import { V as e } from "./components-Bkdm6jn6.js";
2
2
  import { t } from "./src-CsLQInsN.js";
3
3
  import { t as n } from "./ordinal-DwxdXP1t.js";
4
4
  import { n as r } from "./chunk-Y2CYZVJY-BAad7w_K.js";
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./utils-DC8bw9A_.js";
2
2
  import { pt as t, t as n } from "./icon-button-B1nN3J6B.js";
3
- import { t as r } from "./use-material-translation-BGFp1yXp.js";
3
+ import { t as r } from "./use-material-translation-DMa4Xrnd.js";
4
4
  import { GripVertical as i } from "lucide-react";
5
5
  import { jsx as a } from "react/jsx-runtime";
6
6
  import o, { cloneElement as s, createContext as c, forwardRef as l, memo as u, useCallback as d, useContext as f, useEffect as p, useLayoutEffect as m, useMemo as h, useReducer as g, useRef as _, useState as v } from "react";
@@ -8,12 +8,12 @@ import "./chunk-7PRAP22T-0C6_H8Li.js";
8
8
  import { a as h, i as g, o as _, r as v } from "./chunk-J5ZVWO5B-DmRRmhon.js";
9
9
  import "./chunk-7INBJB4K-k-I67NSP.js";
10
10
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
11
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
11
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
12
12
  import { t as y } from "./chunk-GWA4HPMP-B8jXI0Tl.js";
13
13
  import { t as b } from "./chunk-XXDRQBXY-dKXxu_aj.js";
14
14
  import { t as x } from "./chunk-WEXAMYUT-CbFOhEve.js";
15
15
  import "./chunk-UA2S7LBM-ChuksCDg.js";
16
- import { r as S, t as C } from "./chunk-GNY47TPC-CGgBmY0O.js";
16
+ import { r as S, t as C } from "./chunk-GNY47TPC-BZdgq2LF.js";
17
17
  //#region ../../node_modules/mermaid/dist/chunks/mermaid.core/stateDiagram-v2-GCMORJYK.mjs
18
18
  var w = (function() {
19
19
  var e = /* @__PURE__ */ i(function(e, t, n, r) {
@@ -350,7 +350,7 @@ var e = {
350
350
  "go-to-first-page": "Go to first page",
351
351
  "go-to-last-page": "Go to last page",
352
352
  "rows-per-page": "Rows per page",
353
- "rows-selected": "{count} of {total} {count, plural, =0 {row selected} one {row selected} other {rows selected} }",
353
+ "rows-selected": "{count, plural, =0 {No rows selected} one {# row selected} other {# rows selected}} of {total}",
354
354
  "page-of": "Page {page} of {total}",
355
355
  label: "Pagination",
356
356
  range: "{from}–{to} of {total}",
@@ -1561,7 +1561,7 @@ var e = {
1561
1561
  "go-to-first-page": "Aller à la première page",
1562
1562
  "go-to-last-page": "Aller à la dernière page",
1563
1563
  "rows-per-page": "Lignes par page",
1564
- "rows-selected": "{count} sur {total} {count, plural, =0 {ligne sélectionnée} one {ligne sélectionnée} other {lignes sélectionnées} }",
1564
+ "rows-selected": "{count, plural, =0 {Aucune ligne sélectionnée} one {# ligne sélectionnée} other {# lignes sélectionnées}} sur {total}",
1565
1565
  "page-of": "Page {page} sur {total}",
1566
1566
  label: "Pagination",
1567
1567
  range: "{from}–{to} sur {total}",
@@ -7,10 +7,10 @@ import "./chunk-MBY4JIJT-BFIqOe-8.js";
7
7
  import "./chunk-7PRAP22T-0C6_H8Li.js";
8
8
  import "./chunk-7INBJB4K-k-I67NSP.js";
9
9
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
10
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
10
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
11
11
  import "./chunk-UA2S7LBM-ChuksCDg.js";
12
- import { r as n } from "./chunk-3FUC2YCW-XrT5pZo5.js";
13
- import { t as r } from "./chunk-NETBCI7D-g-jPsM9q.js";
12
+ import { r as n } from "./chunk-3FUC2YCW-CcZvlyvW.js";
13
+ import { t as r } from "./chunk-NETBCI7D-CAgvlb0w.js";
14
14
  //#region ../../node_modules/mermaid/dist/chunks/mermaid.core/swimlanes-2SLR337P.mjs
15
15
  function i(e, { measure: t }) {
16
16
  let n = e.config?.swimlane?.lineHops;
@@ -7,14 +7,14 @@ import "./chunk-MBY4JIJT-BFIqOe-8.js";
7
7
  import "./chunk-7PRAP22T-0C6_H8Li.js";
8
8
  import "./chunk-7INBJB4K-k-I67NSP.js";
9
9
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
10
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
10
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
11
11
  import "./chunk-GWA4HPMP-B8jXI0Tl.js";
12
12
  import "./chunk-XXDRQBXY-dKXxu_aj.js";
13
13
  import "./chunk-WEXAMYUT-CbFOhEve.js";
14
14
  import "./chunk-UA2S7LBM-ChuksCDg.js";
15
- import "./chunk-GNY47TPC-CGgBmY0O.js";
15
+ import "./chunk-GNY47TPC-BZdgq2LF.js";
16
16
  import "./chunk-LNGE3PJU-DJjGTS7O.js";
17
- import { r as t, t as n } from "./chunk-7M6MHVWA-Uf-8NCRF.js";
17
+ import { r as t, t as n } from "./chunk-7M6MHVWA-21OdxoBq.js";
18
18
  //#region ../../node_modules/mermaid/dist/chunks/mermaid.core/swimlanesDiagram-TC7HE7FX.mjs
19
19
  var r = n({ styles: /* @__PURE__ */ e((e) => `${t(e)}
20
20
  .swimlane.cluster:not([data-color-id]) rect {
@@ -1,4 +1,4 @@
1
- import { ct as e } from "./components-qTUjhFuo.js";
1
+ import { ct as e } from "./components-Bkdm6jn6.js";
2
2
  import { n as t, t as n } from "./src-CsLQInsN.js";
3
3
  import { p as r } from "./chunk-ZIGJFQKS-9VXArDKF.js";
4
4
  import { n as i, t as a } from "./chunk-Y2CYZVJY-BAad7w_K.js";
@@ -1,5 +1,5 @@
1
- import "./stored-language-g121Yv0w.js";
2
- import { E as e, r as t } from "./translator-BMFC0lBV.js";
1
+ import "./stored-language-DPqzxRmf.js";
2
+ import { E as e, r as t } from "./translator-DTl9h__E.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,4 +1,4 @@
1
- import { a as e, i as t, o as n, t as r } from "./stored-language-g121Yv0w.js";
1
+ import { a as e, i as t, o as n, t as r } from "./stored-language-DPqzxRmf.js";
2
2
  //#region ../../node_modules/@formatjs/fast-memoize/index.js
3
3
  function i(e, t) {
4
4
  let n = t && t.cache ? t.cache : ne, r = t && t.serializer ? t.serializer : ee;
@@ -1,5 +1,5 @@
1
- import { n as e } from "./stored-language-g121Yv0w.js";
2
- import { r as t } from "./i18n-provider-D5hkauu6.js";
1
+ import { n as e } from "./stored-language-DPqzxRmf.js";
2
+ import { r as t } from "./i18n-provider-C3SlA4J0.js";
3
3
  import { _ as n, g as r, h as i, n as a, v as o, y as s } from "./number.utils-BiBN2hWJ.js";
4
4
  import { createContext as c, useCallback as l, useContext as u, useEffect as d, useMemo as f, useSyncExternalStore as p } from "react";
5
5
  //#region lib/hooks/resolve-theme.ts
@@ -1,5 +1,5 @@
1
- import { r as e } from "./i18n-provider-D5hkauu6.js";
2
- import { t } from "./translate-material-D3Hp_AI5.js";
1
+ import { r as e } from "./i18n-provider-C3SlA4J0.js";
2
+ import { t } from "./translate-material-CqB-j9WD.js";
3
3
  import { useCallback as n } from "react";
4
4
  //#region lib/i18n/use-material-translation.ts
5
5
  function r() {
@@ -8,11 +8,11 @@ import "./chunk-7PRAP22T-0C6_H8Li.js";
8
8
  import { a as g, i as _, o as v, r as y } from "./chunk-J5ZVWO5B-DmRRmhon.js";
9
9
  import "./chunk-7INBJB4K-k-I67NSP.js";
10
10
  import "./chunk-5DYCD2WN-Cd1zazNp.js";
11
- import "./chunk-Z7XXMR3K-BzO1efzA.js";
11
+ import "./chunk-Z7XXMR3K-BSXPgLtN.js";
12
12
  import { t as ee } from "./chunk-XXDRQBXY-dKXxu_aj.js";
13
13
  import { t as te } from "./chunk-WEXAMYUT-CbFOhEve.js";
14
14
  import "./chunk-UA2S7LBM-ChuksCDg.js";
15
- import { r as ne, t as re } from "./chunk-GNY47TPC-CGgBmY0O.js";
15
+ import { r as ne, t as re } from "./chunk-GNY47TPC-BZdgq2LF.js";
16
16
  //#region ../../node_modules/chevrotain/node_modules/lodash-es/_freeGlobal.js
17
17
  var ie = typeof global == "object" && global && global.Object === Object && global, ae = typeof self == "object" && self && self.Object === Object && self, b = ie || ae || Function("return this")(), oe = b.Symbol, se = Object.prototype, ce = se.hasOwnProperty, le = se.toString, ue = oe ? oe.toStringTag : void 0;
18
18
  function de(e) {
@@ -1,4 +1,4 @@
1
- import { at as e, rt as t, st as n } from "./components-qTUjhFuo.js";
1
+ import { at as e, rt as t, st as n } from "./components-Bkdm6jn6.js";
2
2
  import { n as r } from "./src-CsLQInsN.js";
3
3
  import { i } from "./chunk-ZIGJFQKS-9VXArDKF.js";
4
4
  import { n as a } from "./chunk-Y2CYZVJY-BAad7w_K.js";
@@ -145,17 +145,25 @@ import { Avatar, Chip } from '@nxgt/material/components';
145
145
 
146
146
  <Chip label="Ada Lovelace" avatar={<Avatar fallback="AL" />} onDismiss={() => remove('ada')} />
147
147
  <Chip label="Shipped" color="success" active />
148
+ <Chip label="Frontend" dismissLabel={(label) => `Clear ${label} filter`} onDismiss={clear} />
149
+ <Chip label="+ Field" variant="dashed" active={added} onClick={add} />
150
+ <Chip label="Compact" size="sm" ref={chipRef} />
148
151
  ```
149
152
 
150
153
  | Prop | Type | Default | Effect |
151
154
  | --- | --- | --- | --- |
152
155
  | `label` | `ReactNode` | — | the text |
153
156
  | `active` | `boolean` | — | filled appearance |
154
- | `onDismiss` | `() => void` | — | adds the ✕ button, named "Remove {label}" (`material.chip.dismiss-label`), `{label}` being the text `label` shows, a node's included; "Remove" when it shows none |
157
+ | `variant` | Button `variant`, or `'dashed'` | `'outlined'` | appearance when not active; `dashed` is a muted dashed pill (a "+ Field" pill) that turns solid and normal once `active` |
158
+ | `size` | `'default' \| 'sm'` | `'default'` | `sm` is a compact chip; the ✕ and every target stay at least 24px |
159
+ | `onDismiss` | `() => void` | — | adds the ✕ button, named "Remove {label}" (`material.chip.dismiss-label`), `{label}` being the text `label` shows, a node's included; "Remove" when it shows none; the ✕ is a 24px target |
160
+ | `dismissLabel` | `string \| ((label: string) => string)` | — | names the ✕ instead of "Remove {label}": a string as is, or a function of the text the chip shows |
155
161
  | `onClick` | `MouseEventHandler` | — | makes the chip (or its body, when dismissible) a button |
156
162
  | `leading`, `avatar`, `trailing` | `ReactNode` | — | slots; `avatar` is shrunk to fit |
157
- | `variant` | Button `variant` | `'outlined'` | appearance when not active |
158
163
  | `color` | Button `color` | — | tone |
164
+ | `ref` | `Ref<HTMLButtonElement>` (a `span` in the label-only mode) | — | reaches the chip's body: the Button, the inner button of a clickable dismissible chip, or its label span (`tabindex="-1"`), so `ref.current?.focus()` works in every mode |
165
+
166
+ The dashed look's muted text meets 4.5:1 on the `background` and `card` surfaces, but not on `accent`.
159
167
 
160
168
  **Storybook:** `Data display/Chip` · **Vue:** `Chip`
161
169
 
@@ -340,7 +340,8 @@ export default function Students() {
340
340
  turns client filtering off.
341
341
  - **Selection** is keyed by `getRowId`, so it survives a page change: ids
342
342
  of other pages stay in `rowSelection`, and the footer counts them all
343
- ("3 rows selected", `material.table.pagination.selected`). `actions(table)`
343
+ ("3 rows selected of 128", `material.table.pagination.rows-selected`; "Page n of m"
344
+ is hidden when the table has no rows). `actions(table)`
344
345
  reads it too (`table.store.state.rowSelection`). To keep it across a
345
346
  reload, put it in the URL or `sessionStorage`.
346
347
  - **Row links.** With `getRowHref`, the first data column's cell is a real
@@ -421,7 +422,9 @@ with its inputs named by their part ("Min" / "Max", or the slider's
421
422
  Parts: `Filter` (one component, `variant` picks the layout);
422
423
  `FilterProvider` + `FilterContent` + `FilterActions` to lay the panel out
423
424
  yourself (`useFilterContext` reads it); `FilterChips` (active values as
424
- removable chips, from `schema` and `values`); `FilterPresets` (saved sets).
425
+ removable chips, from `schema` and `values`; a filter is removed with the
426
+ chip's × button, named "Remove <label>" (`material.chip.dismiss-label`), not by
427
+ clicking the chip); `FilterPresets` (saved sets).
425
428
 
426
429
  | Prop | Type | Default | Effect |
427
430
  | --- | --- | --- | --- |
@@ -88,6 +88,8 @@ CalendarContrast).
88
88
 
89
89
  Labelled trigger that opens a calendar popover, with an optional time picker.
90
90
 
91
+ The trigger writes the date in the field's `locale`, else the `I18nProvider` language, else English.
92
+
91
93
  ```tsx
92
94
  import { DateField } from '@nxgt/material/components';
93
95
  import { useState } from 'react';
@@ -146,6 +148,8 @@ calendar is labelled by the trigger, so named by the label.
146
148
 
147
149
  From / to range picked in a popover calendar, with presets and times.
148
150
 
151
+ The trigger writes each date in the field's `locale`, else the `I18nProvider` language, else English.
152
+
149
153
  ```tsx
150
154
  import { type DateRange, DateRangeField } from '@nxgt/material/components';
151
155
  import { useState } from 'react';
@@ -288,6 +292,8 @@ second day is picked.
288
292
 
289
293
  Opens a `TimePicker` in a popover, or in a dialog on mobile.
290
294
 
295
+ The trigger writes the time in the `I18nProvider` language, else English.
296
+
291
297
  ```tsx
292
298
  import { TimeField } from '@nxgt/material/components';
293
299
  import { useState } from 'react';
@@ -310,9 +310,11 @@ import { Button, EmptyState } from '@nxgt/material/components';
310
310
  | --- | --- | --- | --- |
311
311
  | `variant` | `'not-found' \| 'unauthorized' \| 'generic' \| 'empty' \| 'offline' \| 'search' \| 'maintenance'` | `'generic'` | preset icon, well colour, title and description |
312
312
  | `icon` | `ReactNode` | the preset's | replaces the icon |
313
- | `title` / `description` | `ReactNode` | the preset's (translated) | replace the preset text |
313
+ | `title` / `description` | `ReactNode` | the preset's (translated) | replace the preset text; see below |
314
314
  | `action` | `ReactNode` | — | shown under the text |
315
315
 
316
+ The preset's description is the companion of its title: with your own `title` and no `description`, no description is rendered. Pass `description` to keep a line under your own title.
317
+
316
318
  **Storybook:** `Feedback & status/EmptyState` · **Vue:** `EmptyState`
317
319
 
318
320
  ---
@@ -176,9 +176,17 @@ import { Typography } from '@nxgt/material/components';
176
176
  | Prop | Type | Default | Effect |
177
177
  | --- | --- | --- | --- |
178
178
  | `variant` | `'huge-large' \| 'huge-medium' \| 'huge-small' \| 'headline-larger' \| 'headline-large' \| 'headline-medium' \| 'headline-small' \| 'title-large' \| 'title-medium' \| 'title-small' \| 'body-medium' \| 'body-small' \| 'caption' \| 'normal'` | `'normal'` | size and weight; `caption` is also muted |
179
+ | `as` | an intrinsic tag name (`keyof JSX.IntrinsicElements`) | `'div'` | the element to render, keeping the variant, e.g. `as="h2"` or `as="span"` |
180
+ | `asChild` | `boolean` | `false` | merge the classes onto the single child instead of rendering an element |
179
181
 
180
- It renders a `<div>`; the variants are also exported as `typographyVariants`
181
- for use on your own elements.
182
+ It renders a `<div>` unless `as` or `asChild` says otherwise:
183
+
184
+ ```tsx
185
+ <Typography as="span" variant="title-small">Inline</Typography>
186
+ <Typography asChild variant="body-medium"><a href="/docs">Docs</a></Typography>
187
+ ```
188
+
189
+ The variants are also exported as `typographyVariants` for use on your own elements.
182
190
 
183
191
  **Storybook:** `Primitives/Typography` · **Vue:** `Typography`
184
192
 
@@ -136,11 +136,12 @@ export function Framework() {
136
136
  | `placeholder` | `ReactNode` | `label` | the trigger's text while nothing is selected |
137
137
  | `required` | `boolean` | — | an asterisk after the label, and Radix Select's `required`; the trigger is named by the label |
138
138
  | `label`, `helperText`, `error` | | — | the field's text and state |
139
+ | `aria-labelledby` | `string` | — | the id of an element that names the trigger when `label` is absent; `label` wins when both are given |
139
140
 
140
141
  **Accessibility:** the trigger is named by `label`, described by the help or
141
142
  error text (`aria-describedby`) and marked `aria-invalid` on error, so
142
143
  `getByRole('combobox', { name: 'Framework' })` finds it and
143
- `toHaveAccessibleDescription(…)` / `toBeInvalid()` match.
144
+ `toHaveAccessibleDescription(…)` / `toBeInvalid()` match. Without a `label`, `aria-labelledby` (the id of another element) names the trigger; when both are given, `label` wins.
144
145
  **Emits:** `string`.
145
146
  **Form wrapper:** `SelectFormField` — `control` and `name`, see
146
147
  [forms](../guides/forms.md#the-pair) and [what each field emits](../guides/forms.md#what-each-field-emits).
@@ -449,6 +449,8 @@ and dates shown to a user, `useFormatters()` (`formatAmount`, `formatDate`)
449
449
  prints what the PDF builders print, with the decimals `CurrencyField` shows. See
450
450
  [helpers](helpers.md#nxgtmaterialhooks).
451
451
 
452
+ The trigger of a `DateField`, `DateRangeField` or `TimeField` follows the same language (a `DateField`'s own `locale` wins): `01/09/2028` on a French page, `09/01/2028` in English.
453
+
452
454
  ## Reference
453
455
 
454
456
  Everything `@nxgt/material/i18n` exports is listed in
package/docs/roadmap.md CHANGED
@@ -6,21 +6,6 @@ version they shipped in, and planned entries may name the major they target.
6
6
 
7
7
  ## Now
8
8
 
9
- - **A strict Content Security Policy** — a page that sends `script-src` with
10
- a nonce and no `'unsafe-eval'`, and `style-src-elem` with a nonce and no
11
- `'unsafe-inline'`, runs every component with no violation report: a
12
- `NonceProvider` forwards the nonce to each component, the CSS the
13
- dependencies inject moves into the stylesheet, zod becomes external with
14
- schemas built lazily, and the KaTeX fonts ship as files. Done so far:
15
- KaTeX's fonts are files beside the compiled stylesheet instead of 1.4 MB of
16
- `data:` URIs inside it, so `font-src 'self'` needs no `data:`;
17
- `NonceProvider` takes the nonce to `ScrollArea`, `Select`,
18
- `RichTextEditor` and the scroll lock of modals; `Toaster`, `Drawer`,
19
- `InputOTP`, `ImageCropper`, `Spinner` and `PdfReader` inject no `<style>`,
20
- their CSS is in the stylesheet; zod is no longer bundled and no schema is
21
- built at import, so the app's `z.config({ jitless: true })` keeps zod from
22
- probing `new Function`. Today the
23
- [Content Security Policy guide](guides/csp.md) lists what is left to relax.
24
9
  - **Empty and error states that look designed** — `EmptyState` and a new
25
10
  `ErrorState` in three sizes (`default`, `compact`, `inline`), with in-house
26
11
  inline SVG illustrations or a slot for your own. `ErrorState` is a
@@ -32,6 +17,30 @@ version they shipped in, and planned entries may name the major they target.
32
17
 
33
18
  ## Next
34
19
 
20
+ - **One Vite plugin for the whole setup** — `nxgtMaterial()` from
21
+ `@nxgt/material/vite` is the one call that wires the library
22
+ into a Vite app; it is implemented once in `@nxgt/material-core/vite`, and
23
+ `@nxgt/material-vue/vite` is the same plugin.
24
+ Every option is on by default and each can be turned off or refined; the
25
+ helpers that exist today stay exported.
26
+ - `csp`: a nonce placeholder through `html.cspNonce` and
27
+ `applyCspNonce(html, nonce)` to fill it; zod's jitless mode set by an
28
+ inline nonced script in `index.html` (`ZOD_JITLESS_SCRIPT` for a server
29
+ that renders the page itself); and the recommended policy sent by the dev
30
+ server as Report-Only.
31
+ - `fonts`: the KaTeX fonts emitted as files, and `sans: 'inter'` for a
32
+ self-hosted Inter.
33
+ - `styles`: a build that fails with the exact fix when the stylesheet import
34
+ or the `@source` line is missing.
35
+ - `pdf`: pdfkit's standard fonts handled automatically when
36
+ `@react-pdf/renderer` is installed, and `bundle: true` (the Nuxt module's
37
+ `pdf.bundleStandardFonts` today) for a server that has no
38
+ `node_modules`.
39
+ - Nuxt: the Nuxt module takes the same options.
40
+ - On the server, `@nxgt/material-core` gains `createCspNonce()` (Web Crypto)
41
+ and `cspPolicy({ ... })`, which returns `{ directives, header }` as the
42
+ [Content Security Policy guide](guides/csp.md) describes; `NonceProvider`'s
43
+ `nonce` becomes optional on the client. Ships as minors.
35
44
  - **One media player, video and audio** — `MediaPlayer`, `MediaPlayerMini`,
36
45
  `useMediaPlayer` and `AudioPlayer`, built on the native `<video>` / `<audio>`.
37
46
  `StxPlayer` and `VideoPlayer` are removed in `@nxgt/material` 3.0, with a
@@ -118,6 +127,8 @@ version they shipped in, and planned entries may name the major they target.
118
127
 
119
128
  ## Not planned
120
129
 
130
+ - **A Next.js plugin** — the plugin targets Vite only. No supported consumer
131
+ builds with Next.js, and `withNxgtPrint` stays the config helper for it.
121
132
  - **Shipping the Font Awesome Pro sprite sheets** — the Pro licence covers use
122
133
  in your own products, not redistribution inside a library. Serve the sheets
123
134
  from your app; the package's `files` excludes them so a build cannot leak
@@ -146,6 +157,13 @@ version they shipped in, and planned entries may name the major they target.
146
157
 
147
158
  ## Shipped
148
159
 
160
+ - **A strict Content Security Policy** — a page that sends `script-src` with a
161
+ nonce and no `'unsafe-eval'`, and `style-src-elem` with a nonce and no
162
+ `'unsafe-inline'`, runs every component with no violation report:
163
+ `NonceProvider` forwards the nonce to each component, the CSS the
164
+ dependencies inject is in the stylesheet, zod is external and its schemas are
165
+ built on first use, and the KaTeX fonts are files. The
166
+ [Content Security Policy guide](guides/csp.md) has the policy. 2.14.0.
149
167
  - **An `Autocomplete` that searches a server** — `onSearch`, `debounceMs`, `minQueryLength`, `filter`, `loading`, `searchError`: a
150
168
  debounced search with an `AbortSignal` whose stale responses are dropped,
151
169
  a polite "Loading…" / "N results" announcement, and local matching that