@nxgt/material 3.53.0 → 3.55.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.
- package/CHANGELOG.md +22 -0
- package/README.md +1 -0
- package/dist/{async-slice-DDSsekfm.js → async-slice-yhXT9cml.js} +2 -2
- package/dist/{button-Ct8DSLVv.js → button-CD7f4KFL.js} +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-BzoNsd-W.js → chip-Cl7Wm8Pn.js} +2 -2
- package/dist/{code-editor-DsLQeiZc.js → code-editor-tOhXy6Qo.js} +6 -6
- package/dist/code-editor.js +5 -5
- package/dist/{code-language-items-4zXlIEZ0.js → code-language-items-BxlY6onk.js} +2 -2
- package/dist/components/components.css +4 -0
- package/dist/components/theme-tokens.css +19 -15
- package/dist/components/ui/display/seat-ring/seat-ring-index.css +125 -0
- package/dist/components/ui/display/seat-ring/seat-ring-ring.css +87 -0
- package/dist/components/ui/display/seat-ring/seat-ring.css +139 -0
- package/dist/components/ui/overlays/dialog/dialog.css +2 -1
- package/dist/components/ui/overlays/popover/popover.css +3 -2
- package/dist/{components-DZPMvc1w.js → components-B58ZWZYR.js} +15361 -15154
- package/dist/components.js +26 -26
- package/dist/{dialog-DwPmwmA3.js → dialog-BzfHcRo6.js} +4 -4
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-CDN6Nqx6.js → dropdown-menu-DUZF4xAJ.js} +1 -1
- package/dist/editor.js +9 -9
- package/dist/{empty-state-Bb9W9did.js → empty-state-D9o2id1p.js} +2 -2
- package/dist/{escape-owner-DI_lg2ID.js → escape-owner-BYs2_7T5.js} +1 -1
- package/dist/{field-blur-context-Dg1nwWOV.js → field-blur-context-ZsK8OTNg.js} +1 -1
- package/dist/{field-blur-BcJH8H9B.js → field-blur-r1tHwqdF.js} +1 -1
- package/dist/hooks.js +2 -2
- package/dist/{hover-card-Qse4gnop.js → hover-card-NfF8taLj.js} +2 -2
- package/dist/{i18n-provider-DlVPS58N.js → i18n-provider-TQAEPlJ5.js} +1 -1
- package/dist/i18n.js +5 -5
- package/dist/{icon-badge-DVPBQOKe.js → icon-badge-BlaY_a-P.js} +3 -3
- package/dist/{icon-button-C3wDxsh6.js → icon-button-B8tdlP6R.js} +1 -1
- package/dist/lib/components/ui/collections/data-grid/columns/row-meta.d.ts +2 -0
- package/dist/lib/components/ui/collections/data-grid/grid-meta.d.ts +10 -4
- package/dist/lib/components/ui/display/index.d.ts +1 -0
- package/dist/lib/components/ui/display/seat-ring/index.d.ts +2 -0
- package/dist/lib/components/ui/display/seat-ring/partials/empty-seat.d.ts +5 -0
- package/dist/lib/components/ui/display/seat-ring/partials/seat-body.d.ts +9 -0
- package/dist/lib/components/ui/display/seat-ring/partials/seat-item.d.ts +17 -0
- package/dist/lib/components/ui/display/seat-ring/seat-ring.d.ts +9 -0
- package/dist/lib/components/ui/display/seat-ring/seat-ring.utils.d.ts +9 -0
- package/dist/lib/components/ui/display/seat-ring/types.d.ts +67 -0
- package/dist/lib/components/ui/display/seat-ring/use-seat-ring.d.ts +12 -0
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/selection/switcher/partials/switcher-tooltip.d.ts +10 -2
- package/dist/lib/i18n/resources/en/en.d.ts +3 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +3 -0
- package/dist/lib/i18n/resources/fr/fr.d.ts +3 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +3 -0
- package/dist/lib/i18n/resources/resources.d.ts +6 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib.js +1 -1
- package/dist/main.js +43 -43
- package/dist/map.js +8 -8
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +2 -2
- package/dist/{public-BoVE0ffh.js → public-tWgM204K.js} +9 -9
- package/dist/{rich-code-block-DAUM7Yh_.js → rich-code-block-0OcsqURY.js} +5 -5
- package/dist/{sortable-provider-BLXsGE_0.js → sortable-provider-DzFAlPU_.js} +2 -2
- package/dist/{spinner-Rg4PnBPH.js → spinner-GKZcQmrR.js} +1 -1
- package/dist/{stored-language-B1lJMPbR.js → stored-language-B39mABN7.js} +2 -0
- package/dist/styles.css +1 -0
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-jVdxF_mc.js → theme-toggle-C8idk_jQ.js} +1 -1
- package/dist/{toolbar-items-BFY_hns5.js → toolbar-items-BrJI-BCs.js} +4 -4
- package/dist/{translate-material-q-JNxP1m.js → translate-material-hUA-UAP6.js} +2 -2
- package/dist/{translator-BU1o3_l9.js → translator-1ql2sxrx.js} +1 -1
- package/dist/{use-chat-composer-DGbDuIUa.js → use-chat-composer-DQpb8ZXV.js} +16 -16
- package/dist/{use-heading-spy-CP63sAcS.js → use-heading-spy-vlPOI1Aj.js} +1 -1
- package/dist/{use-material-translation-nNF8fUXz.js → use-material-translation-B1p5y3s9.js} +2 -2
- package/docs/components/data-display.md +65 -0
- package/docs/components/navigation-and-layout.md +1 -1
- package/docs/components/selection-and-choice.md +1 -1
- package/docs/guides/data-grid.md +39 -2
- package/docs/guides/theming.md +8 -0
- package/docs/previews/data-display-seatring.webp +0 -0
- package/docs/roadmap.md +3 -2
- package/docs/troubleshooting.md +15 -0
- package/lib/components/components.css +4 -0
- package/lib/components/theme-tokens.css +19 -15
- package/lib/components/ui/display/seat-ring/seat-ring-index.css +125 -0
- package/lib/components/ui/display/seat-ring/seat-ring-ring.css +87 -0
- package/lib/components/ui/display/seat-ring/seat-ring.css +139 -0
- package/lib/components/ui/overlays/dialog/dialog.css +2 -1
- package/lib/components/ui/overlays/popover/popover.css +3 -2
- package/lib/styles.css +1 -0
- package/lib/themes/ambre.css +8 -6
- package/lib/themes/ardoise.css +8 -6
- package/lib/themes/bleumono.css +8 -6
- package/lib/themes/bluemoon.css +8 -6
- package/lib/themes/corail.css +8 -6
- package/lib/themes/foret.css +8 -6
- package/lib/themes/lavande.css +8 -6
- package/lib/themes/menthe.css +8 -6
- package/lib/themes/ocean.css +8 -6
- package/lib/themes/pink.css +8 -6
- package/lib/themes/prune.css +8 -6
- package/lib/themes/sable.css +8 -6
- package/lib/themes/slate.css +8 -6
- package/lib/themes/teal.css +8 -6
- package/package.json +4 -4
package/dist/pdf-reader.js
CHANGED
package/dist/print.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as e } from "./i18n-provider-
|
|
2
|
-
import { t } from "./translate-material-
|
|
1
|
+
import { r as e } from "./i18n-provider-TQAEPlJ5.js";
|
|
2
|
+
import { t } from "./translate-material-hUA-UAP6.js";
|
|
3
3
|
import { Children as n, createContext as r, isValidElement as i, useCallback as a, useContext as o, useEffect as s, useMemo as c, useState as l } from "react";
|
|
4
4
|
import { jsx as u, jsxs as d } from "react/jsx-runtime";
|
|
5
5
|
import { resolvePdfFileName as f } from "@nxgt/material-core/pdf-file-name";
|
|
@@ -3,21 +3,21 @@ import { n as t } from "./ui.utils-CAnKTCw5.js";
|
|
|
3
3
|
import { t as n } from "./utils-BLfntITJ.js";
|
|
4
4
|
import { o as r } from "./dist-DVRQkaTK.js";
|
|
5
5
|
import { c as i, i as a, l as o, n as s, o as c, s as l } from "./dist-lmHmz_bu.js";
|
|
6
|
-
import { n as u, s as d } from "./spinner-
|
|
6
|
+
import { n as u, s as d } from "./spinner-GKZcQmrR.js";
|
|
7
7
|
import { i as f } from "./dist-C4wtXCjf.js";
|
|
8
8
|
import { r as p, t as m } from "./in-dialog-Vwkyp-M5.js";
|
|
9
|
-
import { C as h, D as g, E as _, O as v, S as y, T as b, _ as x, f as S, g as ee, k as te, r as ne, t as C, u as re, w } from "./dialog-
|
|
10
|
-
import { c as T, d as ie, f as E, i as ae, l as oe, n as se, o as D, t as ce, u as O } from "./dropdown-menu-
|
|
11
|
-
import { S as le, a as k, d as A, g as ue, h as de, i as fe, m as pe, n as j, r as me, t as M, u as he, w as ge } from "./toolbar-items-
|
|
12
|
-
import { t as N } from "./use-material-translation-
|
|
13
|
-
import { t as _e } from "./button-
|
|
14
|
-
import { n as ve, t as ye } from "./icon-button-
|
|
9
|
+
import { C as h, D as g, E as _, O as v, S as y, T as b, _ as x, f as S, g as ee, k as te, r as ne, t as C, u as re, w } from "./dialog-BzfHcRo6.js";
|
|
10
|
+
import { c as T, d as ie, f as E, i as ae, l as oe, n as se, o as D, t as ce, u as O } from "./dropdown-menu-DUZF4xAJ.js";
|
|
11
|
+
import { S as le, a as k, d as A, g as ue, h as de, i as fe, m as pe, n as j, r as me, t as M, u as he, w as ge } from "./toolbar-items-BrJI-BCs.js";
|
|
12
|
+
import { t as N } from "./use-material-translation-B1p5y3s9.js";
|
|
13
|
+
import { t as _e } from "./button-CD7f4KFL.js";
|
|
14
|
+
import { n as ve, t as ye } from "./icon-button-B8tdlP6R.js";
|
|
15
15
|
import { t as be } from "./useEvent-2fKq-6w8.js";
|
|
16
16
|
import { n as xe, t as Se } from "./toggle-group-BkH23Jk4.js";
|
|
17
|
-
import { o as Ce } from "./escape-owner-
|
|
17
|
+
import { o as Ce } from "./escape-owner-BYs2_7T5.js";
|
|
18
18
|
import { n as we } from "./use-slice-reducer-BGkeGtML.js";
|
|
19
19
|
import { r as Te } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
20
|
-
import { n as Ee, t as De } from "./empty-state-
|
|
20
|
+
import { n as Ee, t as De } from "./empty-state-D9o2id1p.js";
|
|
21
21
|
import { t as Oe } from "./client-only.utils-3nHNzCki.js";
|
|
22
22
|
import { t as ke } from "./use-scroll-away-PQRFZkT2.js";
|
|
23
23
|
import * as P from "react";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as e } from "./spinner-
|
|
2
|
-
import { c as t, n, t as r } from "./dropdown-menu-
|
|
3
|
-
import { t as i } from "./use-material-translation-
|
|
4
|
-
import { a, i as o, n as s, o as c, t as l } from "./code-language-items-
|
|
1
|
+
import { r as e } from "./spinner-GKZcQmrR.js";
|
|
2
|
+
import { c as t, n, t as r } from "./dropdown-menu-DUZF4xAJ.js";
|
|
3
|
+
import { t as i } from "./use-material-translation-B1p5y3s9.js";
|
|
4
|
+
import { a, i as o, n as s, o as c, t as l } from "./code-language-items-BxlY6onk.js";
|
|
5
5
|
import { i as u, n as d, r as f, s as p } from "./dist-C3GR7kJd.js";
|
|
6
6
|
import { t as m } from "./code-block-spec-CGLKRhwD.js";
|
|
7
7
|
import { Suspense as h, lazy as g, useEffect as _, useRef as v, useState as y } from "react";
|
|
@@ -143,7 +143,7 @@ function M({ node: e, editor: t, updateAttributes: n, editable: r, wrap: a, onWr
|
|
|
143
143
|
}
|
|
144
144
|
//#endregion
|
|
145
145
|
//#region lib/components/ui/widgets/editor/extensions/code/code-block-open.tsx
|
|
146
|
-
var N = g(() => import("./code-editor-
|
|
146
|
+
var N = g(() => import("./code-editor-tOhXy6Qo.js").then((e) => e.n).then((e) => ({ default: e.CodeEditor })));
|
|
147
147
|
function P() {
|
|
148
148
|
let { t: e } = i();
|
|
149
149
|
return /* @__PURE__ */ b("div", {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { t } from "./dist-DVRQkaTK.js";
|
|
3
|
-
import { t as n } from "./use-material-translation-
|
|
4
|
-
import { t as r } from "./icon-button-
|
|
3
|
+
import { t as n } from "./use-material-translation-B1p5y3s9.js";
|
|
4
|
+
import { t as r } from "./icon-button-B8tdlP6R.js";
|
|
5
5
|
import { t as i } from "./compose-refs-DZ0iIVF-.js";
|
|
6
6
|
import a, { cloneElement as o, createContext as s, forwardRef as c, memo as l, useCallback as u, useContext as d, useEffect as f, useId as p, useLayoutEffect as m, useMemo as h, useReducer as g, useRef as _, useState as v } from "react";
|
|
7
7
|
import { jsx as y } from "react/jsx-runtime";
|
|
@@ -3,7 +3,7 @@ import { n as t, t as n } from "./utils-BLfntITJ.js";
|
|
|
3
3
|
import { i as r, o as i } from "./dist-DVRQkaTK.js";
|
|
4
4
|
import { a, c as o, i as s, l as c, n as l, o as u, r as d, s as f, t as p, u as m } from "./dist-lmHmz_bu.js";
|
|
5
5
|
import { a as h, c as g, d as _, i as v, l as y, o as b, r as x, t as S, u as C } from "./floating-ui.dom-KkZSW8_E.js";
|
|
6
|
-
import { t as w } from "./use-material-translation-
|
|
6
|
+
import { t as w } from "./use-material-translation-B1p5y3s9.js";
|
|
7
7
|
import * as T from "react";
|
|
8
8
|
import { useLayoutEffect as E, useRef as D, useSyncExternalStore as O } from "react";
|
|
9
9
|
import { jsx as k, jsxs as A } from "react/jsx-runtime";
|
|
@@ -1334,6 +1334,7 @@ var t = {
|
|
|
1334
1334
|
busy: "Busy",
|
|
1335
1335
|
active: "Active"
|
|
1336
1336
|
},
|
|
1337
|
+
"seat-ring": { empty: "Empty seat" },
|
|
1337
1338
|
"country-field": { placeholder: "Country" },
|
|
1338
1339
|
"duration-field": {
|
|
1339
1340
|
hours: "h",
|
|
@@ -4174,6 +4175,7 @@ var t = {
|
|
|
4174
4175
|
busy: "Occupé",
|
|
4175
4176
|
active: "Actif"
|
|
4176
4177
|
},
|
|
4178
|
+
"seat-ring": { empty: "Place libre" },
|
|
4177
4179
|
"country-field": { placeholder: "Pays" },
|
|
4178
4180
|
"duration-field": {
|
|
4179
4181
|
hours: "h",
|
package/dist/styles.css
CHANGED
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
--color-background-light: --alpha(var(--background) / 30%);
|
|
58
58
|
--color-foreground: var(--foreground);
|
|
59
59
|
--color-card: var(--card);
|
|
60
|
+
--color-card-edge: var(--card-edge);
|
|
60
61
|
--color-card-foreground: var(--card-foreground);
|
|
61
62
|
--color-popover: var(--popover);
|
|
62
63
|
--color-popover-foreground: var(--popover-foreground);
|
package/dist/theme-picker.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { a as t, i as n, n as r, o as i, r as a, t as o } from "./bubble-input-B7BVd9fX.js";
|
|
3
3
|
import { a as s, r as c } from "./icon-sprites-CaYXzOL4.js";
|
|
4
|
-
import { t as l } from "./use-material-translation-
|
|
4
|
+
import { t as l } from "./use-material-translation-B1p5y3s9.js";
|
|
5
5
|
import { t as u } from "./use-theme-BCLireTd.js";
|
|
6
6
|
import { a as d, r as f } from "./theme-context-Cofk6vgs.js";
|
|
7
|
-
import { t as p } from "./theme-toggle-
|
|
7
|
+
import { t as p } from "./theme-toggle-C8idk_jQ.js";
|
|
8
8
|
import { n as m, t as h } from "./nxgt-theme-ivgNca3z.js";
|
|
9
9
|
import { useContext as g } from "react";
|
|
10
10
|
import { jsx as _, jsxs as v } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as e } from "./use-material-translation-
|
|
1
|
+
import { t as e } from "./use-material-translation-B1p5y3s9.js";
|
|
2
2
|
import { i as t } from "./theme-store-BdPp43cV.js";
|
|
3
3
|
import { n, t as r } from "./use-theme-BCLireTd.js";
|
|
4
4
|
import { r as i } from "./theme-context-Cofk6vgs.js";
|
|
@@ -2,13 +2,13 @@ import { t as e } from "./utils-BLfntITJ.js";
|
|
|
2
2
|
import { t } from "./warn-once-C_e47JM8.js";
|
|
3
3
|
import { o as n, r, t as i } from "./dist-DVRQkaTK.js";
|
|
4
4
|
import { a, c as o, i as s, l as c, r as l, s as u } from "./dist-lmHmz_bu.js";
|
|
5
|
-
import { C as d, S as f, d as p, f as m, m as h, p as g, r as _, u as v } from "./spinner-
|
|
5
|
+
import { C as d, S as f, d as p, f as m, m as h, p as g, r as _, u as v } from "./spinner-GKZcQmrR.js";
|
|
6
6
|
import { i as y, n as b, r as x, t as S } from "./dist-C4wtXCjf.js";
|
|
7
7
|
import { a as C, c as w, l as T, o as E, r as ee, s as te, t as ne } from "./in-dialog-Vwkyp-M5.js";
|
|
8
|
-
import { A as re, M as ie, N as ae, b as oe, d as se, f as ce, i as le, j as ue, l as de, n as fe, o as pe, r as me, t as he, u as ge, y as _e } from "./dropdown-menu-
|
|
8
|
+
import { A as re, M as ie, N as ae, b as oe, d as se, f as ce, i as le, j as ue, l as de, n as fe, o as pe, r as me, t as he, u as ge, y as _e } from "./dropdown-menu-DUZF4xAJ.js";
|
|
9
9
|
import { a as ve, n as ye, r as be, t as xe } from "./dist-B7RjY7SL.js";
|
|
10
|
-
import { t as Se } from "./use-material-translation-
|
|
11
|
-
import { o as Ce } from "./escape-owner-
|
|
10
|
+
import { t as Se } from "./use-material-translation-B1p5y3s9.js";
|
|
11
|
+
import { o as Ce } from "./escape-owner-BYs2_7T5.js";
|
|
12
12
|
import * as D from "react";
|
|
13
13
|
import { createContext as O, useCallback as we, useContext as k, useEffect as A, useId as Te, useLayoutEffect as j, useMemo as M, useReducer as Ee, useRef as N, useState as P } from "react";
|
|
14
14
|
import { Fragment as F, jsx as I, jsxs as L } from "react/jsx-runtime";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import "./stored-language-
|
|
2
|
-
import { a as e, r as t, t as n } from "./translator-
|
|
1
|
+
import "./stored-language-B39mABN7.js";
|
|
2
|
+
import { a as e, r as t, t as n } from "./translator-1ql2sxrx.js";
|
|
3
3
|
//#region lib/i18n/translate-material.ts
|
|
4
4
|
var r = /* @__PURE__ */ new WeakMap();
|
|
5
5
|
function i(e) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./is-production-GLw59WU8.js";
|
|
2
|
-
import { a as t, i as n, r, t as i } from "./stored-language-
|
|
2
|
+
import { a as t, i as n, r, t as i } from "./stored-language-B39mABN7.js";
|
|
3
3
|
import { t as a } from "./get-CTzJAwfc.js";
|
|
4
4
|
//#region ../../node_modules/@formatjs/fast-memoize/index.js
|
|
5
5
|
function o(e, t) {
|
|
@@ -5,39 +5,39 @@ import { t as r } from "./warn-once-C_e47JM8.js";
|
|
|
5
5
|
import { n as i } from "./use-shape-morph-DXdy2X5g.js";
|
|
6
6
|
import { n as a, o, t as s } from "./dist-DVRQkaTK.js";
|
|
7
7
|
import { a as c, c as l, i as u, l as d, n as f, o as p, r as m, s as h, t as g } from "./dist-lmHmz_bu.js";
|
|
8
|
-
import { _, a as v, b as y, c as b, g as x, h as S, i as C, n as w, o as T, r as E, s as D, t as O, v as k, x as A, y as ee } from "./spinner-
|
|
8
|
+
import { _, a as v, b as y, c as b, g as x, h as S, i as C, n as w, o as T, r as E, s as D, t as O, v as k, x as A, y as ee } from "./spinner-GKZcQmrR.js";
|
|
9
9
|
import { a as j, i as M, n as N, r as te, t as ne } from "./dist-C4wtXCjf.js";
|
|
10
10
|
import { i as P, n as re, t as ie } from "./in-dialog-Vwkyp-M5.js";
|
|
11
|
-
import { A as F, C as ae, D as oe, E as se, O as I, S as ce, T as le, _ as ue, b as de, f as fe, g as pe, k as me, l as he, m as ge, n as _e, o as ve, r as ye, s as be, t as xe, u as Se, v as Ce, w as we, x as Te, y as Ee } from "./dialog-
|
|
11
|
+
import { A as F, C as ae, D as oe, E as se, O as I, S as ce, T as le, _ as ue, b as de, f as fe, g as pe, k as me, l as he, m as ge, n as _e, o as ve, r as ye, s as be, t as xe, u as Se, v as Ce, w as we, x as Te, y as Ee } from "./dialog-BzfHcRo6.js";
|
|
12
12
|
import { A as De, C as Oe, D as ke, E as Ae, O as je, S as Me, T as Ne, _ as Pe, a as Fe, b as Ie, d as Le, f as Re, g as ze, h as Be, i as Ve, k as He, l as Ue, m as We, n as Ge, o as Ke, p as qe, r as Je, s as Ye, t as Xe, u as Ze, v as Qe, w as $e, x as et, y as tt } from "./floating-ui.dom-KkZSW8_E.js";
|
|
13
|
-
import { D as nt, E as rt, N as it, O as at, c as L, d as ot, f as st, i as ct, k as lt, m as ut, n as dt, o as ft, p as pt, t as mt, u as ht } from "./dropdown-menu-
|
|
14
|
-
import { a as gt, i as _t, n as vt } from "./field-blur-context-
|
|
15
|
-
import { C as yt, S as bt, a as xt, c as St, d as Ct, l as wt, n as Tt, o as Et, s as Dt, u as Ot } from "./toolbar-items-
|
|
13
|
+
import { D as nt, E as rt, N as it, O as at, c as L, d as ot, f as st, i as ct, k as lt, m as ut, n as dt, o as ft, p as pt, t as mt, u as ht } from "./dropdown-menu-DUZF4xAJ.js";
|
|
14
|
+
import { a as gt, i as _t, n as vt } from "./field-blur-context-ZsK8OTNg.js";
|
|
15
|
+
import { C as yt, S as bt, a as xt, c as St, d as Ct, l as wt, n as Tt, o as Et, s as Dt, u as Ot } from "./toolbar-items-BrJI-BCs.js";
|
|
16
16
|
import { a as kt, i as At, n as jt, o as Mt, t as Nt } from "./bubble-input-B7BVd9fX.js";
|
|
17
17
|
import { i as Pt } from "./dist-B7RjY7SL.js";
|
|
18
18
|
import { o as Ft, s as It, t as Lt } from "./use-click-lock-BZYtTmVt.js";
|
|
19
19
|
import { a as Rt, r as zt } from "./icon-sprites-CaYXzOL4.js";
|
|
20
|
-
import "./stored-language-
|
|
21
|
-
import { a as Bt } from "./translator-
|
|
20
|
+
import "./stored-language-B39mABN7.js";
|
|
21
|
+
import { a as Bt } from "./translator-1ql2sxrx.js";
|
|
22
22
|
import { h as Vt } from "./get-CTzJAwfc.js";
|
|
23
23
|
import { t as Ht } from "./isEmpty-F_g3jLf8.js";
|
|
24
|
-
import { t as R } from "./use-material-translation-
|
|
25
|
-
import { i as Ut, r as Wt, t as Gt } from "./button-
|
|
26
|
-
import { t as z } from "./icon-button-
|
|
24
|
+
import { t as R } from "./use-material-translation-B1p5y3s9.js";
|
|
25
|
+
import { i as Ut, r as Wt, t as Gt } from "./button-CD7f4KFL.js";
|
|
26
|
+
import { t as z } from "./icon-button-B8tdlP6R.js";
|
|
27
27
|
import { t as Kt } from "./use-ssr-media-query-C6M5m8sf.js";
|
|
28
28
|
import { n as qt, t as Jt } from "./util-4heV2LPI.js";
|
|
29
29
|
import { t as Yt } from "./useEvent-2fKq-6w8.js";
|
|
30
|
-
import { f as Xt } from "./field-blur-
|
|
30
|
+
import { f as Xt } from "./field-blur-r1tHwqdF.js";
|
|
31
31
|
import { c as Zt, i as Qt, l as $t, o as en, r as tn, s as nn, t as rn } from "./dist-C3GR7kJd.js";
|
|
32
32
|
import { i as an } from "./toggle-group-BkH23Jk4.js";
|
|
33
|
-
import { a as on, i as sn, o as cn } from "./escape-owner-
|
|
33
|
+
import { a as on, i as sn, o as cn } from "./escape-owner-BYs2_7T5.js";
|
|
34
34
|
import { n as ln } from "./use-slice-reducer-BGkeGtML.js";
|
|
35
35
|
import { t as un } from "./browser-only-DQ94lWF8.js";
|
|
36
36
|
import { t as dn } from "./compose-refs-DZ0iIVF-.js";
|
|
37
|
-
import { n as fn, r as pn, t as mn } from "./chip-
|
|
38
|
-
import { n as hn, t as gn } from "./icon-badge-
|
|
37
|
+
import { n as fn, r as pn, t as mn } from "./chip-Cl7Wm8Pn.js";
|
|
38
|
+
import { n as hn, t as gn } from "./icon-badge-BlaY_a-P.js";
|
|
39
39
|
import { r as _n } from "./use-csp-nonce-ZKs9k-ov.js";
|
|
40
|
-
import { t as vn } from "./empty-state-
|
|
40
|
+
import { t as vn } from "./empty-state-D9o2id1p.js";
|
|
41
41
|
import { t as yn } from "./skeleton-DSdtr2qc.js";
|
|
42
42
|
import { H as bn, V as xn, X as Sn, bt as Cn, it as wn, lt as Tn, n as En, t as Dn, xt as On, yt as kn } from "./dist-moutbfbd.js";
|
|
43
43
|
import { t as An } from "./markdown-Dw_uH7j7.js";
|
|
@@ -11353,7 +11353,7 @@ var tC = (e = {}) => jn({
|
|
|
11353
11353
|
let [{ default: t }, { lowlight: n }, { richCodeBlock: r }] = await Promise.all([
|
|
11354
11354
|
import("./dist-CRMFGjng.js"),
|
|
11355
11355
|
import("./lowlight-OtcjU2Sa.js"),
|
|
11356
|
-
import("./rich-code-block-
|
|
11356
|
+
import("./rich-code-block-0OcsqURY.js")
|
|
11357
11357
|
]);
|
|
11358
11358
|
return [r(t, {
|
|
11359
11359
|
lowlight: n,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as e } from "./i18n-provider-
|
|
1
|
+
import { r as e } from "./i18n-provider-TQAEPlJ5.js";
|
|
2
2
|
import { _ as t, g as n, h as r, n as i, v as a, y as o } from "./number.utils-BG_eEt5g.js";
|
|
3
3
|
import { useCallback as s, useEffect as c, useMemo as l, useRef as u, useState as d } from "react";
|
|
4
4
|
import { busySettler as f, busySettler as p, createSubmitGuard as m, createSubmitGuard as h } from "@nxgt/material-core/submit-guard";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as e } from "./i18n-provider-
|
|
2
|
-
import { t } from "./translate-material-
|
|
1
|
+
import { r as e } from "./i18n-provider-TQAEPlJ5.js";
|
|
2
|
+
import { t } from "./translate-material-hUA-UAP6.js";
|
|
3
3
|
import { useCallback as n } from "react";
|
|
4
4
|
//#region lib/i18n/use-material-translation.ts
|
|
5
5
|
function r() {
|
|
@@ -8,6 +8,7 @@ from `@nxgt/material/components`.
|
|
|
8
8
|
| --- | --- | --- |
|
|
9
9
|
| <img src="../previews/data-display-avatar.webp" width="96" alt=""> | [Avatar](#avatar) | Image with a fallback and an optional online / offline dot |
|
|
10
10
|
| <img src="../previews/data-display-avatargroup.webp" width="96" alt=""> | [AvatarGroup](#avatargroup) | Overlapping avatars with a `+N` overflow |
|
|
11
|
+
| <img src="../previews/data-display-seatring.webp" width="96" alt=""> | [SeatRing](#seatring) | Participants as seats around a circle or in a grid, optionally pickable |
|
|
11
12
|
| <img src="../previews/data-display-shape.webp" width="96" alt=""> | [Shape](#shape) | Material 3 Expressive's shapes as a backdrop, an icon container or a mask for a photo |
|
|
12
13
|
| <img src="../previews/data-display-badge.webp" width="96" alt=""> | [Badge](#badge) | Status pill, 20 px, in seven tones, soft or outlined, with an optional decorative `icon` before the words |
|
|
13
14
|
| <img src="../previews/data-display-countbadge.webp" width="96" alt=""> | [CountBadge](#countbadge) | Count in the corner of its children |
|
|
@@ -127,6 +128,70 @@ array (`people.map(...)`); a single wrapper component or fragment counts as one.
|
|
|
127
128
|
|
|
128
129
|
---
|
|
129
130
|
|
|
131
|
+
## SeatRing
|
|
132
|
+
|
|
133
|
+

|
|
134
|
+
|
|
135
|
+
Participants as seats: around a circle when there is room, in a grid on a
|
|
136
|
+
phone. A seating plan, a round-table meeting, a party-game lobby. Each seat has
|
|
137
|
+
an avatar, a name, a status written in words and a badge; with `selectionMode`
|
|
138
|
+
it is a listbox to pick one or several seats from.
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
import { SeatRing } from '@nxgt/material/components';
|
|
142
|
+
|
|
143
|
+
<SeatRing
|
|
144
|
+
aria-label="Players"
|
|
145
|
+
seats={[
|
|
146
|
+
{ id: 'ada', label: 'Ada Example', status: { label: 'Ready', tone: 'success' }, badge: 'Host' },
|
|
147
|
+
{ id: 'bo', label: 'Bo Sample', status: { label: 'Away', tone: 'warning' } },
|
|
148
|
+
{ id: 'free', label: 'Free', empty: true },
|
|
149
|
+
]}
|
|
150
|
+
highlightedId="ada"
|
|
151
|
+
centerSlot={<p>Round 2</p>}
|
|
152
|
+
selectionMode="single"
|
|
153
|
+
value={target}
|
|
154
|
+
onValueChange={setTarget}
|
|
155
|
+
/>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
| Prop | Type | Default | Notes |
|
|
159
|
+
| --- | --- | --- | --- |
|
|
160
|
+
| `seats` | `Seat[]` | required | `{ id, label, avatar?: { src?, fallback? }, status?: { label, tone? }, badge?, disabled?, empty? }`; clockwise from the top |
|
|
161
|
+
| `layout` | `'ring' \| 'grid'` | `'ring'` | `ring` falls back to the grid in a narrow box and past the seat limit (10 seats) |
|
|
162
|
+
| `size` | `'sm' \| 'md' \| 'lg'` | `'md'` | seat width 4.75, 6 or 8rem; ring from a box of 32, 38 or 46rem; at most 10 seats on the circle |
|
|
163
|
+
| `selectionMode` | `'none' \| 'single' \| 'multiple'` | `'none'` | `none`: a list; otherwise a listbox |
|
|
164
|
+
| `value`, `defaultValue`, `onValueChange` | `string \| null` (single), `string[]` (multiple) | — | controlled or not |
|
|
165
|
+
| `highlightedId` | `string` | — | emphasised seat (whose turn it is); `aria-current="true"` on it, in a list and in a listbox |
|
|
166
|
+
| `renderAvatar`, `renderStatus`, `renderBadge` | `(seat) => ReactNode` | — | replace the default avatar, status line or badge |
|
|
167
|
+
| `renderEmptySeat` | `(seat) => ReactNode` | dashed circle and "Empty seat" | content of an empty seat |
|
|
168
|
+
| `centerSlot` | `ReactNode` | — | middle of the ring (a timer, a title); above the seats in the grid |
|
|
169
|
+
| `aria-label` / `aria-labelledby` | `string` | — | names the list or the listbox: always give one |
|
|
170
|
+
|
|
171
|
+
The layout follows the component's own width (a container query), not the
|
|
172
|
+
window, so it also collapses in a narrow column or a dialog. The grid is two columns
|
|
173
|
+
at 30rem or less and auto-fill above it, with a 44px minimum seat height. The circle is CSS only, so server markup has
|
|
174
|
+
no `style` attribute and a strict CSP is fine.
|
|
175
|
+
|
|
176
|
+
**Accessibility**
|
|
177
|
+
|
|
178
|
+
- Not selectable: a `list` of `listitem`s. Selectable: a `listbox` of `option`s
|
|
179
|
+
(`aria-multiselectable` in `multiple`).
|
|
180
|
+
- A roving tab stop sits on the chosen seat, else the first taken one. Arrow
|
|
181
|
+
keys, Home and End move the focus (an empty seat is skipped); Space or Enter
|
|
182
|
+
picks, and pressing the chosen seat again clears it.
|
|
183
|
+
- A seat is named by its label and its status text, never by colour alone.
|
|
184
|
+
- In a listbox, empty and `disabled` seats are `aria-disabled`, and a disabled
|
|
185
|
+
seat can be reached but not picked (in a list, `disabled` only dims the seat).
|
|
186
|
+
- Put no button in a selectable seat: interactive content (an "Invite" action
|
|
187
|
+
in `renderEmptySeat`) belongs to a non-selectable ring.
|
|
188
|
+
- Seat changes are not animated beyond a colour fade, which stops under
|
|
189
|
+
`prefers-reduced-motion`.
|
|
190
|
+
|
|
191
|
+
**Storybook:** `Data display/SeatRing` · **Vue:** not yet (#1931)
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
130
195
|
## Shape
|
|
131
196
|
|
|
132
197
|

|
|
@@ -7,7 +7,7 @@ documentation-site shell. Everything is imported from
|
|
|
7
7
|
|
|
8
8
|
| | Component | What it does |
|
|
9
9
|
| --- | --- | --- |
|
|
10
|
-
| <img src="../previews/navigation-layout-appshell.webp" width="96" alt=""> | [ActivityLayout](#activitylayout) | App shell: sidebar, header, breadcrumbs, titled page; a route's `handle.title` is the page's `h1` in the app bar (it labels `main`; `usePageTitleFocus()` focuses it after a navigation), `handle.titleAfter` / `titleAfter` a node right after it, outside the `h1` (a record's `Switcher
|
|
10
|
+
| <img src="../previews/navigation-layout-appshell.webp" width="96" alt=""> | [ActivityLayout](#activitylayout) | App shell: sidebar, header, breadcrumbs, titled page; a route's `handle.title` is the page's `h1` in the app bar (it labels `main`; `usePageTitleFocus()` focuses it after a navigation), `handle.titleAfter` / `titleAfter` a node right after it, outside the `h1` (a record's `Switcher`, or `<Switcher size="compact">` for an icon-only one), `headerContext` a small tenant line after it from md up, `breadcrumbRoot` a text root crumb or (`icon: true`) the home icon with its own target and name, `breadcrumb={false}` no trail, `context` the tenant line atop the phone's menu sheet; `menuOpen` / `onMenuOpenChange` control the phone's menu sheet, which closes itself on a followed link or any location change |
|
|
11
11
|
| <img src="../previews/navigation-layout-accountmenu.webp" width="96" alt=""> | [AccountMenu](#accountmenu) | The app bar's avatar menu: the account, the app's links, Sign out |
|
|
12
12
|
| <img src="../previews/navigation-layout-authcard.webp" width="96" alt=""> | [AuthCard](#authcard) | Signed-out page frame: one `main`, a centred card, its title the `h1` |
|
|
13
13
|
| <img src="../previews/navigation-layout-sidebar.webp" width="96" alt=""> | [Sidebar](#sidebar) | Collapsible navigation sidebar |
|
|
@@ -28,7 +28,7 @@ value type each one writes. Everything is imported from
|
|
|
28
28
|
| <img src="../previews/selection-choice-transferlist.webp" width="96" alt=""> | [TransferList](#transferlist) | Two-pane picker: search, counts, select-all, drag between panes |
|
|
29
29
|
| <img src="../previews/selection-choice-sortablelist.webp" width="96" alt=""> | [SortableList](#sortablelist) | Reorderable list: drag or keyboard, announced |
|
|
30
30
|
| <img src="../previews/selection-choice-treeselectfield.webp" width="96" alt=""> | [TreeSelectField](#treeselectfield) | Pick from a tree, single or multiple |
|
|
31
|
-
| <img src="../previews/selection-choice-switcher.webp" width="96" alt=""> | [Switcher](#switcher) | Workspace, establishment or class switcher: menu, search, groups, links |
|
|
31
|
+
| <img src="../previews/selection-choice-switcher.webp" width="96" alt=""> | [Switcher](#switcher) | Workspace, establishment or class switcher: menu, search, groups, links; `size="compact"` an icon-only round trigger for the app bar's `titleAfter` slot |
|
|
32
32
|
|
|
33
33
|
## Select
|
|
34
34
|
|
package/docs/guides/data-grid.md
CHANGED
|
@@ -44,12 +44,12 @@ Columns are DataTable's TanStack v9 column definitions. A column with no
|
|
|
44
44
|
| `lockPosition` | `'start'` or `'end'`: the column keeps its edge when columns are reordered ([columns](#columns-resize-hide-and-reorder)) |
|
|
45
45
|
| `editor` | `'text'`, `'number'`, `'select'`, `'date'`, `'checkbox'`, or your own component ([custom editor](#a-custom-editor)) |
|
|
46
46
|
| `rowEditor(row)` | The built-in editor (`'text'`, `'number'`, `'select'`, `'date'`, `'checkbox'`) a row's cell has, for a column that mixes kinds ([one column, several kinds of row](#one-column-several-kinds-of-row)). It wins over `editor` |
|
|
47
|
-
| `number` | `{ min, max, decimals }` for the number editor; `min`, `max` and `decimals` may be functions of the row. A value outside them, or with too many decimals, is an error: it is never rounded or clamped |
|
|
47
|
+
| `number` | `{ min, max, decimals }` for the number editor; `min`, `max` and `decimals` may be functions of the row. A value outside them, or with too many decimals, is an error: it is never rounded or clamped. A `decimals` given as a function of the row is also what the cell shows: exactly that many fraction digits (`2,50`), where a plain number shows up to that many |
|
|
48
48
|
| `codes` | Symbolic values the number editor also takes ("abs", "exempt"), with the label each language shows and the aliases it accepts |
|
|
49
49
|
| `options` | The select editor's `{ value, label }` list, or a function of the row returning it. The cell shows and copies the label; a typed or pasted text matches a label or a value, in any case and without accents |
|
|
50
50
|
| `date` | `{ min, max }` as ISO dates (`'2026-09-01'`). The value is an ISO date, shown and read in the page's locale |
|
|
51
51
|
| `parse(text, ctx)` | Text to value, replacing the editor's own: `{ value }` or `{ error }`. `ctx` has `lang`, `locale` and `row`. `{ value: null }` clears the cell, whatever the column's value type |
|
|
52
|
-
| `format(value, ctx)` | Value to text, shown in the cell and in the editor |
|
|
52
|
+
| `format(value, ctx)` | Value to text, shown in the cell and in the editor. `ctx` has `lang`, `locale` and, for a cell, its `row`, optional because a total has none: guard it (`ctx.row?.scale ?? 0`) |
|
|
53
53
|
| `validate(value, row)` | A message (a string) flags the cell in error; nothing means valid |
|
|
54
54
|
| `schema` | Any Standard Schema (zod, valibot, ArkType), run after `validate`. An asynchronous one that has not answered after the grid's `checkTimeout` (10 s by default) flags the cell "Check timed out" ([below](#checks-that-never-answer)) |
|
|
55
55
|
| `value(row, cell)` | A computed column: never editable, it follows the unsaved edits. `cell(columnId)` reads what any column's cell shows |
|
|
@@ -115,6 +115,43 @@ the same instant, and `null` with `undefined`. Any other object equals only
|
|
|
115
115
|
itself, so a `parse` that builds a new object on every call reads as a change
|
|
116
116
|
each time. Return primitives or `Date`s, or keep the object's identity.
|
|
117
117
|
|
|
118
|
+
### A cell that renders a component
|
|
119
|
+
|
|
120
|
+
A column's `cell` is the TanStack renderer and returns any node: a `Badge`, a
|
|
121
|
+
chip, an icon with a word. It draws the cells of a **read-only column** (no
|
|
122
|
+
`meta.editor`) and of a **computed column** (`meta.value`), where `getValue()`
|
|
123
|
+
is the computed value and follows the unsaved edits. The cell stays read-only
|
|
124
|
+
and is never an editor.
|
|
125
|
+
|
|
126
|
+
```tsx
|
|
127
|
+
import { Badge } from '@nxgt/material/components';
|
|
128
|
+
|
|
129
|
+
type Result = { id: string; value: number; high: number };
|
|
130
|
+
|
|
131
|
+
const helper = createColumnHelper<DataTableFeatures, Result>();
|
|
132
|
+
|
|
133
|
+
// `meta.value` makes the column computed; `cell` draws what it returns.
|
|
134
|
+
helper.accessor((row) => (row.value > row.high ? 'high' : 'normal'), {
|
|
135
|
+
id: 'interpretation',
|
|
136
|
+
header: 'Interpretation',
|
|
137
|
+
meta: { value: (row) => (row.value > row.high ? 'high' : 'normal') },
|
|
138
|
+
cell: ({ getValue }) => (
|
|
139
|
+
<Badge variant="soft" tone={getValue() === 'high' ? 'error' : 'success'}>
|
|
140
|
+
{getValue() === 'high' ? 'High' : 'Normal'}
|
|
141
|
+
</Badge>
|
|
142
|
+
),
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Keep a word in the node: a tone alone never carries the meaning.
|
|
147
|
+
|
|
148
|
+
**Some columns replace `cell` with text**: those with `meta.format` (computed
|
|
149
|
+
ones included), `meta.codes`, or a built-in `editor` of `'number'`, `'select'`
|
|
150
|
+
or `'date'`, whose value the grid writes itself, in the cell, the editor and the
|
|
151
|
+
clipboard. A `'checkbox'` editor draws a checkbox, and a cell holding an invalid
|
|
152
|
+
unsaved edit shows that text with its error icon. A column that must draw a component leaves both out; a column that
|
|
153
|
+
is edited keeps its editor and its text.
|
|
154
|
+
|
|
118
155
|
### Checks that never answer
|
|
119
156
|
|
|
120
157
|
`validate` and `schema` may return a Promise. A commit waits for it, and so
|
package/docs/guides/theming.md
CHANGED
|
@@ -74,6 +74,7 @@ at the top are needed is in [getting started](../getting-started.md#styles).
|
|
|
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` |
|
|
75
75
|
| `--ground` | `bg-ground` | the page's ground under `ActivityLayout`: the tinted colour the cards stand on (see [Page ground](#page-ground)) |
|
|
76
76
|
| `--card`, `--popover`, `--tooltip` (+ `-foreground`) | `bg-card`, `bg-popover`, `bg-tooltip` | surfaces |
|
|
77
|
+
| `--card-edge` | `border-card-edge` | the edge of a `Card`, a `Popover` and a `Dialog`: `var(--border)` in light, `color-mix(in oklab, white 8%, var(--card))` in dark, a hairline lighter than the surface so it lifts off `--ground` |
|
|
77
78
|
| `--border`, `--input`, `--ring` | `border-border`, `border-input`, `ring-ring` | outlines |
|
|
78
79
|
| `--chart-1` … `--chart-5` | `bg-chart-1`, … | chart series (the charts read them at runtime) |
|
|
79
80
|
| `--chart-soft-1` … `--chart-soft-5`, `--chart-soft-1-ink` … `--chart-soft-5-ink` | (none) | the native charts' soft palette (`palette="soft"`, `data-chart-palette="soft"`): a pale fill per series and its ink, 3:1 or more on `--card`, for outlines, lines and points ([charts guide](charts.md#soft-palette)) |
|
|
@@ -115,6 +116,13 @@ the token (light block and dark block), written from the theme's own
|
|
|
115
116
|
AA: foreground, muted foreground and primary text are measured on the ground in
|
|
116
117
|
both modes.
|
|
117
118
|
|
|
119
|
+
In dark, `--card`, `--popover`, `--muted`, `--accent`, `--border` and `--input`
|
|
120
|
+
sit 0.03 of lightness above the former values (same hue and chroma; Lavande's
|
|
121
|
+
card is `oklch(0.22 0.019 289.4)`, it was `0.19`; the sidebar and
|
|
122
|
+
`--sidebar-border` keep their values), and a card, a popover and a dialog
|
|
123
|
+
draw the `--card-edge` hairline plus a faint top highlight, so a card reads
|
|
124
|
+
against the ground. Light is unchanged.
|
|
125
|
+
|
|
118
126
|
The sidebar and the app bar do **not** take the tint: they stay on
|
|
119
127
|
`--background` (near-white in light), flat, with no radius and no shadow, so
|
|
120
128
|
only the content ground carries the colour. The cards keep `bg-card`, their
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -150,8 +150,6 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
150
150
|
|
|
151
151
|
## Next
|
|
152
152
|
|
|
153
|
-
- **Dark cards that separate from the page ground** — in dark mode, cards
|
|
154
|
-
stand out from the page instead of blending into it ([#1676](https://github.com/softistx/nxgt-material/issues/1676)).
|
|
155
153
|
- **FilterBar "Add a filter" stays on its row** — the button no longer wraps
|
|
156
154
|
alone onto a second row on a desktop screen ([#1752](https://github.com/softistx/nxgt-material/issues/1752)).
|
|
157
155
|
|
|
@@ -350,6 +348,9 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
350
348
|
|
|
351
349
|
## Shipped
|
|
352
350
|
|
|
351
|
+
- **Dark cards that separate from the page ground (3.54.0)** — in dark mode, cards,
|
|
352
|
+
popovers and dialogs lift off the page ground (lighter surfaces and a `--card-edge`
|
|
353
|
+
hairline), light unchanged ([#1676](https://github.com/softistx/nxgt-material/issues/1676)).
|
|
353
354
|
- **Compact `ServerTable` tiles** — `renderTile` shows a compact `ListTile`
|
|
354
355
|
record row (`size="sm"` with chips) through `item.Row` ([#1766](https://github.com/softistx/nxgt-material/issues/1766)).
|
|
355
356
|
- **A compact `Switcher` trigger, `size="compact"`** — an icon-only round
|
package/docs/troubleshooting.md
CHANGED
|
@@ -25,6 +25,7 @@ words in your error.
|
|
|
25
25
|
|
|
26
26
|
**Styles & assets**
|
|
27
27
|
|
|
28
|
+
- [In dark, my cards are lighter, or my own card colour has no edge](#in-dark-my-cards-are-lighter-or-my-own-card-colour-has-no-edge)
|
|
28
29
|
- [The page and the cards look the same](#the-page-and-the-cards-look-the-same)
|
|
29
30
|
- [Components render unstyled, with no error](#components-render-unstyled-with-no-error)
|
|
30
31
|
- [A link is blue and underlined on hover and focus](#a-link-of-mine-or-of-a-component-is-blue-and-underlined-on-hover-and-focus)
|
|
@@ -745,6 +746,20 @@ import { Background } from '@nxgt/material/backgrounds';
|
|
|
745
746
|
</ActivityLayout>
|
|
746
747
|
```
|
|
747
748
|
|
|
749
|
+
### In dark, my cards are lighter, or my own card colour has no edge
|
|
750
|
+
|
|
751
|
+
Since 3.54 the dark `--card`, `--popover`, `--muted`, `--accent`, `--border` and
|
|
752
|
+
`--input` are 0.03 of lightness higher, and `Card`, `Popover` and `Dialog` draw their edge with
|
|
753
|
+
`--card-edge` (a hairline 8 % lighter than `--card`; in light it is
|
|
754
|
+
`var(--border)`). An app that overrides `--card` under `.dark` keeps its
|
|
755
|
+
colour; the edge follows it only when the override is on the same selector as
|
|
756
|
+
the theme (`.dark` or the theme block). An override on a nested element sets
|
|
757
|
+
`--card-edge` beside `--card`. An app that set its own dark card to
|
|
758
|
+
lift it off the page can drop that override, and one that sets `--card-edge`
|
|
759
|
+
(or `border-color` on a card) keeps it. A theme made with `defineTheme` and
|
|
760
|
+
generated before 3.54 has the former values and no `--card-edge`: regenerate
|
|
761
|
+
it (`nxgt-theme`, or the Vite plugin on the next build).
|
|
762
|
+
|
|
748
763
|
### The page and the cards look the same
|
|
749
764
|
|
|
750
765
|
**When:** a screen under `ActivityLayout`, after the 3.24 upgrade or on an older
|
|
@@ -134,6 +134,10 @@
|
|
|
134
134
|
@import "./ui/display/period-cards/period-cards.css";
|
|
135
135
|
@import "./ui/layout/sidebar/sidebar-tokens.css";
|
|
136
136
|
@import "./ui/display/avatar/avatar.css";
|
|
137
|
+
/* SeatRing: seats as a grid or on a circle by its own width. */
|
|
138
|
+
@import "./ui/display/seat-ring/seat-ring.css";
|
|
139
|
+
@import "./ui/display/seat-ring/seat-ring-index.css";
|
|
140
|
+
@import "./ui/display/seat-ring/seat-ring-ring.css";
|
|
137
141
|
/* Alert and Banner span the row in the form grids (#1497). */
|
|
138
142
|
@import "./ui/feedback/alert/alert.css";
|
|
139
143
|
@import "./ui/display/stat-card/stat-card.css";
|
|
@@ -11,6 +11,9 @@
|
|
|
11
11
|
keeps the flat look with `--ground: var(--background)`. */
|
|
12
12
|
--ground: color-mix(in oklab, var(--primary) 7%, var(--background));
|
|
13
13
|
--card: oklch(1 0 0);
|
|
14
|
+
/* The card's edge (Card, Popover, Dialog): the border in light; dark draws it a
|
|
15
|
+
hairline lighter than the card. */
|
|
16
|
+
--card-edge: var(--border);
|
|
14
17
|
--card-foreground: oklch(0.227 0.017 290);
|
|
15
18
|
--strix: oklch(45.91% 0.1864 310.75);
|
|
16
19
|
--popover: oklch(1 0 0);
|
|
@@ -111,38 +114,39 @@
|
|
|
111
114
|
var(--primary) 6%,
|
|
112
115
|
color-mix(in oklab, var(--background) 55%, black)
|
|
113
116
|
);
|
|
114
|
-
--card: oklch(0.
|
|
117
|
+
--card: oklch(0.22 0.019 289.4);
|
|
118
|
+
--card-edge: color-mix(in oklab, white 8%, var(--card));
|
|
115
119
|
--card-foreground: oklch(0.943 0.012 291.3);
|
|
116
|
-
--popover: oklch(0.
|
|
120
|
+
--popover: oklch(0.22 0.019 289.4);
|
|
117
121
|
--popover-foreground: oklch(0.943 0.012 291.3);
|
|
118
122
|
--primary: oklch(46% 0.1135 276.35);
|
|
119
123
|
--primary-foreground: oklch(0.995 0.002 291.3);
|
|
120
124
|
/* Mixed 60 % toward white (the tonal Button labels' recipe): readable as text
|
|
121
125
|
on --background and --card. */
|
|
122
126
|
--primary-text: color-mix(in oklab, var(--primary) 40%, white);
|
|
123
|
-
/* --primary itself is 2.7:1 on --background, 2.
|
|
124
|
-
--muted. Mixed 25 % toward white: 4.8:1, 4.
|
|
127
|
+
/* --primary itself is 2.7:1 on --background, 2.4:1 on --card and 2.1:1 on
|
|
128
|
+
--muted. Mixed 25 % toward white: 4.8:1, 4.2:1 and 3.8:1. */
|
|
125
129
|
--primary-indicator: color-mix(in oklab, var(--primary) 75%, white);
|
|
126
130
|
/* Brighter than the light one: it is read as text on the dark surfaces (6.8:1
|
|
127
|
-
on --background, 6.
|
|
131
|
+
on --background, 6.0:1 on --card; 4.8:1 on its own 15 % tonal tint over a
|
|
128
132
|
Card). A filled secondary surface mixes it toward --background (the opaque
|
|
129
133
|
70 % mix) to keep 5.4:1 under its near-white text (4.9:1 over a Card). */
|
|
130
134
|
--secondary: oklch(0.675 0.1135 245.65);
|
|
131
135
|
--secondary-foreground: oklch(0.995 0.002 291.3);
|
|
132
|
-
--muted: oklch(0.
|
|
136
|
+
--muted: oklch(0.258 0.022 290);
|
|
133
137
|
--muted-foreground: oklch(0.725 0.03 292.2);
|
|
134
|
-
/* 3.7:1 on --background, 3.
|
|
138
|
+
/* 3.7:1 on --background, 3.3:1 on --card; the fill 3.3:1 on the track. */
|
|
135
139
|
--track: oklch(0.53 0.03 290);
|
|
136
140
|
--track-fill: oklch(0.85 0.09 276.35);
|
|
137
141
|
--tooltip: oklch(0.925 0.012 291.3);
|
|
138
142
|
--tooltip-foreground: oklch(0.446 0.043 291);
|
|
139
|
-
--accent: oklch(0.
|
|
143
|
+
--accent: oklch(0.28 0.022 290);
|
|
140
144
|
--accent-foreground: oklch(0.943 0.012 291.3);
|
|
141
145
|
--error: oklch(0.577 0.245 27.325);
|
|
142
146
|
--error-foreground: oklch(0.995 0.002 291.3);
|
|
143
147
|
/* --error stays the fill under near-white text; as text it would give only
|
|
144
148
|
4.0:1 on --background and 3.8:1 on --card. Lightened (76 % --error), 6.25
|
|
145
|
-
and 5.
|
|
149
|
+
and 5.5:1, and 4.9:1 on a focused error menu item (bg-error/20 over the
|
|
146
150
|
popover; the former 80 % missed 4.5:1 once rendered). */
|
|
147
151
|
--error-text: color-mix(in oklab, var(--error) 76%, white);
|
|
148
152
|
/* The light brights: on the dark surfaces they read as text and as the
|
|
@@ -152,15 +156,15 @@
|
|
|
152
156
|
--success-foreground: oklch(0.995 0.002 291.3);
|
|
153
157
|
--info: oklch(0.707 0.165 254.624);
|
|
154
158
|
--info-foreground: oklch(0.995 0.002 291.3);
|
|
155
|
-
/* Amber too, as text: 7.2:1 on --background and 6.
|
|
156
|
-
5.
|
|
157
|
-
6.1:1 on a page and 5.
|
|
159
|
+
/* Amber too, as text: 7.2:1 on --background and 6.3:1 on --card, 6.4:1 and
|
|
160
|
+
5.5:1 on its 10% tint; the badge's 60% fill under near-white text is
|
|
161
|
+
6.1:1 on a page and 5.6:1 on a Card. */
|
|
158
162
|
--warning: oklch(0.7 0.15 70);
|
|
159
163
|
--warning-foreground: oklch(0.995 0.002 291.3);
|
|
160
164
|
--destructive: oklch(0.704 0.191 22.216);
|
|
161
|
-
--border: oklch(0.
|
|
162
|
-
--input: oklch(0.
|
|
163
|
-
/* 4.05:1 on --background, 3.
|
|
165
|
+
--border: oklch(0.289 0.025 291.4);
|
|
166
|
+
--input: oklch(0.328 0.027 291.4);
|
|
167
|
+
/* 4.05:1 on --background, 3.57:1 on --card, 3.22:1 on --muted. */
|
|
164
168
|
--ring: oklch(0.551 0.03 290);
|
|
165
169
|
--chart-1: oklch(0.488 0.243 264.376);
|
|
166
170
|
--chart-2: oklch(0.696 0.17 162.48);
|