@nxgt/material 3.81.0 → 3.83.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -0
- package/README.md +4 -3
- package/dist/{alert-dialog-DOZ0SfQs.js → alert-dialog-DXLJ4AZP.js} +74 -73
- package/dist/components/ui/collections/data-table/data-table-items.css +15 -0
- package/dist/{components-B00kDHzJ.js → components-C22jCW4C.js} +3009 -2951
- package/dist/components.js +35 -35
- package/dist/editor.js +973 -966
- package/dist/{hooks-DvIsom2p.js → hooks-k8_f3B0k.js} +1 -1
- package/dist/hooks.js +2 -2
- package/dist/lib/components/ui/display/index.d.ts +1 -0
- package/dist/lib/components/ui/display/totals-list/index.d.ts +2 -0
- package/dist/lib/components/ui/display/totals-list/totals-list.d.ts +43 -0
- package/dist/lib/components/ui/fields/inline-edit/inline-edit-display.d.ts +5 -1
- package/dist/lib/components/ui/fields/inline-edit/inline-edit-editor.d.ts +6 -1
- package/dist/lib/components/ui/fields/inline-edit/inline-edit.d.ts +14 -1
- package/dist/lib/components/ui/fields/inline-edit/use-inline-edit.d.ts +4 -1
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-grid.types.d.ts +6 -1
- package/dist/lib/components/ui/layout/dashboard-grid/dashboard-tile.d.ts +1 -1
- package/dist/lib/components/ui/media/galleries/gallery.utils.d.ts +14 -0
- package/dist/lib/components/ui/media/galleries/partials/gallery-tile-button.d.ts +12 -0
- package/dist/lib/components/ui/media/galleries/partials/gallery-tile.d.ts +3 -1
- package/dist/lib/components/ui/media/galleries/types.d.ts +8 -0
- package/dist/lib/components/ui/media/galleries/use-gallery.d.ts +1 -0
- package/dist/lib/illustrations-game/index.d.ts +4 -3
- package/dist/main.js +51 -51
- package/dist/material.css +1 -1
- package/dist/{use-chat-composer-BBF1BI_s.js → use-chat-composer-DG9YkB4L.js} +1456 -1407
- package/dist/{use-heading-spy-BgyA6SJl.js → use-heading-spy-gDNtK1sU.js} +1 -1
- package/docs/README.md +1 -1
- package/docs/components/data-display.md +39 -9
- package/docs/components/form-fields.md +5 -0
- package/docs/components/media-and-files.md +11 -0
- package/docs/components/navigation-and-layout.md +1 -0
- package/docs/guides/icon-motifs.md +1 -1
- package/docs/guides/illustrations.md +5 -5
- package/docs/guides/layouts.md +5 -2
- package/docs/previews/feedback-status-illustration-game.webp +0 -0
- package/docs/roadmap.md +3 -4
- package/lib/components/ui/collections/data-table/data-table-items.css +15 -0
- package/package.json +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
|
-
import { a as t, c as n, d as r, i, n as a, r as o, t as s, u as c } from "./alert-dialog-
|
|
2
|
+
import { a as t, c as n, d as r, i, n as a, r as o, t as s, u as c } from "./alert-dialog-DXLJ4AZP.js";
|
|
3
3
|
import { a as l } from "./button-CSKUtMI3.js";
|
|
4
4
|
import { i as u } from "./translate-material-D4rn5UaQ.js";
|
|
5
5
|
import { t as d } from "./use-material-translation-DYrfV_JJ.js";
|
package/docs/README.md
CHANGED
|
@@ -26,7 +26,7 @@ detail: every option, the second example, and the traps.
|
|
|
26
26
|
| [Streaming (HLS)](guides/media-streaming.md) | You play `.m3u8` streams in `MediaPlayer` with `@nxgt/material/media-hls` |
|
|
27
27
|
| [Maps](guides/maps.md) | You render Leaflet maps or a location field with `@nxgt/material/map` |
|
|
28
28
|
| [Drawing](guides/drawing.md) | You draw diagrams, badges or illustrations from code with `@nxgt/material/draw`: scenes and JSX primitives, roles and tones, a strict CSP, accessibility and events, sketch, animation, PNG, PDF and e-mail |
|
|
29
|
-
| [Illustrations](guides/illustrations.md) | You draw state illustrations from your Font Awesome sprites with `@nxgt/material/illustrations`: the twelve scenes and the health and
|
|
29
|
+
| [Illustrations](guides/illustrations.md) | You draw state illustrations from your Font Awesome sprites with `@nxgt/material/illustrations`: the twelve scenes and the health, education and game sets, `EmptyState` / `ErrorState` / `DataTable` with `illustration`, `IllustrationDefaults` for an app, sizes, motion and CSP |
|
|
30
30
|
| [Icon motifs](guides/icon-motifs.md) | You use icon backgrounds, celestial skies, illustrations or a theme that names a motif: serving your own Font Awesome sprites (the package ships none), `IconSpritesProvider`, `icons` / `iconStyle` / `iconMotif`, `sky`, the health and education sets, Free fallbacks for Pro-only names |
|
|
31
31
|
| [Backgrounds](guides/backgrounds.md) | You want a gradient or patterned backdrop: tones, intensity, the opt-in `backgrounds.css`, custom colours, motion and CSP |
|
|
32
32
|
| [SSR](guides/ssr.md) | Your app renders on a server and bundles this package |
|
|
@@ -18,6 +18,7 @@ from `@nxgt/material/components`.
|
|
|
18
18
|
| <img src="../previews/data-display-periodcards.webp" width="96" alt=""> | [PeriodCards](#periodcards) | Consecutive date ranges (terms, sprints) as cards, with a current marker and an optional link per card |
|
|
19
19
|
| <img src="../previews/data-display-chip.webp" width="96" alt=""> | [Chip](#chip) | Three looks and a dashed add pill, with slots, a selected state and a dismiss button |
|
|
20
20
|
| <img src="../previews/data-display-statcard.webp" width="96" alt=""> | [StatCard](#statcard) | KPI tile with value, hint, icon and toned delta; `href` makes it one link |
|
|
21
|
+
| | [TotalsList](#totalslist) | Labelled figures in a `dl`, amounts right-aligned, a ruled grand-total row; the screen twin of `PrintTotals` |
|
|
21
22
|
| <img src="../previews/data-display-metric-cards.webp" width="96" alt=""> | [Metric cards](#metric-cards) | Sixteen dashboard tiles |
|
|
22
23
|
| <img src="../previews/data-display-card-presets.webp" width="96" alt=""> | [Card presets](#card-presets) | Twenty-seven ready-made cards |
|
|
23
24
|
| <img src="../previews/data-display-statusindicator.webp" width="96" alt=""> | [StatusIndicator](#statusindicator) | Coloured status dot with a label |
|
|
@@ -194,7 +195,7 @@ no `style` attribute and a strict CSP is fine.
|
|
|
194
195
|
- Seat changes are not animated beyond a colour fade, which stops under
|
|
195
196
|
`prefers-reduced-motion`.
|
|
196
197
|
|
|
197
|
-
**Storybook:** `Data display/SeatRing` · **Vue:** not yet (#
|
|
198
|
+
**Storybook:** `Data display/SeatRing` · **Vue:** not yet (#1931)
|
|
198
199
|
|
|
199
200
|
---
|
|
200
201
|
|
|
@@ -269,7 +270,7 @@ const [open, setOpen] = useState(false);
|
|
|
269
270
|
the layout follows `dir` (RTL) and dark mode.
|
|
270
271
|
- Keep `front` and `description` free of the secret: they are always in the page.
|
|
271
272
|
|
|
272
|
-
**Storybook:** `Data display/SecretCard` · **Vue:** not yet (#
|
|
273
|
+
**Storybook:** `Data display/SecretCard` · **Vue:** not yet (#1938)
|
|
273
274
|
|
|
274
275
|
---
|
|
275
276
|
|
|
@@ -603,6 +604,35 @@ pass `disabled` with a `Spinner` in `leading`, or use a `Button`.
|
|
|
603
604
|
|
|
604
605
|
---
|
|
605
606
|
|
|
607
|
+
## TotalsList
|
|
608
|
+
|
|
609
|
+
On-screen counterpart of `PrintTotals`: a `dl` of labelled figures, labels at the start, amounts right-aligned in tabular figures, one column at any width (a side rail, a phone). Rows have the shape of `PrintTotalRow` (`label`, `value`, `last`), so one array feeds the screen and its print.
|
|
610
|
+
|
|
611
|
+
```tsx
|
|
612
|
+
import { TotalsList } from '@nxgt/material/components';
|
|
613
|
+
|
|
614
|
+
<TotalsList
|
|
615
|
+
label="Order totals"
|
|
616
|
+
rows={[
|
|
617
|
+
{ label: 'Subtotal', value: '1,000.00' },
|
|
618
|
+
{ label: 'Tax (19%)', value: '190.00' },
|
|
619
|
+
{ label: 'Total', value: '1,190.00', last: true },
|
|
620
|
+
]}
|
|
621
|
+
/>
|
|
622
|
+
```
|
|
623
|
+
|
|
624
|
+
| Prop | Type | Default | Effect |
|
|
625
|
+
| --- | --- | --- | --- |
|
|
626
|
+
| `rows` | `{ label, value, last?, strong?, tone? }[]` | required | `last` makes the grand total larger and bold with a rule above; `strong` emphasises a row with no rule; `tone` colours the amount (`error` for a due or negative amount, `success` for a credit; an `AppTones` tone works too) |
|
|
627
|
+
| `label` | `string` | — | accessible name: the block becomes a `group` named by it |
|
|
628
|
+
| `variant` | `'card' \| 'plain'` | `'card'` | `plain` has no border or padding, to sit inside a card you already have |
|
|
629
|
+
|
|
630
|
+
Format the amounts for the locale before passing them (`Intl.NumberFormat`); a long label wraps and the amount stays whole.
|
|
631
|
+
|
|
632
|
+
**Storybook:** `Data display/TotalsList`
|
|
633
|
+
|
|
634
|
+
---
|
|
635
|
+
|
|
606
636
|
## StatCard
|
|
607
637
|
|
|
608
638
|

|
|
@@ -812,9 +842,9 @@ import { TubeCap } from '@nxgt/material/components';
|
|
|
812
842
|
| `action` | `ReactNode` | none | trailing slot, such as an `IconButton` |
|
|
813
843
|
| `size` | `'sm' \| 'default' \| 'lg'` | `'default'` | cap of 20, 28 or 40px |
|
|
814
844
|
|
|
815
|
-
`TUBE_CAP_KINDS` lists the kinds
|
|
845
|
+
`TUBE_CAP_KINDS` lists the kinds, and `TubeCapKind` is the exported type of `kind`. The look is CSS on `data-kind`, with no inline style (strict CSP). The cap is `aria-hidden`.
|
|
816
846
|
|
|
817
|
-
**Storybook:** `Data display/TubeCap` · **Vue:**
|
|
847
|
+
**Storybook:** `Data display/TubeCap` · **Vue:** `TubeCap` (`@nxgt/material-vue/components`)
|
|
818
848
|
|
|
819
849
|
---
|
|
820
850
|
|
|
@@ -1367,7 +1397,7 @@ and the user's zone) and both sides agree:
|
|
|
1367
1397
|
<ChangeHistory entries={entries} now={loaderData.now} timeZone={loaderData.timeZone} />
|
|
1368
1398
|
```
|
|
1369
1399
|
|
|
1370
|
-
**Storybook:** `Data display/ChangeHistory` · **Vue:** not yet (
|
|
1400
|
+
**Storybook:** `Data display/ChangeHistory` · **Vue:** not yet (tracked as a `vue` issue)
|
|
1371
1401
|
|
|
1372
1402
|
---
|
|
1373
1403
|
|
|
@@ -1404,7 +1434,7 @@ The offset follows the instant (`Europe/Paris` is `UTC+1` in winter and
|
|
|
1404
1434
|
`UTC+2` in summer). `ChangeHistory` takes a `timeZone` and `RelativeTime` a `now`
|
|
1405
1435
|
the same way; pass the app's zone from the server so every screen agrees.
|
|
1406
1436
|
|
|
1407
|
-
**Storybook:** `Data display/ZonedTime` · **Vue:** not yet (
|
|
1437
|
+
**Storybook:** `Data display/ZonedTime` · **Vue:** not yet (tracked as a `vue` issue)
|
|
1408
1438
|
|
|
1409
1439
|
---
|
|
1410
1440
|
|
|
@@ -1473,7 +1503,7 @@ own, so they add up to less.
|
|
|
1473
1503
|
- Bar widths are SVG attributes, so server markup has no `style` attribute and
|
|
1474
1504
|
a strict CSP is fine.
|
|
1475
1505
|
|
|
1476
|
-
**Storybook:** `Data display/VoteTally` · **Vue:** not yet (#
|
|
1506
|
+
**Storybook:** `Data display/VoteTally` · **Vue:** not yet (#1940)
|
|
1477
1507
|
|
|
1478
1508
|
---
|
|
1479
1509
|
|
|
@@ -1806,7 +1836,7 @@ lock set by another code form disables its field and leaves Cancel usable.
|
|
|
1806
1836
|
button by `getByRole('button', { name: 'Activate' })` and the lock by
|
|
1807
1837
|
`getByRole('alert')`.
|
|
1808
1838
|
|
|
1809
|
-
**Storybook:** `Data display/EnrolmentCard`, `…/Shared lock`, `Guides/Accessibility/Touch targets/Verification code` · **Vue:** not yet
|
|
1839
|
+
**Storybook:** `Data display/EnrolmentCard`, `…/Shared lock`, `Guides/Accessibility/Touch targets/Verification code` · **Vue:** not yet
|
|
1810
1840
|
|
|
1811
1841
|
---
|
|
1812
1842
|
|
|
@@ -1949,4 +1979,4 @@ import { RecoveryCodesStatus, VerificationLockProvider } from '@nxgt/material/co
|
|
|
1949
1979
|
|
|
1950
1980
|
It reads the page-wide lock like [EnrolmentCard](#enrolmentcard) does. With `requireCode={false}` there is no code form, so `error` and `attemptsLeft` are not shown: the plain button follows `pending`, and is disabled by `locked` and by the page-wide lock; then the lock's text (the message of the answer that locked, or "Too many wrong codes. Try again later.") shows above it as a muted line that describes the button.
|
|
1951
1981
|
|
|
1952
|
-
**Storybook:** `Data display/RecoveryCodesStatus`, `Data display/EnrolmentCard/Shared lock` · **Vue:** not yet
|
|
1982
|
+
**Storybook:** `Data display/RecoveryCodesStatus`, `Data display/EnrolmentCard/Shared lock` · **Vue:** not yet
|
|
@@ -1348,6 +1348,11 @@ import { InlineEdit } from '@nxgt/material/components';
|
|
|
1348
1348
|
| `onSave` | `(value: string) => void` | — | on save (Enter or the check button), not on each key |
|
|
1349
1349
|
| `placeholder` | `string` | "Click to edit" | shown while empty |
|
|
1350
1350
|
| `disabled` | `boolean` | `false` | read-only text |
|
|
1351
|
+
| `variant` | Typography step (`headline-lg`, …) | body | the type step of the saved text and of the input, so a title reads as a title |
|
|
1352
|
+
| `headingLevel` | `1 \| 2 \| 3 \| 4 \| 5 \| 6` | none | renders the text (and the input while editing) in an `<h1>`…`<h6>`, so the field can be a document's title; the button and input keep their name |
|
|
1353
|
+
| `defaultEditing` | `boolean` | `false` | starts with the input open, and focuses it on mount (a new, untitled document) |
|
|
1354
|
+
| `aria-label` | `string` | — | the input's name when there is no `label`; with `headingLevel`, set `label` or `aria-label` (the heading then reads the value, then the label) |
|
|
1355
|
+
| `editing` / `onEditingChange` | `boolean` / `(editing: boolean) => void` | — | controls whether the input is open (`disabled` keeps it closed) |
|
|
1351
1356
|
|
|
1352
1357
|
Enter, Escape, Save and Cancel return focus to the field, while a click
|
|
1353
1358
|
elsewhere saves and leaves focus where it went.
|
|
@@ -602,6 +602,14 @@ const items: GalleryItem[] = [
|
|
|
602
602
|
|
|
603
603
|
<Gallery items={items} preset="grid" selectable onSelectionChange={console.log} />;
|
|
604
604
|
|
|
605
|
+
// Bulk actions on the selection: they appear in the "n selected" bar.
|
|
606
|
+
<Gallery
|
|
607
|
+
items={items}
|
|
608
|
+
preset="grid"
|
|
609
|
+
selectable
|
|
610
|
+
selectionActions={(ids) => <Button onClick={() => removeAll(ids)}>Delete</Button>}
|
|
611
|
+
/>;
|
|
612
|
+
|
|
605
613
|
<LightboxGallery items={items} trigger={<button type="button">Open gallery</button>} />;
|
|
606
614
|
|
|
607
615
|
<MiniGallery items={items} maxItems={5} />;
|
|
@@ -622,6 +630,7 @@ with a `+N` tile).
|
|
|
622
630
|
| `carouselAlign` / `carouselOrientation` | `'start' \| 'center'` / `'horizontal' \| 'vertical'` | `'start'` / `'horizontal'` | where the large tile of `hero` sits; the scroll axis |
|
|
623
631
|
| `lightbox` | `boolean` | from `preset` | click opens the full-screen viewer (gestures, zoom, filmstrip, download, keyboard) |
|
|
624
632
|
| `selectable` | `boolean` | — | checkboxes on tiles; `onSelectionChange(ids)` |
|
|
633
|
+
| `selectionActions` | `ReactNode \| (selectedIds: string[]) => ReactNode` | — | bulk actions (download, move, delete) at the end of the "n selected" bar of a `selectable` gallery; a render function receives the selected ids. Hidden while nothing is selected; wraps under the count on a phone |
|
|
625
634
|
| `open` / `defaultOpen` / `onOpenChange` | `boolean` | — | control the lightbox |
|
|
626
635
|
| `onDelete` | `(item) => void` | — | adds a delete button on each tile |
|
|
627
636
|
| `aria-label` / `aria-labelledby` | `string` | `'Gallery'` label | names the gallery (the root has `role="application"`); a given `aria-labelledby` replaces the default label. `MiniGallery` and `LightboxGallery` take both. Other `div` props (`id`, `data-*`, `onKeyDown`) reach the root element |
|
|
@@ -1913,6 +1922,8 @@ Parts: `PrintDocument`, `PrintHeader`, `PrintSection`, `PrintInfoRow`,
|
|
|
1913
1922
|
`definePrintColumns` and the helpers `resolvePrintTable`,
|
|
1914
1923
|
`resolvePrintFields`, `toPrintValue` and `formatPrintValue`.
|
|
1915
1924
|
|
|
1925
|
+
For the same rows on screen, use [`TotalsList`](data-display.md#totalslist).
|
|
1926
|
+
|
|
1916
1927
|
**To get the file**, pass the document to one function: `downloadPdf`
|
|
1917
1928
|
saves it, `openPdf` opens it in a new tab (a download when a popup blocker
|
|
1918
1929
|
stops the tab), `usePdfFile` keeps a preview current, and `pdfResponse`
|
|
@@ -1007,6 +1007,7 @@ const [order, setOrder] = useState(savedLayout); // string[] of tile ids
|
|
|
1007
1007
|
| --- | --- | --- | --- |
|
|
1008
1008
|
| `id` | `string` | required | The tile's name in `order`; unique in the grid |
|
|
1009
1009
|
| `title` | `ReactNode` | none | An `h3` at the top, the tile's accessible name and its handle's name |
|
|
1010
|
+
| `headingLevel` | `2 \| 3 \| 4 \| 5 \| 6` | `3` | The level of the title (`<h2>`…`<h6>`), to follow the heading above the grid |
|
|
1010
1011
|
| `span` / `rowSpan` | as `ResponsiveGrid.Item` | 1 | Columns and rows covered, held to the grid's columns at each width |
|
|
1011
1012
|
| `plain` | `boolean` | `false` | No card of its own (border, background, padding), for a child that is a card already |
|
|
1012
1013
|
| `label` | `string` | the title, else the id | The name used by the handle and the announcements when `title` is not text |
|
|
@@ -138,7 +138,7 @@ An `Illustration` draws a hero icon on a Material 3 Expressive plate, with two
|
|
|
138
138
|
to four satellites. There are twelve base scenes (`empty`, `no-results`,
|
|
139
139
|
`not-found`, `error`, `offline`, `success`, `welcome`, `forbidden`,
|
|
140
140
|
`maintenance`, `invitation`, `sign-in`, `empty-inbox`) and two domain sets of
|
|
141
|
-
ten, **health** and **education**, plus **game** (
|
|
141
|
+
ten, **health** and **education**, plus **game** (twenty-five scenes for games and
|
|
142
142
|
events), each its own subpath so an app that does not import one does not carry it:
|
|
143
143
|
|
|
144
144
|
<img src="../previews/feedback-status-illustration.webp" width="480" alt="The twelve base illustration scenes">
|
|
@@ -5,7 +5,7 @@ on a Material 3 Expressive plate, two to four satellite icons around it, a
|
|
|
5
5
|
dashed ring and a few sparkles. There are twelve scenes: `empty`, `no-results`,
|
|
6
6
|
`not-found`, `error`, `offline`, `success`, `welcome`, `forbidden`,
|
|
7
7
|
`maintenance`, `invitation`, `sign-in` and `empty-inbox`, and two domain sets of
|
|
8
|
-
ten more each, health and education, in their own entries ([health](#scene-sets-the-health-scenes) and [education](#scene-sets-the-education-scenes)), and
|
|
8
|
+
ten more each, health and education, in their own entries ([health](#scene-sets-the-health-scenes) and [education](#scene-sets-the-education-scenes)), and twenty-five for games ([game](#scene-sets-the-game-scenes)). The icons are
|
|
9
9
|
[Font Awesome](https://fontawesome.com) sprites **your app serves** (see
|
|
10
10
|
[Icons](../getting-started.md#icons)): the package ships no icon artwork, so it
|
|
11
11
|
works with the sprites your licence covers. The [icon motifs guide](icon-motifs.md) shows them next to the icon backgrounds, the sky and the themes, and lists the suggested names that are Pro only, with Free neighbours.
|
|
@@ -148,12 +148,12 @@ icons: serve a Pro sprite, or set `edition="free"` on `IconSpritesProvider`, whi
|
|
|
148
148
|
|
|
149
149
|
## Scene sets: the game scenes
|
|
150
150
|
|
|
151
|
-
`@nxgt/material/illustrations/game` holds
|
|
151
|
+
`@nxgt/material/illustrations/game` holds twenty-five scenes for a game, a quiz, a
|
|
152
152
|
community or an event app: `night-sky`, `dawn`, `village` (night),
|
|
153
|
-
`day-village`, `graveyard`,
|
|
154
|
-
`archer`, `cupid`, `wolf`, `villager`, `witch`), `victory`, `empty-table`,
|
|
153
|
+
`day-village`, `graveyard`, sixteen character pictograms (`seer`, `healer`,
|
|
154
|
+
`archer`, `cupid`, `wolf`, `villager`, `witch`, `protector`, `elder`, `village-idiot`, `scapegoat`, `raven`, `fox`, `siblings`, `big-bad-wolf`, `wolf-father`), `victory`, `empty-table`,
|
|
155
155
|
`waiting-players` and `connection-lost`. It works exactly like the other sets,
|
|
156
|
-
and they register side by side. Use them where a screen is empty, waiting,
|
|
156
|
+
and they register side by side. The `fox` and `scapegoat` heroes are drawn as vector art, because the icon sprites have no fox or goat; they follow the tone and dark mode like the sprite icons. Use them where a screen is empty, waiting,
|
|
157
157
|
failed, celebrating or opening: a lobby with no players, a round that waits, a
|
|
158
158
|
dropped connection, a winner, a night-phase hero. Keep them away from behind
|
|
159
159
|
data.
|
package/docs/guides/layouts.md
CHANGED
|
@@ -204,8 +204,11 @@ The props of each are in
|
|
|
204
204
|
The `Guides/Recipes` stories in Storybook are tested whole screens (the code
|
|
205
205
|
ships with the `screen-recipes` skill of the `nxgt-material` plugin): a home
|
|
206
206
|
dashboard, a list and detail, a form and dialog, a table and settings, a dense
|
|
207
|
-
detail page, a status board, a landing page
|
|
208
|
-
|
|
207
|
+
detail page, a status board, a landing page, a search dialog with its results
|
|
208
|
+
page, a team feed, the sign-in, sign-up and forgotten-password screens, a
|
|
209
|
+
gallery of pictures, settings with sections, a messages thread, an overview of
|
|
210
|
+
rearrangeable widgets on `DashboardGrid` and a document editor. Start from the
|
|
211
|
+
closest one and replace the data.
|
|
209
212
|
|
|
210
213
|
## See also
|
|
211
214
|
|
|
Binary file
|
package/docs/roadmap.md
CHANGED
|
@@ -166,13 +166,10 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
166
166
|
descriptions, a small empty state, loading rows and an in-list search
|
|
167
167
|
pill. What changes on upgrade:
|
|
168
168
|
[The field look (2.x)](guides/field-look-2-x.md)
|
|
169
|
+
- **`TotalsList`** — the on-screen `PrintTotals` (#2490): React only for now; Vue twin is #2492.
|
|
169
170
|
|
|
170
171
|
## Next
|
|
171
172
|
|
|
172
|
-
- **Seven more layout recipes** — Feed, Gallery, Auth, Thread, settings,
|
|
173
|
-
dashboard and editor screens, each a tested Storybook recipe under
|
|
174
|
-
Guides/Recipes with its code beside it, on the layouts the shell now ships
|
|
175
|
-
([#2413](https://github.com/softistx/nxgt-material/issues/2413)).
|
|
176
173
|
- **FilterBar "Add a filter" stays on its row** — the button no longer wraps
|
|
177
174
|
alone onto a second row on a desktop screen ([#1752](https://github.com/softistx/nxgt-material/issues/1752)).
|
|
178
175
|
|
|
@@ -383,6 +380,8 @@ version they shipped in, and planned entries may name the major they target.
|
|
|
383
380
|
|
|
384
381
|
## Shipped
|
|
385
382
|
|
|
383
|
+
- **Seven more layout recipes (next minor)** — whole screens to start from under Guides/Recipes, each a tested Storybook story with its code in the plugin's `screen-recipes` skill: a team feed, a gallery of pictures by day, sign-in, sign-up and forgotten-password screens, a messages thread, settings with sections, an overview of rearrangeable widgets and a document editor, on the layouts the shell ships ([#2413](https://github.com/softistx/nxgt-material/issues/2413)).
|
|
384
|
+
|
|
386
385
|
- **Search dialog and results page recipe (next patch)** — a command dialog (Ctrl/Cmd+K and a header button), debounced grouped suggestions, type chips, a conditional filter and highlighted result cards, with its code in the plugin's `screen-recipes` skill ([#2333](https://github.com/softistx/nxgt-material/issues/2333)).
|
|
387
386
|
|
|
388
387
|
- **Layouts: adaptive navigation, headers and page layouts (3.80.0)** — `ActivityLayout` takes `navigation` (a bottom bar with More and badges, a rail with a FAB or expanded, a standard or modal drawer, a collapsible sidebar, a top navigation with dropdowns, two-level navigation, a floating toolbar or none, chosen for phone, tablet and desktop) and `header` (small, center-aligned, medium and large collapsing on scroll, hide on scroll, a search bar that opens full screen on a phone, sticky tabs), and a route adds a back arrow with `handle.back`; each piece is also exported. Page layouts grow with it: an inspector pane and the selection in the URL for `ListDetailsLayout`, phone modes and a container breakpoint for `PaneLayout`, a centred form and wizard for `ThreadLayout`, a split `AuthCard`, spans and masonry for `ResponsiveGrid`, tabs for `Kanban` on a phone, `Doc` drawn inside the shell, and new `SettingsLayout`, `DashboardGrid` (tiles the user rearranges), `EditorLayout` and `LandingLayout` (with `LandingSection` and `SiteFooter`). Everything is opt-in; the shell's default is unchanged. [Layouts guide](guides/layouts.md) ([#2103](https://github.com/softistx/nxgt-material/issues/2103)). Follow-ups: a resize handle for `EditorLayout`'s properties panel and a separate open state for its phone sheet.
|
|
@@ -48,6 +48,21 @@
|
|
|
48
48
|
gap: var(--nxgt-cards-gap, 0.75rem);
|
|
49
49
|
grid-template-columns: minmax(0, 1fr);
|
|
50
50
|
}
|
|
51
|
+
/* The list's 4px of ring room sits inside the scroll box, which clips: the
|
|
52
|
+
* box takes it back on each inline side, so the cards' edges (not the
|
|
53
|
+
* room's) meet the page's edge and the heading above (#2472); the parent needs 4px of inline room. */
|
|
54
|
+
[data-slot="table-wrapper"]:has(> [data-slot="data-table-cards"]) {
|
|
55
|
+
margin-inline: -4px;
|
|
56
|
+
/* `w-full` (utilities layer) would win over this layer. */
|
|
57
|
+
width: calc(100% + 8px) !important;
|
|
58
|
+
}
|
|
59
|
+
/* Tiles keep their own 4px margin, except on a phone (#2292). */
|
|
60
|
+
@media (min-width: 768px) {
|
|
61
|
+
[data-slot="table-wrapper"]:has(> [data-slot="data-table-tiles"]) {
|
|
62
|
+
margin-inline: -4px;
|
|
63
|
+
width: calc(100% + 8px) !important;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
51
66
|
@container (min-width: 36rem) {
|
|
52
67
|
[data-slot="data-table-cards"] {
|
|
53
68
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nxgt/material",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.83.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"bugs": {
|
|
6
6
|
"email": "stevegires@gmail.com"
|
|
@@ -390,7 +390,7 @@
|
|
|
390
390
|
"docs:previews": "rm -rf node_modules/.cache/nxgt-preview-free/missing && NXGT_PREVIEW_FREE=1 vitest run --project previews && bun .storybook/preview-free-report.ts"
|
|
391
391
|
},
|
|
392
392
|
"dependencies": {
|
|
393
|
-
"@nxgt/material-core": "^0.
|
|
393
|
+
"@nxgt/material-core": "^0.50.0",
|
|
394
394
|
"@base-ui/react": "^1.6.0",
|
|
395
395
|
"@dnd-kit/core": "^6.3.1",
|
|
396
396
|
"@dnd-kit/sortable": "^10.0.0",
|