@nxgt/material 3.62.0 → 3.63.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 +14 -0
  2. package/README.md +1 -1
  3. package/dist/alert-dialog-RHm6WtQj.js +189 -0
  4. package/dist/{async-slice-HJY_VJjD.js → async-slice-DmX59NyA.js} +3 -4
  5. package/dist/{button-7BuUCGRm.js → button-DfS_amfQ.js} +1 -1
  6. package/dist/charts.js +3 -3
  7. package/dist/{chip-kQOrHlDX.js → chip-Cbndukko.js} +2 -2
  8. package/dist/{code-editor-Ckc9TTCM.js → code-editor-B0tN8Ha_.js} +11 -11
  9. package/dist/code-editor.js +5 -5
  10. package/dist/{code-language-items-rCPB0Xee.js → code-language-items-andgHKrM.js} +2 -2
  11. package/dist/components/ui/layout/sidebar/sidebar-tokens.css +13 -1
  12. package/dist/{components-TDDUQ1Y0.js → components-Cm2doOJS.js} +14345 -14224
  13. package/dist/components.js +28 -26
  14. package/dist/dialog-Bd7Hid2L.js +219 -0
  15. package/dist/dnd.js +1 -1
  16. package/dist/{dropdown-menu-CiobN1wi.js → dropdown-menu-_SyVmSuy.js} +1 -1
  17. package/dist/editor.js +707 -706
  18. package/dist/{empty-state-DA517HAb.js → empty-state-D-2ZMXXJ.js} +2 -2
  19. package/dist/escape-owner-DpaP0lm1.js +19 -0
  20. package/dist/{field-blur-DdvY0NQQ.js → field-blur-DyOByjzw.js} +1 -1
  21. package/dist/{field-blur-context-DbJQZkEB.js → field-blur-context-DPe5_Nv5.js} +1 -1
  22. package/dist/hooks-a7_exKWS.js +329 -0
  23. package/dist/hooks.js +3 -3
  24. package/dist/{hover-card-DPs9huSs.js → hover-card-D_0smKBQ.js} +2 -2
  25. package/dist/i18n.js +8 -10
  26. package/dist/{icon-badge-C646JTOI.js → icon-badge-CBCU3ySF.js} +14 -14
  27. package/dist/{icon-button-DvP0Gy3j.js → icon-button-hKHsWTAt.js} +1 -1
  28. package/dist/lib/components/ui/feedback/index.d.ts +1 -0
  29. package/dist/lib/components/ui/feedback/unsaved-dialog/index.d.ts +1 -0
  30. package/dist/lib/components/ui/feedback/unsaved-dialog/unsaved-dialog.d.ts +20 -0
  31. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  32. package/dist/lib/components/ui/fields/textarea-field/textarea-footer.d.ts +2 -1
  33. package/dist/lib/components/ui/widgets/education/questions/index.d.ts +3 -1
  34. package/dist/lib/components/ui/widgets/education/questions/partials/question-content.d.ts +1 -1
  35. package/dist/lib/components/ui/widgets/education/questions/partials/question-top.d.ts +6 -0
  36. package/dist/lib/components/ui/widgets/education/questions/question-long-text.d.ts +5 -0
  37. package/dist/lib/components/ui/widgets/education/questions/question-media-content.d.ts +24 -0
  38. package/dist/lib/components/ui/widgets/education/questions/question-media-helpers.d.ts +11 -0
  39. package/dist/lib/components/ui/widgets/education/questions/question-media-view.d.ts +18 -0
  40. package/dist/lib/components/ui/widgets/education/questions/question-media-view.types.d.ts +32 -0
  41. package/dist/lib/components/ui/widgets/education/questions/question-options.d.ts +2 -2
  42. package/dist/lib/components/ui/widgets/education/questions/question-text.d.ts +1 -1
  43. package/dist/lib/components/ui/widgets/education/questions/question.d.ts +1 -1
  44. package/dist/lib/components/ui/widgets/education/questions/types.d.ts +38 -1
  45. package/dist/lib/components/ui/widgets/education/questions/use-reload-focus.d.ts +13 -0
  46. package/dist/lib/hooks/index.d.ts +3 -0
  47. package/dist/lib/hooks/unsaved-guard-rules.d.ts +30 -0
  48. package/dist/lib/hooks/use-react-router-block.d.ts +11 -0
  49. package/dist/lib/hooks/use-unsaved-guard/guard-core.d.ts +30 -0
  50. package/dist/lib/hooks/use-unsaved-guard/index.d.ts +3 -0
  51. package/dist/lib/hooks/use-unsaved-guard/types.d.ts +63 -0
  52. package/dist/lib/hooks/use-unsaved-guard/use-discard-guard.d.ts +15 -0
  53. package/dist/lib/hooks/use-unsaved-guard/use-unsaved-guard.d.ts +19 -0
  54. package/dist/lib/i18n/resources/en/en.d.ts +20 -0
  55. package/dist/lib/i18n/resources/en/material.json.d.ts +21 -1
  56. package/dist/lib/i18n/resources/fr/fr.d.ts +20 -0
  57. package/dist/lib/i18n/resources/fr/material.json.d.ts +21 -1
  58. package/dist/lib/i18n/resources/resources.d.ts +40 -0
  59. package/dist/lib/i18n/translator.d.ts +1 -1
  60. package/dist/lib.js +1 -1
  61. package/dist/main.js +42 -43
  62. package/dist/map.js +63 -63
  63. package/dist/material.css +1 -1
  64. package/dist/pdf-reader.js +1 -1
  65. package/dist/print.js +1 -2
  66. package/dist/{public-BYsrhyPW.js → public-D8JGp3PH.js} +823 -822
  67. package/dist/{rich-code-block-WJxDWPPY.js → rich-code-block-0R3bidsM.js} +5 -5
  68. package/dist/{sortable-provider-oPjlhlZo.js → sortable-provider-B75v53sB.js} +2 -2
  69. package/dist/{spinner-C5lObWXT.js → spinner-CAnpF3RK.js} +1 -1
  70. package/dist/theme-picker.js +2 -2
  71. package/dist/{theme-toggle-CPEq5JG-.js → theme-toggle-pQ5F602V.js} +1 -1
  72. package/dist/{toolbar-items-ByvXcMHm.js → toolbar-items-_ezD5B0r.js} +4 -4
  73. package/dist/translate-material-CvZK8_S6.js +96 -0
  74. package/dist/{stored-language-B-tiWZU2.js → translator-Caf-d96e.js} +2497 -8
  75. package/dist/{escape-owner-r57kuPjn.js → typography-CEK19bj8.js} +17 -34
  76. package/dist/{use-chat-composer-CzOVaIed.js → use-chat-composer-Dpvi_-CR.js} +5164 -5338
  77. package/dist/{use-heading-spy-BOtygPFu.js → use-heading-spy-mmcyEGmm.js} +186 -71
  78. package/dist/{use-material-translation-B5j3jZs7.js → use-material-translation-C_1cWRzW.js} +1 -2
  79. package/dist/use-return-focus-1ZIchrBM.js +269 -0
  80. package/docs/components/feedback-and-status.md +23 -0
  81. package/docs/components/navigation-and-layout.md +4 -3
  82. package/docs/components/rich-widgets.md +73 -1
  83. package/docs/guides/helpers.md +63 -0
  84. package/docs/guides/theming.md +13 -3
  85. package/docs/previews/feedback-status-unsaveddialog.webp +0 -0
  86. package/lib/components/ui/layout/sidebar/sidebar-tokens.css +13 -1
  87. package/package.json +1 -1
  88. package/dist/dialog-yfPkLqUQ.js +0 -482
  89. package/dist/hooks-CGnqFngB.js +0 -187
  90. package/dist/i18n-provider-BehR6cU7.js +0 -79
  91. package/dist/translate-material-tUaLZUmT.js +0 -20
  92. package/dist/translator-B9XjUDRu.js +0 -2451
package/CHANGELOG.md CHANGED
@@ -1,5 +1,19 @@
1
1
  # @nxgt/material
2
2
 
3
+ ## 3.63.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#2016](https://github.com/softistx/nxgt-material/pull/2016) [`ee0f79a`](https://github.com/softistx/nxgt-material/commit/ee0f79ae125d4154c043c1700276de57fee0a7df) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `QuestionCard`: open and code answers. `Question.kind` gains `'open'` (a multi-line answer in a textarea, with a counter when `question.maxLength` is set) and `'code'` (source code). The card keeps its prompt, number, media, hint and verdict frame, and the field is named by the prompt. New props: `readOnly` (an answer already submitted, shown without the revealed marks), `busy` (read-only and `aria-busy` while saving), both honoured by every kind (choice, multi, boolean, text, number too, locked without the revealed marks) and `renderCode`, a slot that draws the `code` field from a `QuestionCodeField` (`value`, `onChange`, `label`, `labelledBy`, `language`, `maxLength`, `readOnly`, `disabled`), for example with `CodeEditor` from `@nxgt/material/code-editor`; Monaco stays out of the `QuestionCard` bundle, and without `renderCode` the field is a monospace textarea. `Question` gains `maxLength` and `language`. `open` and `code` have no `correct`: pass the grader's `verdict`. New strings: `material.education.kind-open`, `kind-code`, `code-placeholder` (English and French). Additive ([#2000](https://github.com/softistx/nxgt-material/issues/2000)).
8
+
9
+ `TextareaField`: the character count now has an id joined into the textarea's `aria-describedby`, and is announced politely (`role="status"`) only within 10% of `maxLength`.
10
+
11
+ - [#2018](https://github.com/softistx/nxgt-material/pull/2018) [`41931d0`](https://github.com/softistx/nxgt-material/commit/41931d061b05d17c8da907516d016cbd24262191) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `QuestionMediaView`: a question's file, picked by its content type. `media` has the shape of `Question.media` plus `size?` (`src`, `type`, `alt?`, `name?`, `kind?`), so `question.media` goes straight in: an image with its `alt` (else a generic name), an `AudioPlayer`, a `<video controls>` (with optional `captions` tracks), and any other type (a PDF) as an open-in-a-new-tab link showing the file type and size, which fetches nothing (no `connect-src` or bucket CORS needed); `documents="preview"` draws a `FilePreview` instead. When the file fails to load (an expired presigned link) an alert says so, with a Reload button when `onReload` is passed (`reloading` shows it busy); a new `src` is a new chance. Named `QuestionMediaView` because `QuestionMedia` is already the type of `Question.media`. After a Reload that works, focus moves to the file when it was on the button. New strings: `material.question-media.*` (English and French). Additive ([#2001](https://github.com/softistx/nxgt-material/issues/2001)).
12
+
13
+ - [#2024](https://github.com/softistx/nxgt-material/pull/2024) [`62c6a40`](https://github.com/softistx/nxgt-material/commit/62c6a4017c929de5b5da374ce03348729658f893) Thanks [@SteveGT96](https://github.com/SteveGT96)! - feat(sidebar): add `--sidebar-active-edge`, the colour of the active entry's start bar (`bg-sidebar-active-edge`). It defaults to `--sidebar-active-foreground`, so nothing changes unless a theme sets it, and then only the bar changes.
14
+
15
+ - [#2022](https://github.com/softistx/nxgt-material/pull/2022) [`7eb67b3`](https://github.com/softistx/nxgt-material/commit/7eb67b30ee88516e33649b2101d278554ac90625) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add the unsaved-changes guard ([#1658](https://github.com/softistx/nxgt-material/issues/1658)). `useUnsavedGuard(dirty, { block, leaves?, ignoreSearch?, onBlock? })` in `@nxgt/material/hooks` blocks in-app navigation while a form is dirty and guards `beforeunload`; it returns `{ release, dialog }` (`release()` is synchronous and one-shot: the next navigation that really leaves passes, then the guard re-arms, and a release no navigation used expires when the current task ends; call it before the navigation that follows a save). The router is injected through a `block` adapter, `useReactRouterBlock` being the ready one for React Router. By default a pathname or query-string change is a leave; `ignoreSearch` or a `leaves(current, next)` predicate changes that, and `onBlock()` can flush pending saves and let the navigation through silently. `dirty` may be a function read at block time. `useDiscardGuard(dirty)` returns `{ close(action), dialog }` for a form in a dialog or sheet. New `UnsavedDialog` component (`material.unsaved.*` keys, en and fr). No Vue twin yet ([#2019](https://github.com/softistx/nxgt-material/issues/2019)).
16
+
3
17
  ## 3.62.0
4
18
 
5
19
  ### Minor Changes
package/README.md CHANGED
@@ -220,7 +220,7 @@ reads `duotone.svg`, the file that exists (it used to ask for the missing
220
220
  | `@nxgt/material/draw/png` | `drawingToPng(sceneOrSvg, { scale?, background?, colorsFrom? })` and `downloadDrawingPng(source, fileName)` — a drawing (a scene, or a live `<svg>` such as `svgRef.current` of a `<Drawing ref={svgRef}>`) as a PNG `Blob` in the browser, with the page's theme colours resolved, `data:` images inlined and CORS errors named; its own entry, DOM only when called ([drawing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/drawing.md#png), [reference](https://cdn.jsdelivr.net/npm/@nxgt/material-core@0/docs/draw.md#png-nxgtmaterial-coredrawpng)) |
221
221
  | `@nxgt/material/vite` | build-time helpers for consumers: `nxgtMaterial()` (a strict CSP by hash or nonce, self-hosted fonts, a styles check, serves the pdf.js worker on the Vite 5–7 dev server, generates your app themes' stylesheets with `nxgtMaterial({ themes })` and the `nxgt-theme` bin: [Themes guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/themes.md), a reduced backdrop icon sprite from your Font Awesome install with `nxgtMaterial({ backdropSprite })` and the `nxgt-backdrop-sprite` bin, PDFs on a bundled server with `nxgtMaterial({ pdf: { bundle: true } })`: [Vite plugin guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/vite-plugin.md)), `pdfkitStandardFonts()` ([printing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/printing.md)), `cspAssetsInlineLimit`, a `build.assetsInlineLimit` that never inlines a font ([CSP guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/csp.md#katex-fonts)) |
222
222
  | `@nxgt/material/next` | `withNxgtPrint(nextConfig)`: the `next.config.ts` a Next.js route handler that imports `/print` needs, `output: 'standalone'` included. Node only, no dependency on `next` ([printing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/printing.md#nextjs-serverexternalpackages-and-output-standalone)) |
223
- | `@nxgt/material/hooks` | `useTheme`, `useIsClient`, `useIsMobile`, `useLocalizedDate`, `useCspNonce`, `useFocusOnMount`, `useCountdown`, `useSubmitOnce`, `useDrafts`, … ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmaterialhooks)) |
223
+ | `@nxgt/material/hooks` | `useTheme`, `useIsClient`, `useIsMobile`, `useLocalizedDate`, `useCspNonce`, `useFocusOnMount`, `useCountdown`, `useSubmitOnce`, `useDrafts`, `useUnsavedGuard`, … ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmaterialhooks)) |
224
224
  | `@nxgt/material/dnd` | `@dnd-kit` primitives ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmaterialdnd)) |
225
225
  | `@nxgt/material/i18n` | `I18nProvider`, `mergeResources`, `createTranslator`, `translateMaterial`, `formatMessage` ([i18n guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/i18n.md)) |
226
226
  | `@nxgt/material/lib` | `cn`, `clientOnly`, date, number and storage utilities, `useSliceReducer`, `getCspNonce` / `setCspNonce`, the server-side CSP helpers (`createCspNonce`, `cspPolicy`, `cspHash`, `applyCspNonce`, `CSP_NONCE_PLACEHOLDER`, `ZOD_JITLESS_SCRIPT`, `zodJitlessTag`: [CSP, SSR](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/csp.md#ssr)) ([helpers](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md#nxgtmateriallib)) |
@@ -0,0 +1,189 @@
1
+ import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
+ import { t } from "./utils-BLfntITJ.js";
3
+ import { o as n } from "./dist-DVRQkaTK.js";
4
+ import { c as r, s as i } from "./dist-lmHmz_bu.js";
5
+ import { t as a } from "./in-dialog-Vwkyp-M5.js";
6
+ import { a as o, c as s, d as c, i as l, l as u, n as d, o as f, r as p, s as m, t as h, u as g } from "./use-return-focus-1ZIchrBM.js";
7
+ import { i as _ } from "./escape-owner-DpaP0lm1.js";
8
+ import * as v from "react";
9
+ import { jsx as y, jsxs as b } from "react/jsx-runtime";
10
+ //#region ../../node_modules/@radix-ui/react-alert-dialog/dist/index.mjs
11
+ var x = /* @__PURE__ */ e({
12
+ Action: () => W,
13
+ AlertDialog: () => D,
14
+ AlertDialogAction: () => I,
15
+ AlertDialogCancel: () => R,
16
+ AlertDialogContent: () => N,
17
+ AlertDialogDescription: () => F,
18
+ AlertDialogOverlay: () => A,
19
+ AlertDialogPortal: () => k,
20
+ AlertDialogTitle: () => P,
21
+ AlertDialogTrigger: () => O,
22
+ Cancel: () => G,
23
+ Content: () => U,
24
+ Description: () => q,
25
+ Overlay: () => H,
26
+ Portal: () => V,
27
+ Root: () => z,
28
+ Title: () => K,
29
+ Trigger: () => B,
30
+ createAlertDialogScope: () => T
31
+ }), S = Object.defineProperty, C = (e, t) => S(e, "name", {
32
+ value: t,
33
+ configurable: !0
34
+ }), [w, T] = r("AlertDialog", [c]), E = c(), D = /* @__PURE__ */ C((e) => {
35
+ let { __scopeAlertDialog: t, ...n } = e;
36
+ return /* @__PURE__ */ y(p, {
37
+ ...E(t),
38
+ ...n,
39
+ modal: !0
40
+ });
41
+ }, "AlertDialog"), O = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
42
+ let { __scopeAlertDialog: n, ...r } = e;
43
+ return /* @__PURE__ */ y(g, {
44
+ ...E(n),
45
+ ...r,
46
+ ref: t
47
+ });
48
+ }, "AlertDialogTrigger")), k = /* @__PURE__ */ C((e) => {
49
+ let { __scopeAlertDialog: t, ...n } = e;
50
+ return /* @__PURE__ */ y(s, {
51
+ ...E(t),
52
+ ...n
53
+ });
54
+ }, "AlertDialogPortal"), A = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
55
+ let { __scopeAlertDialog: n, ...r } = e;
56
+ return /* @__PURE__ */ y(m, {
57
+ ...E(n),
58
+ ...r,
59
+ ref: t
60
+ });
61
+ }, "AlertDialogOverlay")), [j, M] = w("AlertDialogContent"), N = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
62
+ let { __scopeAlertDialog: r, children: a, ...s } = e, c = E(r), l = n(t, v.useRef(null)), u = v.useRef(null);
63
+ return /* @__PURE__ */ y(j, {
64
+ scope: r,
65
+ cancelRef: u,
66
+ children: /* @__PURE__ */ y(o, {
67
+ role: "alertdialog",
68
+ ...c,
69
+ ...s,
70
+ ref: l,
71
+ onOpenAutoFocus: i(s.onOpenAutoFocus, (e) => {
72
+ e.preventDefault(), u.current?.focus({ preventScroll: !0 });
73
+ }),
74
+ onPointerDownOutside: (e) => e.preventDefault(),
75
+ onInteractOutside: (e) => e.preventDefault(),
76
+ children: a
77
+ })
78
+ });
79
+ }, "AlertDialogContent")), P = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
80
+ let { __scopeAlertDialog: n, ...r } = e;
81
+ return /* @__PURE__ */ y(u, {
82
+ ...E(n),
83
+ ...r,
84
+ ref: t
85
+ });
86
+ }, "AlertDialogTitle")), F = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
87
+ let { __scopeAlertDialog: n, ...r } = e;
88
+ return /* @__PURE__ */ y(f, {
89
+ ...E(n),
90
+ ...r,
91
+ ref: t
92
+ });
93
+ }, "AlertDialogDescription")), I = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
94
+ let { __scopeAlertDialog: n, ...r } = e;
95
+ return /* @__PURE__ */ y(l, {
96
+ ...E(n),
97
+ ...r,
98
+ ref: t
99
+ });
100
+ }, "AlertDialogAction")), L = "AlertDialogCancel", R = v.forwardRef(/* @__PURE__ */ C(function(e, t) {
101
+ let { __scopeAlertDialog: r, ...i } = e, { cancelRef: a } = M(L, r), o = E(r), s = n(t, a);
102
+ return /* @__PURE__ */ y(l, {
103
+ ...o,
104
+ ...i,
105
+ ref: s
106
+ });
107
+ }, "AlertDialogCancel")), z = D, B = O, V = k, H = A, U = N, W = I, G = R, K = P, q = F;
108
+ //#endregion
109
+ //#region lib/components/ui/feedback/alert-dialog/alert-dialog.tsx
110
+ function J({ ...e }) {
111
+ return /* @__PURE__ */ y(z, {
112
+ "data-slot": "alert-dialog",
113
+ ...e
114
+ });
115
+ }
116
+ function Y({ children: e, asChild: t = !0, ...n }) {
117
+ return /* @__PURE__ */ y(B, {
118
+ "data-slot": "alert-dialog-trigger",
119
+ asChild: t,
120
+ ...n,
121
+ children: /* @__PURE__ */ y("div", { children: e })
122
+ });
123
+ }
124
+ function X({ ...e }) {
125
+ return /* @__PURE__ */ y(V, {
126
+ "data-slot": "alert-dialog-portal",
127
+ ...e
128
+ });
129
+ }
130
+ function Z({ className: e, ...n }) {
131
+ return /* @__PURE__ */ y(H, {
132
+ "data-slot": "alert-dialog-overlay",
133
+ className: t("nxgt-scrim fixed inset-0 z-50", e),
134
+ ...n
135
+ });
136
+ }
137
+ function Q({ className: e, onOpenAutoFocus: n, onCloseAutoFocus: r, onEscapeKeyDown: i, ref: o, ...s }) {
138
+ let c = h({
139
+ onOpenAutoFocus: n,
140
+ onCloseAutoFocus: r
141
+ }, { focusFallback: !0 }), l = d({
142
+ ref: o,
143
+ onEscapeKeyDown: i,
144
+ ...s
145
+ }, !0);
146
+ return /* @__PURE__ */ y(_, { children: /* @__PURE__ */ y(a, {
147
+ value: !0,
148
+ children: /* @__PURE__ */ b(X, { children: [/* @__PURE__ */ y(Z, { ref: l.overlayRef }), /* @__PURE__ */ y(U, {
149
+ ref: l.ref,
150
+ "data-slot": "alert-dialog-content",
151
+ className: t("nxgt-dialog fixed top-[50%] left-[50%] z-50 grid w-full max-w-[calc(100%-2rem)] translate-x-[-50%] translate-y-[-50%] gap-4 p-6 sm:max-w-lg max-h-[calc(100dvh-2rem)] supports-[not(height:100dvh)]:max-h-[calc(100vh-2rem)] overflow-y-auto", e),
152
+ onOpenAutoFocus: c.onOpenAutoFocus,
153
+ onCloseAutoFocus: c.onCloseAutoFocus,
154
+ onEscapeKeyDown: l.onEscapeKeyDown,
155
+ ...s,
156
+ onFocusOutside: l.outside.onFocusOutside
157
+ })] })
158
+ }) });
159
+ }
160
+ function $({ className: e, ...n }) {
161
+ return /* @__PURE__ */ y("div", {
162
+ "data-slot": "alert-dialog-header",
163
+ className: t("flex flex-col gap-2 text-center sm:text-left", e),
164
+ ...n
165
+ });
166
+ }
167
+ function ee({ className: e, ...n }) {
168
+ return /* @__PURE__ */ y("div", {
169
+ "data-slot": "alert-dialog-footer",
170
+ className: t("flex flex-col-reverse gap-2 pt-2 max-sm:*:w-full sm:flex-row sm:justify-end", e),
171
+ ...n
172
+ });
173
+ }
174
+ function te({ className: e, ...n }) {
175
+ return /* @__PURE__ */ y(K, {
176
+ "data-slot": "alert-dialog-title",
177
+ className: t("text-2xl/8 font-medium tracking-tight text-foreground", e),
178
+ ...n
179
+ });
180
+ }
181
+ function ne({ className: e, ...n }) {
182
+ return /* @__PURE__ */ y(q, {
183
+ "data-slot": "alert-dialog-description",
184
+ className: t("text-muted-foreground text-sm/6", e),
185
+ ...n
186
+ });
187
+ }
188
+ //#endregion
189
+ export { $ as a, te as c, G as d, x as f, ee as i, Y as l, Q as n, Z as o, ne as r, X as s, J as t, W as u };
@@ -1,5 +1,4 @@
1
- import { i as e, r as t, t as n } from "./stored-language-B-tiWZU2.js";
2
- import { r } from "./translator-B9XjUDRu.js";
1
+ import { l as e, r as t, s as n, u as r } from "./translator-Caf-d96e.js";
3
2
  import { t as i } from "./_baseIsEqual-C6ksIHya.js";
4
3
  import { useMemo as a } from "react";
5
4
  import { asyncThunkCreator as o, buildCreateSlice as s } from "@reduxjs/toolkit";
@@ -84,8 +83,8 @@ var S = (e) => {
84
83
  if (Object.getPrototypeOf(e) !== Object.prototype && e.constructor) return e.constructor.name;
85
84
  }
86
85
  return t;
87
- }, C = ({ storageKey: i = t, language: a, translate: o = r } = {}) => {
88
- let s = () => typeof a == "function" ? a() : a ?? n(i, "en", e);
86
+ }, C = ({ storageKey: i = e, language: a, translate: o = t } = {}) => {
87
+ let s = () => typeof a == "function" ? a() : a ?? n(i, "en", r);
89
88
  return (e) => {
90
89
  let t = s(), n = (e, n) => o(e, n, t), r = (e, t) => {
91
90
  let r = n(e, t);
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { n as t, t as n } from "./dist-DVRQkaTK.js";
3
- import { n as r, r as i, t as a } from "./spinner-C5lObWXT.js";
3
+ import { n as r, r as i, t as a } from "./spinner-CAnpF3RK.js";
4
4
  import { a as o, i as s, n as c, o as l, s as u, t as d } from "./use-click-lock-BZYtTmVt.js";
5
5
  import { t as f } from "./is-production-GLw59WU8.js";
6
6
  import { t as p } from "./button-group-context-CaP0X5p_.js";
package/dist/charts.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { t as e } from "./ui.utils-CAnKTCw5.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { t as n } from "./warn-once-C_e47JM8.js";
4
- import { t as r } from "./button-7BuUCGRm.js";
5
- import { t as i } from "./use-material-translation-B5j3jZs7.js";
4
+ import { t as r } from "./button-DfS_amfQ.js";
5
+ import { t as i } from "./use-material-translation-C_1cWRzW.js";
6
6
  import { t as a } from "./use-ssr-media-query-C6M5m8sf.js";
7
7
  import { i as o, n as s, r as c, t as l } from "./util-4heV2LPI.js";
8
8
  import { t as u } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
9
- import { t as d } from "./chip-kQOrHlDX.js";
9
+ import { t as d } from "./chip-Cbndukko.js";
10
10
  import { c as f, d as p, f as m, i as h, o as g, p as _, s as v, t as y } from "./line-path-C5pZGC49.js";
11
11
  import { t as b } from "./live-status-BGPaN8r8.js";
12
12
  import { t as x } from "./linear-G97mfnKF.js";
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { r as t } from "./spinner-C5lObWXT.js";
2
+ import { r as t } from "./spinner-CAnpF3RK.js";
3
3
  import { s as n } from "./use-click-lock-BZYtTmVt.js";
4
- import { t as r } from "./use-material-translation-B5j3jZs7.js";
4
+ import { t as r } from "./use-material-translation-C_1cWRzW.js";
5
5
  import { t as i } from "./react-node-text-Crkpfpco.js";
6
6
  import { cloneElement as a, isValidElement as o } from "react";
7
7
  import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
@@ -1,14 +1,14 @@
1
1
  import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { a as n } from "./dist-lmHmz_bu.js";
4
- import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-CiobN1wi.js";
5
- import { a as c, i as l, n as u } from "./field-blur-context-DbJQZkEB.js";
6
- import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-ByvXcMHm.js";
4
+ import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-_SyVmSuy.js";
5
+ import { a as c, i as l, n as u } from "./field-blur-context-DPe5_Nv5.js";
6
+ import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-_ezD5B0r.js";
7
7
  import { t as g } from "./is-production-GLw59WU8.js";
8
- import { t as _ } from "./use-material-translation-B5j3jZs7.js";
9
- import { i as v, n as y, o as b, t as x } from "./code-language-items-rCPB0Xee.js";
10
- import { n as S, t as C } from "./escape-owner-r57kuPjn.js";
11
- import { t as w } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
8
+ import { t as _ } from "./use-material-translation-C_1cWRzW.js";
9
+ import { i as v, n as y, o as b, t as x } from "./code-language-items-andgHKrM.js";
10
+ import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
11
+ import { n as C, t as w } from "./escape-owner-DpaP0lm1.js";
12
12
  import { t as T } from "./skeleton-DSdtr2qc.js";
13
13
  import { t as E } from "./react-node-text-Crkpfpco.js";
14
14
  import D, { memo as O, useCallback as ee, useEffect as k, useId as A, useImperativeHandle as j, useMemo as M, useRef as N, useState as P } from "react";
@@ -975,7 +975,7 @@ function sn(e, t, r) {
975
975
  t
976
976
  ]);
977
977
  let o = (t) => {
978
- let n = e.current, r = t.nativeEvent.defaultPrevented && !S(t.nativeEvent);
978
+ let n = e.current, r = t.nativeEvent.defaultPrevented && !C(t.nativeEvent);
979
979
  !i || !n || r || n.contains(t.target) && (t.key === "Escape" ? (t.preventDefault(), a(!1)) : t.key === "Tab" && on(t, n));
980
980
  };
981
981
  return {
@@ -989,7 +989,7 @@ function sn(e, t, r) {
989
989
  tabIndex: -1
990
990
  },
991
991
  "data-fullscreen": i || void 0,
992
- [C]: i || void 0,
992
+ [w]: i || void 0,
993
993
  onKeyDown: o
994
994
  })
995
995
  };
@@ -1327,10 +1327,10 @@ function Pn() {
1327
1327
  }
1328
1328
  function Fn(e, t) {
1329
1329
  let n = M(() => jn(e, t), [e, t]), r = N(null), [i] = P(() => typeof document > "u" ? void 0 : Pn()), a = N(void 0);
1330
- return w(() => {
1330
+ return S(() => {
1331
1331
  let e = r.current;
1332
1332
  e && Mn(e, n, a.current), i && Nn(i, n, a.current), a.current = n;
1333
- }, [n, i]), w(() => {
1333
+ }, [n, i]), S(() => {
1334
1334
  if (i) return (r.current?.parentElement?.closest("[role=\"dialog\"]") ?? document.body).appendChild(i), () => i.remove();
1335
1335
  }, [i]), {
1336
1336
  scope: n,
@@ -1,14 +1,14 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { a as t } from "./dist-lmHmz_bu.js";
3
- import { d as n, r, t as i, u as a } from "./toolbar-items-ByvXcMHm.js";
4
- import { t as o } from "./use-material-translation-B5j3jZs7.js";
5
- import { i as s, n as c, o as l } from "./code-language-items-rCPB0Xee.js";
6
- import { r as u, t as d } from "./field-blur-DdvY0NQQ.js";
3
+ import { d as n, r, t as i, u as a } from "./toolbar-items-_ezD5B0r.js";
4
+ import { t as o } from "./use-material-translation-C_1cWRzW.js";
5
+ import { i as s, n as c, o as l } from "./code-language-items-andgHKrM.js";
6
+ import { r as u, t as d } from "./field-blur-DyOByjzw.js";
7
7
  import { t as f } from "./skeleton-DSdtr2qc.js";
8
8
  import { t as p } from "./live-status-BGPaN8r8.js";
9
9
  import { t as m } from "./use-mobile-BDro060N.js";
10
10
  import { t as h } from "./react-node-text-Crkpfpco.js";
11
- import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-Ckc9TTCM.js";
11
+ import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-B0tN8Ha_.js";
12
12
  import { useEffect as k, useRef as A, useState as j } from "react";
13
13
  import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
14
14
  import { getCspNonce as F } from "@nxgt/material-core/csp-nonce";
@@ -1,5 +1,5 @@
1
- import { d as e, f as t } from "./dropdown-menu-CiobN1wi.js";
2
- import { t as n } from "./use-material-translation-B5j3jZs7.js";
1
+ import { d as e, f as t } from "./dropdown-menu-_SyVmSuy.js";
2
+ import { t as n } from "./use-material-translation-C_1cWRzW.js";
3
3
  import { t as r } from "./live-status-BGPaN8r8.js";
4
4
  import { useEffect as i, useRef as a, useState as o } from "react";
5
5
  import { jsx as s } from "react/jsx-runtime";
@@ -8,7 +8,9 @@
8
8
  * follow a `--primary` set below :root. To theme the rail set
9
9
  * `--sidebar-active`, `--sidebar-active-hover` and
10
10
  * `--sidebar-active-foreground` (all three, or the first two and the
11
- * foreground); the derived colours are not declared here, on purpose. */
11
+ * foreground); the derived colours are not declared here, on purpose.
12
+ * `--sidebar-active-edge` recolours the start bar alone; unset, the bar is
13
+ * the foreground (`--sidebar-active-edge: gold` changes nothing else). */
12
14
  --nxgt-sidebar-active-share: 15%;
13
15
  /* Light: primary itself reads 4.5:1 on the page but not on its own 15 % pill
14
16
  * for every preset (corail 3.7:1), so the label is primary darkened to 85 %
@@ -71,4 +73,14 @@
71
73
  var(--nxgt-sidebar-active-c, c) h
72
74
  )
73
75
  );
76
+ --color-sidebar-active-edge: var(
77
+ --sidebar-active-edge,
78
+ var(
79
+ --sidebar-active-foreground,
80
+ oklch(
81
+ from var(--primary) var(--nxgt-sidebar-active-l, l)
82
+ var(--nxgt-sidebar-active-c, c) h
83
+ )
84
+ )
85
+ );
74
86
  }