@nxgt/material 3.49.0 → 3.50.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +1 -1
  3. package/dist/{async-slice-DlvKCKAa.js → async-slice-3loEtzUY.js} +2 -2
  4. package/dist/{button-DJgaQbBD.js → button-BRUaHD8z.js} +45 -76
  5. package/dist/charts.js +3 -3
  6. package/dist/{chip-DN44R1vW.js → chip-DneTrtNj.js} +3 -3
  7. package/dist/{code-editor-BJ9ewxSC.js → code-editor-R_nPN_-d.js} +6 -6
  8. package/dist/code-editor.js +5 -5
  9. package/dist/{code-language-items-BJE3VuQg.js → code-language-items-BKEUhQlF.js} +2 -2
  10. package/dist/{components-AtBccCir.js → components-D6xFLcoE.js} +11464 -11348
  11. package/dist/components.js +26 -27
  12. package/dist/{dialog-ODql4vH7.js → dialog-S7dLsYRZ.js} +7 -7
  13. package/dist/dnd.js +1 -1
  14. package/dist/{dropdown-menu-DRXYP9ta.js → dropdown-menu-XLlxfDgq.js} +25 -26
  15. package/dist/editor.js +9 -9
  16. package/dist/{empty-state-C9QqvBU1.js → empty-state-Dsf6R-Zo.js} +2 -2
  17. package/dist/{escape-owner-DCrlERLM.js → escape-owner-B9eCwjLw.js} +1 -1
  18. package/dist/{field-blur-DYGyIdfD.js → field-blur-5uRDFHvB.js} +1 -1
  19. package/dist/{field-blur-context-B-fSpl1H.js → field-blur-context-Cwt4TuBq.js} +1 -1
  20. package/dist/hooks.js +2 -2
  21. package/dist/{hover-card-EO_CckIx.js → hover-card-PHUgRSjJ.js} +14 -14
  22. package/dist/{i18n-provider-C0fB0sEL.js → i18n-provider-DPM_ALQ4.js} +1 -1
  23. package/dist/i18n.js +5 -5
  24. package/dist/{icon-badge-BQYj_LE6.js → icon-badge-Dh6-FNOF.js} +3 -3
  25. package/dist/{icon-button-B481L2TP.js → icon-button-DSC2-IAG.js} +119 -87
  26. package/dist/lib/components/ui/actions/icon-button/icon-button-busy.d.ts +22 -0
  27. package/dist/lib/components/ui/actions/icon-button/icon-button-shape.d.ts +2 -0
  28. package/dist/lib/components/ui/actions/icon-button/icon-button.d.ts +7 -0
  29. package/dist/lib/components/ui/collections/filter/bar/partials/filter-quick-toggle.d.ts +3 -2
  30. package/dist/lib/components/ui/collections/filter/sections/filter-sections-classes.d.ts +7 -1
  31. package/dist/lib/components/ui/collections/page-footer/page-footer.d.ts +6 -1
  32. package/dist/lib/components/ui/collections/row-menu/row-menu-trigger.d.ts +5 -2
  33. package/dist/lib/components/ui/collections/server-table/index.d.ts +1 -1
  34. package/dist/lib/components/ui/collections/server-table/partials/server-table-empty-chips.d.ts +5 -3
  35. package/dist/lib/components/ui/collections/server-table/types-paging.d.ts +17 -0
  36. package/dist/lib/components/ui/collections/server-table/types.d.ts +3 -10
  37. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-body.d.ts +5 -3
  38. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-request-error.d.ts +15 -0
  39. package/dist/lib/components/ui/feedback/step-up-dialog/step-up-dialog.d.ts +6 -3
  40. package/dist/lib/components/ui/feedback/step-up-dialog/types.d.ts +12 -1
  41. package/dist/lib/components/ui/feedback/step-up-dialog/use-retry-focus.d.ts +27 -0
  42. package/dist/lib/components/ui/feedback/step-up-dialog/use-retry.d.ts +11 -0
  43. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  44. package/dist/lib/components/ui/fields/verification-code/use-settled-focus.d.ts +10 -0
  45. package/dist/lib/i18n/resources/en/en.d.ts +1 -0
  46. package/dist/lib/i18n/resources/en/material.json.d.ts +2 -1
  47. package/dist/lib/i18n/resources/fr/fr.d.ts +1 -0
  48. package/dist/lib/i18n/resources/fr/material.json.d.ts +2 -1
  49. package/dist/lib/i18n/resources/resources.d.ts +2 -0
  50. package/dist/lib/i18n/translator.d.ts +1 -1
  51. package/dist/lib.js +1 -1
  52. package/dist/main.js +43 -44
  53. package/dist/map.js +8 -8
  54. package/dist/material.css +1 -1
  55. package/dist/pdf-reader.js +1 -1
  56. package/dist/print.js +2 -2
  57. package/dist/{public-CZBz4JVu.js → public-vxiijIJF.js} +20 -20
  58. package/dist/{rich-code-block-597e0_Qm.js → rich-code-block-BwvCXPqq.js} +5 -5
  59. package/dist/{sortable-provider-CK_xAk2H.js → sortable-provider-D2pAFWQB.js} +2 -2
  60. package/dist/{dist-B61_o9Mg.js → spinner-BpVwI1ps.js} +478 -256
  61. package/dist/{stored-language-IaL1Ftn_.js → stored-language-Beyj2ult.js} +4 -2
  62. package/dist/theme-picker.js +2 -2
  63. package/dist/{theme-toggle-Dnjn83TJ.js → theme-toggle-BTYRPkP4.js} +1 -1
  64. package/dist/{toolbar-items-CCwIu7fE.js → toolbar-items-CIMo4F9q.js} +106 -106
  65. package/dist/{translate-material-v9u-e7Kd.js → translate-material-DEUlaL_1.js} +2 -2
  66. package/dist/{translator-Dk4_qE6U.js → translator-CBgIb3zP.js} +1 -1
  67. package/dist/{use-chat-composer-Ot5XUbdn.js → use-chat-composer-D8UAsX0f.js} +4881 -4882
  68. package/dist/{button-tones-BwuVvAmd.js → use-click-lock-BZYtTmVt.js} +37 -7
  69. package/dist/{use-heading-spy-DjKixjLm.js → use-heading-spy-C5LXtA8Z.js} +1 -1
  70. package/dist/{use-material-translation-DOkTaWK_.js → use-material-translation-DWWeeg-B.js} +2 -2
  71. package/docs/components/buttons-and-actions.md +2 -1
  72. package/docs/components/data-table-filter-and-lists.md +29 -9
  73. package/docs/components/feedback-and-status.md +22 -3
  74. package/docs/components/form-fields.md +7 -0
  75. package/docs/guides/server-lists-url.md +3 -2
  76. package/package.json +1 -1
  77. package/dist/spinner-BhuZuHK1.js +0 -229
package/CHANGELOG.md CHANGED
@@ -1,5 +1,27 @@
1
1
  # @nxgt/material
2
2
 
3
+ ## 3.50.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1830](https://github.com/softistx/nxgt-material/pull/1830) [`a42fa41`](https://github.com/softistx/nxgt-material/commit/a42fa41f31a418a7ddae46a34330f75e9fe684be) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Re-export `effectiveConditions` and `splitFilterErrors` (with `FilterSplitErrors`, `FilterFieldError` and `FilterFieldErrors`) from `@nxgt/material/components`, next to `parseFilterQuery`, so a server loader reads the effective conditions and the field errors of a filter query without a direct `@nxgt/material-core` dependency ([#1726](https://github.com/softistx/nxgt-material/issues/1726)).
8
+
9
+ - [#1837](https://github.com/softistx/nxgt-material/pull/1837) [`6ec2b9d`](https://github.com/softistx/nxgt-material/commit/6ec2b9dde775e3bcac235fc0c46567d98420aad6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add `hideOnSinglePage` to `PageFooter` and `ServerTable`: an opt-in that renders no footer when the result is a single page (no previous and no next page), in the table, cards and tiles layouts. The default is unchanged; `ServerTable` still announces the count in its live region, and keeps its selection status with `bulkActions` ([#1732](https://github.com/softistx/nxgt-material/issues/1732)).
10
+
11
+ - [#1833](https://github.com/softistx/nxgt-material/pull/1833) [`776fbc6`](https://github.com/softistx/nxgt-material/commit/776fbc66cd26f79d4cbdcc2155d23c58989272f1) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `IconButton` and `RowMenuTrigger` take `loading`, as `Button`'s (`RowMenu` takes it in `triggerProps`): `aria-busy` and `aria-disabled`, a spinner in place of the icon with no change of size, every click blocked, and the button stays focusable, so the focus stays on it when a row's menu closes and its action runs. A busy row does not open its menu again until it is over ([#1730](https://github.com/softistx/nxgt-material/issues/1730)).
12
+
13
+ - [#1843](https://github.com/softistx/nxgt-material/pull/1843) [`440665b`](https://github.com/softistx/nxgt-material/commit/440665b38e18055baf43e6cf98196e4004618610) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `StepUpDialog` gains `onRetry`: when the code request failed (`requestError`), the alert holds a "Retry" button (`labels.retry`, `material.step-up-dialog.retry` in English and French) that calls it. While the returned promise is pending the button is busy and keeps the focus; once the request succeeds the code field takes the focus, and a retry that fails again keeps the focus on "Retry" and announces the new error, even when its text is the same. Without `onRetry` nothing changes ([#1831](https://github.com/softistx/nxgt-material/issues/1831)).
14
+
15
+ ### Patch Changes
16
+
17
+ - [#1842](https://github.com/softistx/nxgt-material/pull/1842) [`cb50aae`](https://github.com/softistx/nxgt-material/commit/cb50aaeef0d7d96a8b5dcec47935da3b77cc6aaa) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Fix the touch hit areas of `static` close buttons ([#1733](https://github.com/softistx/nxgt-material/issues/1733)). A tap on a section header of the phone filters sheet, or on a field of the DataGrid's phone row panel, did nothing on a touch screen: the Close button was `static`, so its invisible 44px hit area was placed against the whole sheet and covered it. These buttons (and the gallery's column arrows, and the switcher's close) are now `relative` with their offsets reset, and cover only their own corner.
18
+
19
+ - [#1844](https://github.com/softistx/nxgt-material/pull/1844) [`1f2e06c`](https://github.com/softistx/nxgt-material/commit/1f2e06c04129f9446d4cfb2523110ac8c3ff626f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - fix(filter): a quick `switch` or `checkbox` field is drawn as a toggle chip, not an add pill ([#1722](https://github.com/softistx/nxgt-material/issues/1722)). Off, `FilterQuickToggle` shows its label alone, with no plus icon and no dashed border; on, the chip's check mark and selected look. It stays a button with `aria-pressed`. The dashed "+ Field" pill remains for the quick fields that open an editor.
20
+
21
+ - [#1834](https://github.com/softistx/nxgt-material/pull/1834) [`2e083b7`](https://github.com/softistx/nxgt-material/commit/2e083b75c1b851cf34c119676b48c35ffe0fa284) Thanks [@SteveGT96](https://github.com/SteveGT96)! - ServerTable with `filter`: the no-match empty state always offers "Clear all", a single active chip included, and its label is `empty.clear` when set ([#1731](https://github.com/softistx/nxgt-material/issues/1731)). Locked conditions stay.
22
+
23
+ - [#1841](https://github.com/softistx/nxgt-material/pull/1841) [`7072131`](https://github.com/softistx/nxgt-material/commit/70721316d9c32b82d8577e5937b635d30349c02c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `VerificationCode` and `StepUpDialog`: once a resend settles, with or without a throttle, the focus returns to the code field when "Resend" (or the page, after a disabled Resend dropped it) held it as the resend started; a focus the user moved elsewhere is left alone. `StepUpDialog` now accepts `autoFocus` and passes it to `VerificationCode`, so the code field takes the first focus instead of the title ([#1832](https://github.com/softistx/nxgt-material/issues/1832)).
24
+
3
25
  ## 3.49.0
4
26
 
5
27
  ### Minor Changes
package/README.md CHANGED
@@ -639,7 +639,7 @@ Not components: what the stylesheet gives any element.
639
639
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-servertable.webp" width="120" alt="ServerTable"> | [`ServerTable`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#servertable), `createSorting`, `tableFilters`, `defineFilterModel`, `parseFilterQuery`, `serializeFilterQuery`, `paramsFromQuery`, `serverPagination`… | A server-mode `DataTable` driven by the URL's search params, for any router: the Filter in its top band with the page's title (optional), description and actions, the sort, forward cursor paging, a selection reset on a new query, the empty page (a scene and an action for "nothing yet", the filters as removable chips), a compact band (`bandDensity`), icon-only Previous / Next (`pageControls`, 44px targets on a touch screen, focus kept while a page loads), actions that stay on the search's row on a phone (`bandActions`), a bulk bar that reserves no row until a selection, bulk actions with `appliesTo` that count and run only the selected rows they apply to (hidden at zero), an accessible `name`, a `max` rows with a notice, and `focusTrigger()` to give the focus back after a dialog, a `filterRef` to focus the Filter, a page past the last (rows deleted) that says so and links back to the first, an error state with Retry for a failed fetch (`error`, `onRetry`), and one count announced. | `ServerTable`, `createSorting`, `tableFilters`, `serverPagination` |
640
640
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-rowmenu.webp" width="120" alt="RowMenu"> | [`RowMenu`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#rowmenu), `RowMenuTrigger`, `rowMenuColumn` | A row's "..." button named after its row ("Actions for Ada"; 44px on touch, 36px with a mouse from `md`), its menu aligned to the end with the destructive item last and 44px items on touch, and a column helper for `DataTable` and `ServerTable` under a hidden but named "Actions" header; focus returns to the button, also from a dialog an item opened. | — |
641
641
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-listempty.webp" width="120" alt="ListEmpty"> | [`ListEmpty`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#listempty) | A list's empty page: nothing yet (a title, or a scene, a line and an action), or nothing matches with what narrows it and a way out (a button or a link); its title is an `h2` (`headingLevel`). | `ListEmpty` |
642
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-pagefooter.webp" width="120" alt="PageFooter"> | [`PageFooter`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#pagefooter) | The page footer of a feed that is not a table (a list of cards, a news feed) under a `FilterBar`: the range ("21–40 of 134") and Previous / Next as real links built from the URL's cursor trail (`pageInfo`, `totalCount`, `params`; `totalCount` is optional: a feed with no total shows no range, only Previous / Next), the same footer `ServerTable` draws, icon-only with `pageControls="icon"` (44px targets on a touch screen); an end with no page is a disabled button, `aria-disabled`. | `PageFooter` |
642
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-pagefooter.webp" width="120" alt="PageFooter"> | [`PageFooter`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#pagefooter) | The page footer of a feed that is not a table (a list of cards, a news feed) under a `FilterBar`: the range ("21–40 of 134") and Previous / Next as real links built from the URL's cursor trail (`pageInfo`, `totalCount`, `params`; `totalCount` is optional: a feed with no total shows no range, only Previous / Next; `hideOnSinglePage` renders nothing when there is no previous and no next page), the same footer `ServerTable` draws, icon-only with `pageControls="icon"` (44px targets on a touch screen); an end with no page is a disabled button, `aria-disabled`. | `PageFooter` |
643
643
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-datagrid.webp" width="120" alt="DataGrid"> | [`DataGrid`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#datagrid) | An editable grid over `DataTable`'s columns: spreadsheet keys, a selected range, editors for text, numbers (with codes such as "abs"), options, dates and checkboxes, or your own; paste from Excel or Sheets, a fill handle that continues series, resizable, hideable and reorderable columns, undo, totals, and saving per cell, per row or in a batch with versions and conflicts ([guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/data-grid.md)). Long grids render only what is in view; on a phone it is a list of rows that open a panel. | — (later) |
644
644
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-daygroupedlist.webp" width="120" alt="DayGroupedList"> | [`DayGroupedList`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#daygroupedlist), `groupByDay` | A list split by day — Today, Yesterday, This week, Earlier — under headings that stick while their items scroll. | — (later) |
645
645
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-filter.webp" width="120" alt="Filter"> | [`Filter`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#filter), `FilterProvider`, `FilterContent`, `FilterChips`, `FilterPresets`, `FilterSheetTrigger`, `FilterBar`, `useFilterUrlQuery` · `FilterFormField` | Schema-driven filters with chips, presets, validation, and URL or storage persistence, and a query-driven `variant="bar"` / `"facets"` (quick filters, locked conditions, a phone sheet, a URL codec for a loader; `bandDensity="compact"` as on `ServerTable`), and `FilterBar`, the same bar bound to the URL for a feed or list without a table (`useFilterUrlQuery` is its hook, also `ServerTable`'s), a field `default` shown as an uncounted hint chip (a button that opens the editor on the default), a pressed toggle or checked values with a "Default" word (`defaults` prop), a `scope` field as a leading pill kept by "Clear all", a server refusal shown on the chip (`errors`, its words in the Alert under the bar unless `errorSummary={false}`), on the search box (`searchError`) or as an Alert under the bar (`formError`) and a model with `search: false`; the filter bar's "Filters (N)" (`FilterSheetTrigger`) can be placed inside a `ServerTable` (its actions). | `Filter`, `FilterProvider`, `FilterContent`, `FilterChips`, `FilterPresets`, `FilterSheetTrigger`, `FilterFormField`; `FilterBar`, `useFilterUrlQuery`: — (later, #1569) |
@@ -1,5 +1,5 @@
1
- import { i as e, r as t, t as n } from "./stored-language-IaL1Ftn_.js";
2
- import { r } from "./translator-Dk4_qE6U.js";
1
+ import { i as e, r as t, t as n } from "./stored-language-Beyj2ult.js";
2
+ import { r } from "./translator-CBgIb3zP.js";
3
3
  import { t as i } from "./_baseIsEqual-C6ksIHya.js";
4
4
  import { useMemo as a } from "react";
5
5
  import { asyncThunkCreator as o, buildCreateSlice as s } from "@reduxjs/toolkit";
@@ -1,26 +1,14 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { t } from "./is-production-GLw59WU8.js";
3
3
  import { n, t as r } from "./dist-DVRQkaTK.js";
4
- import { n as i, t as a } from "./dist-B61_o9Mg.js";
5
- import { a as o, i as s, r as c, t as l } from "./button-tones-BwuVvAmd.js";
6
- import { t as u } from "./spinner-BhuZuHK1.js";
7
- import { t as d } from "./button-group-context-CaP0X5p_.js";
8
- import { t as f } from "./has-text-content-Ds2dkHX_.js";
9
- import { Children as p, Fragment as m, cloneElement as h, isValidElement as g, useCallback as _, useContext as v, useEffect as y, useRef as b, useState as x } from "react";
10
- import { jsx as S, jsxs as C } from "react/jsx-runtime";
11
- //#region lib/components/ui/actions/button/busy-click-capture.ts
12
- function w(e, t, n) {
13
- return (r) => {
14
- if (e || t.isLocked()) {
15
- r.preventDefault(), r.stopPropagation();
16
- return;
17
- }
18
- t.lock(), n?.(r);
19
- };
20
- }
21
- //#endregion
4
+ import { n as i, r as a, t as o } from "./spinner-BpVwI1ps.js";
5
+ import { a as s, i as c, n as l, o as u, s as d, t as f } from "./use-click-lock-BZYtTmVt.js";
6
+ import { t as p } from "./button-group-context-CaP0X5p_.js";
7
+ import { t as m } from "./has-text-content-Ds2dkHX_.js";
8
+ import { Children as h, Fragment as g, cloneElement as _, isValidElement as v, useContext as y, useEffect as b } from "react";
9
+ import { jsx as x, jsxs as S } from "react/jsx-runtime";
22
10
  //#region lib/components/ui/actions/button/button.compound-variants.ts
23
- var T = [
11
+ var C = [
24
12
  {
25
13
  variant: "filled",
26
14
  color: "primary",
@@ -196,7 +184,7 @@ var T = [
196
184
  color: "default",
197
185
  class: `${c.default} ${l.default} hover:bg-foreground/10 active:bg-muted focus:bg-foreground/10`
198
186
  }
199
- ], E = a("nxgt-btn nxgt-morph-fill inline-flex center gap-[var(--btn-gap,0.5rem)] h-min cursor-pointer whitespace-nowrap disabled:pointer-events-none aria-busy:cursor-progress [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-[var(--btn-ic,1rem)] shrink-0 [&_svg]:shrink-0 aria-invalid:[--btn-focus:var(--color-error)] aria-invalid:[--btn-line:var(--color-error)] px-[calc(var(--btn-px,1rem)+var(--btn-dx,0px))] py-2 has-[>svg]:px-[calc(var(--btn-px,1rem)-var(--btn-pxi,0.25rem)+var(--btn-dx,0px))]", {
187
+ ], w = i("nxgt-btn nxgt-morph-fill inline-flex center gap-[var(--btn-gap,0.5rem)] h-min cursor-pointer whitespace-nowrap disabled:pointer-events-none aria-busy:cursor-progress [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-[var(--btn-ic,1rem)] shrink-0 [&_svg]:shrink-0 aria-invalid:[--btn-focus:var(--color-error)] aria-invalid:[--btn-line:var(--color-error)] px-[calc(var(--btn-px,1rem)+var(--btn-dx,0px))] py-2 has-[>svg]:px-[calc(var(--btn-px,1rem)-var(--btn-pxi,0.25rem)+var(--btn-dx,0px))]", {
200
188
  variants: {
201
189
  variant: {
202
190
  filled: "",
@@ -223,11 +211,11 @@ var T = [
223
211
  variant: "filled",
224
212
  color: "primary"
225
213
  },
226
- compoundVariants: T
227
- }), D = ((e) => E(e?.variant === "ghost" && e.color == null ? {
214
+ compoundVariants: C
215
+ }), T = ((e) => w(e?.variant === "ghost" && e.color == null ? {
228
216
  ...e,
229
217
  color: "default"
230
- } : e)), O = {
218
+ } : e)), E = {
231
219
  xs: "min-h-6",
232
220
  sm: "min-h-8",
233
221
  default: "min-h-9",
@@ -235,94 +223,75 @@ var T = [
235
223
  xl: "min-h-14",
236
224
  "2xl": "min-h-24"
237
225
  };
238
- function k(e, t) {
239
- return !e || t?.startsWith("icon") ? !1 : `h-auto ${t ? O[t] : ""} whitespace-normal **:whitespace-normal text-center`;
226
+ function D(e, t) {
227
+ return !e || t?.startsWith("icon") ? !1 : `h-auto ${t ? E[t] : ""} whitespace-normal **:whitespace-normal text-center`;
240
228
  }
241
229
  //#endregion
242
230
  //#region lib/components/ui/actions/button/label-text.tsx
243
- function A(e) {
231
+ function O(e) {
244
232
  let t = [], n = 0, r = [], i = () => {
245
233
  if (r.length === 0) return;
246
234
  let e = r.join("");
247
- r = [], e.trim() === "" ? t.push(e) : t.push(/* @__PURE__ */ S("span", {
235
+ r = [], e.trim() === "" ? t.push(e) : t.push(/* @__PURE__ */ x("span", {
248
236
  "data-slot": "button-label",
249
237
  children: e
250
238
  }, `label-${n++}`));
251
239
  };
252
- for (let n of p.toArray(e)) {
240
+ for (let n of h.toArray(e)) {
253
241
  if (typeof n == "string" || typeof n == "number" || typeof n == "bigint") {
254
242
  r.push(n);
255
243
  continue;
256
244
  }
257
- i(), t.push(j(n));
245
+ i(), t.push(k(n));
258
246
  }
259
247
  return i(), t;
260
248
  }
261
- function j(e) {
262
- return g(e) && e.type === m ? h(e, void 0, A(e.props.children)) : e;
263
- }
264
- //#endregion
265
- //#region lib/components/ui/actions/button/use-click-lock.ts
266
- var M = 1e3;
267
- function N(e, t) {
268
- let n = b(!1), r = b(!1), i = b(void 0), [a, o] = x(!1), s = _(() => {
269
- n.current = !1, r.current = !1, clearTimeout(i.current), o(!1);
270
- }, []), c = _(() => {
271
- e && (n.current = !0, o(!0), clearTimeout(i.current), i.current = setTimeout(() => {
272
- r.current || s();
273
- }, M));
274
- }, [e, s]);
275
- return y(() => {
276
- n.current && (t ? r.current = !0 : r.current && s());
277
- }, [t, s]), y(() => () => clearTimeout(i.current), []), {
278
- locked: a,
279
- lock: c,
280
- isLocked: _(() => n.current, [])
281
- };
249
+ function k(e) {
250
+ return v(e) && e.type === g ? _(e, void 0, O(e.props.children)) : e;
282
251
  }
283
252
  //#endregion
284
253
  //#region lib/components/ui/actions/button/button.tsx
285
- function P({ className: i, variant: a = "filled", asChild: s = !1, children: c, color: l, size: p, loading: m = !1, lockOnClick: h, spinnerVariant: g = "2", wrap: _, shape: b, selected: x, disabled: T, onClickCapture: E, type: O = "button", ...j }) {
286
- let M = s ? r : "button", P = v(d), F = p ?? P, I = s && x !== void 0;
287
- y(() => {
254
+ function A({ className: i, variant: a = "filled", asChild: s = !1, children: c, color: l, size: h, loading: g = !1, lockOnClick: _, spinnerVariant: v = "2", wrap: C, shape: w, selected: E, disabled: k, onClickCapture: A, type: j = "button", ...M }) {
255
+ let N = s ? r : "button", P = y(p), F = h ?? P, I = s && E !== void 0;
256
+ b(() => {
288
257
  I && !t() && console.warn("Button: `selected` is ignored with `asChild`; set aria-pressed on the child element.");
289
258
  }, [I]);
290
- let L = !s && x !== void 0, R = v(o) || !!(j["aria-label"] || j["aria-labelledby"]) || f(c), z = N(h, m), B = m || z.locked, V = w(B, z, E);
291
- return /* @__PURE__ */ S(o, {
259
+ let L = !s && E !== void 0, R = y(d) || !!(M["aria-label"] || M["aria-labelledby"]) || m(c), z = f(_, g), B = g || z.locked, V = u(B, z, A);
260
+ return /* @__PURE__ */ x(d, {
292
261
  value: R,
293
- children: /* @__PURE__ */ C(M, {
262
+ children: /* @__PURE__ */ S(N, {
294
263
  "data-slot": "button",
295
264
  "data-variant": a,
296
265
  "data-color": l,
297
266
  "data-size": F,
298
- "data-shape": b,
299
- "data-selected": L && x ? "true" : void 0,
300
- className: e("w-fit max-w-full min-w-0 justify-center", s && "nxgt-btn-as-child overflow-clip text-ellipsis whitespace-nowrap [overflow-clip-margin:22px]", D({
267
+ "data-shape": w,
268
+ "data-selected": L && E ? "true" : void 0,
269
+ className: e("w-fit max-w-full min-w-0 justify-center", s && "nxgt-btn-as-child overflow-clip text-ellipsis whitespace-nowrap [overflow-clip-margin:22px]", T({
301
270
  variant: a,
302
271
  color: l,
303
272
  size: F
304
- }), k(_, F), i),
305
- type: s ? void 0 : O,
306
- disabled: T,
307
- ...j,
308
- "aria-disabled": B || j["aria-disabled"],
309
- "aria-busy": B || j["aria-busy"],
310
- "aria-pressed": L ? x : j["aria-pressed"],
273
+ }), D(C, F), i),
274
+ type: s ? void 0 : j,
275
+ disabled: k,
276
+ ...M,
277
+ "aria-disabled": B || M["aria-disabled"],
278
+ "aria-busy": B || M["aria-busy"],
279
+ "aria-pressed": L ? E : M["aria-pressed"],
311
280
  onClickCapture: V,
312
- children: [B && /* @__PURE__ */ S(u, {
313
- variant: g,
281
+ children: [B && /* @__PURE__ */ x(o, {
282
+ variant: v,
314
283
  color: a === "filled" ? "light" : l,
315
- className: e("starting:scale-0 duration-500", g === "4" ? "size-7.5" : "size-4.5")
316
- }), /* @__PURE__ */ S(n, { children: s ? c : A(c) })]
284
+ className: e("starting:scale-0 duration-500", v === "4" ? "size-7.5" : "size-4.5")
285
+ }), /* @__PURE__ */ x(n, { children: s ? c : O(c) })]
317
286
  })
318
287
  });
319
288
  }
320
- function F({ tooltip: e, ...t }) {
321
- return e ? /* @__PURE__ */ S(i, {
289
+ function j({ tooltip: e, ...t }) {
290
+ return e ? /* @__PURE__ */ x(a, {
322
291
  content: e,
323
- children: /* @__PURE__ */ S(P, { ...t })
324
- }) : /* @__PURE__ */ S(P, { ...t });
292
+ children: /* @__PURE__ */ x(A, { ...t })
293
+ }) : /* @__PURE__ */ x(A, { ...t });
325
294
  }
326
- var I = "tonal";
295
+ var M = "tonal";
327
296
  //#endregion
328
- export { D as a, A as i, I as n, w as o, N as r, F as t };
297
+ export { T as i, M as n, O as r, j as t };
package/dist/charts.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { t as e } from "./ui.utils-CAnKTCw5.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { t as n } from "./warn-once-C_e47JM8.js";
4
- import { t as r } from "./use-material-translation-DOkTaWK_.js";
5
- import { t as i } from "./button-DJgaQbBD.js";
4
+ import { t as r } from "./use-material-translation-DWWeeg-B.js";
5
+ import { t as i } from "./button-BRUaHD8z.js";
6
6
  import { t as a } from "./use-ssr-media-query-C6M5m8sf.js";
7
7
  import { i as o, n as s, r as c, t as l } from "./util-4heV2LPI.js";
8
8
  import { t as u } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
9
- import { t as d } from "./chip-DN44R1vW.js";
9
+ import { t as d } from "./chip-DneTrtNj.js";
10
10
  import { c as f, d as p, f as m, i as h, o as g, p as _, s as v, t as y } from "./line-path-C5pZGC49.js";
11
11
  import { t as b } from "./live-status-BGPaN8r8.js";
12
12
  import { t as x } from "./linear-G97mfnKF.js";
@@ -1,7 +1,7 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
- import { n as t } from "./dist-B61_o9Mg.js";
3
- import { a as n } from "./button-tones-BwuVvAmd.js";
4
- import { t as r } from "./use-material-translation-DOkTaWK_.js";
2
+ import { r as t } from "./spinner-BpVwI1ps.js";
3
+ import { s as n } from "./use-click-lock-BZYtTmVt.js";
4
+ import { t as r } from "./use-material-translation-DWWeeg-B.js";
5
5
  import { t as i } from "./react-node-text-Crkpfpco.js";
6
6
  import { cloneElement as a, isValidElement as o } from "react";
7
7
  import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
@@ -2,13 +2,13 @@ import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { t as n } from "./is-production-GLw59WU8.js";
4
4
  import { a as r } from "./dist-lmHmz_bu.js";
5
- import { c as i, d as a, f as o, n as s, t as c } from "./dropdown-menu-DRXYP9ta.js";
6
- import { a as l, i as u, n as d } from "./field-blur-context-B-fSpl1H.js";
7
- import { a as f, d as p, r as m, t as h, u as g } from "./toolbar-items-CCwIu7fE.js";
8
- import { t as _ } from "./use-material-translation-DOkTaWK_.js";
9
- import { i as v, n as y, o as b, t as x } from "./code-language-items-BJE3VuQg.js";
5
+ import { c as i, d as a, f as o, n as s, t as c } from "./dropdown-menu-XLlxfDgq.js";
6
+ import { a as l, i as u, n as d } from "./field-blur-context-Cwt4TuBq.js";
7
+ import { a as f, d as p, r as m, t as h, u as g } from "./toolbar-items-CIMo4F9q.js";
8
+ import { t as _ } from "./use-material-translation-DWWeeg-B.js";
9
+ import { i as v, n as y, o as b, t as x } from "./code-language-items-BKEUhQlF.js";
10
10
  import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
11
- import { n as C, t as w } from "./escape-owner-DCrlERLM.js";
11
+ import { n as C, t as w } from "./escape-owner-B9eCwjLw.js";
12
12
  import { t as T } from "./skeleton-DSdtr2qc.js";
13
13
  import { t as E } from "./react-node-text-Crkpfpco.js";
14
14
  import D, { memo as O, useCallback as ee, useEffect as k, useId as A, useImperativeHandle as j, useMemo as M, useRef as N, useState as P } from "react";
@@ -1,14 +1,14 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { a as t } from "./dist-lmHmz_bu.js";
3
- import { d as n, r, t as i, u as a } from "./toolbar-items-CCwIu7fE.js";
4
- import { t as o } from "./use-material-translation-DOkTaWK_.js";
5
- import { i as s, n as c, o as l } from "./code-language-items-BJE3VuQg.js";
6
- import { r as u, t as d } from "./field-blur-DYGyIdfD.js";
3
+ import { d as n, r, t as i, u as a } from "./toolbar-items-CIMo4F9q.js";
4
+ import { t as o } from "./use-material-translation-DWWeeg-B.js";
5
+ import { i as s, n as c, o as l } from "./code-language-items-BKEUhQlF.js";
6
+ import { r as u, t as d } from "./field-blur-5uRDFHvB.js";
7
7
  import { t as f } from "./skeleton-DSdtr2qc.js";
8
8
  import { t as p } from "./live-status-BGPaN8r8.js";
9
9
  import { t as m } from "./use-mobile-BDro060N.js";
10
10
  import { t as h } from "./react-node-text-Crkpfpco.js";
11
- import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-BJ9ewxSC.js";
11
+ import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-R_nPN_-d.js";
12
12
  import { useEffect as k, useRef as A, useState as j } from "react";
13
13
  import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
14
14
  import { ChevronDown as F, ChevronUp as I, Columns2 as L } from "lucide-react";
@@ -1,5 +1,5 @@
1
- import { d as e, f as t } from "./dropdown-menu-DRXYP9ta.js";
2
- import { t as n } from "./use-material-translation-DOkTaWK_.js";
1
+ import { d as e, f as t } from "./dropdown-menu-XLlxfDgq.js";
2
+ import { t as n } from "./use-material-translation-DWWeeg-B.js";
3
3
  import { t as r } from "./live-status-BGPaN8r8.js";
4
4
  import { useEffect as i, useRef as a, useState as o } from "react";
5
5
  import { jsx as s } from "react/jsx-runtime";