@nxgt/material 3.70.0 → 3.72.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 +75 -0
- package/README.md +9 -6
- package/dist/{alert-dialog-CBkWG32g.js → alert-dialog-A8K8zai1.js} +1 -1
- package/dist/{async-slice-CNZ3N55P.js → async-slice-B8933IHY.js} +1 -1
- package/dist/{button-D3qzqDY_.js → button-C8moFnIT.js} +1 -1
- package/dist/charts.js +3 -3
- package/dist/{chip-CMTe4sQd.js → chip-B6AY1E91.js} +2 -2
- package/dist/{code-editor-Cs7mz1J-.js → code-editor-DQZIKL54.js} +5 -5
- package/dist/code-editor.js +5 -5
- package/dist/{code-language-items-D_QMgjVy.js → code-language-items-8VL0aMKG.js} +2 -2
- package/dist/components/ui/collections/server-table/server-table-phone-row.css +6 -0
- package/dist/components/ui/display/code/code-moonlight.css +37 -0
- package/dist/components/ui/fields/attributes/attribute-values-form/attribute-values-form.css +5 -0
- package/dist/{components-BbWcozcj.js → components-EHdmrvV4.js} +20862 -19924
- package/dist/components.js +28 -28
- package/dist/{dialog-B3BSdRci.js → dialog-WuLTwxkr.js} +5 -5
- package/dist/dnd.js +1 -1
- package/dist/{dropdown-menu-BaupOWgS.js → dropdown-menu-tadySeGH.js} +1 -1
- package/dist/editor.js +35 -35
- package/dist/{empty-state-B2Um5UpI.js → empty-state-ZYiFSSBQ.js} +2 -2
- package/dist/{field-blur-1XLyxRPr.js → field-blur-BYR0yE5L.js} +1 -1
- package/dist/{field-blur-context-XNvCDnMT.js → field-blur-context-bEhByoK-.js} +1 -1
- package/dist/{hooks-BU21Jpaa.js → hooks-GpwD8iDu.js} +2 -2
- package/dist/hooks.js +3 -3
- package/dist/{hover-card-Bvm3svX9.js → hover-card-BowaI_ra.js} +1 -1
- package/dist/i18n.js +3 -3
- package/dist/{icon-badge-wip9bfa2.js → icon-badge-B1B0Lg02.js} +3 -3
- package/dist/{icon-button-QwIeBTdw.js → icon-button-BbGU17cb.js} +1 -1
- package/dist/lib/components/ui/actions/fab/fab-dock-inset.d.ts +29 -0
- package/dist/lib/components/ui/actions/fab/fab-dock.d.ts +6 -1
- package/dist/lib/components/ui/collections/data-table/select-checkbox.d.ts +3 -2
- package/dist/lib/components/ui/collections/filter/use-filter-field-config.d.ts +3 -0
- package/dist/lib/components/ui/collections/index.d.ts +1 -0
- package/dist/lib/components/ui/collections/record-actions-menu/index.d.ts +2 -0
- package/dist/lib/components/ui/collections/record-actions-menu/record-actions-dialogs.d.ts +15 -0
- package/dist/lib/components/ui/collections/record-actions-menu/record-actions-menu.d.ts +72 -0
- package/dist/lib/components/ui/collections/record-actions-menu/record-actions-rules.d.ts +68 -0
- package/dist/lib/components/ui/collections/record-actions-menu/record-actions-words.d.ts +52 -0
- package/dist/lib/components/ui/collections/record-actions-menu/use-record-actions.d.ts +51 -0
- package/dist/lib/components/ui/collections/record-actions-menu/use-record-flight.d.ts +16 -0
- package/dist/lib/components/ui/collections/row-menu/row-menu-column.d.ts +4 -0
- package/dist/lib/components/ui/collections/row-menu/row-menu.d.ts +1 -1
- package/dist/lib/components/ui/collections/server-table/partials/server-table-band-classes.d.ts +7 -5
- package/dist/lib/components/ui/collections/server-table/partials/server-table-column-sorting.d.ts +7 -0
- package/dist/lib/components/ui/collections/server-table/types.d.ts +3 -1
- package/dist/lib/components/ui/display/markdown/markdown.d.ts +12 -1
- package/dist/lib/components/ui/display/markdown/markdown.utils.d.ts +2 -0
- package/dist/lib/components/ui/display/markdown/mermaid-csp-scope.d.ts +8 -0
- package/dist/lib/components/ui/display/markdown/mermaid-markup.d.ts +20 -0
- package/dist/lib/components/ui/display/markdown/partials/markdown-code.d.ts +5 -1
- package/dist/lib/components/ui/feedback/confirm-dialog/action-refusal.d.ts +24 -0
- package/dist/lib/components/ui/feedback/confirm-dialog/confirm-alert.d.ts +17 -0
- package/dist/lib/components/ui/feedback/confirm-dialog/confirm-description.d.ts +10 -0
- package/dist/lib/components/ui/feedback/confirm-dialog/confirm-dialog.d.ts +24 -2
- package/dist/lib/components/ui/feedback/confirm-dialog/confirm-refusal.d.ts +7 -0
- package/dist/lib/components/ui/feedback/confirm-dialog/index.d.ts +1 -0
- package/dist/lib/components/ui/feedback/confirm-dialog/use-confirm-action.d.ts +6 -0
- package/dist/lib/components/ui/feedback/index.d.ts +1 -0
- package/dist/lib/components/ui/feedback/stale-notice/index.d.ts +1 -0
- package/dist/lib/components/ui/feedback/stale-notice/stale-notice.d.ts +15 -0
- package/dist/lib/components/ui/fields/attributes/attribute-values-form-field-set/attribute-values-form-field-set.d.ts +5 -1
- package/dist/lib/components/ui/fields/contacts/contact-dialog.d.ts +8 -2
- package/dist/lib/components/ui/fields/contacts/contacts-dialog-form-field.d.ts +4 -1
- package/dist/lib/components/ui/fields/contacts/contacts-editor.d.ts +15 -2
- package/dist/lib/components/ui/fields/contacts/contacts-form-field.d.ts +6 -1
- package/dist/lib/components/ui/fields/contacts/logic/offered-types.d.ts +3 -0
- package/dist/lib/components/ui/fields/contacts/models.d.ts +2 -0
- package/dist/lib/components/ui/fields/contacts/partials/contact-fields.d.ts +4 -2
- package/dist/lib/components/ui/fields/contacts/partials/contact-groups.d.ts +4 -2
- package/dist/lib/components/ui/fields/contacts/partials/contact-row.d.ts +4 -2
- package/dist/lib/components/ui/fields/contacts/partials/phone-sheet.d.ts +4 -2
- package/dist/lib/components/ui/fields/contacts/partials/quick-add.d.ts +4 -2
- package/dist/lib/components/ui/fields/contacts/partials/row-actions.d.ts +3 -1
- package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +1 -1
- package/dist/lib/components/ui/forms/index.d.ts +1 -0
- package/dist/lib/components/ui/forms/use-server-field-errors.d.ts +21 -0
- package/dist/lib/components/ui/layout/index.d.ts +1 -0
- package/dist/lib/components/ui/layout/record-page/index.d.ts +2 -0
- package/dist/lib/components/ui/layout/record-page/record-details.d.ts +40 -0
- package/dist/lib/components/ui/layout/record-page/record-page.d.ts +27 -0
- package/dist/lib/components/ui/media/upload/network-upload-field/network-upload-field.d.ts +5 -0
- package/dist/lib/components/ui/media/upload/network-upload-field/partials/network-upload-field-items.d.ts +2 -1
- package/dist/lib/components/ui/media/upload/network-upload-field/upload-constraints.d.ts +10 -2
- package/dist/lib/components/ui/overlays/dialog/dialog-body-overflow.d.ts +7 -0
- package/dist/lib/components/ui/overlays/dialog/dialog-body.d.ts +10 -0
- package/dist/lib/components/ui/overlays/dialog/dialog-variants.d.ts +4 -0
- package/dist/lib/components/ui/overlays/dialog/dialog.d.ts +1 -0
- package/dist/lib/components/ui/widgets/chat/chat-conversation-item.d.ts +8 -2
- package/dist/lib/components/ui/widgets/chat/chat-markdown.d.ts +4 -0
- package/dist/lib/components/ui/widgets/chat/chat-message-list.d.ts +8 -1
- package/dist/lib/components/ui/widgets/chat/index.d.ts +2 -0
- package/dist/lib/components/ui/widgets/chat/partials/chat-conversation-item-text.d.ts +2 -1
- package/dist/lib/components/ui/widgets/chat/partials/chat-empty-thread.d.ts +2 -0
- package/dist/lib/components/ui/widgets/chat/proposal/chat-action-proposal-parts.d.ts +24 -0
- package/dist/lib/components/ui/widgets/chat/proposal/chat-action-proposal.d.ts +39 -0
- package/dist/lib/components/ui/widgets/chat/proposal/chat-action-proposal.rules.d.ts +17 -0
- package/dist/lib/components/ui/widgets/chat/proposal/chat-tool-activity.d.ts +16 -0
- package/dist/lib/i18n/resources/en/en.d.ts +47 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +47 -0
- package/dist/lib/i18n/resources/fr/fr.d.ts +47 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +47 -0
- package/dist/lib/i18n/resources/resources.d.ts +94 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib/print/output/to-pdf-element.d.ts +6 -0
- package/dist/lib.js +1 -1
- package/dist/main.js +42 -42
- package/dist/map.js +8 -8
- package/dist/material.css +1 -1
- package/dist/pdf-reader.js +1 -1
- package/dist/print.js +135 -131
- package/dist/{public-BuGgOtAl.js → public-CFj2qn7l.js} +9 -9
- package/dist/{rich-code-block-DdHqzzek.js → rich-code-block-B7Teg7-e.js} +5 -5
- package/dist/{sortable-provider-DMyaSfZZ.js → sortable-provider-y5sFhRDj.js} +2 -2
- package/dist/{spinner-ByYdcukU.js → spinner-C5Kb6MWu.js} +1 -1
- package/dist/theme-picker.js +2 -2
- package/dist/{theme-toggle-DB3aZZnO.js → theme-toggle-B1JZg7mU.js} +1 -1
- package/dist/{toolbar-items-DbzIKjo7.js → toolbar-items-m_1FTFPQ.js} +3 -3
- package/dist/{translate-material-Dh7MYkHT.js → translate-material-D1ndrd7a.js} +1 -1
- package/dist/{translator-Byhohi1S.js → translator-CtEC_AQa.js} +94 -0
- package/dist/{typography-rUf0mE5a.js → typography-prQHb3gI.js} +1 -1
- package/dist/{use-chat-composer-uUUTRB3Z.js → use-chat-composer-DBiyNXvL.js} +107 -107
- package/dist/{use-heading-spy-CVzW2NM3.js → use-heading-spy-Bzj5mIUZ.js} +179 -87
- package/dist/{use-material-translation-BAYyZOcH.js → use-material-translation-C6H0B4kE.js} +1 -1
- package/dist/{use-return-focus-CQAuk9kh.js → use-return-focus-CkUX1HFl.js} +1 -1
- package/docs/components/buttons-and-actions.md +24 -0
- package/docs/components/data-display.md +33 -0
- package/docs/components/data-table-filter-and-lists.md +117 -5
- package/docs/components/feedback-and-status.md +58 -2
- package/docs/components/form-fields.md +63 -3
- package/docs/components/media-and-files.md +4 -1
- package/docs/components/navigation-and-layout.md +58 -0
- package/docs/components/overlays-and-menus.md +20 -1
- package/docs/components/rich-widgets.md +35 -2
- package/docs/guides/cards-and-tiles.md +4 -2
- package/docs/guides/csp.md +44 -6
- package/docs/guides/forms.md +59 -7
- package/docs/guides/i18n.md +7 -6
- package/docs/guides/printing.md +17 -7
- package/docs/previews/data-table-filter-lists-recordactionsmenu.webp +0 -0
- package/docs/previews/feedback-status-stalenotice.webp +0 -0
- package/docs/previews/media-files-networkuploadfield.webp +0 -0
- package/docs/previews/media-files-s3uploadfield.webp +0 -0
- package/docs/previews/media-files-uploadfield.webp +0 -0
- package/docs/previews/navigation-layout-recordpage.webp +0 -0
- package/docs/previews/rich-widgets-chat-action-proposal.webp +0 -0
- package/docs/roadmap.md +11 -1
- package/docs/troubleshooting.md +126 -8
- package/lib/components/ui/collections/server-table/server-table-phone-row.css +6 -0
- package/lib/components/ui/display/code/code-moonlight.css +37 -0
- package/lib/components/ui/fields/attributes/attribute-values-form/attribute-values-form.css +5 -0
- package/package.json +3 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,80 @@
|
|
|
1
1
|
# @nxgt/material
|
|
2
2
|
|
|
3
|
+
## 3.72.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#2184](https://github.com/softistx/nxgt-material/pull/2184) [`eecfa21`](https://github.com/softistx/nxgt-material/commit/eecfa21d184a8e2042eee5532beeab016f75216c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `AttributeValuesFormFieldSet`: its fields now fill the row instead of shrinking to their content, a new `hideLabel` prop keeps `label` as the fieldset's accessible name without drawing the heading (under a `FormSection` that already titles it), and it reads and writes the form value at `name` like the other form fields (a `reset()`, a `setValue()` or a record loaded later shows), `defaultValues` being only the fallback while the form holds nothing. The set is now a `<fieldset>` named by its label.
|
|
8
|
+
|
|
9
|
+
Migration: `defaultValues` is now a fallback, used only while the form value at `name` is empty (`undefined`, `null` or `{}`); a value in the form wins, so move your values into the form's `defaultValues` or `reset()`. The set is now a `<fieldset>` instead of a `<div>`, so CSS or tests that select a `div` must change (`getByRole('group', { name })` finds it). The `w-full min-w-0` children also apply to `AttributeValuesForm` used on its own.
|
|
10
|
+
|
|
11
|
+
- [#2173](https://github.com/softistx/nxgt-material/pull/2173) [`1273c8a`](https://github.com/softistx/nxgt-material/commit/1273c8af8e3a7e33b2bbb6de84acbeed86e0abb7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ContactsFormField` and `ContactsEditor` (inline editing): the new `types` prop limits the contact types offered by the "Add" chips and the type select (e.g. `types={['EMAIL', 'PHONE', 'FAX', 'WEBSITE']}`; a contact already in the value keeps its own type in its select), and `primary={false}` hides the primary star and marks. Both are additive; every type and the star stay the default. `types` also limits the dialog editing (`ContactDialog` takes it too); `primary` is inline only. The `ContactTypeName` type (`'EMAIL' | 'PHONE' | …`) is exported.
|
|
12
|
+
|
|
13
|
+
- [#2179](https://github.com/softistx/nxgt-material/pull/2179) [`77f6b3c`](https://github.com/softistx/nxgt-material/commit/77f6b3c640499772f16968651fb5cecfe67c5c15) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DialogBody`: a new `Dialog` part that scrolls on its own. With a `DialogBody` as a direct child, `DialogContent` becomes a clipped flex column, so the header and the `DialogFooter` stay pinned (also as a bottom sheet or full screen on a phone, with the safe-area padding kept) and only the body scrolls, with a hairline on the edge where content is hidden beneath (`data-overflow-start`, `data-overflow-end`). A `DialogBody` with an `aria-label` is a named region. Dialogs without it render and scroll exactly as before. Fixes [#2177](https://github.com/softistx/nxgt-material/issues/2177).
|
|
14
|
+
|
|
15
|
+
- [#2176](https://github.com/softistx/nxgt-material/pull/2176) [`11db5b8`](https://github.com/softistx/nxgt-material/commit/11db5b853aacbb92d50e1eee2a94d61d8b5d1983) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NetworkUploadField` and `NetworkUploadFormField` (and so `S3UploadField` and `S3UploadFormField`, which render through it): the drop zone's hint shows friendly format names instead of the raw `accept` list (`image/jpeg,image/png,image/webp` reads `JPEG, PNG, WebP`; `.pdf` reads `PDF`; `image/*` reads `Images` through the new `material.upload.accept.*` keys; unknown entries stay as given). The new `acceptLabel` prop replaces the derived names (`""` hides them), and the hint wraps in a narrow dialog instead of being clipped. A test that read the raw list (such as `image/*`) in the hint now sees the names.
|
|
16
|
+
|
|
17
|
+
### Patch Changes
|
|
18
|
+
|
|
19
|
+
- Updated dependencies [[`0d9fb2c`](https://github.com/softistx/nxgt-material/commit/0d9fb2ceca6d9066c0e9c0d1b7aa651a2cc4f79e)]:
|
|
20
|
+
- @nxgt/material-core@0.47.0
|
|
21
|
+
|
|
22
|
+
## 3.71.0
|
|
23
|
+
|
|
24
|
+
### Minor Changes
|
|
25
|
+
|
|
26
|
+
- [#2144](https://github.com/softistx/nxgt-material/pull/2144) [`3c0ac2a`](https://github.com/softistx/nxgt-material/commit/3c0ac2a157aacd3f7552cb637ed65ee2f62b2f30) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ChatActionProposal`, a card in a chat thread for an action an assistant proposes: title, summary, a tool label slot, a deadline, a status (`pending`, `running`, `confirmed`, `failed` with a code, `rejected`, `expired`) as a toned badge with its icon, Confirm and Reject buttons (or an `actions` slot), a `busy` state, and the focus moved to the status once answered. `ChatToolActivity`, a compact row for a tool step in a `ChatMessageList` (name, running, done or failed). Strings are `material.chat.proposal.*` and `material.chat.tool.*`, in English and French.
|
|
27
|
+
|
|
28
|
+
- [#2162](https://github.com/softistx/nxgt-material/pull/2162) [`2ec3bc4`](https://github.com/softistx/nxgt-material/commit/2ec3bc4e69d1bf1b09e4494dcbdddef89a6935e6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ChatConversationItem`: a clipped `title` now carries its full text in a `title` attribute when it is a string, and the new `titleText` prop gives that text when `title` is a node. `title` is typed as a `ReactNode` only (it no longer also declares the button's `title: string`), so a node type-checks; the button itself has no `title` attribute any more.
|
|
29
|
+
|
|
30
|
+
- [#2142](https://github.com/softistx/nxgt-material/pull/2142) [`8b62d1f`](https://github.com/softistx/nxgt-material/commit/8b62d1fa81600f1723e7795553ff62c599220d37) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ConfirmDialog`'s `description` accepts a `ReactNode`. A string still renders in a paragraph; any other node (several paragraphs, a list, a link) renders in a `div`, so block children are valid HTML, and it still names the dialog.
|
|
31
|
+
|
|
32
|
+
- [#2169](https://github.com/softistx/nxgt-material/pull/2169) [`0a7c871`](https://github.com/softistx/nxgt-material/commit/0a7c871f202100970f0d5348da7e92d9f2113b13) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ConfirmDialog` gains two optional slots: `details` (a note under the description, part of the dialog's accessible description) and `refusal` (renders the refusal inside the error alert, with the message and what `onConfirm` threw, so it can carry a link).
|
|
33
|
+
|
|
34
|
+
By default an `ActionRefusal` thrown by `onConfirm` shows its details and its action (a link that closes the dialog, or a handler); `refusal` replaces that rendering. `ActionRefusal` and `isActionRefusal` are exported from `confirm-dialog`. The error alert is now a `<div role="alert">` instead of a `<p role="alert">`, so it can hold block content. The focus stays in the modal while `onConfirm` runs.
|
|
35
|
+
|
|
36
|
+
- [#2157](https://github.com/softistx/nxgt-material/pull/2157) [`f9388c3`](https://github.com/softistx/nxgt-material/commit/f9388c390c47556f60eeb6749eee9cbc879373ec) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `FabDock` keeps the end of the page clear of its button: a viewport dock sets `--fab-dock-inset` on the document (its height, its offset from the bottom and a little clearance) while it shows, and removes it where it is hidden. Pad the page with `var(--fab-dock-inset, 0px)`; no more hand-made bottom padding (such as `pb-24 sm:pb-0`) to keep in step with the Fab's size and breakpoint. Several docks share the property (the largest value wins).
|
|
37
|
+
|
|
38
|
+
- [#2150](https://github.com/softistx/nxgt-material/pull/2150) [`8935b51`](https://github.com/softistx/nxgt-material/commit/8935b51f0499f7083ff1138e42ab51e3fee239a5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Markdown` and `ChatMarkdown` are documented and tested as safe for untrusted model output: raw HTML is escaped, `javascript:`, `vbscript:` and `data:` links and images are dropped, and external links now carry `rel="noopener noreferrer"`. New `math` and `mermaid` props (both default `true`, so no breaking change) turn KaTeX and mermaid off, for a strict CSP. Inline code no longer leaks a `node="[object Object]"` attribute. The guarantees are in the Markdown docs and the CSP guide.
|
|
39
|
+
|
|
40
|
+
- [#2167](https://github.com/softistx/nxgt-material/pull/2167) [`312616e`](https://github.com/softistx/nxgt-material/commit/312616e14f9c45680b5ae6e2bc8dcad3497a43ba) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The full `Markdown` (KaTeX maths, mermaid diagrams, highlighted code) runs under a strict nonce CSP with no `style-src-attr` and no `img-src data:`. `CodeBlock` takes its colours from classes (`data-scheme` on its root) and sets its `maxHeight` through the CSSOM in a layout effect instead of an inline `style`; a server-rendered block is full height until hydration. A mermaid diagram stays an image but now comes from a `blob:` URL (revoked when the diagram goes) instead of a `data:` URL: allow `img-src blob:`, which `cspPolicy()` already emits, and `data:` is no longer needed for it. While a diagram renders, a short-lived scope gives mermaid's temporary `<style>` the nonce, writes its `style` attributes through the CSSOM and parks the `style` attributes of the string DOMPurify parses; it patches `Document.prototype.createElement`, `Element.prototype.setAttribute` and `DOMParser.prototype.parseFromString` only for that diagram's elements and ids, and restores them when the last render ends (unrelated calls pass through). A `Data display/Markdown > StrictCsp` story proves it in Chromium. Still needed: `style-src-attr 'unsafe-inline'` for server-rendered math (KaTeX's markup carries inline `style` attributes), and mermaid's mindmap and architecture diagrams still add an un-nonced `<style>` to `<head>`. See the CSP guide: https://cdn.jsdelivr.net/npm/@nxgt/material/docs/guides/csp.md
|
|
41
|
+
|
|
42
|
+
- [#2169](https://github.com/softistx/nxgt-material/pull/2169) [`0a7c871`](https://github.com/softistx/nxgt-material/commit/0a7c871f202100970f0d5348da7e92d9f2113b13) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add `RecordActionsMenu`, a record's archive, restore and delete menu over `RowMenu`.
|
|
43
|
+
|
|
44
|
+
- Archive runs at once with an Undo toast that stays until dismissed; with `archivePolicy="confirm"` it asks first in a dialog and leaves no Undo. Restore runs at once. Delete permanently (archived records only) always asks first.
|
|
45
|
+
- `can` hides actions (and the whole menu when none is left), `send` does them, `onDone` follows (an error it throws is logged, never shown as a refusal), `items` / `children` add your own entries, and `messages` renames the words (`material.record-actions.*` keys, en and fr).
|
|
46
|
+
- `consequence` adds a note of what the action entails in the confirm dialog, for all intents or per intent (`archive`, `delete`). `successAction` adds an action to the archive or restore toast, such as "View archive".
|
|
47
|
+
- `refusal` renders a refusal inside the dialogs. Reject `send` with an `ActionRefusal` to show a refusal with details and an action (a link that closes the dialog, or a handler; a toast button for archive and restore).
|
|
48
|
+
- The `useRecordActions` hook is exported with its state (`confirmingArchive`, `confirmingDelete`, `deleteConfirmed`, `running`) and `run` / `runUndo`: an Undo shares the single flight with Archive and Restore and waits for a pending action.
|
|
49
|
+
- Types: `RecordIntent`, `ConsequenceIntent`, `ArchivePolicy`, `RecordSuccessActions`, `RecordConsequence`, `RecordAction`, `RecordActionsMessages` and `UseRecordActionsOptions`.
|
|
50
|
+
- `RowMenu` insets the items without an icon when others have one, so labels line up.
|
|
51
|
+
|
|
52
|
+
- [#2128](https://github.com/softistx/nxgt-material/pull/2128) [`252e76b`](https://github.com/softistx/nxgt-material/commit/252e76bd04471eb7454cf0f8185224e672795daa) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add `RecordPage` and `RecordDetails`: the page of one record. `RecordPage` is `ActivityContent` with the record's facts (`details`, named by `detailsLabel`) as a side panel from `xl` that stacks after the content, or before it with `detailsStack="before"`. `RecordDetails` is the facts card: a title and a status, the `Description`s in one column in the panel and up to four when stacked, and a muted "Added on ... · Updated on ..." line with the dates written without seconds in `timeZone`, each segment kept on one line.
|
|
53
|
+
|
|
54
|
+
- [#2158](https://github.com/softistx/nxgt-material/pull/2158) [`bc55d11`](https://github.com/softistx/nxgt-material/commit/bc55d11db313bedf13a29da7c5f7bf97e98eb13a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add `StaleNotice`: the notice for a save refused because another write came first (a `stale-version` refusal). A warning `Alert` that takes the focus and scrolls into view when it mounts, keeps what was typed, and offers one way out, a "Reload the record" button (`onReload`, `busy` while it runs, `message` to replace the description). There is no overwrite. Its words are `material.stale-notice.*`, in French and English.
|
|
55
|
+
|
|
56
|
+
- [#2156](https://github.com/softistx/nxgt-material/pull/2156) [`bc36da8`](https://github.com/softistx/nxgt-material/commit/bc36da82d8c902b10def88b609e277f5cb857d87) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NetworkUploadField`, `S3UploadField` and their form fields write the chosen file's size in the material language (`10,4 Ko` in French, not `10.4 KB`), and the remove (x) button is now named after its file: the new `material.upload.remove-named` key, "Remove {name}" / "Supprimer {name}". Visible to consumers' tests: a query by the accessible name `Remove` or `Supprimer` alone no longer matches the button, use `Remove photo.png` or a regular expression.
|
|
57
|
+
|
|
58
|
+
- [#2136](https://github.com/softistx/nxgt-material/pull/2136) [`37966e8`](https://github.com/softistx/nxgt-material/commit/37966e80e99fd8b80ada1a0c6898436a0b8c8498) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add `useServerFieldErrors(form, fieldErrors)` next to `useFastForm` and `useFocusOnRefusal` (`@nxgt/material/components`): it puts an action's `{ path: message }` field errors on a React Hook Form form with `setError` (`type: 'server'`), the first one focused, whenever the errors object changes; empty messages are skipped. With the two existing hooks it replaces the three hand-written form focus hooks of a sign-in form.
|
|
59
|
+
|
|
60
|
+
### Patch Changes
|
|
61
|
+
|
|
62
|
+
- [#2163](https://github.com/softistx/nxgt-material/pull/2163) [`057d6e7`](https://github.com/softistx/nxgt-material/commit/057d6e7874df921691be875dca445347dc8299bc) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ChatMessageList` (and so `ChatThread`): the scrolling viewport is a tab stop (`tabIndex={0}`), so a keyboard reader can scroll a transcript of messages that hold nothing focusable (axe `scrollable-region-focusable`). The new `viewportProps` prop reaches the viewport element, and `tabIndex={-1}` opts out.
|
|
63
|
+
|
|
64
|
+
- [#2165](https://github.com/softistx/nxgt-material/pull/2165) [`ab5d946`](https://github.com/softistx/nxgt-material/commit/ab5d9464cdd7ee1f9db05e190b5210f69dbf6711) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ChatComposer`: the message textarea is at least 44px high on a coarse pointer, as the other fields are, instead of 36px.
|
|
65
|
+
|
|
66
|
+
- [#2170](https://github.com/softistx/nxgt-material/pull/2170) [`084cd1b`](https://github.com/softistx/nxgt-material/commit/084cd1b5c5d5573c0ceb5313280534ba88debbe8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ServerTable` phone header (a list in `cards` or `tiles` with `filter` and `actions`): the "Select all" text no longer overlaps the sort menu, "Filters (N)" or wide actions at 390px. It truncates with an ellipsis (the box keeps its full name), and an end group too wide for the row wraps to its own line.
|
|
67
|
+
|
|
68
|
+
- [#2130](https://github.com/softistx/nxgt-material/pull/2130) [`905e999`](https://github.com/softistx/nxgt-material/commit/905e999a3bb849edc66e63b4c5d3a9ad87b2b71f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A `keepTogether` block taller than a page now breaks normally instead of overflowing and being cut off. `@nxgt/material-core/pdf/render` adds `resolveKeepTogether(doc, options?)`, which renders each flagged block alone on a page like its own and clears the option on those that need more than one page; `renderPdfBuffer`, `renderPdfBlob`, `renderPdfStream`, `downloadPdf`, `openPdf` and `pdfResponse` call it for a document as data. A block that fits keeps `wrap={false}` and renders as before, and a document with no `keepTogether` pays for no extra pass.
|
|
69
|
+
|
|
70
|
+
- [#2104](https://github.com/softistx/nxgt-material/pull/2104) [`7838403`](https://github.com/softistx/nxgt-material/commit/7838403e38953f329217b7f1a5213bf4a691a933) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Roadmap: plan the calculator and the adaptive layouts efforts.
|
|
71
|
+
|
|
72
|
+
- [#2147](https://github.com/softistx/nxgt-material/pull/2147) [`76af9fc`](https://github.com/softistx/nxgt-material/commit/76af9fce382fd04b4b2f6a763389e72cf1ce353c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `rowMenuColumn` renders nothing in a row with no actions: when `items(row)` is empty (or absent) and `menu(row)` is `null` or `undefined`, the cell is empty instead of an empty "..." button, and the column keeps its width.
|
|
73
|
+
|
|
74
|
+
- [#2160](https://github.com/softistx/nxgt-material/pull/2160) [`769af73`](https://github.com/softistx/nxgt-material/commit/769af738f04ac4e8ca0376eef48acb9d223d6d7e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ServerTable` without `sorting` no longer draws a sort control that could not sort, above its cards or tiles or in its column headers: without `sorting` no column is sortable, so pass `sorting` to let people sort.
|
|
75
|
+
- Updated dependencies [[`905e999`](https://github.com/softistx/nxgt-material/commit/905e999a3bb849edc66e63b4c5d3a9ad87b2b71f), [`7838403`](https://github.com/softistx/nxgt-material/commit/7838403e38953f329217b7f1a5213bf4a691a933)]:
|
|
76
|
+
- @nxgt/material-core@0.46.0
|
|
77
|
+
|
|
3
78
|
## 3.70.0
|
|
4
79
|
|
|
5
80
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ drag-and-drop, i18n, and `Icon`. Tailwind CSS v4 + Base UI.
|
|
|
14
14
|
(`TextField`) and a React Hook Form wrapper (`TextFormField`). Both are in
|
|
15
15
|
the same barrel. The [forms guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/forms.md) covers validation,
|
|
16
16
|
errors worded by code in the page's language (`useCodeResolver`),
|
|
17
|
-
quick-to-fill forms (`useFastForm`, `useFocusOnRefusal`),
|
|
17
|
+
quick-to-fill forms (`useFastForm`, `useFocusOnRefusal`, `useServerFieldErrors`),
|
|
18
18
|
composite values, config-driven forms and server errors.
|
|
19
19
|
- **Helpers** ([helpers guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/helpers.md)): `cn`, `clientOnly`,
|
|
20
20
|
date, number, storage and URL utilities, a Zod error map, and Redux Toolkit
|
|
@@ -195,7 +195,7 @@ reads `duotone.svg`, the file that exists (it used to ask for the missing
|
|
|
195
195
|
| Specifier | What is in it |
|
|
196
196
|
| --- | --- |
|
|
197
197
|
| `@nxgt/material` | Everything below in one barrel, plus the compiled `style` condition (`dist/material.css`, for apps without Tailwind) |
|
|
198
|
-
| `@nxgt/material/components` | UI components, `*FormField` wrappers, `useCodeResolver`, `useFastForm` and `
|
|
198
|
+
| `@nxgt/material/components` | UI components, `*FormField` wrappers, `useCodeResolver`, `useFastForm`, `useFocusOnRefusal` and `useServerFieldErrors` ([Components](#components)) |
|
|
199
199
|
| `@nxgt/material/print` | PDF documents over `@react-pdf/renderer`: the `PrintDocument` page shell, the print blocks, `PrintDrawing` and the `drawing(scene)` node (a vector drawing from `@nxgt/material-core/draw` printed as vectors), and `PrintDataTable`, `PrintKeyValue` and `PrintMetric` from column definitions and plain rows; documents as plain data (`pdfDocument` and its builders, with `outline` and `conformance`); `registerPdfFont` (with the `PdfFontFaces` type) to embed a font, and the `PdfConformance` type for the PDF/A marker; a `numeric` column and `tabularNums` for figures that line up; `downloadPdf`, `openPdf`, `usePdfFile` and `pdfResponse` to get the file in one call — **its own entry, and not in the barrel above** ([printing guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/printing.md)) |
|
|
200
200
|
| `@nxgt/material/pdf-reader` | `PdfReader`, the redesigned PDF reader (header, floating page pill, rail and panel; `embedded`, `dialog`, `page` and `fullscreen` modes; single page and two-page layouts; `look="expressive"` by default, `"classic"` to opt out, type `PdfReaderLook`) and `configurePdfReader` for pdf.js's worker and assets. **Its own entry, browser-only** (pdf.js loads on first render); also exported as `PdfReader` from `/components` since 3.0 ([guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/pdf-reader.md)) |
|
|
201
201
|
| `@nxgt/material/charts` | Native SVG charts (d3-scale and d3-shape for the maths only) with keyboard point navigation, a screen-reader summary, a "View data" table and `patterns`: `LineChart` and `AreaChart` (`LineChartProps`, `AreaChartProps`, `ChartCurve`), `BarChart` (`BarChartProps`, `BarLayout`, `BarOrientation`), `PieChart` (`PieChartProps`), `DonutChart` (`DonutChartProps`), `Gauge` (`GaugeProps`, `GaugeSize`), `RadialBarChart` (`RadialBarChartProps`), `FunnelChart` (`FunnelChartProps`), `HeatmapChart` (`HeatmapChartProps`, `HeatColumn`), `RadarChart` (`RadarChartProps`), `ScatterChart` (`ScatterChartProps`, `ScatterSeries`, `ScatterPoint`), `ComboChart` (`ComboChartProps`, `ComboSeries`: bars, areas and lines, each on a left or a right axis), `zoom` (a mini overview with a window and two slider handles that picks the rows shown; `range`, `defaultRange`, `onRangeChange`) and `scroll` (a dense plot scrolls sideways on a phone, the value axis pinned) on the line, area, bar and combo charts (`ChartRangeProps`, `ChartZoomOptions`, `ChartScrollOptions`, `ChartRange`), `bands` (shaded ranges), `thresholds` (labelled lines) and `pointTone` (a ringed point with its word, `toneLabels`) on the line and area charts, read against the value axis and carried into the tooltip, the summary and the "View data" table (`ChartBand`, `ChartThreshold`), `onPointClick` on every chart but `Gauge`, `palette` (`'soft'`: the soft palette, or `data-chart-palette="soft"` on an ancestor; `ChartPalette`) on every chart, and the shared types (`ChartSlice`, `ChartRow`, `ChartValue`, `ChartColor`, `ChartShape`, `ChartSeries`, `ChartAxis`, `ChartXAxis`, `ChartPoint`, `ChartBaseProps`). `categoryLabel` names the "View data" table's category column: on Line, Area, Bar and Combo it defaults to the x axis label, on Radar and Heatmap it is always "Category" unless set. **Its own entry, client-only** (import it from a `'use client'` file), not in the barrel above; replaces the Nivo charts (removed in 3.0) of `/components` ([guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/charts.md)) |
|
|
@@ -582,7 +582,7 @@ Not components: what the stylesheet gives any element.
|
|
|
582
582
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-otpfield.webp" width="120" alt="OtpField"> | [`OtpField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#otpfield) · `OtpFormField`, `InputOTP`, `InputOTPGroup`, `InputOTPSlot`, `InputOTPSeparator` | One-time code input of configurable length; the `InputOTP` parts compose your own. | `OtpField`, `OtpFormField`, `InputOTP` (same parts) |
|
|
583
583
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-verificationcode.webp" width="120" alt="VerificationCode"> | [`VerificationCode`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#verificationcode) · `VerificationLockProvider`, `useVerificationLock`, `useVerificationLabels` | The form that asks for a one-time code, driven by props (`via`, `attemptsLeft`, `error`, `pending`): wrong (with the tries left), expired, failed and busy states, "Resend the code", "Use a recovery code", and a page-wide lock that survives remounts. | — |
|
|
584
584
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-inputgroupfield.webp" width="120" alt="InputGroupField"> | [`InputGroupField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#inputgroupfield) · `InputGroupFormField` | Labelled `InputGroup` with addons and helper text. | `InputGroupField`, `InputGroupFormField` |
|
|
585
|
-
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-localizedtextfields.webp" width="120" alt="LocalizedTextFields"> | [`LocalizedTextFields`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#localizedtextfields) · `LocalizedTextFormField` | One text in several languages: a `<fieldset>` with an input per language, the default as the placeholder with a reset button, an error per language and for the group, long lists folded under "Other languages"; the value is a record. | — (later) |
|
|
585
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-localizedtextfields.webp" width="120" alt="LocalizedTextFields"> | [`LocalizedTextFields`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#localizedtextfields) · `LocalizedTextFormField` | One text in several languages: a `<fieldset>` with an input per language, the default as the placeholder with a reset button, an error per language and for the group, long lists folded under "Other languages"; the value is a record. | — (later, #2159) |
|
|
586
586
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-inlineedit.webp" width="120" alt="InlineEdit"> | [`InlineEdit`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#inlineedit) · `InlineEditFormField` | Click-to-edit text with save and cancel. | `InlineEdit`, `InlineEditFormField` |
|
|
587
587
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-countryfield.webp" width="120" alt="CountryField"> | [`CountryField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#countryfield) · `CountryFormField` | Country picker: one country as its flag in the lead well and its name (`size` `sm`/`lg`, a 44px field box whose list opens connected), or several countries as chips with their flags. | `CountryField`, `CountryFormField` |
|
|
588
588
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-timezonefield.webp" width="120" alt="TimezoneField"> | [`TimezoneField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#timezonefield) · `TimezoneFormField` | Searchable IANA timezone picker: a globe, the city, its offset muted after it. | `TimezoneField`, `TimezoneFormField` |
|
|
@@ -680,6 +680,7 @@ Not components: what the stylesheet gives any element.
|
|
|
680
680
|
| <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` |
|
|
681
681
|
| <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` |
|
|
682
682
|
| <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; `useRowMenuFocus()` / `focusRowMenu(rowId)` hands it back to one row's button after an async action, a toast or a later dialog. | — |
|
|
683
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/data-table-filter-lists-recordactionsmenu.webp" width="120" alt="RecordActionsMenu"> | [`RecordActionsMenu`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/data-table-filter-and-lists.md#recordactionsmenu), `useRecordActions` | A record's archive, restore and delete menu over `RowMenu`: Archive runs at once with an Undo toast that stays until dismissed, Restore runs at once, Delete permanently (archived records only) always asks and keeps a refusal in its locked dialog; `can` hides what is not allowed (and the whole menu when nothing is), `send` does the action, `onDone` follows it, `items` / `children` add your own entries, `messages` renames the words; `archivePolicy="confirm"` asks before archiving (no Undo), `consequence` notes what an action entails, `successAction` adds a toast action, and `ActionRefusal` / `isActionRefusal` carry a refusal's details and action. | — |
|
|
683
684
|
| <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` |
|
|
684
685
|
| <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` |
|
|
685
686
|
| <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) |
|
|
@@ -706,6 +707,7 @@ Not components: what the stylesheet gives any element.
|
|
|
706
707
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-listdetailslayout.webp" width="120" alt="ListDetailsLayout"> | [`ListDetailsLayout`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#listdetailslayout), `PaneLayout`, `ThreadLayout` | List / details that collapses to one view on mobile (a `back` bar and focus moves on the details, `breakpoint="container"` to follow its own width), a side pane that becomes a sheet, and a centred column. | `ListDetailsLayout`, `PaneLayout`, `ThreadLayout` |
|
|
707
708
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-responsivegrid.webp" width="120" alt="ResponsiveGrid"> | [`ResponsiveGrid`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#responsivegrid) | Container-query grid that grows from 1 to 5 columns, or fills by a minimum tile width (`minItem`) with a `gap`. | `ResponsiveGrid` |
|
|
708
709
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-sectioncolumns.webp" width="120" alt="SectionColumns"> | [`SectionColumns`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#sectioncolumns) | Short page sections side by side from a viewport breakpoint (`from`, `columns`), stacked in source order below it; not a landmark. | — (later, [#1614](https://github.com/softistx/nxgt-material/issues/1614)) |
|
|
710
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-recordpage.webp" width="120" alt="RecordPage"> | [`RecordPage`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#recordpage), `RecordDetails` | The page of one record: a header card, the content, and the record's facts as a side panel from `xl` that stacks after (or before) the content, with a muted "Added on … · Updated on …" line. | — (later, [#2127](https://github.com/softistx/nxgt-material/issues/2127)) |
|
|
709
711
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-resizable.webp" width="120" alt="ResizableGroup"> | [`ResizableGroup`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#resizablegroup), `ResizablePanel`, `ResizableSeparator` | Resizable panels with an optional grip handle. | `ResizablePanelGroup`, `ResizablePanel`, `ResizableHandle` |
|
|
710
712
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-skiplink.webp" width="120" alt="SkipLink"> | [`SkipLink`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#skiplink) | Skip-to-content control, visible on focus. `DocSkipLink` composes it with `#doc-content`. | `SkipLink` |
|
|
711
713
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/navigation-layout-pager.webp" width="120" alt="Pager"> | [`Pager`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/navigation-and-layout.md#pager) | Previous / next cards for a sequence of pages. `DocPager` composes it. | `Pager` |
|
|
@@ -722,7 +724,7 @@ Not components: what the stylesheet gives any element.
|
|
|
722
724
|
|
|
723
725
|
| Preview | Component | What it does | @nxgt/material-vue |
|
|
724
726
|
| --- | --- | --- | --- |
|
|
725
|
-
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-dialog.webp" width="120" alt="Dialog"> | [`Dialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#dialog), `DialogTrigger`, `DialogContent`, `DialogHeader`, `DialogTitle`, `DialogDescription`, `DialogFooter`, `DialogClose`, `DialogScrollContent`… | Modal dialog parts with an icon close button, Material 3 Expressive (tonal surface, 28 px corners); `size`, a bottom sheet or full screen on phones (`mobilePresentation`), a blurred scrim; `DialogScrollContent` scrolls a dialog taller than the screen. | `Dialog` (same parts) |
|
|
727
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-dialog.webp" width="120" alt="Dialog"> | [`Dialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#dialog), `DialogTrigger`, `DialogContent`, `DialogHeader`, `DialogTitle`, `DialogDescription`, `DialogFooter`, `DialogBody`, `DialogClose`, `DialogScrollContent`… | Modal dialog parts with an icon close button, Material 3 Expressive (tonal surface, 28 px corners); `size`, a bottom sheet or full screen on phones (`mobilePresentation`), a blurred scrim; `DialogBody` scrolls the fields alone while the header and footer stay pinned; `DialogScrollContent` scrolls a dialog taller than the screen. | `Dialog` (same parts) |
|
|
726
728
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-sheet.webp" width="120" alt="Sheet"> | [`Sheet`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#sheet), `SheetTrigger`, `SheetContent`, `SheetHeader`, `SheetTitle`, `SheetFooter`… | Panel that springs in from any edge, rounded on the side facing the page, or floating (`inset`). | `Sheet` (same parts) |
|
|
727
729
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-drawer.webp" width="120" alt="Drawer"> | [`Drawer`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#drawer), `DrawerTrigger`, `DrawerContent`, `DrawerHeader`, `DrawerTitle`, `DrawerFooter`… | Swipeable bottom or side drawer (Vaul) with rounded top corners and a drag handle that widens while held. | `Drawer` (same parts) |
|
|
728
730
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/overlays-menus-popover.webp" width="120" alt="Popover"> | [`Popover`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/overlays-and-menus.md#popover), `PopoverTrigger`, `PopoverContent`, `PopoverAnchor` | Floating panel that grows out of its trigger: `elevated`, `tonal` or `outlined`, with an optional arrow. | `Popover` (same parts) |
|
|
@@ -738,9 +740,10 @@ Not components: what the stylesheet gives any element.
|
|
|
738
740
|
| Preview | Component | What it does | @nxgt/material-vue |
|
|
739
741
|
| --- | --- | --- | --- |
|
|
740
742
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-alert.webp" width="120" alt="Alert"> | [`Alert`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#alert) | Callout with the tone's icon (or yours, or none with `icon={null}`), title, description and `actions` (buttons or links under the text) in seven tones; it spans the row in a form grid. | `Alert` |
|
|
743
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-stalenotice.webp" width="120" alt="StaleNotice"> | [`StaleNotice`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#stalenotice) | Warning that another write came first: keeps what was typed, takes the focus and scrolls into view on mount, and offers one "Reload the record" action (`onReload`, `busy`, `message`), never an overwrite. | — (later) |
|
|
741
744
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-banner.webp" width="120" alt="Banner"> | [`Banner`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#banner) | Dismissible info / success / warning / error banner with an action, in the look of `Alert` (light surface, start bar); it spans the row in a form grid. | `Banner` |
|
|
742
745
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-alertdialog.webp" width="120" alt="AlertDialog"> | [`AlertDialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#alertdialog), `AlertDialogContent`, `AlertDialogAction`, `AlertDialogCancel`… | Parts for a blocking confirmation dialog. | `AlertDialog` (same parts) |
|
|
743
|
-
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-confirmdialog.webp" width="120" alt="ConfirmDialog"> | [`ConfirmDialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#confirmdialog), `ConfirmationDialog`, `CustomAlertDialog` | Confirm / cancel dialog with async loading. `ConfirmationDialog` adds a trigger and an optional Zod form. | `ConfirmDialog`, `ConfirmationDialog`, `CustomAlertDialog` |
|
|
746
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-confirmdialog.webp" width="120" alt="ConfirmDialog"> | [`ConfirmDialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#confirmdialog), `ConfirmationDialog`, `CustomAlertDialog` | Confirm / cancel dialog with async loading. `ConfirmationDialog` adds a trigger and an optional Zod form. A refusal thrown as an `ActionRefusal` shows its details and action. | `ConfirmDialog`, `ConfirmationDialog`, `CustomAlertDialog` |
|
|
744
747
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-customdialog.webp" width="120" alt="CustomDialog"> | [`CustomDialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#customdialog) | Ready-made dialog with trigger, icon, title, body and footer. | `CustomDialog` |
|
|
745
748
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-stepupdialog.webp" width="120" alt="StepUpDialog"> | [`StepUpDialog`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#stepupdialog) | "Confirm it's you": a dialog that asks for a one-time code, driven by props (`via`, `attemptsLeft`, `error`, `pending`, `confirming`). The title takes the focus, the field after a refusal; `DialogFooter` `stackOnPhone={false}` keeps its footer one row on a phone. | — |
|
|
746
749
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/feedback-status-emptystate.webp" width="120" alt="EmptyState"> | [`EmptyState`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/feedback-and-status.md#emptystate) | Illustration, title, description and action, by kind (empty, search, not-found, unauthorized); `compact` size, or `inline` as one row in a list. | `EmptyState` |
|
|
@@ -788,7 +791,7 @@ Not components: what the stylesheet gives any element.
|
|
|
788
791
|
|
|
789
792
|
| Preview | Component | What it does | @nxgt/material-vue |
|
|
790
793
|
| --- | --- | --- | --- |
|
|
791
|
-
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-chat-overview.webp" width="120" alt="ChatInbox"> | [`ChatInbox`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#chat-kit), `ChatThread`, `ChatMessageList`, `ChatMessage`, `ChatComposer`, `ChatThreadHeader`, `ChatWidget`, `ChatConversationItem`… | Chat kit: inbox (list + thread, container queries from `@md`), bubbles grouped by sender or flat rows, read receipts, replies, reactions and a message toolbar, a pill composer with quick replies, attachments and stop,
|
|
794
|
+
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-chat-overview.webp" width="120" alt="ChatInbox"> | [`ChatInbox`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#chat-kit), `ChatThread`, `ChatMessageList`, `ChatMessage`, `ChatComposer`, `ChatThreadHeader`, `ChatWidget`, `ChatConversationItem`, `ChatActionProposal`, `ChatToolActivity`… | Chat kit: inbox (list + thread, container queries from `@md`), bubbles grouped by sender or flat rows, read receipts, replies, reactions and a message toolbar, a pill composer with quick replies, attachments and stop, a floating chat widget, an approval card for an assistant's proposed action and a compact tool-step row; 320 px to desktop, light and dark. | `ChatInbox`, `ChatThread`, `ChatMessageList`, `ChatMessage`, `ChatComposer` (same parts; `ChatActionProposal` and `ChatToolActivity` not yet, [#2145](https://github.com/softistx/nxgt-material/issues/2145)) |
|
|
792
795
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-kanban.webp" width="120" alt="Kanban"> | [`Kanban`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#kanban) | Board with columns, swimlanes, WIP limits, search, and drag-and-drop cards and columns. | `Kanban` |
|
|
793
796
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-eventcalendar.webp" width="120" alt="EventCalendar"> | [`EventCalendar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#eventcalendar) | Month / week / day / agenda calendar with drag, resize and slot creation, a day view split by resource, a named time zone, a now line, a mini-month side panel and a phone layout. | `EventCalendar` |
|
|
794
797
|
| <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/rich-widgets-native-charts-linechart.webp" width="120" alt="LineChart"> | [`LineChart`, `AreaChart`, `BarChart`, `PieChart`, `DonutChart`, `Gauge`, `RadialBarChart`, `FunnelChart`, `HeatmapChart`, `RadarChart`, `ScatterChart`, `ComboChart`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/rich-widgets.md#charts) from `@nxgt/material/charts` | Native SVG charts with keyboard point navigation, a screen-reader summary, a "View data" table, `patterns`, a hide/isolate legend, zoom and phone scroll (client-only entry; [guide](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/guides/charts.md)). | [not yet](https://github.com/softistx/nxgt-material/issues/1255) (#1255) |
|
|
@@ -3,7 +3,7 @@ import { t } from "./utils-BLfntITJ.js";
|
|
|
3
3
|
import { o as n } from "./dist-DVRQkaTK.js";
|
|
4
4
|
import { c as r, s as i } from "./dist-lmHmz_bu.js";
|
|
5
5
|
import { t as a } from "./in-dialog-Vwkyp-M5.js";
|
|
6
|
-
import { a as o, c as s, d as c, i as l, l as u, n as d, o as f, r as p, s as m, t as h, u as g } from "./use-return-focus-
|
|
6
|
+
import { a as o, c as s, d as c, i as l, l as u, n as d, o as f, r as p, s as m, t as h, u as g } from "./use-return-focus-CkUX1HFl.js";
|
|
7
7
|
import { i as _ } from "./escape-owner-DpaP0lm1.js";
|
|
8
8
|
import * as v from "react";
|
|
9
9
|
import { jsx as y, jsxs as b } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { l as e, r as t, s as n, u as r } from "./translator-
|
|
1
|
+
import { l as e, r as t, s as n, u as r } from "./translator-CtEC_AQa.js";
|
|
2
2
|
import { t as i } from "./_baseIsEqual-C6ksIHya.js";
|
|
3
3
|
import { useMemo as a } from "react";
|
|
4
4
|
import { asyncThunkCreator as o, buildCreateSlice as s } from "@reduxjs/toolkit";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
2
|
import { n as t, t as n } from "./dist-DVRQkaTK.js";
|
|
3
|
-
import { n as r, r as i, t as a } from "./spinner-
|
|
3
|
+
import { n as r, r as i, t as a } from "./spinner-C5Kb6MWu.js";
|
|
4
4
|
import { a as o, i as s, n as c, o as l, s as u, t as d } from "./use-click-lock-BZYtTmVt.js";
|
|
5
5
|
import { t as f } from "./is-production-GLw59WU8.js";
|
|
6
6
|
import { t as p } from "./button-group-context-CaP0X5p_.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
3
|
import { t as n } from "./warn-once-C_e47JM8.js";
|
|
4
|
-
import { t as r } from "./button-
|
|
5
|
-
import { t as i } from "./use-material-translation-
|
|
4
|
+
import { t as r } from "./button-C8moFnIT.js";
|
|
5
|
+
import { t as i } from "./use-material-translation-C6H0B4kE.js";
|
|
6
6
|
import { t as a } from "./use-ssr-media-query-C6M5m8sf.js";
|
|
7
7
|
import { i as o, n as s, r as c, t as l } from "./util-4heV2LPI.js";
|
|
8
8
|
import { t as u } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
|
|
9
|
-
import { t as d } from "./chip-
|
|
9
|
+
import { t as d } from "./chip-B6AY1E91.js";
|
|
10
10
|
import { c as f, d as p, f as m, i as h, o as g, p as _, s as v, t as y } from "./line-path-C5pZGC49.js";
|
|
11
11
|
import { t as b } from "./live-status-BGPaN8r8.js";
|
|
12
12
|
import { t as x } from "./linear-G97mfnKF.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { t as e } from "./utils-BLfntITJ.js";
|
|
2
|
-
import { r as t } from "./spinner-
|
|
2
|
+
import { r as t } from "./spinner-C5Kb6MWu.js";
|
|
3
3
|
import { s as n } from "./use-click-lock-BZYtTmVt.js";
|
|
4
|
-
import { t as r } from "./use-material-translation-
|
|
4
|
+
import { t as r } from "./use-material-translation-C6H0B4kE.js";
|
|
5
5
|
import { t as i } from "./react-node-text-Crkpfpco.js";
|
|
6
6
|
import { cloneElement as a, isValidElement as o } from "react";
|
|
7
7
|
import { Fragment as s, jsx as c, jsxs as l } from "react/jsx-runtime";
|
|
@@ -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-
|
|
5
|
-
import { a as c, i as l, n as u } from "./field-blur-context-
|
|
6
|
-
import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-
|
|
4
|
+
import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-tadySeGH.js";
|
|
5
|
+
import { a as c, i as l, n as u } from "./field-blur-context-bEhByoK-.js";
|
|
6
|
+
import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-m_1FTFPQ.js";
|
|
7
7
|
import { t as g } from "./is-production-GLw59WU8.js";
|
|
8
|
-
import { t as _ } from "./use-material-translation-
|
|
9
|
-
import { i as v, n as y, o as b, t as x } from "./code-language-items-
|
|
8
|
+
import { t as _ } from "./use-material-translation-C6H0B4kE.js";
|
|
9
|
+
import { i as v, n as y, o as b, t as x } from "./code-language-items-8VL0aMKG.js";
|
|
10
10
|
import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
|
|
11
11
|
import { n as C, t as w } from "./escape-owner-DpaP0lm1.js";
|
|
12
12
|
import { t as T } from "./skeleton-DSdtr2qc.js";
|
package/dist/code-editor.js
CHANGED
|
@@ -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-
|
|
4
|
-
import { t as o } from "./use-material-translation-
|
|
5
|
-
import { i as s, n as c, o as l } from "./code-language-items-
|
|
6
|
-
import { r as u, t as d } from "./field-blur-
|
|
3
|
+
import { d as n, r, t as i, u as a } from "./toolbar-items-m_1FTFPQ.js";
|
|
4
|
+
import { t as o } from "./use-material-translation-C6H0B4kE.js";
|
|
5
|
+
import { i as s, n as c, o as l } from "./code-language-items-8VL0aMKG.js";
|
|
6
|
+
import { r as u, t as d } from "./field-blur-BYR0yE5L.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-
|
|
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-DQZIKL54.js";
|
|
12
12
|
import { useEffect as k, useRef as A, useState as j } from "react";
|
|
13
13
|
import { Fragment as M, jsx as N, jsxs as P } from "react/jsx-runtime";
|
|
14
14
|
import { getCspNonce as F } from "@nxgt/material-core/csp-nonce";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { d as e, f as t } from "./dropdown-menu-
|
|
2
|
-
import { t as n } from "./use-material-translation-
|
|
1
|
+
import { d as e, f as t } from "./dropdown-menu-tadySeGH.js";
|
|
2
|
+
import { t as n } from "./use-material-translation-C6H0B4kE.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";
|
|
@@ -187,3 +187,9 @@
|
|
|
187
187
|
gap: 0.75rem;
|
|
188
188
|
}
|
|
189
189
|
}
|
|
190
|
+
/* A wide action (#2168): the actions may shrink within the row, so a long
|
|
191
|
+
* label ends in "..." (the button's own ellipsis) instead of overflowing. */
|
|
192
|
+
[data-slot="server-table-phone-row-end"] > [data-slot="server-table-actions"] {
|
|
193
|
+
flex-shrink: 1;
|
|
194
|
+
min-width: 0;
|
|
195
|
+
}
|
|
@@ -1,3 +1,40 @@
|
|
|
1
|
+
/* The scheme's colours as custom properties on the block: classes of the
|
|
2
|
+
stylesheet, never an inline `style` (strict CSP). Same values as
|
|
3
|
+
moonlight-tokens.ts; code-block-scheme.test.ts keeps them equal. */
|
|
4
|
+
[data-slot="code-block"][data-scheme="dark"] {
|
|
5
|
+
--code-bg: #222436;
|
|
6
|
+
--code-fg: #c8d3f5;
|
|
7
|
+
--code-comment: #7a88cf;
|
|
8
|
+
--code-blue: #82aaff;
|
|
9
|
+
--code-cyan: #86e1fc;
|
|
10
|
+
--code-green: #c3e88d;
|
|
11
|
+
--code-orange: #ff966c;
|
|
12
|
+
--code-yellow: #ffc777;
|
|
13
|
+
--code-red: #ff757f;
|
|
14
|
+
--code-magenta: #c099ff;
|
|
15
|
+
--code-pink: #fca7ea;
|
|
16
|
+
--code-selection: #2f334d;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
[data-slot="code-block"][data-scheme="light"] {
|
|
20
|
+
--code-bg: #f5f7ff;
|
|
21
|
+
--code-fg: #383a51;
|
|
22
|
+
--code-comment: #7a88cf;
|
|
23
|
+
--code-blue: #3e68d7;
|
|
24
|
+
--code-cyan: #0b8ec2;
|
|
25
|
+
--code-green: #4db380;
|
|
26
|
+
--code-orange: #c44c22;
|
|
27
|
+
--code-yellow: #ac8300;
|
|
28
|
+
--code-red: #c53b40;
|
|
29
|
+
--code-magenta: #7a5af5;
|
|
30
|
+
--code-pink: #b04d9a;
|
|
31
|
+
--code-selection: #d4daf0;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
[data-slot="code-block"] [data-code-scroll] {
|
|
35
|
+
max-height: var(--code-max-height, none);
|
|
36
|
+
}
|
|
37
|
+
|
|
1
38
|
[data-slot="code-block"] {
|
|
2
39
|
background: var(--code-bg);
|
|
3
40
|
color: var(--code-fg);
|