@nxgt/material 3.28.0 → 3.30.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 (76) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +5 -3
  3. package/dist/{async-slice-DmhasXmq.js → async-slice-Cll-4Mvg.js} +2 -2
  4. package/dist/{button-BjIg_Lz6.js → button-B47lM8a5.js} +1 -1
  5. package/dist/charts.js +3 -3
  6. package/dist/{chip-DIBIDUZH.js → chip-Bf80b1XT.js} +1 -1
  7. package/dist/{code-editor-2EU-q9FV.js → code-editor-BLLpzmCc.js} +4 -4
  8. package/dist/code-editor.js +4 -4
  9. package/dist/{code-language-items-C_UeMQMm.js → code-language-items-COd99vab.js} +2 -2
  10. package/dist/{components-Cl3Zyoe-.js → components-BgMUA99Q.js} +15433 -15235
  11. package/dist/components.js +26 -26
  12. package/dist/{dialog-LtXwv6N3.js → dialog-Cp7bS5LI.js} +1 -1
  13. package/dist/dnd.js +1 -1
  14. package/dist/{dropdown-menu-ppMPD12c.js → dropdown-menu-DJNMcPZa.js} +1 -1
  15. package/dist/editor.js +7 -7
  16. package/dist/{empty-state-X_nikpBS.js → empty-state-Dv9AtrMw.js} +1 -1
  17. package/dist/hooks.js +2 -2
  18. package/dist/{i18n-provider-BfyDgd2o.js → i18n-provider-BBhhsa4I.js} +1 -1
  19. package/dist/i18n.js +5 -5
  20. package/dist/{icon-badge-oLBh3Mlk.js → icon-badge-DEk244kn.js} +1 -1
  21. package/dist/lib/components/ui/collections/filter/bar/filter-bar-classes.d.ts +5 -0
  22. package/dist/lib/components/ui/collections/filter/internal.d.ts +1 -0
  23. package/dist/lib/components/ui/collections/filter/query/filter-results-status.d.ts +2 -1
  24. package/dist/lib/components/ui/collections/filter/query/types.d.ts +16 -0
  25. package/dist/lib/components/ui/collections/filter/query/use-filter-query-options.d.ts +3 -1
  26. package/dist/lib/components/ui/collections/filter/query/use-filter-query-value.d.ts +2 -0
  27. package/dist/lib/components/ui/collections/filter/query/use-filter-query.d.ts +5 -1
  28. package/dist/lib/components/ui/collections/filter/sections/filter-form-error.d.ts +8 -0
  29. package/dist/lib/components/ui/collections/filter/sections/filter-search-error.d.ts +9 -0
  30. package/dist/lib/components/ui/collections/index.d.ts +1 -0
  31. package/dist/lib/components/ui/collections/row-menu/index.d.ts +3 -0
  32. package/dist/lib/components/ui/collections/row-menu/row-menu-column.d.ts +37 -0
  33. package/dist/lib/components/ui/collections/row-menu/row-menu-trigger.d.ts +16 -0
  34. package/dist/lib/components/ui/collections/row-menu/row-menu.d.ts +36 -0
  35. package/dist/lib/components/ui/collections/server-table/types.d.ts +11 -0
  36. package/dist/lib/components/ui/display/badge/badge.d.ts +10 -2
  37. package/dist/lib/components/ui/display/index.d.ts +1 -0
  38. package/dist/lib/components/ui/display/zoned-time/index.d.ts +1 -0
  39. package/dist/lib/components/ui/display/zoned-time/zoned-time.d.ts +34 -0
  40. package/dist/lib/components/ui/overlays/command/command-dialog.d.ts +22 -0
  41. package/dist/lib/components/ui/overlays/command/command.d.ts +1 -12
  42. package/dist/lib/components/ui/overlays/command/index.d.ts +1 -0
  43. package/dist/lib/i18n/resources/en/en.d.ts +4 -0
  44. package/dist/lib/i18n/resources/en/material.json.d.ts +4 -0
  45. package/dist/lib/i18n/resources/fr/fr.d.ts +4 -0
  46. package/dist/lib/i18n/resources/fr/material.json.d.ts +4 -0
  47. package/dist/lib/i18n/resources/resources.d.ts +8 -0
  48. package/dist/lib/i18n/translator.d.ts +1 -1
  49. package/dist/lib/lib/zoned.d.ts +27 -0
  50. package/dist/lib.js +1 -1
  51. package/dist/main.js +43 -43
  52. package/dist/map.js +4 -4
  53. package/dist/material.css +1 -1
  54. package/dist/pdf-reader.js +1 -1
  55. package/dist/print.js +2 -2
  56. package/dist/{public-BeM7-x-m.js → public-Cvwb2tds.js} +6 -6
  57. package/dist/{rich-code-block-B4TIjZRA.js → rich-code-block-MItKFVB-.js} +4 -4
  58. package/dist/{sortable-provider-Dcsw0pgW.js → sortable-provider-CIlK0Vuk.js} +1 -1
  59. package/dist/{spinner-1Ia6Akhy.js → spinner-DRGPXRNW.js} +1 -1
  60. package/dist/{stored-language-DoWMr969.js → stored-language-CkPRWAaM.js} +8 -0
  61. package/dist/theme-picker.js +2 -2
  62. package/dist/{theme-toggle-GlKtdgYz.js → theme-toggle-CPzxOW_X.js} +1 -1
  63. package/dist/{toolbar-items-C1GdN9P9.js → toolbar-items-GIaifZbx.js} +2 -2
  64. package/dist/{translate-material-BneuBHXZ.js → translate-material-BEQGLLY7.js} +2 -2
  65. package/dist/{translator-D88BbpXZ.js → translator-Ec9Uj32C.js} +1 -1
  66. package/dist/{use-chat-composer-beyfZPBD.js → use-chat-composer-BEs82Xar.js} +12 -12
  67. package/dist/{use-heading-spy-BN0yeBod.js → use-heading-spy-BRAPVvfh.js} +1 -1
  68. package/dist/{use-material-translation-Cqcwkuur.js → use-material-translation-B0RHv3l7.js} +2 -2
  69. package/docs/components/data-display.md +44 -2
  70. package/docs/components/data-table-filter-and-lists.md +107 -0
  71. package/docs/components/overlays-and-menus.md +16 -3
  72. package/docs/previews/data-display-zonedtime.webp +0 -0
  73. package/docs/previews/data-table-filter-lists-rowmenu.webp +0 -0
  74. package/docs/troubleshooting.md +21 -1
  75. package/package.json +2 -2
  76. package/dist/lib/components/ui/display/change-history/zoned.d.ts +0 -12
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # @nxgt/material
2
2
 
3
+ ## 3.30.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#1692](https://github.com/softistx/nxgt-material/pull/1692) [`b05118b`](https://github.com/softistx/nxgt-material/commit/b05118bc1e64456a2cccb7e5d47e5610e2f9280b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Badge` takes an `icon` ([#1661](https://github.com/softistx/nxgt-material/issues/1661)): a decorative icon before the label, so a status reads as icon plus words and colour is never the only signal. A string is a Font Awesome icon name (drawn solid), a node is rendered as given. The icon is `aria-hidden`, 12 px like the badge's other icons, and takes the tone's text colour in `soft` and `outlined`. Nothing changes without `icon`, and it is ignored with `asChild`.
8
+
9
+ - [#1692](https://github.com/softistx/nxgt-material/pull/1692) [`801ceca`](https://github.com/softistx/nxgt-material/commit/801ceca43c1e21737406ba6621af31462deeef10) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `CommandDialog` takes `commandProps` ([#1463](https://github.com/softistx/nxgt-material/issues/1463)): the cmdk props of its inner `Command` (`shouldFilter`, `value`, `onValueChange`, `loop`, `filter`, `label`). A palette whose results come from a server passes `commandProps={{ shouldFilter: false }}` so cmdk no longer hides a valid match by the typed text, with no need to rebuild Dialog, DialogContent and the input's height. The other props still go to the `Dialog`; the dialog's title, focus handling and the input's sizing are unchanged, and nothing changes without `commandProps`. `CommandDialog` moves to its own file (`command-dialog.tsx`), exported from the same entry.
10
+
11
+ - [#1692](https://github.com/softistx/nxgt-material/pull/1692) [`28fed28`](https://github.com/softistx/nxgt-material/commit/28fed282bbe1cff5c145dcf3ab513d4458ba7003) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `RowMenu`, `RowMenuTrigger` and `rowMenuColumn` (`Data table, filter & lists/RowMenu`, [#1663](https://github.com/softistx/nxgt-material/issues/1663)): the actions of a table row, for any app.
12
+
13
+ - `RowMenuTrigger({ label })` is a ghost `IconButton` with a decorative ellipsis. Its accessible name is "Actions for {label}" (`material.row-menu.label`, en and fr), so the same name is not repeated on every row; an `aria-label` of your own wins. It is 44px on a coarse pointer (and below `md`) and 36px with a fine pointer from `md` up, and forwards its props and `ref`, so it is the child of a `DropdownMenuTrigger asChild`.
14
+ - `RowMenu` is a `DropdownMenu` aligned to the end of its trigger. It takes `items` (`label`, `icon`, `onSelect`, `disabled`, `destructive`) and `children`; items are 44px on a coarse pointer and the destructive ones come last after a separator. Focus returns to the trigger when the menu closes and when a dialog opened from an item closes.
15
+ - `rowMenuColumn({ label, items | menu })` is the column for `DataTable` and `ServerTable`, under a visually hidden header named "Actions" (`material.row-menu.column`).
16
+ - i18n: `material.row-menu.*` in en and fr (React only, in `I18N_ONLY`; the Vue twin is a `vue` issue).
17
+
18
+ - [#1692](https://github.com/softistx/nxgt-material/pull/1692) [`b4d412d`](https://github.com/softistx/nxgt-material/commit/b4d412d1e0faf0e98dd23ffaa92febb4bf368082) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `ZonedTime` (`Data display/ZonedTime`, [#1662](https://github.com/softistx/nxgt-material/issues/1662)): a moment written in an IANA zone you pass, with the zone, identical on the server and in the browser. `<ZonedTime at="2026-03-12T15:04:05Z" timeZone="Europe/Paris" />` renders `<time dateTime="2026-03-12T15:04:05.000Z">Mar 12, 2026, 4:04 PM UTC+1</time>` (`12 mars 2026, 16:04 UTC+1` in French), so an app no longer formats with `Intl.DateTimeFormat` twice and suppresses the hydration warning.
19
+
20
+ - The date and the time are formatted separately and joined with a comma; the zone is a computed offset (`UTC+2`, `UTC+5:30`, `UTC`), never an ICU zone name, and it follows the instant's daylight saving time. The component never reads the machine's clock or zone.
21
+ - `seconds` (default `false`, lists read at a glance), `dateStyle` (`short`, `medium`, `long`), `zoneLabel` (`offset`, or `none` for a column whose header names the zone). An invalid instant renders nothing; an unknown zone is written as `UTC`.
22
+ - `ChangeHistory`'s zone helpers (`wallClock`, `wallIso`) move to `lib/zoned` and gain `zoneOffsetMinutes`, `zoneOffsetLabel` and `knownZone`; `ChangeHistory` behaves as before.
23
+
24
+ ## 3.29.0
25
+
26
+ ### Minor Changes
27
+
28
+ - [#1690](https://github.com/softistx/nxgt-material/pull/1690) [`29ea903`](https://github.com/softistx/nxgt-material/commit/29ea903724a10b5230a020305895f3e4dbc1ee12) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The filter bar shows a refusal that `errors` (by field id) cannot reach ([#1688](https://github.com/softistx/nxgt-material/issues/1688)). `searchError` (on `Filter`, `FilterBar` and `ServerTable`'s `filter`) shows on the search box like a field's refusal, with an icon and "Invalid.", `aria-invalid` and `aria-describedby` on the input; `formError` shows one error `Alert` under the bar for a refusal that belongs to no field. Both are told once by the bar's one live region, the same refusal path as `errors`, and the page drops them when the search changes. `@nxgt/material-core/filter` adds `splitFilterErrors(refusal, model)`, which splits one flat refusal record into `{ errors, searchError, formError }` (the model's search param and the new `FILTER_FORM_ERROR_KEY`, `'$form'`). Nothing existing changes meaning.
29
+
30
+ ### Patch Changes
31
+
32
+ - Updated dependencies [[`29ea903`](https://github.com/softistx/nxgt-material/commit/29ea903724a10b5230a020305895f3e4dbc1ee12)]:
33
+ - @nxgt/material-core@0.37.0
34
+
3
35
  ## 3.28.0
4
36
 
5
37
  ### Minor Changes
package/README.md CHANGED
@@ -595,7 +595,7 @@ Not components: what the stylesheet gives any element.
595
595
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-avatar.webp" width="120" alt="Avatar"> | [`Avatar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#avatar), `AvatarImage`, `AvatarFallback`, `AvatarBase` | Image with a fallback and an optional online / offline dot; `shape` clips it to an expressive shape; the initials scale with the size (40 % of the diameter); `tone` colours the fallback. | `Avatar`, `AvatarImage`, `AvatarFallback` |
596
596
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-avatargroup.webp" width="120" alt="AvatarGroup"> | [`AvatarGroup`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#avatargroup) | Overlapping avatars with a `+N` overflow. | `AvatarGroup` |
597
597
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-shape.webp" width="120" alt="Shape"> | [`Shape`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#shape) | Material 3 Expressive's 35 shapes and a squircle as a backdrop, an icon container or a mask for a photo, with a morph; eight tones or an app tone. | — |
598
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-badge.webp" width="120" alt="Badge"> | [`Badge`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#badge) | Status pill, 20 px: default, secondary, error, success, info, warning, `soft` (tonal, for states), outlined. | `Badge` |
598
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-badge.webp" width="120" alt="Badge"> | [`Badge`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#badge) | Status pill, 20 px: default, secondary, error, success, info, warning, `soft` (tonal, for states), outlined; an optional decorative `icon` before the words. | `Badge` |
599
599
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-countbadge.webp" width="120" alt="CountBadge"> | [`CountBadge`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#countbadge) | Count in the corner of its children, capped at `99+` and hidden at 0; `animated` pops it in when it changes. | `CountBadge` |
600
600
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-dayseparator.webp" width="120" alt="DaySeparator"> | [`DaySeparator`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#dayseparator), `isNewDay`, `formatDayLabel` | "Today", "Yesterday", the weekday or the date between two hairlines, in the provider's language; sticky if asked. | — |
601
601
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-periodcards.webp" width="120" alt="PeriodCards"> | [`PeriodCards`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#periodcards) | Consecutive date ranges (terms, sprints) as cards: a "Current" marker with `aria-current`, a link over each card, as many 14rem columns as fit (one on a phone). | — |
@@ -612,6 +612,7 @@ Not components: what the stylesheet gives any element.
612
612
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-accordioncard.webp" width="120" alt="AccordionCard"> | [`AccordionCard`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#accordioncard) | Renders `items` (title, content) as a styled accordion. | `AccordionCard` |
613
613
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-timeline.webp" width="120" alt="Timeline"> | [`Timeline`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#timeline), `TimelineItem`, `RelativeTime` | Vertical event timeline with toned icons and relative times. | `Timeline`, `TimelineItem`, `RelativeTime` |
614
614
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-changehistory.webp" width="120" alt="ChangeHistory"> | [`ChangeHistory`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#changehistory) | History of the changes made to anything (a document, a project's settings, a file): a rail of toned dots or tinted cards with a Before / After block, a heading per day (sticky on the rail), long entries collapsed behind "N fields changed", redacted values shown as "Hidden", the exact time on hover and focus, load more. | — (later, #1626) |
615
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-zonedtime.webp" width="120" alt="ZonedTime"> | [`ZonedTime`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#zonedtime) | A moment in a named IANA zone, with the zone as a computed offset (`Mar 12, 2026, 4:04 PM UTC+1`), identical on the server and the client (no hydration warning): the date and the time are formatted apart, `seconds` and `dateStyle` are optional, in a `<time dateTime>`. | — |
615
616
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-eventchip.webp" width="120" alt="EventChip"> | [`EventChip`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#eventchip) | Calendar event pill — soft, solid or outlined — with its times, all-day and continuation edges. | `EventChip` |
616
617
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-codeblock.webp" width="120" alt="CodeBlock"> | [`CodeBlock`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#codeblock), `JsonViewer`, `CodeGroup` | Highlighted code with line numbers and copy, a collapsible JSON tree, and tabbed samples (`Tabs`, underlined). `CodeDiff` is under Rich widgets. | `CodeBlock`, `JsonViewer`, `CodeGroup` |
617
618
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-display-markdown.webp" width="120" alt="Markdown"> | [`Markdown`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-display.md#markdown), `MermaidDiagram` | GFM markdown with KaTeX math and mermaid diagrams (`clientOnly`). Fences reuse `CodeBlock`. `ChatMarkdown` renders through it. | `Markdown`, `MermaidDiagram` |
@@ -630,10 +631,11 @@ Not components: what the stylesheet gives any element.
630
631
  | --- | --- | --- | --- |
631
632
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-datatable.webp" width="120" alt="DataTable"> | [`DataTable`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#datatable), `DataTableColumnHeader`, `DataTablePagination`, `DataTableServerFooter`, `DataTableViewOptions` | TanStack Table v9 with sorting, filtering, selection, expandable rows, pagination or load-more, column visibility, skeleton rows while loading and your own empty state — or one server page at a time, with controlled sorting and selection, cursor Previous / Next links and row links. On a phone it keeps its header row and scrolls sideways in a keyboard-reachable region; the page does not. Or cards and tiles instead of the table (`layout`, `renderCard`, `renderTile`), and `layout={{ phone: 'tiles', wide: 'table' }}` for tiles on a phone ([cards and tiles guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/cards-and-tiles.md)). Long lists render only the rows in view (`virtual`). | `DataTable`, `DataTableColumnHeader`, `DataTablePagination`, `DataTableServerFooter`, `DataTableViewOptions` |
632
633
  | <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, 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` |
634
+ | <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. | — |
633
635
  | <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` |
634
636
  | <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) |
635
637
  | <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) |
636
- | <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`) 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) |
638
+ | <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`), 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) |
637
639
  | — | [`FilterInline`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#filterinline-filterpopover-filterdialog-filtersheet-filterdrawer), `FilterPopover`, `FilterDialog`, `FilterSheet`, `FilterDrawer` | The filter panel shown inline, or in a popover, dialog, sheet or drawer. | `FilterInline`, `FilterPopover`, `FilterDialog`, `FilterSheet`, `FilterDrawer` |
638
640
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-facetgroup.webp" width="120" alt="FacetGroup"> | [`FacetGroup`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#facetgroup) | A collapsible facet: a header button with the title, a count Badge of the active values, Clear and a chevron, over the values (typically a `CheckboxGroup` with counts). | `FacetGroup` |
639
641
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-pagination.webp" width="120" alt="Pagination"> | [`Pagination`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#pagination), `PaginationContent`, `PaginationItem`, `PaginationFirst`, `PaginationLast`, `PaginationLink`, `PaginationBar`, `paginationItems`… | Pagination primitives, with first / last links. `PaginationBar` adds a sibling window with ellipses. | `Pagination` (parts), `PaginationFirst`, `PaginationLast`, `PaginationLink`, `PaginationBar`, `paginationItems` |
@@ -679,7 +681,7 @@ Not components: what the stylesheet gives any element.
679
681
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-dropdownmenu.webp" width="120" alt="DropdownMenu"> | [`DropdownMenu`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#dropdownmenu), `DropdownMenuTrigger`, `DropdownMenuContent`, `DropdownMenuItem`, `DropdownMenuSub`… | Menu with checkbox and radio items, submenus, shortcuts and an error item. | `DropdownMenu` (same parts) |
680
682
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-contextmenu.webp" width="120" alt="ContextMenu"> | [`ContextMenu`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#contextmenu), `ContextMenuTrigger`, `ContextMenuContent`, `ContextMenuItem`… | Right-click menu with the same kinds of items. | `ContextMenu` (same parts) |
681
683
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-menubar.webp" width="120" alt="Menubar"> | [`Menubar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#menubar), `MenubarMenu`, `MenubarTrigger`, `MenubarContent`, `MenubarItem`… | Desktop-style menubar. | `Menubar` (same parts) |
682
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-command.webp" width="120" alt="Command"> | [`Command`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#command), `CommandDialog`, `CommandInput`, `CommandList`, `CommandItem`… | Command palette with filtering, groups and shortcuts. `CommandDialog` shows it in a modal. | `Command`, `CommandDialog` (same parts) |
684
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-command.webp" width="120" alt="Command"> | [`Command`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#command), `CommandDialog`, `CommandInput`, `CommandList`, `CommandItem`… | Command palette with filtering, groups and shortcuts. `CommandDialog` shows it in a modal and takes `commandProps` (`shouldFilter: false` for server results). | `Command`, `CommandDialog` (same parts) |
683
685
 
684
686
  ### Feedback & status
685
687
 
@@ -1,5 +1,5 @@
1
- import { i as e, r as t, t as n } from "./stored-language-DoWMr969.js";
2
- import { r } from "./translator-D88BbpXZ.js";
1
+ import { i as e, r as t, t as n } from "./stored-language-CkPRWAaM.js";
2
+ import { r } from "./translator-Ec9Uj32C.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";
@@ -2,7 +2,7 @@ import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { n as t, t as n } from "./dist-DVRQkaTK.js";
3
3
  import { o as r, t as i } from "./tooltip-CkttDIab.js";
4
4
  import { t as a } from "./is-production-GLw59WU8.js";
5
- import { t as o } from "./spinner-1Ia6Akhy.js";
5
+ import { t as o } from "./spinner-DRGPXRNW.js";
6
6
  import { a as s, i as c, r as l, t as u } from "./button-tones-BwuVvAmd.js";
7
7
  import { t as d } from "./button-group-context-CaP0X5p_.js";
8
8
  import { t as f } from "./has-text-content-Ds2dkHX_.js";
package/dist/charts.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { t as e } from "./ui.utils-CAnKTCw5.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
- import { t as n } from "./use-material-translation-Cqcwkuur.js";
4
- import { t as r } from "./button-BjIg_Lz6.js";
3
+ import { t as n } from "./use-material-translation-B0RHv3l7.js";
4
+ import { t as r } from "./button-B47lM8a5.js";
5
5
  import { t as i } from "./use-ssr-media-query-C6M5m8sf.js";
6
6
  import { i as a, n as o, r as s, t as c } from "./util-4heV2LPI.js";
7
7
  import { t as l } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
8
8
  import { t as u } from "./warn-once-C_e47JM8.js";
9
- import { t as d } from "./chip-DIBIDUZH.js";
9
+ import { t as d } from "./chip-Bf80b1XT.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,6 +1,6 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { t } from "./tooltip-CkttDIab.js";
3
- import { t as n } from "./use-material-translation-Cqcwkuur.js";
3
+ import { t as n } from "./use-material-translation-B0RHv3l7.js";
4
4
  import { a as r } from "./button-tones-BwuVvAmd.js";
5
5
  import { t as i } from "./react-node-text-Crkpfpco.js";
6
6
  import { Check as a, X as o } from "lucide-react";
@@ -1,12 +1,12 @@
1
1
  import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { a as n } from "./dist-lmHmz_bu.js";
4
- import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-ppMPD12c.js";
4
+ import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-DJNMcPZa.js";
5
5
  import { a as c, i as l, n as u } from "./field-blur-context-Cft9s7Hg.js";
6
- import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-C1GdN9P9.js";
6
+ import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-GIaifZbx.js";
7
7
  import { t as g } from "./is-production-GLw59WU8.js";
8
- import { t as _ } from "./use-material-translation-Cqcwkuur.js";
9
- import { i as v, n as y, o as b, t as x } from "./code-language-items-C_UeMQMm.js";
8
+ import { t as _ } from "./use-material-translation-B0RHv3l7.js";
9
+ import { i as v, n as y, o as b, t as x } from "./code-language-items-COd99vab.js";
10
10
  import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
11
11
  import { n as C, t as w } from "./escape-owner-C4W_sOAU.js";
12
12
  import { t as T } from "./skeleton-DSdtr2qc.js";
@@ -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-C1GdN9P9.js";
4
- import { t as o } from "./use-material-translation-Cqcwkuur.js";
5
- import { i as s, n as c, o as l } from "./code-language-items-C_UeMQMm.js";
3
+ import { d as n, r, t as i, u as a } from "./toolbar-items-GIaifZbx.js";
4
+ import { t as o } from "./use-material-translation-B0RHv3l7.js";
5
+ import { i as s, n as c, o as l } from "./code-language-items-COd99vab.js";
6
6
  import { r as u, t as d } from "./field-blur-CJHzVSh9.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-2EU-q9FV.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-BLLpzmCc.js";
12
12
  import { ChevronDown as k, ChevronUp as A, Columns2 as j } from "lucide-react";
13
13
  import { useEffect as M, 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 { d as e, f as t } from "./dropdown-menu-ppMPD12c.js";
2
- import { t as n } from "./use-material-translation-Cqcwkuur.js";
1
+ import { d as e, f as t } from "./dropdown-menu-DJNMcPZa.js";
2
+ import { t as n } from "./use-material-translation-B0RHv3l7.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";