@nxgt/material 3.48.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 (120) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +3 -3
  3. package/dist/{async-slice-DlvKCKAa.js → async-slice-3loEtzUY.js} +2 -2
  4. package/dist/{button-yaltbQmC.js → button-BRUaHD8z.js} +81 -112
  5. package/dist/charts.js +144 -144
  6. package/dist/{chip-BqWbbr1b.js → chip-DneTrtNj.js} +56 -56
  7. package/dist/{code-editor-C9qBNoYb.js → code-editor-R_nPN_-d.js} +308 -308
  8. package/dist/code-editor.js +47 -47
  9. package/dist/{code-language-items-DAHtfQ7W.js → code-language-items-BKEUhQlF.js} +2 -2
  10. package/dist/components/components.css +1 -0
  11. package/dist/components/ui/actions/action-card/action-card-indicator.css +48 -0
  12. package/dist/components/ui/actions/action-card/action-card-modes.css +4 -1
  13. package/dist/components/ui/actions/action-card/action-card-tile.css +141 -0
  14. package/dist/components/ui/actions/action-card/action-card.css +33 -3
  15. package/dist/{components-Ox6FHmpx.js → components-D6xFLcoE.js} +17646 -17567
  16. package/dist/components.js +26 -27
  17. package/dist/{dialog-CCCcnTIx.js → dialog-S7dLsYRZ.js} +16 -16
  18. package/dist/dnd.js +1 -1
  19. package/dist/{dropdown-menu-Df8785nt.js → dropdown-menu-XLlxfDgq.js} +271 -272
  20. package/dist/editor.js +1028 -1028
  21. package/dist/{empty-state-DcF4TBzi.js → empty-state-Dsf6R-Zo.js} +37 -37
  22. package/dist/{escape-owner-C4W_sOAU.js → escape-owner-B9eCwjLw.js} +1 -1
  23. package/dist/{field-blur-CJHzVSh9.js → field-blur-5uRDFHvB.js} +1 -1
  24. package/dist/{field-blur-context-Cft9s7Hg.js → field-blur-context-Cwt4TuBq.js} +1 -1
  25. package/dist/hooks.js +4 -4
  26. package/dist/{hover-card-C0fw2kLK.js → hover-card-PHUgRSjJ.js} +24 -24
  27. package/dist/{i18n-provider-C0fB0sEL.js → i18n-provider-DPM_ALQ4.js} +1 -1
  28. package/dist/i18n.js +5 -5
  29. package/dist/{icon-badge-aJ22mKGh.js → icon-badge-Dh6-FNOF.js} +3 -3
  30. package/dist/{icon-button-CN9r5TNE.js → icon-button-DSC2-IAG.js} +118 -86
  31. package/dist/lib/components/ui/actions/action-card/action-card-semantics.d.ts +25 -2
  32. package/dist/lib/components/ui/actions/action-card/action-card.d.ts +18 -2
  33. package/dist/lib/components/ui/actions/action-card/partials/action-card-icon.d.ts +6 -0
  34. package/dist/lib/components/ui/actions/action-card/partials/action-card-meta.d.ts +15 -0
  35. package/dist/lib/components/ui/actions/action-card/partials/action-card-status.d.ts +6 -0
  36. package/dist/lib/components/ui/actions/action-card/partials/action-card-text.d.ts +20 -0
  37. package/dist/lib/components/ui/actions/action-card/partials/action-card-title-button.d.ts +14 -0
  38. package/dist/lib/components/ui/actions/action-card/partials/action-card-trail.d.ts +6 -0
  39. package/dist/lib/components/ui/actions/action-card/use-action-card-names.d.ts +22 -0
  40. package/dist/lib/components/ui/actions/action-card/use-reveal.d.ts +23 -0
  41. package/dist/lib/components/ui/actions/button/button.variants.d.ts +1 -1
  42. package/dist/lib/components/ui/actions/icon-button/icon-button-busy.d.ts +22 -0
  43. package/dist/lib/components/ui/actions/icon-button/icon-button-shape.d.ts +2 -0
  44. package/dist/lib/components/ui/actions/icon-button/icon-button.d.ts +7 -0
  45. package/dist/lib/components/ui/actions/icon-button/icon-button.variants.d.ts +1 -1
  46. package/dist/lib/components/ui/collections/filter/bar/partials/filter-quick-toggle.d.ts +3 -2
  47. package/dist/lib/components/ui/collections/filter/sections/filter-sections-classes.d.ts +7 -1
  48. package/dist/lib/components/ui/collections/page-footer/page-footer.d.ts +6 -1
  49. package/dist/lib/components/ui/collections/row-menu/row-menu-trigger.d.ts +5 -2
  50. package/dist/lib/components/ui/collections/row-menu/row-menu.d.ts +1 -1
  51. package/dist/lib/components/ui/collections/server-table/index.d.ts +1 -1
  52. package/dist/lib/components/ui/collections/server-table/partials/server-table-empty-chips.d.ts +5 -3
  53. package/dist/lib/components/ui/collections/server-table/types-paging.d.ts +17 -0
  54. package/dist/lib/components/ui/collections/server-table/types.d.ts +3 -10
  55. package/dist/lib/components/ui/dates/duration-field/partials/use-duration-box.d.ts +1 -1
  56. package/dist/lib/components/ui/display/badge/badge.d.ts +1 -1
  57. package/dist/lib/components/ui/display/day-separator/day-separator.d.ts +1 -1
  58. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-body.d.ts +5 -3
  59. package/dist/lib/components/ui/feedback/step-up-dialog/partials/step-up-request-error.d.ts +15 -0
  60. package/dist/lib/components/ui/feedback/step-up-dialog/step-up-dialog.d.ts +6 -3
  61. package/dist/lib/components/ui/feedback/step-up-dialog/types.d.ts +12 -1
  62. package/dist/lib/components/ui/feedback/step-up-dialog/use-retry-focus.d.ts +27 -0
  63. package/dist/lib/components/ui/feedback/step-up-dialog/use-retry.d.ts +11 -0
  64. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
  65. package/dist/lib/components/ui/fields/slider/split-slider-props.d.ts +20 -20
  66. package/dist/lib/components/ui/fields/slider/use-slider-control.d.ts +20 -20
  67. package/dist/lib/components/ui/fields/verification-code/use-settled-focus.d.ts +10 -0
  68. package/dist/lib/components/ui/layout/app-shell/route-transition.d.ts +1 -1
  69. package/dist/lib/components/ui/media/carousel/use-carousel-engine.d.ts +1 -1
  70. package/dist/lib/components/ui/media/media-player/engine/use-queue-actions.d.ts +1 -1
  71. package/dist/lib/components/ui/media/pdf-reader/pdf-reader.slice.d.ts +1 -1
  72. package/dist/lib/components/ui/selection/choice-group/use-choice-group-field.d.ts +34 -34
  73. package/dist/lib/components/ui/widgets/chat/chat-message.variants.d.ts +2 -2
  74. package/dist/lib/components/ui/widgets/event-calendar/use-event-calendar.d.ts +1 -1
  75. package/dist/lib/i18n/resources/en/en.d.ts +1 -0
  76. package/dist/lib/i18n/resources/en/material.json.d.ts +2 -1
  77. package/dist/lib/i18n/resources/fr/fr.d.ts +1 -0
  78. package/dist/lib/i18n/resources/fr/material.json.d.ts +2 -1
  79. package/dist/lib/i18n/resources/resources.d.ts +2 -0
  80. package/dist/lib/i18n/translator.d.ts +1 -1
  81. package/dist/lib.js +1 -1
  82. package/dist/main.js +43 -44
  83. package/dist/map.js +79 -79
  84. package/dist/material.css +1 -1
  85. package/dist/nxgt-theme-ivgNca3z.js +37 -0
  86. package/dist/pdf-reader.js +1 -1
  87. package/dist/print.js +2 -2
  88. package/dist/{public-zVb_Nq_D.js → public-vxiijIJF.js} +82 -82
  89. package/dist/{rich-code-block-DMWZZJma.js → rich-code-block-BwvCXPqq.js} +52 -52
  90. package/dist/{sortable-provider-DstbgMVf.js → sortable-provider-D2pAFWQB.js} +218 -218
  91. package/dist/{tooltip-CkttDIab.js → spinner-BpVwI1ps.js} +503 -278
  92. package/dist/{stored-language-IaL1Ftn_.js → stored-language-Beyj2ult.js} +4 -2
  93. package/dist/theme-picker.js +45 -45
  94. package/dist/{theme-store-CSl51uNH.js → theme-store-BdPp43cV.js} +13 -13
  95. package/dist/{theme-toggle-CGW2_K54.js → theme-toggle-BTYRPkP4.js} +16 -16
  96. package/dist/themes.js +17 -17
  97. package/dist/{toggle-group-BMJNcFAC.js → toggle-group-BkH23Jk4.js} +11 -11
  98. package/dist/{toolbar-items-CsLGJMEJ.js → toolbar-items-CIMo4F9q.js} +421 -421
  99. package/dist/{translate-material-v9u-e7Kd.js → translate-material-DEUlaL_1.js} +2 -2
  100. package/dist/{translator-Dk4_qE6U.js → translator-CBgIb3zP.js} +1 -1
  101. package/dist/{use-chat-composer-Brcb5f7r.js → use-chat-composer-D8UAsX0f.js} +6228 -5999
  102. package/dist/{button-tones-BwuVvAmd.js → use-click-lock-BZYtTmVt.js} +37 -7
  103. package/dist/{use-heading-spy-DjKixjLm.js → use-heading-spy-C5LXtA8Z.js} +1 -1
  104. package/dist/{use-material-translation-DOkTaWK_.js → use-material-translation-DWWeeg-B.js} +2 -2
  105. package/dist/{use-theme-DMcyJ52N.js → use-theme-BCLireTd.js} +1 -1
  106. package/docs/components/buttons-and-actions.md +64 -5
  107. package/docs/components/data-table-filter-and-lists.md +30 -10
  108. package/docs/components/feedback-and-status.md +22 -3
  109. package/docs/components/form-fields.md +7 -0
  110. package/docs/guides/cards-and-tiles.md +60 -0
  111. package/docs/guides/server-lists-url.md +3 -2
  112. package/docs/roadmap.md +11 -0
  113. package/lib/components/components.css +1 -0
  114. package/lib/components/ui/actions/action-card/action-card-indicator.css +48 -0
  115. package/lib/components/ui/actions/action-card/action-card-modes.css +4 -1
  116. package/lib/components/ui/actions/action-card/action-card-tile.css +141 -0
  117. package/lib/components/ui/actions/action-card/action-card.css +33 -3
  118. package/package.json +1 -1
  119. package/dist/nxgt-theme-ZS945iMP.js +0 -37
  120. package/dist/spinner-C4CgDEYm.js +0 -229
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
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
+
25
+ ## 3.49.0
26
+
27
+ ### Minor Changes
28
+
29
+ - [#1820](https://github.com/softistx/nxgt-material/pull/1820) [`22d3dd0`](https://github.com/softistx/nxgt-material/commit/22d3dd018e478e9cc8907697be27a34775a91de3) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ActionCard` takes `status` (a soft badge line), `meta` (one line, with a tooltip only while it is clipped), a trailing `action` outside the press surface (the title becomes the card's one button, so the card and its action are two tab stops and nothing nests), and `variant="tile"`, a compact grid cell with no minimum width and no indicator by default. Without `action` the DOM is unchanged. With an `action`, `title` is required (the button's text; development builds warn without one and the button is then named after the status and the meta line), the `description` is the button's description, a `role` (`switch`, `checkbox`, `radio`) and its `aria-checked` move to the button instead of the plain root, hover and press answer only the title button, and the meta tooltip follows hover and focus of the card (only Escape dismisses it). A tile's `withIndicator` gets its own column. `RowMenu`'s children (radio and checkbox items) take the text size of its `items`, as their 44px floor already did.
30
+
31
+ ### Patch Changes
32
+
33
+ - [#1823](https://github.com/softistx/nxgt-material/pull/1823) [`bc5775c`](https://github.com/softistx/nxgt-material/commit/bc5775c7cfb2354616214d21f3318102793b10bd) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New recipe `Guides/Recipes/Status board`: a board of tiles in sections (an `ActionCard` tile with a status badge, the occupant as meta and a menu that changes the status) and an occupancy screen (figures, a table with a rate per section, tiles on a phone), with its code in the `nxgt-material` plugin's `screen-recipes` skill (2.5.0).
34
+
3
35
  ## 3.48.0
4
36
 
5
37
  ### Minor Changes
package/README.md CHANGED
@@ -518,7 +518,7 @@ Not components: what the stylesheet gives any element.
518
518
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-loadmorebutton.webp" width="120" alt="LoadMoreButton"> | [`LoadMoreButton`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#loadmorebutton) | "Load more" button for cursor pagination; icon-only with a tooltip unless `expanded`. | `LoadMoreButton` |
519
519
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-scrolltotop.webp" width="120" alt="ScrollToTop"> | [`ScrollToTop`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#scrolltotop) | Floating button that appears past a scroll threshold. | `ScrollToTop` |
520
520
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-scrolltolatestbutton.webp" width="120" alt="ScrollToLatestButton"> | [`ScrollToLatestButton`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#scrolltolatestbutton) | "Jump to latest" over a scroll box: an arrow that widens into "3 new messages". | — |
521
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-actioncard.webp" width="120" alt="ActionCard"> | [`ActionCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#actioncard) | Clickable card (a `role="button"` with `aria-pressed`) with a shape icon that morphs when chosen, title, description and active indicator. | `ActionCard` |
521
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-actioncard.webp" width="120" alt="ActionCard"> | [`ActionCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#actioncard) | Clickable card (a `role="button"` with `aria-pressed`) with a shape icon that morphs when chosen, title, description and active indicator; `status`, `meta`, a trailing `action` (a `RowMenu`) and `variant="tile"` make a compact cell for status boards. | `ActionCard` |
522
522
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-themetoggle.webp" width="120" alt="ThemeToggle"> | [`ThemeToggle`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#themetoggle) | Light / dark / system switch that stores and applies the choice. | `ThemeToggle` |
523
523
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/buttons-actions-languageswitcher.webp" width="120" alt="LanguageSwitcher"> | [`LanguageSwitcher`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/buttons-and-actions.md#languageswitcher) | Globe button with a menu of the `I18nProvider` languages. | `LanguageSwitcher` |
524
524
 
@@ -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) |
@@ -805,7 +805,7 @@ which is private: adding it needs a GitHub account with access to it.
805
805
  | --- | --- |
806
806
  | skill `use-nxgt-material` | an index that picks the component by need and wires imports and `styles.css`; its references cover the tokens and themes, forms, i18n, tests by role, SSR and the other subpaths, read from these docs in `node_modules/@nxgt/material/docs/` |
807
807
  | skill `design-screens` | the library's visual language for a screen (hierarchy, rhythm, tones, surfaces, states, phone, dark, motion) and an 11-criteria grid to score a screen out of 5 |
808
- | skill `screen-recipes` | whole screens to start from (a home dashboard, a list with a detail sheet, forms and dialogs, tables and settings), each the code of a tested `Guides/Recipes/<Name>` story |
808
+ | skill `screen-recipes` | whole screens to start from (a home dashboard, a list with a detail sheet, forms and dialogs, tables and settings, a dense record page, a status board and an occupancy board), each the code of a tested `Guides/Recipes/<Name>` story |
809
809
  | agent `screen-builder` | builds a page or a form from the catalogue, with tests by role and name and an accessibility check, then looks at 360 and 1440 px screenshots in light and dark and fixes until the grid reads 4 everywhere |
810
810
  | agent `design-reviewer` | read-only: scores a screen's screenshots on the same 11 criteria and returns the fixes ranked, each with the component and prop |
811
811
  | skill `build-a-theme` + agent `theme-builder` | the app's own theme with `defineTheme`: seeds, tones, background and icon motif, generation, provider and picker; checks the AA contrast of the generated tokens in light and dark and looks at key screens |
@@ -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
- import { n as t, t as n } from "./dist-DVRQkaTK.js";
3
- import { o as r, t as i } from "./tooltip-CkttDIab.js";
4
- import { t as a } from "./is-production-GLw59WU8.js";
5
- import { t as o } from "./spinner-C4CgDEYm.js";
6
- import { a as s, i as c, r as l, t as u } from "./button-tones-BwuVvAmd.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
2
+ import { t } from "./is-production-GLw59WU8.js";
3
+ import { n, t as r } from "./dist-DVRQkaTK.js";
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",
@@ -59,42 +47,42 @@ var T = [
59
47
  {
60
48
  variant: "tonal",
61
49
  color: "primary",
62
- class: `${l.primary} ${u.primary} bg-primary/15 hover:bg-primary/10 active:bg-primary/5 focus:bg-primary/10`
50
+ class: `${c.primary} ${l.primary} bg-primary/15 hover:bg-primary/10 active:bg-primary/5 focus:bg-primary/10`
63
51
  },
64
52
  {
65
53
  variant: "tonal",
66
54
  color: "secondary",
67
- class: `${l.secondary} ${u.secondary} bg-secondary/15 hover:bg-secondary/10 active:bg-secondary/5 focus:bg-secondary/10`
55
+ class: `${c.secondary} ${l.secondary} bg-secondary/15 hover:bg-secondary/10 active:bg-secondary/5 focus:bg-secondary/10`
68
56
  },
69
57
  {
70
58
  variant: "tonal",
71
59
  color: "info",
72
- class: `${l.info} ${u.info} bg-info/15 hover:bg-info/10 active:bg-info/5 focus:bg-info/10`
60
+ class: `${c.info} ${l.info} bg-info/15 hover:bg-info/10 active:bg-info/5 focus:bg-info/10`
73
61
  },
74
62
  {
75
63
  variant: "tonal",
76
64
  color: "success",
77
- class: `${l.success} ${u.success} bg-success/15 hover:bg-success/10 active:bg-success/5 focus:bg-success/10`
65
+ class: `${c.success} ${l.success} bg-success/15 hover:bg-success/10 active:bg-success/5 focus:bg-success/10`
78
66
  },
79
67
  {
80
68
  variant: "tonal",
81
69
  color: "warning",
82
- class: `${l.warning} ${u.warning} bg-warning/15 hover:bg-warning/10 active:bg-warning/5 focus:bg-warning/10`
70
+ class: `${c.warning} ${l.warning} bg-warning/15 hover:bg-warning/10 active:bg-warning/5 focus:bg-warning/10`
83
71
  },
84
72
  {
85
73
  variant: "tonal",
86
74
  color: "error",
87
- class: `${l.error} ${u.error} bg-error/15 hover:bg-error/10 active:bg-error/5 focus:bg-error/10`
75
+ class: `${c.error} ${l.error} bg-error/15 hover:bg-error/10 active:bg-error/5 focus:bg-error/10`
88
76
  },
89
77
  {
90
78
  variant: "tonal",
91
79
  color: "default",
92
- class: `${l.default} ${u.default} bg-foreground/15 hover:bg-foreground/10 active:bg-muted focus:bg-muted`
80
+ class: `${c.default} ${l.default} bg-foreground/15 hover:bg-foreground/10 active:bg-muted focus:bg-muted`
93
81
  },
94
82
  {
95
83
  variant: "ghost",
96
84
  color: "primary",
97
- class: `${l.primary} ${u.primary} hover:bg-primary/10 active:bg-primary/5 focus:bg-primary/10`
85
+ class: `${c.primary} ${l.primary} hover:bg-primary/10 active:bg-primary/5 focus:bg-primary/10`
98
86
  },
99
87
  {
100
88
  variant: "ghost",
@@ -104,99 +92,99 @@ var T = [
104
92
  {
105
93
  variant: "ghost",
106
94
  color: "secondary",
107
- class: `${l.secondary} ${u.secondary} hover:bg-secondary/10 active:bg-secondary/5 focus:bg-secondary/10`
95
+ class: `${c.secondary} ${l.secondary} hover:bg-secondary/10 active:bg-secondary/5 focus:bg-secondary/10`
108
96
  },
109
97
  {
110
98
  variant: "ghost",
111
99
  color: "success",
112
- class: `${l.success} ${u.success} hover:bg-success/10 active:bg-success/5 focus:bg-success/10`
100
+ class: `${c.success} ${l.success} hover:bg-success/10 active:bg-success/5 focus:bg-success/10`
113
101
  },
114
102
  {
115
103
  variant: "ghost",
116
104
  color: "info",
117
- class: `${l.info} ${u.info} hover:bg-info/10 active:bg-info/5 focus:bg-info/10`
105
+ class: `${c.info} ${l.info} hover:bg-info/10 active:bg-info/5 focus:bg-info/10`
118
106
  },
119
107
  {
120
108
  variant: "ghost",
121
109
  color: "warning",
122
- class: `${l.warning} ${u.warning} hover:bg-warning/10 active:bg-warning/5 focus:bg-warning/10`
110
+ class: `${c.warning} ${l.warning} hover:bg-warning/10 active:bg-warning/5 focus:bg-warning/10`
123
111
  },
124
112
  {
125
113
  variant: "ghost",
126
114
  color: "error",
127
- class: `${l.error} ${u.error} hover:bg-error/10 active:bg-error/5 focus:bg-error/10`
115
+ class: `${c.error} ${l.error} hover:bg-error/10 active:bg-error/5 focus:bg-error/10`
128
116
  },
129
117
  {
130
118
  variant: "outlined",
131
119
  color: "primary",
132
- class: `${l.primary} ${u.primary} focus:bg-primary/10 hover:bg-primary/10`
120
+ class: `${c.primary} ${l.primary} focus:bg-primary/10 hover:bg-primary/10`
133
121
  },
134
122
  {
135
123
  variant: "outlined",
136
124
  color: "secondary",
137
- class: `${l.secondary} ${u.secondary} focus:bg-secondary/10 hover:bg-secondary/10`
125
+ class: `${c.secondary} ${l.secondary} focus:bg-secondary/10 hover:bg-secondary/10`
138
126
  },
139
127
  {
140
128
  variant: "outlined",
141
129
  color: "info",
142
- class: `${l.info} ${u.info} focus:bg-info/10 hover:bg-info/10`
130
+ class: `${c.info} ${l.info} focus:bg-info/10 hover:bg-info/10`
143
131
  },
144
132
  {
145
133
  variant: "outlined",
146
134
  color: "success",
147
- class: `${l.success} ${u.success} focus:bg-success/10 hover:bg-success/10`
135
+ class: `${c.success} ${l.success} focus:bg-success/10 hover:bg-success/10`
148
136
  },
149
137
  {
150
138
  variant: "outlined",
151
139
  color: "warning",
152
- class: `${l.warning} ${u.warning} focus:bg-warning/10 hover:bg-warning/10`
140
+ class: `${c.warning} ${l.warning} focus:bg-warning/10 hover:bg-warning/10`
153
141
  },
154
142
  {
155
143
  variant: "outlined",
156
144
  color: "error",
157
- class: `${l.error} ${u.error} focus:bg-error/10 hover:bg-error/10`
145
+ class: `${c.error} ${l.error} focus:bg-error/10 hover:bg-error/10`
158
146
  },
159
147
  {
160
148
  variant: "outlined",
161
149
  color: "default",
162
- class: `${l.default} ${u.default} focus:bg-foreground/10 hover:bg-foreground/10`
150
+ class: `${c.default} ${l.default} focus:bg-foreground/10 hover:bg-foreground/10`
163
151
  },
164
152
  {
165
153
  variant: "link",
166
154
  color: "primary",
167
- class: `${l.primary} ${u.primary} hover:bg-primary/10 active:bg-primary/5 focus:bg-primary/10`
155
+ class: `${c.primary} ${l.primary} hover:bg-primary/10 active:bg-primary/5 focus:bg-primary/10`
168
156
  },
169
157
  {
170
158
  variant: "link",
171
159
  color: "secondary",
172
- class: `${l.secondary} ${u.secondary} hover:bg-secondary/10 active:bg-secondary/5 focus:bg-secondary/10`
160
+ class: `${c.secondary} ${l.secondary} hover:bg-secondary/10 active:bg-secondary/5 focus:bg-secondary/10`
173
161
  },
174
162
  {
175
163
  variant: "link",
176
164
  color: "success",
177
- class: `${l.success} ${u.success} hover:bg-success/10 active:bg-success/5 focus:bg-success/10`
165
+ class: `${c.success} ${l.success} hover:bg-success/10 active:bg-success/5 focus:bg-success/10`
178
166
  },
179
167
  {
180
168
  variant: "link",
181
169
  color: "info",
182
- class: `${l.info} ${u.info} hover:bg-info/10 active:bg-info/5 focus:bg-info/10`
170
+ class: `${c.info} ${l.info} hover:bg-info/10 active:bg-info/5 focus:bg-info/10`
183
171
  },
184
172
  {
185
173
  variant: "link",
186
174
  color: "warning",
187
- class: `${l.warning} ${u.warning} hover:bg-warning/10 active:bg-warning/5 focus:bg-warning/10`
175
+ class: `${c.warning} ${l.warning} hover:bg-warning/10 active:bg-warning/5 focus:bg-warning/10`
188
176
  },
189
177
  {
190
178
  variant: "link",
191
179
  color: "error",
192
- class: `${l.error} ${u.error} hover:bg-error/10 active:bg-error/5 focus:bg-error/10`
180
+ class: `${c.error} ${l.error} hover:bg-error/10 active:bg-error/5 focus:bg-error/10`
193
181
  },
194
182
  {
195
183
  variant: "link",
196
184
  color: "default",
197
- class: `${l.default} ${u.default} hover:bg-foreground/10 active:bg-muted focus:bg-foreground/10`
185
+ class: `${c.default} ${l.default} hover:bg-foreground/10 active:bg-muted focus:bg-foreground/10`
198
186
  }
199
- ], E = r("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: "",
@@ -205,7 +193,7 @@ var T = [
205
193
  outlined: "shadow-[inset_0_0_0_1.5px_color-mix(in_oklab,var(--btn-line,currentColor)_55%,transparent)]",
206
194
  link: "nxgt-btn-bare focus:underline underline-offset-4 hover:underline"
207
195
  },
208
- color: c,
196
+ color: s,
209
197
  size: {
210
198
  xs: "h-(--btn-h) [--btn-h:24px] [--btn-px:12px] [--btn-pxi:4px] [--btn-gap:4px] [--btn-ic:14px] [--btn-sq:6px] [--btn-fs:var(--text-label-md)] [--btn-lh:var(--text-label-md--line-height)] [--btn-ls:var(--text-label-md--letter-spacing)] [--btn-fw:560]",
211
199
  sm: "h-(--btn-h) [--btn-h:32px] [--btn-px:16px] [--btn-pxi:4px] [--btn-gap:6px] [--btn-ic:16px] [--btn-sq:8px] [--btn-fs:var(--text-label-lg)] [--btn-lh:var(--text-label-lg--line-height)] [--btn-ls:var(--text-label-lg--letter-spacing)] [--btn-fw:580]",
@@ -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: r, variant: i = "filled", asChild: c = !1, children: l, color: u, 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 = c ? n : "button", P = v(d), F = p ?? P, I = c && x !== void 0;
287
- y(() => {
288
- I && !a() && console.warn("Button: `selected` is ignored with `asChild`; set aria-pressed on the child element.");
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(() => {
257
+ I && !t() && console.warn("Button: `selected` is ignored with `asChild`; set aria-pressed on the child element.");
289
258
  }, [I]);
290
- let L = !c && x !== void 0, R = v(s) || !!(j["aria-label"] || j["aria-labelledby"]) || f(l), z = N(h, m), B = m || z.locked, V = w(B, z, E);
291
- return /* @__PURE__ */ S(s, {
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
- "data-variant": i,
296
- "data-color": u,
264
+ "data-variant": a,
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", c && "nxgt-btn-as-child overflow-clip text-ellipsis whitespace-nowrap [overflow-clip-margin:22px]", D({
301
- variant: i,
302
- color: u,
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({
270
+ variant: a,
271
+ color: l,
303
272
  size: F
304
- }), k(_, F), r),
305
- type: c ? 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(o, {
313
- variant: g,
314
- color: i === "filled" ? "light" : u,
315
- className: e("starting:scale-0 duration-500", g === "4" ? "size-7.5" : "size-4.5")
316
- }), /* @__PURE__ */ S(t, { children: c ? l : A(l) })]
281
+ children: [B && /* @__PURE__ */ x(o, {
282
+ variant: v,
283
+ color: a === "filled" ? "light" : l,
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 };