@nxgt/material 3.83.0 → 3.84.1
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.
- package/CHANGELOG.md +30 -0
- package/README.md +2 -2
- package/dist/{alert-dialog-DXLJ4AZP.js → alert-dialog-1t6ULy5i.js} +1 -1
- package/dist/{async-slice-BfVokA46.js → async-slice-xyA9Uzct.js} +1 -1
- package/dist/{background-Q4Ek3rNy.js → background-DHjdFbNo.js} +86 -86
- package/dist/backgrounds.js +1 -1
- package/dist/{button-CSKUtMI3.js → button-DhiNGrdT.js} +1 -1
- package/dist/{calculator-Cv00UQgR.js → calculator-BcgxxScL.js} +10 -10
- package/dist/calculator-field.js +6 -6
- package/dist/{calculator-segment-CwnC2cV_.js → calculator-segment-C4WQAHcN.js} +1 -1
- package/dist/calculator.js +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-BGn0V6Pt.js → chip-m0_usuzd.js} +2 -2
- package/dist/{code-editor-B25-mWhb.js → code-editor-BgKFrcld.js} +4 -4
- package/dist/code-editor.js +4 -4
- package/dist/{code-language-items-oRjtO3qV.js → code-language-items-BWw17W9s.js} +2 -2
- package/dist/components/theme-tokens.css +3 -3
- package/dist/components/ui/collections/server-table/server-table-phone-row.css +12 -0
- package/dist/{components-C22jCW4C.js → components-BRJM9hd1.js} +10691 -10624
- package/dist/components.js +23 -23
- package/dist/{conversion-variant-wZd-G6xR.js → conversion-variant-DultZZQm.js} +3 -3
- package/dist/{currency-field-DizBTAat.js → currency-field-CPbaM7ay.js} +4 -4
- package/dist/{dialog-B-3s-oXt.js → dialog-DmlG9opW.js} +3 -3
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-C6rcYGB9.js → dropdown-menu-CDKev8dk.js} +1 -1
- package/dist/editor.js +7 -7
- package/dist/{empty-state-CSkghnD9.js → empty-state-C56000TB.js} +1 -1
- package/dist/{financial-variant-igpGRbGw.js → financial-variant-BYjQ690K.js} +5 -5
- package/dist/{hooks-k8_f3B0k.js → hooks-BTwLAy_A.js} +119 -83
- package/dist/hooks.js +3 -3
- package/dist/{hover-card-DuaVVKMb.js → hover-card-CDtW6utN.js} +1 -1
- package/dist/i18n.js +3 -3
- package/dist/{icon-badge-3ThP6EOl.js → icon-badge-ec7MmUGA.js} +1 -1
- package/dist/{icon-button-4PKlaI1g.js → icon-button-CG4aO8Gh.js} +1 -1
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar-context.d.ts +6 -1
- package/dist/lib/components/ui/widgets/event-calendar/event-calendar-shell.d.ts +1 -1
- package/dist/lib/components/ui/widgets/event-calendar/index.d.ts +1 -1
- package/dist/lib/components/ui/widgets/event-calendar/partials/event-preview-title.d.ts +6 -2
- package/dist/lib/components/ui/widgets/event-calendar/partials/event-preview.d.ts +3 -1
- package/dist/lib/components/ui/widgets/event-calendar/template.types.d.ts +5 -1
- package/dist/lib/components/ui/widgets/event-calendar/types.d.ts +20 -0
- package/dist/lib/components/ui/widgets/event-calendar/use-template-calendar.d.ts +3 -1
- package/dist/lib/hooks/index.d.ts +1 -0
- package/dist/lib/hooks/poll.d.ts +26 -0
- package/dist/lib/hooks/use-poll.d.ts +30 -0
- package/dist/lib/i18n/resources/en/en.d.ts +1 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +1 -0
- package/dist/lib/i18n/resources/fr/fr.d.ts +1 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +1 -0
- package/dist/lib/i18n/resources/resources.d.ts +2 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +30 -30
- package/dist/map.js +7 -7
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/{percent-field-QwU1l2Q4.js → percent-field-8_pILs15.js} +1 -1
- package/dist/{picker-surface-CiTycWgV.js → picker-surface-pyGv-Qh9.js} +4 -4
- package/dist/{popover-YmbzbKQG.js → popover-3EF4q2CT.js} +1 -1
- package/dist/{pos-types-BFrapNmx.js → pos-types-Dv2UxKSN.js} +1 -1
- package/dist/{pos-variant-CctfqieO.js → pos-variant-DJvtN9N8.js} +4 -4
- package/dist/print.js +1 -1
- package/dist/{programmer-variant-Dd0YOixn.js → programmer-variant-Bmcq2KzC.js} +2 -2
- package/dist/{public-CshR_aW7.js → public-BNebh4z0.js} +9 -9
- package/dist/{rich-code-block-BuJLDoBu.js → rich-code-block-DmX7d58S.js} +5 -5
- package/dist/{scientific-variant-CjErQxuZ.js → scientific-variant-DijUrpP8.js} +2 -2
- package/dist/{sortable-provider-DU2nvpFc.js → sortable-provider-Cnmt_gWu.js} +2 -2
- package/dist/{spinner-DH1mm8hH.js → spinner-C6LP2Rw8.js} +1 -1
- package/dist/{tabs-Um0SFyf1.js → tabs-Bj1zOe7-.js} +1 -1
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-C-Ih4uQU.js → theme-toggle-Cxku5iBP.js} +1 -1
- package/dist/{toolbar-items-BoEY5bkt.js → toolbar-items-CEIuSxU_.js} +4 -4
- package/dist/{translate-material-D4rn5UaQ.js → translate-material-DI3nmQ6I.js} +1 -1
- package/dist/{translator-CcEgQ-H7.js → translator-BstxG_hN.js} +177 -163
- package/dist/{use-chat-composer-DG9YkB4L.js → use-chat-composer-BqLkk_iH.js} +15 -15
- package/dist/{use-heading-spy-gDNtK1sU.js → use-heading-spy-nFyb9_KE.js} +4 -4
- package/dist/{use-material-translation-DYrfV_JJ.js → use-material-translation-1kCHtB0p.js} +1 -1
- package/dist/{use-return-focus-C_Qz_yTk.js → use-return-focus-Hv8rn55-.js} +1 -1
- package/docs/components/rich-widgets.md +22 -1
- package/docs/guides/helpers.md +40 -0
- package/docs/guides/theming.md +2 -2
- package/docs/previews/backgrounds-background-from-theme.webp +0 -0
- package/docs/previews/backgrounds-celestial.webp +0 -0
- package/docs/previews/backgrounds-geometry-more.webp +0 -0
- package/docs/previews/backgrounds-geometry.webp +0 -0
- package/docs/previews/backgrounds-icons.webp +0 -0
- package/docs/previews/backgrounds-illustrated-scenes.webp +0 -0
- package/docs/previews/backgrounds-light-more.webp +0 -0
- package/docs/previews/backgrounds-light.webp +0 -0
- package/docs/previews/backgrounds-material-more.webp +0 -0
- package/docs/previews/backgrounds-matrix.webp +0 -0
- package/docs/previews/backgrounds-moon.webp +0 -0
- package/docs/previews/backgrounds-motif-shapes.webp +0 -0
- package/docs/previews/backgrounds-motifs.webp +0 -0
- package/docs/previews/backgrounds-sky-overlay.webp +0 -0
- package/docs/roadmap.md +6 -0
- package/docs/troubleshooting.md +2 -2
- package/lib/components/theme-tokens.css +3 -3
- package/lib/components/ui/collections/server-table/server-table-phone-row.css +12 -0
- package/lib/themes/ambre.css +2 -2
- package/lib/themes/ardoise.css +2 -2
- package/lib/themes/bleumono.css +2 -2
- package/lib/themes/bluemoon.css +2 -2
- package/lib/themes/corail.css +2 -2
- package/lib/themes/foret.css +2 -2
- package/lib/themes/lavande.css +2 -2
- package/lib/themes/menthe.css +2 -2
- package/lib/themes/ocean.css +2 -2
- package/lib/themes/pink.css +2 -2
- package/lib/themes/prune.css +1 -1
- package/lib/themes/sable.css +2 -2
- package/lib/themes/slate.css +1 -1
- package/lib/themes/teal.css +2 -2
- package/package.json +4 -4
|
@@ -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-
|
|
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-C6LP2Rw8.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-
|
|
11
|
+
import { c as N, l as P, n as te, r as F, t as ne } from "./alert-dialog-1t6ULy5i.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-
|
|
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-CDKev8dk.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-
|
|
15
|
+
import { i as Ye, n as Xe, r as Ze, t as Qe } from "./popover-3EF4q2CT.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 { n as it, r as at, t as ot, u as st } from "./tabs-
|
|
18
|
-
import { a as ct, n as lt, o as ut, s as dt, v as ft, y as pt } from "./toolbar-items-
|
|
17
|
+
import { n as it, r as at, t as ot, u as st } from "./tabs-Bj1zOe7-.js";
|
|
18
|
+
import { a as ct, n as lt, o as ut, s as dt, v as ft, y as pt } from "./toolbar-items-CEIuSxU_.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-
|
|
24
|
-
import { a as Ct } from "./translator-
|
|
23
|
+
import { r as xt, t as St } from "./button-DhiNGrdT.js";
|
|
24
|
+
import { a as Ct } from "./translator-BstxG_hN.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-
|
|
28
|
-
import { t as R } from "./icon-button-
|
|
27
|
+
import { t as L } from "./use-material-translation-1kCHtB0p.js";
|
|
28
|
+
import { t as R } from "./icon-button-CG4aO8Gh.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,14 +36,14 @@ 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-
|
|
39
|
+
import { n as Wt, r as Gt, t as Kt } from "./chip-m0_usuzd.js";
|
|
40
40
|
import { a as qt, c as Jt, o as Yt, r as Xt, s as Zt, t as Qt } from "./input-CC2joTjB.js";
|
|
41
41
|
import { t as $t } from "./text-field-BAdY-kpO.js";
|
|
42
42
|
import { r as en } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
43
|
-
import { t as tn } from "./empty-state-
|
|
43
|
+
import { t as tn } from "./empty-state-C56000TB.js";
|
|
44
44
|
import { t as nn } from "./skeleton-DSdtr2qc.js";
|
|
45
|
-
import { l as rn, n as an, o as on, r as sn, s as cn, t as ln, u as un } from "./dialog-
|
|
46
|
-
import { t as dn } from "./icon-badge-
|
|
45
|
+
import { l as rn, n as an, o as on, r as sn, s as cn, t as ln, u as un } from "./dialog-DmlG9opW.js";
|
|
46
|
+
import { t as dn } from "./icon-badge-ec7MmUGA.js";
|
|
47
47
|
import { H as fn, V as pn, X as mn, bt as hn, it as gn, lt as _n, n as vn, t as yn, xt as bn, yt as xn } from "./dist-moutbfbd.js";
|
|
48
48
|
import { t as Sn } from "./markdown-Dw_uH7j7.js";
|
|
49
49
|
import { r as Cn, t as wn } from "./create-store-Dqp-PLLn.js";
|
|
@@ -11229,7 +11229,7 @@ var aS = (e = {}) => Cn({
|
|
|
11229
11229
|
let [{ default: t }, { lowlight: n }, { richCodeBlock: r }] = await Promise.all([
|
|
11230
11230
|
import("./dist-CRMFGjng.js"),
|
|
11231
11231
|
import("./lowlight-OtcjU2Sa.js"),
|
|
11232
|
-
import("./rich-code-block-
|
|
11232
|
+
import("./rich-code-block-DmX7d58S.js")
|
|
11233
11233
|
]);
|
|
11234
11234
|
return [r(t, {
|
|
11235
11235
|
lowlight: n,
|
|
@@ -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-
|
|
3
|
-
import { a as l } from "./button-
|
|
4
|
-
import { i as u } from "./translate-material-
|
|
5
|
-
import { t as d } from "./use-material-translation-
|
|
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-1t6ULy5i.js";
|
|
3
|
+
import { a as l } from "./button-DhiNGrdT.js";
|
|
4
|
+
import { i as u } from "./translate-material-DI3nmQ6I.js";
|
|
5
|
+
import { t as d } from "./use-material-translation-1kCHtB0p.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,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-
|
|
3
|
+
import { C as o, S as s, x as c } from "./spinner-C6LP2Rw8.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";
|
|
@@ -8,7 +8,7 @@ the app owns the data.
|
|
|
8
8
|
| --- | --- | --- |
|
|
9
9
|
| <img src="../previews/rich-widgets-chat-overview.webp" width="96" alt=""> | [Chat kit](#chat-kit) | Inbox, thread, grouped bubbles with receipts and replies, composer with quick replies, floating widget |
|
|
10
10
|
| <img src="../previews/rich-widgets-kanban.webp" width="96" alt=""> | [Kanban](#kanban) | Board with columns, swimlanes, WIP limits and drag-and-drop |
|
|
11
|
-
| <img src="../previews/rich-widgets-eventcalendar.webp" width="96" alt=""> | [EventCalendar](#eventcalendar) | Month / week / day / agenda calendar, a day view split by resource, a named time zone, phone to desktop |
|
|
11
|
+
| <img src="../previews/rich-widgets-eventcalendar.webp" width="96" alt=""> | [EventCalendar](#eventcalendar) | Month / week / day / agenda calendar, a day view split by resource, a named time zone, an event preview you can route to your app, phone to desktop |
|
|
12
12
|
| <img src="../previews/rich-widgets-native-charts-linechart.webp" width="96" alt=""> | [Charts](#charts) | Native SVG charts (line, area, bar, pie, donut, gauge, radial, funnel, heat map, radar, scatter, combo) with keyboard, summary and View data; the Nivo ones were removed in 3.0 |
|
|
13
13
|
| <img src="../previews/rich-widgets-drawing.webp" width="96" alt=""> | [Drawing](#drawing) | Vector drawing from a scene of plain data or JSX primitives: theme colours, accessible, focusable nodes, strict-CSP safe |
|
|
14
14
|
| <img src="../previews/rich-widgets-barcode.webp" width="96" alt=""> | [Barcode](#barcode) | Code 128 and Data Matrix as accessible SVG, themed and dark-aware, black on white in print, with `LabelSheet` for a printed sheet of labels |
|
|
@@ -289,11 +289,28 @@ function Schedule() {
|
|
|
289
289
|
}
|
|
290
290
|
```
|
|
291
291
|
|
|
292
|
+
To edit and delete in your own dialog instead of the built-in inline fields:
|
|
293
|
+
|
|
294
|
+
```tsx
|
|
295
|
+
<EventCalendar
|
|
296
|
+
events={events}
|
|
297
|
+
onEventsChange={setEvents}
|
|
298
|
+
previewFields={[]}
|
|
299
|
+
onEventEdit={(e) => openEditor(e.id)}
|
|
300
|
+
onEventDelete={(e) => confirmThenRemove(e.id)}
|
|
301
|
+
/>
|
|
302
|
+
```
|
|
303
|
+
|
|
292
304
|
| Prop | Type | Default | Effect |
|
|
293
305
|
| --- | --- | --- | --- |
|
|
294
306
|
| `events` / `defaultEvents` | `CalendarEvent[]` | — | controlled / uncontrolled events (ISO `start` / `end`) |
|
|
295
307
|
| `onChange` | `(change: EventCalendarChange) => void` | — | after a drag or resize, with the previous event |
|
|
296
308
|
| `onSlotClick` | `(slot: EventCalendarSlot) => void` | — | click on an empty slot or day — create an event there |
|
|
309
|
+
| `onEventClick` | `(event: CalendarEvent) => void` | — | an event was clicked; it runs even with `onSlotClick` set (an event click never reports a slot) |
|
|
310
|
+
| `eventPreview` | `boolean` | `true` | `false` skips the preview popover, so `onEventClick` alone handles the click |
|
|
311
|
+
| `previewFields` | `EventCalendarPreviewField[]` | all three | the fields the preview edits in place (`'title' \| 'color' \| 'description'`); `[]` keeps the time range and the actions |
|
|
312
|
+
| `onEventEdit` | `(event: CalendarEvent) => void` | — | adds an Edit button to the preview; the app opens its own editor; hidden when the calendar or the event is `disabled` |
|
|
313
|
+
| `onEventDelete` | `(event: CalendarEvent) => void` | — | the preview's delete button calls this instead of the built-in confirmation and removal; the app confirms and deletes; hidden when the calendar or the event is `disabled`, so it never runs for those |
|
|
297
314
|
| `view` / `defaultView` | `'month' \| 'week' \| 'workweek' \| 'day' \| 'agenda'` | `'month'` | the visible view |
|
|
298
315
|
| `date` / `defaultDate` | `string` | today | the date the view is centred on |
|
|
299
316
|
| `startHour` / `endHour` | `number` | `0` / `24` | hours shown in the time grids |
|
|
@@ -425,6 +442,10 @@ function Timetable() {
|
|
|
425
442
|
| `onEventsChange` | `(events: EventCalendarTemplateEvent[]) => void` | — | the whole list after a move, a resize, an edit or a delete |
|
|
426
443
|
| `onChange` | `(change: EventCalendarTemplateChange) => void` | — | `{ events, event, previous }` after a move, a resize or an edit |
|
|
427
444
|
| `onEventClick` | `(event: EventCalendarTemplateEvent) => void` | — | an event was clicked |
|
|
445
|
+
| `onEventEdit` | `(event: EventCalendarTemplateEvent) => void` | — | adds an Edit button to the preview and receives the `EventCalendarTemplateEvent`; both buttons are hidden when the calendar or the event is `disabled` |
|
|
446
|
+
| `onEventDelete` | `(event: EventCalendarTemplateEvent) => void` | — | the Delete button calls this with the `EventCalendarTemplateEvent`, skipping the built-in confirmation and removal; both buttons are hidden when the calendar or the event is `disabled` |
|
|
447
|
+
| `eventPreview` | `boolean` | `true` | `false` skips the preview popover; see the dated table |
|
|
448
|
+
| `previewFields` | `EventCalendarPreviewField[]` | all three | the fields the preview edits (`'title' \| 'color' \| 'description'`); see the dated table |
|
|
428
449
|
| `onSlotClick` | `(slot: EventCalendarTemplateSlot) => void` | — | `{ weekday, start, end, lane? }` of the free slot clicked or dragged over; `lane` is the one picked in the switch |
|
|
429
450
|
| `view` / `defaultView` / `onViewChange` | `'week' \| 'workweek'` | `'week'` | the visible view |
|
|
430
451
|
| `renderEvent` | `(event: EventCalendarTemplateEvent) => ReactNode` | — | replaces how an event is drawn |
|
package/docs/guides/helpers.md
CHANGED
|
@@ -142,6 +142,7 @@ Vue: the Redux helpers are Pinia store factories: `defineLocalStore`
|
|
|
142
142
|
| `useSubmitOnce(busy?)` | One submit in flight: wraps a submit handler so a double click or a second Enter is dropped until the request ends (the handler's promise, or `busy` back to false). See [below](#usesubmitonce). |
|
|
143
143
|
| `useDrafts<T>(storageKey, { serialize?, parse?, storage? })`, `clearDrafts(storageKey, storage?)` | Unsent values kept by key in `sessionStorage`: `{ get, set, drop, clear, keys, loaded }`. Read after the first render (no hydration mismatch), storage errors swallowed, `drop(key)` once saved; `clearDrafts` empties a store key without a hook (sign-out). See [below](#usedrafts). |
|
|
144
144
|
| `useUnsavedGuard(dirty, { block, … })`, `useDiscardGuard(dirty)`, `useReactRouterBlock` | Stop losing a dirty form: a "Leave without saving?" dialog on in-app navigation and on closing a dialog form, plus the browser's own `beforeunload` prompt. See [below](#useunsavedguard). |
|
|
145
|
+
| `usePoll({ ms, enabled?, read, onError? })`, `startPoll({ ms, read, active?, visible?, onError? })` | Reads again every `ms` while `enabled` and the page is visible, one read at a time; the timer is cleared on unmount and when `enabled` turns false. `startPoll` is the framework-free loop, and returns its stop. See [below](#usepoll). |
|
|
145
146
|
| `createSubmitGuard()`, `busySettler(guard)` | The framework-free guard behind `useSubmitOnce` (`@nxgt/material-core/submit-guard`): `{ once(run, { settleSync? }), settle(run?), pendingRun() }`, and the function that settles it from a busy flag. |
|
|
146
147
|
|
|
147
148
|
```tsx
|
|
@@ -436,6 +437,45 @@ drafts keep what was typed, the guard asks before it is dropped; they combine.
|
|
|
436
437
|
Storybook: `Guides/Hooks/useUnsavedGuard` (leave, stay, release after save,
|
|
437
438
|
query change, flush, dialog form). No Vue twin yet (`vue` issue #2019).
|
|
438
439
|
|
|
440
|
+
### `usePoll`
|
|
441
|
+
|
|
442
|
+
Several screens re-read a resource every few seconds while something is under
|
|
443
|
+
way (a sync, a pending state). The hook owns the interval, the visibility check
|
|
444
|
+
and the single-flight guard.
|
|
445
|
+
|
|
446
|
+
```tsx
|
|
447
|
+
import { usePoll } from '@nxgt/material/hooks';
|
|
448
|
+
|
|
449
|
+
export function JobStatus({ job, reload }: { job: Job; reload: () => Promise<void> }) {
|
|
450
|
+
usePoll({
|
|
451
|
+
ms: 3000,
|
|
452
|
+
enabled: job.status === 'running',
|
|
453
|
+
read: reload,
|
|
454
|
+
onError: (error) => console.warn('poll failed', error),
|
|
455
|
+
});
|
|
456
|
+
return <p>{job.status}</p>;
|
|
457
|
+
}
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
- **Visible pages only.** A tick that falls while
|
|
461
|
+
`document.visibilityState` is not `visible` is skipped, not queued, so
|
|
462
|
+
returning to the tab waits for the next tick.
|
|
463
|
+
- **Never two reads at once.** A tick that falls while `read` (its promise) is
|
|
464
|
+
still running is skipped, also after a restart (a new `ms`, `enabled` back on).
|
|
465
|
+
- **Stops cleanly.** The timer is cleared on unmount and when `enabled` turns
|
|
466
|
+
false; turning it back on starts a new interval.
|
|
467
|
+
- **First read after `ms`.** Call `read` yourself for an immediate one.
|
|
468
|
+
- **Latest `read`.** `read` and `onError` may be new on every render; the
|
|
469
|
+
interval does not restart. Only `ms` and `enabled` restart it.
|
|
470
|
+
- **Errors.** A read that throws or rejects is passed to `onError` and the poll
|
|
471
|
+
goes on; without `onError` it is ignored.
|
|
472
|
+
- **Server.** Nothing runs during render or on the server.
|
|
473
|
+
- **Outside React**, `startPoll({ ms, read, active?, visible? })` is the same
|
|
474
|
+
loop; `active()` and `visible()` are checked at each tick, and the call
|
|
475
|
+
returns the function that stops it.
|
|
476
|
+
|
|
477
|
+
No Vue twin yet (`vue` issue #2498).
|
|
478
|
+
|
|
439
479
|
## `@nxgt/material/i18n`
|
|
440
480
|
|
|
441
481
|
| Export | What it does |
|
package/docs/guides/theming.md
CHANGED
|
@@ -68,7 +68,7 @@ at the top are needed is in [getting started](../getting-started.md#styles).
|
|
|
68
68
|
| `--accent`, `--accent-foreground` | `bg-accent`, … | hover surfaces |
|
|
69
69
|
| `--nxgt-accent` | `[--nxgt-accent:…]` | the mark colour of the selection controls: the fill, handle, state layer and stop dots of `Slider`, the on state of `Switch`, the box and dot of `Checkbox` and `Radio`. It defaults to `--primary` (`--primary-text` in dark) and is set per control, so override it on the control itself, not on `:root` |
|
|
70
70
|
| `--error`, `--success`, `--info`, `--warning` (+ `-foreground`) | `bg-error`, `text-success`, … | the status colours of `Button`, `Alert`, `Badge`, toasts |
|
|
71
|
-
| `--primary-text` | `text-primary-text` | primary drawn as text or an icon on a page, card or popover surface: `Typography tone="primary"`, links, the `Alert` primary icon, selected labels. In light, `--primary` mixed toward black: 96 % at most, solved lower on a tinted page so a tonal Button label on a striped row, or straight on the page ground, reaches 4.6:1 (
|
|
71
|
+
| `--primary-text` | `text-primary-text` | primary drawn as text or an icon on a page, card or popover surface: `Typography tone="primary"`, links, the `Alert` primary icon, selected labels. In light, `--primary` mixed toward black: 96 % at most, solved lower on a tinted page so a tonal Button label on a striped, selected or header row, or straight on the page ground, reaches 4.6:1 (79 % on teal, 76 % on corail; read the shipped theme file for each preset); in dark, `--primary` mixed 60 % with white (`color-mix(in oklab, var(--primary) 40%, white)`), well over 4.5:1 on `--background` and `--card` |
|
|
72
72
|
| `--primary-indicator` | `bg-primary-indicator`, `border-primary-indicator`, `ring-primary-indicator`, `stroke-primary-indicator` | primary drawn as a non-text mark that carries a state (WCAG 1.4.11, 3:1): an active bar or dot, a selected or focused border, a ring, a spinner arc. Equal to `--primary` in light; in dark, `--primary` mixed 25 % with white (`color-mix(in oklab, var(--primary) 75%, white)`), 4.8:1 on `--background`, 4.5:1 on `--card`, 4.2:1 on `--muted` (`--primary` itself gives 2.7, 2.5 and 2.3:1) |
|
|
73
73
|
| `--error-text` | `text-error-text` | error drawn as text: field messages, `HelperText` in its error state, form and dialog errors, `variant="error"` menu items |
|
|
74
74
|
| `--destructive` | `bg-destructive`, `text-destructive` | deprecated alias of `--error`: the light theme sets it to `var(--error)`, the dark theme keeps its own value; use `--error` |
|
|
@@ -1012,7 +1012,7 @@ override on the root, or use a [theme zone](#themes), which re-declares them.
|
|
|
1012
1012
|
for the same reason: the brand colour is a dark fill (it keeps near-white text
|
|
1013
1013
|
readable on a button) and reads at only about 2:1 as text on the dark surfaces.
|
|
1014
1014
|
The light value is `color-mix(in oklab, var(--primary) 96%, black)` at most (primary
|
|
1015
|
-
4 % toward black, 7.9:1 on the white page; the share is solved per theme and drops when a tinted page would leave a tonal Button label under 4.6:1 on a striped row or on the page ground, to
|
|
1015
|
+
4 % toward black, 7.9:1 on the white page; the share is solved per theme and drops when a tinted page would leave a tonal Button label under 4.6:1 on a striped, selected or header row or on the page ground, to 79 % on teal); the dark one is
|
|
1016
1016
|
`color-mix(in oklab, var(--primary) 40%, white)` (primary mixed 60 % with
|
|
1017
1017
|
white, the recipe of the tonal `Button` labels). `Typography tone="primary"`,
|
|
1018
1018
|
the `Alert` primary icon, links, selected labels and the other primary text of
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -6,6 +6,12 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
6
6
|
|
|
7
7
|
## Now
|
|
8
8
|
|
|
9
|
+
- **App shell header refresh** — `AppHeader` and the look `TopAppBar`
|
|
10
|
+
shares sit flat on the page ground and tint when content scrolls under
|
|
11
|
+
them; the actions are grouped in a pill, the search is a pill field (an
|
|
12
|
+
icon on a phone), and the menu button is a ghost icon button. The new look
|
|
13
|
+
is the default in a minor, with no API change; an A/B preview comes first
|
|
14
|
+
([#2503](https://github.com/softistx/nxgt-material/issues/2503)).
|
|
9
15
|
- **Calculator** — `@nxgt/material/calculator` is an exact-decimal calculator
|
|
10
16
|
(Standard, Scientific, point of sale, Financial, Conversion, Programmer;
|
|
11
17
|
every variant but Standard loads on demand)
|
package/docs/troubleshooting.md
CHANGED
|
@@ -1182,7 +1182,7 @@ given, `leading` replaces `icon` (and warns in development).
|
|
|
1182
1182
|
**When:** axe (or Lighthouse) reports `color-contrast` on a `tonal` or
|
|
1183
1183
|
`outlined` `Button` or `IconButton` (`primary` in the dark theme, `error`,
|
|
1184
1184
|
`warning` and `success`), at rest or hovered, focused or pressed; on the
|
|
1185
|
-
subtitle of a selected `ListTile`; or on a `Badge` link while it is hovered.
|
|
1185
|
+
subtitle of a selected `ListTile`; or on a `Badge` link while it is hovered; or on a tonal primary `Button` in a selected `Table` row or a table header cell (light, 4.1 to 4.4:1 before the share of `--primary-text` was solved against those surfaces, #2495).
|
|
1186
1186
|
**Why:** those variants drew their text in the token itself, and some tokens
|
|
1187
1187
|
do not reach 4.5:1 as text on the page and on their own tint: the dark
|
|
1188
1188
|
`--primary` is a dark indigo (2.2:1 on `--card`), the light `--error` gave
|
|
@@ -1245,7 +1245,7 @@ on the page; the catalogue's own primary text passes.
|
|
|
1245
1245
|
**Why:** it is drawn with `text-primary`, the fill colour. The brand colour is
|
|
1246
1246
|
dark so that near-white text reads on it, which makes it too dark to read as
|
|
1247
1247
|
text on the dark surfaces. Primary text has its own token, `--primary-text`:
|
|
1248
|
-
`--primary` mixed toward black in light (96 % at most, solved per theme), `--primary` mixed 60 % with white in dark.
|
|
1248
|
+
`--primary` mixed toward black in light (96 % at most, solved per theme, lower when a tonal label sits on a tinted row, selected row or header), `--primary` mixed 60 % with white in dark.
|
|
1249
1249
|
**Fix:** draw primary text with `text-primary-text`; keep `text-primary` for
|
|
1250
1250
|
fills, borders and rings:
|
|
1251
1251
|
|
|
@@ -21,9 +21,9 @@
|
|
|
21
21
|
--primary: oklch(46% 0.1135 276.35);
|
|
22
22
|
--primary-foreground: oklch(0.984 0.003 247.858);
|
|
23
23
|
/* Primary drawn as text or an icon on a normal surface (`text-primary-text`):
|
|
24
|
-
the colour mixed
|
|
25
|
-
the
|
|
26
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
24
|
+
the colour mixed 10 % toward black in light, which keeps it above 4.5:1 on
|
|
25
|
+
the page, a Card and the tinted row, header and ground surfaces a tonal Button label sits on; the dark theme lifts it. */
|
|
26
|
+
--primary-text: color-mix(in oklab, var(--primary) 90%, black);
|
|
27
27
|
/* Primary drawn as a non-text mark (WCAG 1.4.11, 3:1): an indicator bar or dot,
|
|
28
28
|
a selected or focused border, a ring, a spinner arc, a progress fill
|
|
29
29
|
(`bg-primary-indicator`, `border-primary-indicator`...). Light is --primary;
|
|
@@ -184,6 +184,18 @@
|
|
|
184
184
|
min-height: 2.75rem;
|
|
185
185
|
}
|
|
186
186
|
}
|
|
187
|
+
/* Nothing to show (#2497): no select-all, no sort, no "Filters" trigger, no
|
|
188
|
+
* actions and no bulk bar leave both slots empty, and the row would be an
|
|
189
|
+
* empty 40px gap under the filter bar. Any control fills a slot, and the row
|
|
190
|
+
* is back. */
|
|
191
|
+
[data-slot="server-table-phone-row"]:has(
|
|
192
|
+
> [data-slot="server-table-phone-row-start"]:empty
|
|
193
|
+
):has(
|
|
194
|
+
> [data-slot="server-table-phone-row-end"]
|
|
195
|
+
> [data-slot="server-table-phone-sort"]:only-child:empty
|
|
196
|
+
) {
|
|
197
|
+
display: none;
|
|
198
|
+
}
|
|
187
199
|
@media (pointer: coarse) {
|
|
188
200
|
/* The 32px bulk buttons reach 44px with an invisible 6px margin: a gap of
|
|
189
201
|
* 12px keeps neighbours from taking each other's edge. */
|
package/lib/themes/ambre.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "ambre", generated.
|
|
2
2
|
* Seeds: primary oklch(0.52 0.13 48), secondary oklch(0.5 0.09 95), tertiary oklch(0.5 0.14 350), neutral hue 65, tint 0.85.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* hue-near-status: The primary's hue 48 is 14° from warning (62): they may read alike. Keep an icon and a word with every status.
|
|
5
5
|
*/
|
|
6
6
|
[data-nxgt-theme="ambre"] {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
--popover-foreground: oklch(0.227 0.0145 65);
|
|
16
16
|
--primary: oklch(0.52 0.13 48);
|
|
17
17
|
--primary-foreground: oklch(0.984 0.003 65);
|
|
18
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
18
|
+
--primary-text: color-mix(in oklab, var(--primary) 82%, black);
|
|
19
19
|
--primary-indicator: var(--primary);
|
|
20
20
|
--secondary: oklch(0.5 0.09 95);
|
|
21
21
|
--secondary-foreground: oklch(0.984 0.003 65);
|
package/lib/themes/ardoise.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "ardoise", generated.
|
|
2
2
|
* Seeds: primary oklch(0.45 0.065 252), secondary oklch(0.48 0.05 215), tertiary oklch(0.48 0.1 290), neutral hue 250, tint 0.7.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="ardoise"] {
|
|
6
6
|
--radius: 0.375rem;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
--popover-foreground: oklch(0.227 0.0119 250);
|
|
15
15
|
--primary: oklch(0.45 0.065 252);
|
|
16
16
|
--primary-foreground: oklch(0.984 0.003 250);
|
|
17
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
17
|
+
--primary-text: color-mix(in oklab, var(--primary) 91%, black);
|
|
18
18
|
--primary-indicator: var(--primary);
|
|
19
19
|
--secondary: oklch(0.48 0.05 215);
|
|
20
20
|
--secondary-foreground: oklch(0.984 0.003 250);
|
package/lib/themes/bleumono.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "bleumono", generated.
|
|
2
2
|
* Seeds: primary oklch(0.46 0.13 255), secondary oklch(0.55 0.06 255), tertiary oklch(0.38 0.17 255), neutral hue 255, tint 1.1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* lightness-moved: secondary: lightness 0.550 to 0.520 for AA.
|
|
5
5
|
* chroma-lowered: tertiary: chroma 0.170 to 0.125 (lowered to fit sRGB or AA).
|
|
6
6
|
* hue-near-status: The primary's hue 255 is 0° from info (254.624): they may read alike. Keep an icon and a word with every status.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.0187 255);
|
|
18
18
|
--primary: oklch(0.46 0.13 255);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 255);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 89%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.52 0.06 255);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 255);
|
package/lib/themes/bluemoon.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "bluemoon", generated.
|
|
2
2
|
* Seeds: primary oklch(0.45 0.12 265), secondary oklch(0.55 0.02 250), tertiary oklch(0.62 0.08 290), neutral hue 265, tint 1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* lightness-moved: secondary: lightness 0.550 to 0.520 for AA.
|
|
5
5
|
* lightness-moved: tertiary: lightness 0.620 to 0.563 for AA.
|
|
6
6
|
* hue-near-status: The primary's hue 265 is 10° from info (254.624): they may read alike. Keep an icon and a word with every status.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.017 265);
|
|
18
18
|
--primary: oklch(0.45 0.12 265);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 265);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 91%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.52 0.02 250);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 265);
|
package/lib/themes/corail.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "corail", generated.
|
|
2
2
|
* Seeds: primary oklch(0.58 0.17 35), secondary oklch(0.52 0.1 70), tertiary oklch(0.5 0.1 200), neutral hue 30, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* lightness-moved: primary: lightness 0.580 to 0.575 for AA.
|
|
5
5
|
* chroma-lowered: tertiary: chroma 0.100 to 0.085 (lowered to fit sRGB or AA).
|
|
6
6
|
* hue-near-status: The primary's hue 35 is 8° from error (27.325): they may read alike. Keep an icon and a word with every status.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.0136 30);
|
|
18
18
|
--primary: oklch(0.575 0.17 35);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 30);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 76%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.52 0.1 70);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 30);
|
package/lib/themes/foret.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "foret", generated.
|
|
2
2
|
* Seeds: primary oklch(0.48 0.1 152), secondary oklch(0.5 0.08 118), tertiary oklch(0.5 0.1 55), neutral hue 140, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="foret"] {
|
|
6
6
|
--radius: 0.5rem;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
--popover-foreground: oklch(0.227 0.0136 140);
|
|
15
15
|
--primary: oklch(0.48 0.1 152);
|
|
16
16
|
--primary-foreground: oklch(0.984 0.003 140);
|
|
17
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
17
|
+
--primary-text: color-mix(in oklab, var(--primary) 85%, black);
|
|
18
18
|
--primary-indicator: var(--primary);
|
|
19
19
|
--secondary: oklch(0.5 0.08 118);
|
|
20
20
|
--secondary-foreground: oklch(0.984 0.003 140);
|
package/lib/themes/lavande.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "lavande", generated.
|
|
2
2
|
* Seeds: primary oklch(46% 0.1135 276.35), secondary oklch(48% 0.1135 245.65), tertiary oklch(45.91% 0.1864 310.75), neutral hue 292, tint 1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="lavande"] {
|
|
6
6
|
--radius: 0.625rem;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
--popover-foreground: oklch(0.227 0.017 290);
|
|
15
15
|
--primary: oklch(0.46 0.1135 276.35);
|
|
16
16
|
--primary-foreground: oklch(0.984 0.003 247.858);
|
|
17
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
17
|
+
--primary-text: color-mix(in oklab, var(--primary) 90%, black);
|
|
18
18
|
--primary-indicator: var(--primary);
|
|
19
19
|
--secondary: oklch(0.48 0.1135 245.65);
|
|
20
20
|
--secondary-foreground: oklch(0.984 0.003 247.858);
|
package/lib/themes/menthe.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "menthe", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.105 168), secondary oklch(0.5 0.09 205), tertiary oklch(0.52 0.11 120), neutral hue 170, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: primary: chroma 0.105 to 0.101 (lowered to fit sRGB or AA).
|
|
5
5
|
* chroma-lowered: secondary: chroma 0.090 to 0.085 (lowered to fit sRGB or AA).
|
|
6
6
|
* hue-near-status: The primary's hue 168 is 17° from success (184.704): they may read alike. Keep an icon and a word with every status.
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.0136 170);
|
|
18
18
|
--primary: oklch(0.5 0.1013 168);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 170);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 81%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.5 0.0854 205);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 170);
|
package/lib/themes/ocean.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "ocean", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.12 228), secondary oklch(0.52 0.09 192), tertiary oklch(0.5 0.13 268), neutral hue 230, tint 0.9.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: primary: chroma 0.120 to 0.098 (lowered to fit sRGB or AA).
|
|
5
5
|
* lightness-moved: secondary: lightness 0.520 to 0.505 for AA.
|
|
6
6
|
* chroma-lowered: secondary: chroma 0.090 to 0.087 (lowered to fit sRGB or AA).
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
--popover-foreground: oklch(0.227 0.0153 230);
|
|
18
18
|
--primary: oklch(0.5 0.0976 228);
|
|
19
19
|
--primary-foreground: oklch(0.984 0.003 230);
|
|
20
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
20
|
+
--primary-text: color-mix(in oklab, var(--primary) 82%, black);
|
|
21
21
|
--primary-indicator: var(--primary);
|
|
22
22
|
--secondary: oklch(0.505 0.0867 192);
|
|
23
23
|
--secondary-foreground: oklch(0.984 0.003 230);
|
package/lib/themes/pink.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "pink", generated.
|
|
2
2
|
* Seeds: primary oklch(0.55 0.2 345), secondary oklch(0.5 0.14 320), tertiary oklch(0.5 0.1 200), neutral hue 345, tint 0.7.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: tertiary: chroma 0.100 to 0.085 (lowered to fit sRGB or AA).
|
|
5
5
|
*/
|
|
6
6
|
[data-nxgt-theme="pink"] {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
--popover-foreground: oklch(0.227 0.0119 345);
|
|
16
16
|
--primary: oklch(0.55 0.2 345);
|
|
17
17
|
--primary-foreground: oklch(0.984 0.003 345);
|
|
18
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
18
|
+
--primary-text: color-mix(in oklab, var(--primary) 79%, black);
|
|
19
19
|
--primary-indicator: var(--primary);
|
|
20
20
|
--secondary: oklch(0.5 0.14 320);
|
|
21
21
|
--secondary-foreground: oklch(0.984 0.003 345);
|
package/lib/themes/prune.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "prune", generated.
|
|
2
2
|
* Seeds: primary oklch(0.42 0.15 330), secondary oklch(0.5 0.1 355), tertiary oklch(0.55 0.1 85), neutral hue 330, tint 1.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="prune"] {
|
|
6
6
|
--radius: 0.5rem;
|
package/lib/themes/sable.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "sable", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.06 70), secondary oklch(0.5 0.05 45), tertiary oklch(0.5 0.07 150), neutral hue 75, tint 0.5.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="sable"] {
|
|
6
6
|
--radius: 0.5rem;
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
--popover-foreground: oklch(0.227 0.0085 75);
|
|
15
15
|
--primary: oklch(0.5 0.06 70);
|
|
16
16
|
--primary-foreground: oklch(0.984 0.003 75);
|
|
17
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
17
|
+
--primary-text: color-mix(in oklab, var(--primary) 85%, black);
|
|
18
18
|
--primary-indicator: var(--primary);
|
|
19
19
|
--secondary: oklch(0.5 0.05 45);
|
|
20
20
|
--secondary-foreground: oklch(0.984 0.003 75);
|
package/lib/themes/slate.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "slate", generated.
|
|
2
2
|
* Seeds: primary oklch(0.4 0.025 258), secondary oklch(0.48 0.02 230), tertiary oklch(0.46 0.045 275), neutral hue 258, tint 0.35.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
*/
|
|
5
5
|
[data-nxgt-theme="slate"] {
|
|
6
6
|
--radius: 0.25rem;
|
package/lib/themes/teal.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/* Theme "teal", generated.
|
|
2
2
|
* Seeds: primary oklch(0.5 0.105 185), secondary oklch(0.52 0.09 215), tertiary oklch(0.52 0.12 60), neutral hue 190, tint 0.8.
|
|
3
|
-
* Contrast:
|
|
3
|
+
* Contrast: 69 pairs, 0 failing.
|
|
4
4
|
* chroma-lowered: primary: chroma 0.105 to 0.088 (lowered to fit sRGB or AA).
|
|
5
5
|
* lightness-moved: secondary: lightness 0.520 to 0.490 for AA.
|
|
6
6
|
* chroma-lowered: secondary: chroma 0.090 to 0.087 (lowered to fit sRGB or AA).
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
--popover-foreground: oklch(0.227 0.0136 190);
|
|
20
20
|
--primary: oklch(0.5 0.0881 185);
|
|
21
21
|
--primary-foreground: oklch(0.984 0.003 190);
|
|
22
|
-
--primary-text: color-mix(in oklab, var(--primary)
|
|
22
|
+
--primary-text: color-mix(in oklab, var(--primary) 79%, black);
|
|
23
23
|
--primary-indicator: var(--primary);
|
|
24
24
|
--secondary: oklch(0.49 0.0866 215);
|
|
25
25
|
--secondary-foreground: oklch(0.984 0.003 190);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxgt/material",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.84.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"email": "stevegires@gmail.com"
|
|
@@ -390,7 +390,7 @@
|
|
|
390
390
|
"docs:previews": "rm -rf node_modules/.cache/nxgt-preview-free/missing && NXGT_PREVIEW_FREE=1 vitest run --project previews && bun .storybook/preview-free-report.ts"
|
|
391
391
|
},
|
|
392
392
|
"dependencies": {
|
|
393
|
-
"@nxgt/material-core": "^0.50.
|
|
393
|
+
"@nxgt/material-core": "^0.50.1",
|
|
394
394
|
"@base-ui/react": "^1.6.0",
|
|
395
395
|
"@dnd-kit/core": "^6.3.1",
|
|
396
396
|
"@dnd-kit/sortable": "^10.0.0",
|
|
@@ -398,7 +398,7 @@
|
|
|
398
398
|
"@fortawesome/fontawesome-common-types": "7.3.1",
|
|
399
399
|
"@hookform/resolvers": "^5.4.0",
|
|
400
400
|
"@monaco-editor/react": "^4.7.0",
|
|
401
|
-
"@tanstack/react-virtual": "3.14.
|
|
401
|
+
"@tanstack/react-virtual": "3.14.24",
|
|
402
402
|
"@tiptap/core": "^3.31.3",
|
|
403
403
|
"@tiptap/extension-character-count": "^3.31.3",
|
|
404
404
|
"@tiptap/extension-code-block": "^3.31.3",
|
|
@@ -443,7 +443,7 @@
|
|
|
443
443
|
"highlight.js": "^11.11.1",
|
|
444
444
|
"immer": "^11.1.15",
|
|
445
445
|
"input-otp": "^1.4.2",
|
|
446
|
-
"intl-messageformat": "^
|
|
446
|
+
"intl-messageformat": "^12.1.4",
|
|
447
447
|
"katex": "^0.18.7",
|
|
448
448
|
"libphonenumber-js": "^1.13.12",
|
|
449
449
|
"lodash-es": "^4.18.1",
|