@nxgt/material-vue 0.25.1 → 0.26.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 +1650 -0
- package/README.md +25 -3
- package/dist/{Button-C1aaI0Gw.js → Button-16J7vTpE.js} +1 -1
- package/dist/{HoverCardTrigger-JtHn0IFQ.js → HoverCardTrigger-C41002JS.js} +2 -2
- package/dist/{camera-BacVyXl0.js → camera-DvKuqT4L.js} +4 -4
- package/dist/{components-DRBKkOqk.js → components-CCWod7cJ.js} +10461 -10194
- package/dist/components.js +8 -8
- package/dist/composables.js +2 -2
- package/dist/dnd.js +1 -1
- package/dist/{form-scope-VxlJuvFe.js → form-scope-x-7TYn2s.js} +1 -1
- package/dist/{i18n-provider-D0oYv0XS.js → i18n-provider-CaaZCmaR.js} +1 -1
- package/dist/i18n.js +4 -4
- package/dist/{icon-button-B2FQtIHS.js → icon-button-CDdNsZuZ.js} +1 -1
- package/dist/lib/components/ui/collections/data-table/data-table-server-footer.vue.d.ts +35 -0
- package/dist/lib/components/ui/collections/data-table/data-table.vue.d.ts +18 -30
- package/dist/lib/components/ui/collections/data-table/index.d.ts +3 -1
- package/dist/lib/components/ui/collections/data-table/partials/data-table-body.vue.d.ts +4 -0
- package/dist/lib/components/ui/collections/data-table/partials/data-table-page-control.vue.d.ts +15 -0
- package/dist/lib/components/ui/collections/data-table/partials/data-table-row.vue.d.ts +31 -0
- package/dist/lib/components/ui/collections/data-table/types.d.ts +66 -0
- package/dist/lib/components/ui/collections/data-table/use-data-table.d.ts +13 -3
- package/dist/lib/components/ui/fields/contacts/consts.d.ts +1 -1
- package/dist/lib/i18n/resources/en/en.d.ts +5 -0
- package/dist/lib/i18n/resources/en/material.json.d.ts +6 -1
- package/dist/lib/i18n/resources/fr/fr.d.ts +5 -0
- package/dist/lib/i18n/resources/fr/material.json.d.ts +6 -1
- package/dist/lib/i18n/resources/resources.d.ts +10 -0
- package/dist/lib/i18n/translator.d.ts +1 -1
- package/dist/lib/nuxt/component-names.d.ts +1 -1
- package/dist/lib.js +2 -2
- package/dist/main.js +17 -17
- package/dist/map.js +4 -4
- package/dist/material-vue.css +1 -1
- package/dist/{pdf-outline-sidebar-jJfhNjnN.js → pdf-outline-sidebar-D3vq2qfS.js} +2 -2
- package/dist/{pdf-page-BW1hXzPu.js → pdf-page-BrJbyjQj.js} +1 -1
- package/dist/{pdf-page-list-D277RtWS.js → pdf-page-list-BCgYEszV.js} +2 -2
- package/dist/{pdf-reader-BReUTsn_.js → pdf-reader-BAzevSJU.js} +8 -8
- package/dist/{pdf-sidebar-Bk6PowY1.js → pdf-sidebar-DSh2Mend.js} +3 -3
- package/dist/{pdf-thumbnail-sidebar-BcNDFsks.js → pdf-thumbnail-sidebar-D_EMcbKF.js} +3 -3
- package/dist/{pdf-toolbar-CHjaMhH9.js → pdf-toolbar-BcL7HlfS.js} +4 -4
- package/dist/pdf.js +2 -2
- package/dist/{sortable-provider-C83VBfGl.js → sortable-provider-DMpmM7Ke.js} +2 -2
- package/dist/{stored-language-CC_vdcCN.js → stored-language-Bxhsx4iB.js} +12 -2
- package/dist/{stx-player-BMQ1D2Li.js → stx-player-MldK_ZAZ.js} +17 -17
- package/dist/{translator-B-X_1taI.js → translator-CLI_7Crg.js} +1 -1
- package/dist/{use-heading-spy-C_ySuvTl.js → use-heading-spy-VPuFj2Gt.js} +1 -1
- package/dist/{use-material-translation-B6sIk0mF.js → use-material-translation-CONqD9wJ.js} +3 -3
- package/docs/components/data-table-filter-and-lists.md +173 -5
- package/docs/getting-started.md +2 -2
- package/docs/roadmap.md +6 -0
- package/lib/nuxt/component-names.ts +1 -0
- package/package.json +3 -2
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,1650 @@
|
|
|
1
|
+
# @nxgt/material-vue
|
|
2
|
+
|
|
3
|
+
## 0.26.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#431](https://github.com/softistx/nxgt-material/pull/431) [`bd58a6f`](https://github.com/softistx/nxgt-material/commit/bd58a6f67bdc25d4b4d0d7d88c52784869ad1529) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DataTable` renders server-side data: one page from a loader, with the query in the URL. Everything is opt-in; a table that sets none of the new props renders and behaves as before.
|
|
8
|
+
|
|
9
|
+
- `manual`: `data` is one server page, rendered as given — no client paging, sorting or filtering — and the footer becomes `DataTableServerFooter` (exported).
|
|
10
|
+
- `pagination={{ totalCount, offset, previous, next }}`: the server footer's range ("41–60 of 133", `material.table.pagination.range`) and Previous / Next, each an href (a real link, `rel="prev"` / `rel="next"`, that works with no JavaScript) or a callback (a button); disabled when absent and while `loading`.
|
|
11
|
+
- Controlled sorting: `sorting` + `onSortingChange(sorting)` in React, `v-model:sorting` in Vue. The headers show the sorting they are given; the callback receives the new `SortingState`, not an updater.
|
|
12
|
+
- `getRowId(row, index)` and controlled selection by id: `rowSelection` + `onRowSelectionChange(selection)` in React, `v-model:row-selection` in Vue. Ids of other pages are kept, and the server footer counts them all.
|
|
13
|
+
- `getRowHref(row)`: the first data cell becomes a link to the row's page, and a click anywhere else on the row (but on a control, in a portal, or at the end of a text selection) follows it. `onRowClick(row, event)` (`@row-click` in Vue) makes the row focusable and activatable with Enter.
|
|
14
|
+
- `linkComponent`: the link rendered for row and page links, given `href` (wrap React Router's `Link` or vue-router's `RouterLink`, which take `to`). Default: a plain `<a>`.
|
|
15
|
+
- `footer`: a render function (React, Vue) or the `#footer` slot (Vue) replaces the footer; `footer={false}` removes it.
|
|
16
|
+
- New `material.table.pagination.*` strings, in English and French: `label`, `range`, `range-open`, `total`, `selected`.
|
|
17
|
+
|
|
18
|
+
`@nxgt/material-core` gains `/row-activation` (`isRowActivation`, `followRowLink`, `ROW_CONTROL_SELECTOR`, `ROW_LINK_SELECTOR`, `RowClick`): the clickable-row rule both libraries' `DataTable` use.
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- Updated dependencies [[`bd58a6f`](https://github.com/softistx/nxgt-material/commit/bd58a6f67bdc25d4b4d0d7d88c52784869ad1529)]:
|
|
23
|
+
- @nxgt/material-core@0.4.0
|
|
24
|
+
|
|
25
|
+
## 0.25.2
|
|
26
|
+
|
|
27
|
+
### Patch Changes
|
|
28
|
+
|
|
29
|
+
- [#429](https://github.com/softistx/nxgt-material/pull/429) [`89c1e07`](https://github.com/softistx/nxgt-material/commit/89c1e078eec9ab7368882b6a90f53ebe9ed7951b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Docs: the README has a "Using with Claude Code" section. The
|
|
30
|
+
`softistx/nxgt-material` repository is now a Claude Code plugin marketplace
|
|
31
|
+
for apps that use the libraries — `nxgt-material` for React apps,
|
|
32
|
+
`nxgt-material-vue` for Vue and Nuxt apps — each with a skill that reads the
|
|
33
|
+
installed package's docs, a screen-builder agent, an upgrade-assistant agent
|
|
34
|
+
and an advisory hook that names the component a file hand-rolls. Install
|
|
35
|
+
with `/plugin marketplace add softistx/nxgt-material`, then
|
|
36
|
+
`/plugin install nxgt-material@nxgt-material` (or
|
|
37
|
+
`nxgt-material-vue@nxgt-material`); the repository is private, so this needs
|
|
38
|
+
GitHub access. Nothing in the package itself changed.
|
|
39
|
+
|
|
40
|
+
- [#429](https://github.com/softistx/nxgt-material/pull/429) [`13c3eda`](https://github.com/softistx/nxgt-material/commit/13c3edad01f08656ca196aca7c37a21e8c003466) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The package ships its `CHANGELOG.md` (now in `files`), so the notes of every
|
|
41
|
+
version are in `node_modules/<package>/CHANGELOG.md` next to the docs, for
|
|
42
|
+
reading offline and for the upgrade agents of the Claude Code plugins.
|
|
43
|
+
The getting-started pages of `@nxgt/material` and `@nxgt/material-vue`
|
|
44
|
+
list it among the tarball's contents.
|
|
45
|
+
- Updated dependencies [[`13c3eda`](https://github.com/softistx/nxgt-material/commit/13c3edad01f08656ca196aca7c37a21e8c003466)]:
|
|
46
|
+
- @nxgt/material-core@0.3.2
|
|
47
|
+
|
|
48
|
+
## 0.25.1
|
|
49
|
+
|
|
50
|
+
### Patch Changes
|
|
51
|
+
|
|
52
|
+
- [#427](https://github.com/softistx/nxgt-material/pull/427) [`d4e953f`](https://github.com/softistx/nxgt-material/commit/d4e953fd4fc147b366c5d9d70ebfb1aa3a3c0ba7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Docs: the roadmap lists what 0.25.0 shipped (`TreeSelectField`, the same options as `@nxgt/material`, `DateRangeField` presets and time, `FilePreview`) under Shipped. Troubleshooting has a new entry for `TimePicker`'s AM / PM fix — it moves the time into that half once (it could add 12 hours twice) and a click on the pressed half emits nothing — and the `FilePreview` entry quotes the HTTP error `@error` receives, `Could not read …: HTTP 404`.
|
|
53
|
+
- Updated dependencies [[`d4e953f`](https://github.com/softistx/nxgt-material/commit/d4e953fd4fc147b366c5d9d70ebfb1aa3a3c0ba7)]:
|
|
54
|
+
- @nxgt/material-core@0.3.1
|
|
55
|
+
|
|
56
|
+
## 0.25.0
|
|
57
|
+
|
|
58
|
+
### Minor Changes
|
|
59
|
+
|
|
60
|
+
- [#424](https://github.com/softistx/nxgt-material/pull/424) [`d90a68b`](https://github.com/softistx/nxgt-material/commit/d90a68b8f16759b44929effc426b6c3964e92a4c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DateRangeField` (and `DateRangeFormField`) take `presets`, `with-time`,
|
|
61
|
+
`min-date` and `max-date`, as `@nxgt/material`'s. `presets` lists one-click
|
|
62
|
+
ranges beside the calendar: built-in ids (`DATE_RANGE_PRESET_IDS`: `today`,
|
|
63
|
+
`yesterday`, `last-7-days`, `last-30-days`, `this-month`, `last-month`,
|
|
64
|
+
`this-year`) and `{ label, range }` of your own, where `range` may be
|
|
65
|
+
`(now) => range`. A preset is a toggle button in a group named "Presets",
|
|
66
|
+
pressed when its days are the value's, and disabled when its range starts
|
|
67
|
+
before `min-date`, ends after `max-date`, either end is one of
|
|
68
|
+
`disabled-days`, or (a preset of your own) its end comes before its start.
|
|
69
|
+
Picking one closes the popover, except with `with-time`, where OK closes it. `min-date` / `max-date` are
|
|
70
|
+
the first and last day the calendar lets you pick (Reka's `minValue` /
|
|
71
|
+
`maxValue`). `with-time` adds a start and an end `TimePicker` under the
|
|
72
|
+
calendar, each disabled until its end has a day, and an OK button; the
|
|
73
|
+
popover then stays open until OK (it no longer closes on the second day),
|
|
74
|
+
the trigger shows each end's time, a day picked on the calendar keeps the
|
|
75
|
+
time its end had (a new start 00:00, a new end 23:59, as the built-in
|
|
76
|
+
presets end), and an end set before the start on the same day becomes the
|
|
77
|
+
start time. Without `with-time`, a picked day still carries the current
|
|
78
|
+
time of day (`@nxgt/material` gives it 00:00). The built-in presets use the
|
|
79
|
+
current date (there is no `now` prop). `DATE_RANGE_PRESET_IDS` and the types
|
|
80
|
+
`DateRangePreset`, `DateRangePresetId`, `DateRangePresetOption` and
|
|
81
|
+
`DayRange` are exported from `@nxgt/material-vue/components` (from
|
|
82
|
+
`@nxgt/material-core/date-range`).
|
|
83
|
+
|
|
84
|
+
New `material.*` keys: `material.date-range-field.presets`,
|
|
85
|
+
`material.date-range-field.preset.today`, `.yesterday`, `.last-7-days`,
|
|
86
|
+
`.last-30-days`, `.this-month`, `.last-month`, `.this-year`,
|
|
87
|
+
`material.date-range-field.start-time`, `material.date-range-field.end-time`,
|
|
88
|
+
`material.time-picker.hours` and `material.time-picker.minutes`.
|
|
89
|
+
|
|
90
|
+
`TimePicker` fix, as in `@nxgt/material`: AM / PM follows the `date` it is
|
|
91
|
+
given, switching it always moves the time into that half of the day, a click
|
|
92
|
+
on the pressed half changes nothing, and the hours and minutes inputs are
|
|
93
|
+
named "Hours" and "Minutes".
|
|
94
|
+
|
|
95
|
+
- [#426](https://github.com/softistx/nxgt-material/pull/426) [`812c101`](https://github.com/softistx/nxgt-material/commit/812c10115278480852852084ddf06b016239e6d4) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New `FilePreview` (Media & files), as in `@nxgt/material`: one file
|
|
96
|
+
previewed by its MIME type, else its extension. `file` is a `File`, a `Blob`
|
|
97
|
+
or a URL, with optional `type` and `name` overriding what the file says. An
|
|
98
|
+
image is an `<img>` whose alt text is the file name; a PDF opens in
|
|
99
|
+
`PdfReader`, imported the first time a PDF is previewed, and falls back to
|
|
100
|
+
the file card when the viewer cannot be loaded; a video or audio file gets
|
|
101
|
+
the browser's `<video controls>` / `<audio controls>`; a text, JSON, CSV or
|
|
102
|
+
Markdown file is read up to `max-text-bytes` (256 KB by default) and shown in
|
|
103
|
+
a scrolling `<pre>`, JSON in `JsonViewer` and Markdown rendered, with
|
|
104
|
+
"Showing the first … of this file." when it was cut; anything else is a
|
|
105
|
+
`FileCard` with its size and type and a Download link. A text is decoded
|
|
106
|
+
with the `charset` of the response's `Content-Type` when the browser supports
|
|
107
|
+
it, else as UTF-8. A URL must be `http(s):`, relative, `blob:`, or a
|
|
108
|
+
`data:` URL of an image, video, audio, plain text, CSV, Markdown, JSON or PDF: any other (`javascript:`, `data:text/html`, and
|
|
109
|
+
also a `data:` URL of XML, TSV or YAML) is never linked, loaded or fetched,
|
|
110
|
+
and shows the error state with no Download link and a
|
|
111
|
+
`FilePreviewUnsafeUrlError` ("Refused to preview a URL with an unsafe scheme") for `@error`. A PDF the reader fails to open
|
|
112
|
+
stays `ready`: `PdfReader` shows its own error. The scrolling text and
|
|
113
|
+
Markdown are regions named "Contents of {name}", and "Loading preview…" is
|
|
114
|
+
announced from a live region that stays mounted. A `File` or `Blob` is
|
|
115
|
+
shown through an object URL, revoked on change and on unmount. On the server,
|
|
116
|
+
and until mounted, it renders an empty placeholder (`data-state="pending"`):
|
|
117
|
+
no object URL, no fetch, nothing to mismatch on hydration. Then `loading`,
|
|
118
|
+
`ready` or `error` ("This file could not be previewed.", with a Download
|
|
119
|
+
link), and it emits `error`. Also exported from
|
|
120
|
+
`@nxgt/material-vue/components`: `fileKind`, `FilePreviewHttpError`,
|
|
121
|
+
`FilePreviewUnsafeUrlError`, `TEXT_PREVIEW_MAX_BYTES` and the types `FileKind`, `FilePreviewSource`,
|
|
122
|
+
`FilePreviewProps` and `FilePreviewStatus` (from
|
|
123
|
+
`@nxgt/material-core/file-preview`). The Nuxt module registers
|
|
124
|
+
`FilePreview`.
|
|
125
|
+
|
|
126
|
+
New `material.*` keys: `material.file-preview.label`,
|
|
127
|
+
`material.file-preview.untitled`, `material.file-preview.loading`,
|
|
128
|
+
`material.file-preview.error`, `material.file-preview.download`,
|
|
129
|
+
`material.file-preview.truncated` and `material.file-preview.content`.
|
|
130
|
+
|
|
131
|
+
`useImagePreview` (public) now goes through `useBlobUrl` and cleans up with
|
|
132
|
+
`onScopeDispose`, so it also works inside an effect scope.
|
|
133
|
+
|
|
134
|
+
- [#418](https://github.com/softistx/nxgt-material/pull/418) [`01d96ca`](https://github.com/softistx/nxgt-material/commit/01d96ca739bb9565c841c7944294df24eb378e07) Thanks [@SteveGT96](https://github.com/SteveGT96)! - **`TreeSelectField`** and **`TreeSelectFormField`**, in both libraries under the same names: a form field that opens the `Tree` in a popover.
|
|
135
|
+
|
|
136
|
+
- `items` takes `Tree`'s nodes. The value is the picked node's id (`string | null`), or the ids with `multiple` (`string[]`): `value` / `onValueChange` in `@nxgt/material`, `v-model` in `@nxgt/material-vue`. The field is controlled only: it holds no value of its own.
|
|
137
|
+
- Single: a pick closes the popover and the trigger shows the node's label. `multiple`: checkboxes in the tree, and each pick is a dismissible `Chip` beside the trigger, its remove button named "Remove {label}".
|
|
138
|
+
- `searchable` adds a filter above the tree; each match stays under its ancestors, which open.
|
|
139
|
+
- Removing a chip hands focus to the next chip, else the previous one, else the trigger, so a keyboard user is not dropped to the page (nor the form field touched).
|
|
140
|
+
- The trigger is a `combobox` named by the label, with `aria-expanded` and `aria-controls`, and the popover is named by the label too; the tree keeps its own keys, and Escape closes the popover and returns focus to the trigger. `id`, `aria-describedby` and `data-*` attributes go on the trigger. It renders on the server.
|
|
141
|
+
- `TreeSelectFormField` binds it to react-hook-form (`control`, `name`, `multiple`) or vee-validate (`name`, `multiple`), touched when focus leaves the trigger and its popover.
|
|
142
|
+
- New copy under `material.tree-select-field.*` (`placeholder`, `search`, `empty`, `selected`), in English and French.
|
|
143
|
+
|
|
144
|
+
**`Tree`**: when its nodes change (a filter) or a branch folds and the row that had the keyboard is no longer shown, the first visible row takes `tabindex="0"`, so Tab still reaches the tree. `useTree` returns that row as `tabbableId`, in both libraries. In `@nxgt/material`, mounting a `Tree` no longer moves focus into it: focus follows the keyboard only, as in `@nxgt/material-vue`.
|
|
145
|
+
|
|
146
|
+
- [#420](https://github.com/softistx/nxgt-material/pull/420) [`f4ca69b`](https://github.com/softistx/nxgt-material/commit/f4ca69ba5dd7b80f92cdd5374cf6fd01f155784d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `@nxgt/material-vue` takes the remaining options of `@nxgt/material`, under the same names. Nothing renders differently for code that does not use them; the one change in behaviour, `toAttributeFormSchema`'s error paths, is described after this list:
|
|
147
|
+
|
|
148
|
+
- `Autocomplete` and `AutocompleteFormField` are generic: `options` takes your own option type, read by `get-option-value` / `get-option-label`, and the `#option`, `#selected-leading` and `#actions` slots (React's `renderOption`, `renderSelectedLeading`, `actions`) receive it. `free-solo-label` names the free-solo button.
|
|
149
|
+
- `FilesFormField`: a free-solo autocomplete of file URLs bound to vee-validate, with image thumbnails (`image`, `image-link-builder`).
|
|
150
|
+
- `ConfirmationDialog` `form-options`: a Zod 4 schema (or any Standard Schema, or a vee-validate typed schema) and its `defaultValues`; the `#form` slot renders the fields, confirm waits for a valid form, and `@confirm` receives the parsed values. The form's code (and vee-validate) loads only for a dialog with `form-options`; if it cannot load, after one retry, the dialog says so (`material.confirm-dialog.form-failed`, also added to `@nxgt/material`'s bundles so the keys stay the same).
|
|
151
|
+
- `DateField` and `DateRangeField` `disabled-days`: React's day rules (a day, a list, a range, before / after, days of the week, a function, or a list of those). `DayMatcher` and `DisabledDays` are exported.
|
|
152
|
+
- `SliderField` `ticks`, `leading` and `trailing` (props, or `#leading` / `#trailing` slots).
|
|
153
|
+
- `Avatar` `status` and `status-pulse`: a presence dot named Online, Away, Busy, Offline or Active.
|
|
154
|
+
- `QRCode` `#logo` slot (the default slot still works).
|
|
155
|
+
- `AccordionCard` `#header`, `#title` and `#content` slots.
|
|
156
|
+
- `SelectField` `#option` slot.
|
|
157
|
+
- `CodeEditor` `options`: Monaco's own construction options, passed through (`CodeEditorOptions` is exported). Monaco stays client-only.
|
|
158
|
+
- `Tabs` `variant="line"` (`TabsVariant` is exported).
|
|
159
|
+
|
|
160
|
+
`Autocomplete`, `AutocompleteFormField`, `ConfirmationDialog` and `FilesFormField` are generic components now (`<script setup generic>`): templates infer the option and schema types, but `InstanceType<typeof Autocomplete>` no longer type-checks; use `ComponentExposed` from `vue-component-type-helpers` instead if you need the instance type.
|
|
161
|
+
|
|
162
|
+
`toAttributeFormSchema` (exported from `@nxgt/material-vue`) now goes through the same Standard Schema adapter as `ConfirmationDialog`: an option's error is reported at `options[0]` rather than `options.0`, and each field has one entry holding all its messages.
|
|
163
|
+
|
|
164
|
+
`@nxgt/material`'s README and component pages name these Vue counterparts, and its `SliderField` reads its tick positions from `@nxgt/material-core/slider-ticks`, the same code as before.
|
|
165
|
+
|
|
166
|
+
### Patch Changes
|
|
167
|
+
|
|
168
|
+
- [#425](https://github.com/softistx/nxgt-material/pull/425) [`8092210`](https://github.com/softistx/nxgt-material/commit/80922105439dcac15b9564864c8945e5edd64aa8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The `DateRangeField` `with-time` story picks two days and checks they start
|
|
169
|
+
at 12:00 AM and end at 11:59 PM.
|
|
170
|
+
|
|
171
|
+
- [#419](https://github.com/softistx/nxgt-material/pull/419) [`02efc3e`](https://github.com/softistx/nxgt-material/commit/02efc3e57a60b533596fd644ebbfc856186664f8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Docs: the i18n guide names the pagination keys `material.pagination.previous`,
|
|
172
|
+
`next`, `page` and `more` (`@nxgt/material`); `InlineEdit` says where focus
|
|
173
|
+
goes when the editor closes, and its Vue props table lists `label` and
|
|
174
|
+
`name`; the Vue `DocLink` paragraph says that without `@navigate` it and the
|
|
175
|
+
sidebar are plain anchors that load the page.
|
|
176
|
+
The Vue i18n guide also names `material.slider.value`, `minimum` and
|
|
177
|
+
`maximum`, which label the slider readout.
|
|
178
|
+
|
|
179
|
+
- [#419](https://github.com/softistx/nxgt-material/pull/419) [`99878c9`](https://github.com/softistx/nxgt-material/commit/99878c9bdb0d4c33fd6a777970c4f3735bd5ef3b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: opening on an `initialPage` no longer reports another page on a
|
|
180
|
+
slow device. The placement scroll could land after the scroll spy's hold had
|
|
181
|
+
run out, and near the end of the document it read as the last page. While
|
|
182
|
+
the view stays where the opening page's pin put it (that page at the top,
|
|
183
|
+
or the page area at its end with that page not above the top), a scroll is the reader's own and is not
|
|
184
|
+
reported; a scroll that moves the view elsewhere — the user's, find in page,
|
|
185
|
+
a screen reader's cursor — lets go of the pin and is reported. A wheel,
|
|
186
|
+
touch, pointer or key in the page area also ends the hold on the reader's
|
|
187
|
+
own scroll, so the scrolling after it is reported at once. In
|
|
188
|
+
`@nxgt/material-core/pdf-viewer`, `pinToPage` takes an optional `onRelease`,
|
|
189
|
+
called once when the pin lets go, and `pinHolds(node)` tells whether the view
|
|
190
|
+
is still where the pin puts it.
|
|
191
|
+
|
|
192
|
+
- [#421](https://github.com/softistx/nxgt-material/pull/421) [`0cf0b4f`](https://github.com/softistx/nxgt-material/commit/0cf0b4f3d5fd5e7f9ff33b5c8ba80174d22f563b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The roadmap lists what 0.24.0 shipped under Shipped, and the troubleshooting entry for `Table` attributes names the version it applies from (0.24.0).
|
|
193
|
+
|
|
194
|
+
- [#419](https://github.com/softistx/nxgt-material/pull/419) [`2a41ae1`](https://github.com/softistx/nxgt-material/commit/2a41ae13664b425c6c7d37b921e95914eabb2552) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NumberField` takes an `aria-labelledby`, as `@nxgt/material`'s does, for an
|
|
195
|
+
input that is a part of a larger field. The `material.slider.value` key is
|
|
196
|
+
added to keep the bundles in step with `@nxgt/material`, whose single-value
|
|
197
|
+
`Slider` readout input it names.
|
|
198
|
+
- Updated dependencies [[`d90a68b`](https://github.com/softistx/nxgt-material/commit/d90a68b8f16759b44929effc426b6c3964e92a4c), [`812c101`](https://github.com/softistx/nxgt-material/commit/812c10115278480852852084ddf06b016239e6d4), [`f4ca69b`](https://github.com/softistx/nxgt-material/commit/f4ca69ba5dd7b80f92cdd5374cf6fd01f155784d), [`99878c9`](https://github.com/softistx/nxgt-material/commit/99878c9bdb0d4c33fd6a777970c4f3735bd5ef3b)]:
|
|
199
|
+
- @nxgt/material-core@0.3.0
|
|
200
|
+
|
|
201
|
+
## 0.24.0
|
|
202
|
+
|
|
203
|
+
### Minor Changes
|
|
204
|
+
|
|
205
|
+
- [#417](https://github.com/softistx/nxgt-material/pull/417) [`920e6d5`](https://github.com/softistx/nxgt-material/commit/920e6d5f176ba3050ecb8f0ae390ce9d915cf4f7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DataTable`: a `loading` prop. With no row to show, the body is skeleton rows
|
|
206
|
+
(`Skeleton`), one cell per visible column, as many as the page size or
|
|
207
|
+
`loadingRows`; with rows already shown, they stay in place, dimmed and
|
|
208
|
+
`inert`, so a refresh does not move the page. The table is `aria-busy` and a
|
|
209
|
+
visually hidden status says "Loading data…" (`material.table.loading`, en and
|
|
210
|
+
fr: translate it if you override the bundles or ship another language).
|
|
211
|
+
Sorting (`DataTableColumnHeader`), the `select` column's "Select all", the
|
|
212
|
+
toolbar's native controls and pagination (`DataTablePagination`'s new
|
|
213
|
+
`disabled`) are disabled meanwhile; the toolbar is now a `<fieldset>`.
|
|
214
|
+
|
|
215
|
+
An `#empty="{ filtered }"` slot replaces the "No data available" row, inside
|
|
216
|
+
a `TableEmpty` spanning every visible column; `filtered` is `true` when rows
|
|
217
|
+
exist but none matches the column filters. The default empty row is a
|
|
218
|
+
`TableEmpty` too, and spans the visible columns rather than every defined
|
|
219
|
+
one, as an expanded row now does. A slot that renders nothing gets the
|
|
220
|
+
default. New type: `DataTableEmptyState`.
|
|
221
|
+
|
|
222
|
+
`Table` now puts the attributes you pass (`aria-*`, `id`, `style`,
|
|
223
|
+
listeners) on the `<table>`, as `@nxgt/material` does, instead of on its
|
|
224
|
+
scrolling container; `class` was already the table's. A `style="max-height:…"`
|
|
225
|
+
or a `@scroll` on `<Table>` therefore no longer limits or follows the
|
|
226
|
+
scrolling: put the height limit on a wrapper of your own (see "A `Table`'s
|
|
227
|
+
`id`, `aria-*` or `style` is no longer on its scrolling container" in
|
|
228
|
+
troubleshooting).
|
|
229
|
+
|
|
230
|
+
The table body's `max-h-[300px] overflow-auto` is gone: a table row group is
|
|
231
|
+
neither clipped nor scrolled, so it never had an effect (the wrapper's
|
|
232
|
+
`max-h-[400px]` still scrolls the table).
|
|
233
|
+
|
|
234
|
+
- [#415](https://github.com/softistx/nxgt-material/pull/415) [`19c92f3`](https://github.com/softistx/nxgt-material/commit/19c92f348664ed7d49810006748a494fbeed5b60) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `@nxgt/material-vue` gains the exports `@nxgt/material` already had, under the
|
|
235
|
+
same names:
|
|
236
|
+
|
|
237
|
+
- `Checkbox` takes `label` and `helper-text` (or the `#label` and
|
|
238
|
+
`#helper-text` slots) and then renders the box in a labelled row. Without
|
|
239
|
+
them it is the same bare Reka UI box as before. `CheckboxFormField` is its
|
|
240
|
+
vee-validate wrapper: an unset value shows as indeterminate, and an
|
|
241
|
+
indeterminate value is written as `null`.
|
|
242
|
+
- `InlineEditFormField` (the value changes on save) and `CodeEditorFormField`
|
|
243
|
+
(Monaco still loads in the browser only).
|
|
244
|
+
- `PaginationBar` (`v-model:page`, `page-count`, `sibling-count`), the
|
|
245
|
+
`paginationItems` window it renders, and `PaginationLink`.
|
|
246
|
+
- `CopyValue`, a value in a monospace chip with its copy button.
|
|
247
|
+
- `MermaidDiagram`, one mermaid chart rendered in the browser only.
|
|
248
|
+
- The `Doc` parts `DocArticle`, `DocNav`, `DocLink`, `DefaultDocLink` and
|
|
249
|
+
`DocCopyPage`, with the `DocArticleProps`, `DocNavProps` and `DocLinkProps`
|
|
250
|
+
types, to build a documentation shell of your own.
|
|
251
|
+
|
|
252
|
+
Fixed in `Doc`: a parent's `@navigate` runs once per click (it ran twice);
|
|
253
|
+
without a navigate handler the links are plain anchors again, instead of
|
|
254
|
+
links that went nowhere; and the shell follows later `pathname`, `items`,
|
|
255
|
+
`toc`, `previous` and `next` changes, so the active entry tracks the route.
|
|
256
|
+
|
|
257
|
+
The Nuxt module registers the new components. In `@nxgt/material`, the README
|
|
258
|
+
and component pages name these Vue equivalents and list what is still
|
|
259
|
+
React-only.
|
|
260
|
+
|
|
261
|
+
### Patch Changes
|
|
262
|
+
|
|
263
|
+
- [#413](https://github.com/softistx/nxgt-material/pull/413) [`5933ad4`](https://github.com/softistx/nxgt-material/commit/5933ad4d63473935a7a7fcf84113940af763314d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Alert`: a long word or URL in the title or description wraps inside the
|
|
264
|
+
alert instead of overflowing it, and the `#icon` slot keeps its size. The
|
|
265
|
+
text column now shrinks (`min-w-0`) and breaks long words, as `Banner`'s
|
|
266
|
+
text column does, and the icon sits in a `shrink-0` wrapper.
|
|
267
|
+
|
|
268
|
+
- [#416](https://github.com/softistx/nxgt-material/pull/416) [`7656bd3`](https://github.com/softistx/nxgt-material/commit/7656bd39810ae873685444177a1265ac3d546022) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Button`: an `Icon` inside a button that has text (or an `aria-label` /
|
|
269
|
+
`aria-labelledby`) is now `aria-hidden`, so the button is announced "Add"
|
|
270
|
+
instead of "Icon plus Add". A `Button` holding only an `Icon` still reads it,
|
|
271
|
+
and so does one whose only other text is `aria-hidden` (a decorative count).
|
|
272
|
+
If a test of yours found such a button by "Icon {name} …", select it by its
|
|
273
|
+
text — see "A button named "Icon plus Add" is now named "Add"" in
|
|
274
|
+
`docs/troubleshooting.md`.
|
|
275
|
+
|
|
276
|
+
- [#416](https://github.com/softistx/nxgt-material/pull/416) [`5f5cd1a`](https://github.com/softistx/nxgt-material/commit/5f5cd1a9fddd01af0b5d13673d8c2b614ee7609f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Fixes found by new interaction tests for `NumberField`, `ColorField` and
|
|
277
|
+
`InlineEdit`:
|
|
278
|
+
|
|
279
|
+
- `ColorField` without `v-model`: text that is not a hex stayed in the field
|
|
280
|
+
and painted the swatch; it now puts the last valid color back, as with
|
|
281
|
+
`v-model`.
|
|
282
|
+
- `InlineEdit`: Enter emitted `save` (and `update:modelValue`) twice, and
|
|
283
|
+
Escape emitted it with the old text — removing the focused input fired its
|
|
284
|
+
blur, which saved again. It no longer does. Closing the editor with Enter,
|
|
285
|
+
Escape, Save or Cancel now returns focus to the field instead of `<body>`,
|
|
286
|
+
and reopening it focuses the input every time (it relied on `autofocus`,
|
|
287
|
+
which a browser honours once per document).
|
|
288
|
+
|
|
289
|
+
- [#416](https://github.com/softistx/nxgt-material/pull/416) [`1c60b25`](https://github.com/softistx/nxgt-material/commit/1c60b25281900c4a34a9b57d742b3d213031b170) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Long content no longer breaks `ListTile`, `StatCard`, `Banner` or `Stepper`.
|
|
290
|
+
|
|
291
|
+
- `ListTile`: a long title or an unbroken URL wraps inside the tile instead
|
|
292
|
+
of scrolling sideways, and the `leading` / `trailing` pieces keep their
|
|
293
|
+
size (a trailing chevron was squeezed to a sliver).
|
|
294
|
+
- `StatCard`: a long label, value or hint wraps inside the card instead of
|
|
295
|
+
running out of it; the icon and the delta keep their size.
|
|
296
|
+
- `Banner`: a long title or description wraps instead of scrolling sideways;
|
|
297
|
+
the icon keeps its size.
|
|
298
|
+
- `Stepper`: a long step title or label truncates with an ellipsis instead of
|
|
299
|
+
scrolling inside its step.
|
|
300
|
+
|
|
301
|
+
- [#413](https://github.com/softistx/nxgt-material/pull/413) [`9894685`](https://github.com/softistx/nxgt-material/commit/9894685ef7a805c9af7cf01f2edb4bc36174a9af) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Filter`: a `number-range` field is now a `role="group"` named by its label
|
|
302
|
+
(and described by its description and error), so two range filters no longer
|
|
303
|
+
read as "Min", "Max", "Min", "Max"; the inputs keep "Min" and "Max" as their
|
|
304
|
+
part names, as `DurationField` does. A `slider-range` field now shows its
|
|
305
|
+
label and description (it rendered the bare slider, with thumbs named only
|
|
306
|
+
"Minimum" and "Maximum") through `SliderField`, with its readout text ("20 – 70"), as
|
|
307
|
+
`@nxgt/material` does, and
|
|
308
|
+
a labelled range `SliderField` is a group named by its label. The
|
|
309
|
+
`material.slider.minimum` / `maximum` keys are added to keep the bundles in
|
|
310
|
+
step with `@nxgt/material`.
|
|
311
|
+
|
|
312
|
+
- [#414](https://github.com/softistx/nxgt-material/pull/414) [`79887f0`](https://github.com/softistx/nxgt-material/commit/79887f0554ff018c71969d623d06adc56ac1ebd2) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `@nxgt/material` gains components and helpers `@nxgt/material-vue` already had, under the same public names unless noted:
|
|
313
|
+
|
|
314
|
+
- **`Camera`** is exported, with `useCamera`, `useCameraContext`, `capturePhotoFromVideo`, `isCameraSupported`, `requestCameraPermissions`, `getCameraDevices` and their types. `createCameraStore` is React's counterpart to Vue's `useCameraStore`. `Camera` renders in the browser only, after mount, so it is safe in an SSR page, and each `Camera` keeps its own state.
|
|
315
|
+
- **`NativeSelect`**, `NativeSelectOption` and `NativeSelectOptGroup`: the browser's own `<select>`, styled; an invalid one uses the `error` colour.
|
|
316
|
+
- **`InputOTP`**, `InputOTPGroup`, `InputOTPSlot` and `InputOTPSeparator`, the parts `OtpField` is built from. `InputOTPSeparator` now has `role="separator"` and takes children.
|
|
317
|
+
- **`PaginationFirst`** and **`PaginationLast`** (double chevrons), **`TableEmpty`**, **`DialogScrollContent`**, and the **`ToastAction`** type.
|
|
318
|
+
- **`Button` `size`**: `xs`, `sm`, `default`, `lg`, and the square `icon-xs`, `icon-sm`, `icon` and `icon-lg`. A button without `size` renders as before.
|
|
319
|
+
- **`RadioGroupField`, `SliderField` and `SwitchField`**: aliases of `RadioGroup`, `Slider` and `Switch` (with `*FieldProps`), so code reads the same in both libraries. Nothing is renamed or deprecated; the full naming alignment is planned for 3.0.
|
|
320
|
+
|
|
321
|
+
`@nxgt/material-vue`:
|
|
322
|
+
|
|
323
|
+
- An `icon*` `Button` holding an icon is square again: the base `has-[>svg]:px-3` padding no longer survives the icon sizes.
|
|
324
|
+
- An invalid `NativeSelect` uses the library's `error` colour instead of `destructive`.
|
|
325
|
+
- `PaginationFirst` and `PaginationLast` show double chevrons, so they no longer look like Previous and Next when their text is hidden on a narrow screen.
|
|
326
|
+
- Its README and component pages name the new React counterparts.
|
|
327
|
+
|
|
328
|
+
- [#411](https://github.com/softistx/nxgt-material/pull/411) [`c346b2b`](https://github.com/softistx/nxgt-material/commit/c346b2be2acae80990ae3b8e937b652db30c240b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The roadmap (`docs/roadmap.md`) lists the upcoming component work: the fixes
|
|
329
|
+
in progress, the exports and options shared with `@nxgt/material`, and the
|
|
330
|
+
`DateRangeField` presets, `TreeSelectField`, `DataTable` loading and empty
|
|
331
|
+
states and `FilePreview` to follow. The `Combobox` primitive family is recorded
|
|
332
|
+
as not planned, with its reason.
|
|
333
|
+
|
|
334
|
+
- [#413](https://github.com/softistx/nxgt-material/pull/413) [`f4b1edf`](https://github.com/softistx/nxgt-material/commit/f4b1edf209c4c5c21304b599b84eee924777fca0) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Slider` / `SliderField`: the thumb takes the theme's background colour
|
|
335
|
+
(`bg-background`) instead of `bg-white`, so it no longer shows as a white
|
|
336
|
+
disc in dark mode, as in `@nxgt/material`.
|
|
337
|
+
|
|
338
|
+
- [#413](https://github.com/softistx/nxgt-material/pull/413) [`95576c4`](https://github.com/softistx/nxgt-material/commit/95576c44ae76dac1b21e556b21b39443b1359b0b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Spinner` (`variant="1"`): `color="light"` is white again and `color="default"`
|
|
339
|
+
follows the foreground colour. The variant listed `default` twice, so
|
|
340
|
+
`default` rendered white and `light` had no colour, which made a spinner on a
|
|
341
|
+
dark surface (the player's buffering indicator) look static. A filled
|
|
342
|
+
`Button` with `spinnerVariant="1"` gets a white loading spinner again too.
|
|
343
|
+
|
|
344
|
+
- [#416](https://github.com/softistx/nxgt-material/pull/416) [`8265d9a`](https://github.com/softistx/nxgt-material/commit/8265d9af7aaf9715e1a96d56de2bf62324c21f06) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Stepper`: step ids are unique per stepper, and the steps say their state to
|
|
345
|
+
assistive tech.
|
|
346
|
+
|
|
347
|
+
- Each step's `id` was a static `step-N`, so two steppers on one page
|
|
348
|
+
produced duplicate ids. It is now prefixed with Vue's `useId`.
|
|
349
|
+
**Note:** if a test or stylesheet of yours targets `#step-N`, select the
|
|
350
|
+
step by `data-pw` instead (`step-N`, or `<name>-step-N`, now on every step
|
|
351
|
+
as in `@nxgt/material`) — see "A `Stepper` step selected by `#step-N` stops
|
|
352
|
+
matching" in `docs/troubleshooting.md`.
|
|
353
|
+
- The steps are an `<ol>` of `<li>`; the current step's button carries
|
|
354
|
+
`aria-current="step"`; a completed or failed step adds visually hidden text
|
|
355
|
+
(`material.stepper.completed`, `material.stepper.error`) so a screen reader
|
|
356
|
+
does not depend on the icon.
|
|
357
|
+
- A long step title no longer widens its column or pushes the next step: the
|
|
358
|
+
columns are `minmax(0, 1fr)` and the title truncates with an ellipsis.
|
|
359
|
+
|
|
360
|
+
## 0.23.4
|
|
361
|
+
|
|
362
|
+
### Patch Changes
|
|
363
|
+
|
|
364
|
+
- [#409](https://github.com/softistx/nxgt-material/pull/409) [`a31ce5f`](https://github.com/softistx/nxgt-material/commit/a31ce5f1db0a6feae418c49d14b845321957cbbc) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ActionCard` (`variant="md"`): without an `#icon` slot, the check indicator
|
|
365
|
+
now sits at the right edge of the card instead of the left, as it does with
|
|
366
|
+
an icon and in `variant="sm"`.
|
|
367
|
+
The `md` indicator also gets the `sm` one's look: a bordered circle when
|
|
368
|
+
inactive, and the same transition.
|
|
369
|
+
|
|
370
|
+
## 0.23.3
|
|
371
|
+
|
|
372
|
+
### Patch Changes
|
|
373
|
+
|
|
374
|
+
- [#406](https://github.com/softistx/nxgt-material/pull/406) [`b890457`](https://github.com/softistx/nxgt-material/commit/b8904573f18dc6d0cdd16f62146183ff0b7aef18) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Internal: `formatFileSize` and the pdfkit font resolution the Nuxt module
|
|
375
|
+
runs for Nitro's trace now come from `@nxgt/material-core`
|
|
376
|
+
(`/format-file-size`, `/pdfkit-fonts`), shared with `@nxgt/material`, instead
|
|
377
|
+
of a copy in this package. No API change: `formatFileSize` is still exported
|
|
378
|
+
by name, and the module adds the same files to `nitro.externals.traceInclude`.
|
|
379
|
+
When some fonts cannot be resolved, `nuxi build` now prints one
|
|
380
|
+
`pdf fonts:` warning naming every failure, instead of one per font.
|
|
381
|
+
- Updated dependencies [[`bf43a14`](https://github.com/softistx/nxgt-material/commit/bf43a14abb147e6dcd2bcac5f1e0e359b0aae6a2), [`b890457`](https://github.com/softistx/nxgt-material/commit/b8904573f18dc6d0cdd16f62146183ff0b7aef18)]:
|
|
382
|
+
- @nxgt/material-core@0.2.0
|
|
383
|
+
|
|
384
|
+
## 0.23.2
|
|
385
|
+
|
|
386
|
+
### Patch Changes
|
|
387
|
+
|
|
388
|
+
- [#403](https://github.com/softistx/nxgt-material/pull/403) [`6a4938e`](https://github.com/softistx/nxgt-material/commit/6a4938e8624fbb5802a9835bc510e441d5fee4de) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The French UI now says « Enregistrer » for the save action everywhere:
|
|
389
|
+
`material.buttons.save` read « Sauvegarder » while every component's own `save`
|
|
390
|
+
key already read « Enregistrer ». Consumers who assert on the French label in
|
|
391
|
+
their own tests will now see « Enregistrer ».
|
|
392
|
+
|
|
393
|
+
- [#402](https://github.com/softistx/nxgt-material/pull/402) [`6fe042b`](https://github.com/softistx/nxgt-material/commit/6fe042b212896c58bdfd831cc663fa2806d7d657) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NetworkUploadField`, its size-limit messages ("File exceeds maximum size of
|
|
394
|
+
…", the drop zone's "Max 2.0 MB") and the chat composer's attachment chip now
|
|
395
|
+
format sizes with the exported `formatFileSize`, as `FileList` and `FileCard`
|
|
396
|
+
already did. A negative, `NaN` or infinite size now shows nothing instead of
|
|
397
|
+
`NaN undefined` or `Infinity GB`; every other size reads as before.
|
|
398
|
+
|
|
399
|
+
## 0.23.1
|
|
400
|
+
|
|
401
|
+
### Patch Changes
|
|
402
|
+
|
|
403
|
+
- [#398](https://github.com/softistx/nxgt-material/pull/398) [`dac4ddf`](https://github.com/softistx/nxgt-material/commit/dac4ddf2d15190a904ae55b56ea3e31b9616990d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ImageCropper` and `ImageCropperDialog` no longer throw
|
|
404
|
+
`TypeError: Cannot read properties of null (reading 'naturalHeight')` when
|
|
405
|
+
they are closed or unmounted while the photo is still loading. The error came
|
|
406
|
+
from the cropper's stencil preview and was uncaught, so it surfaced in
|
|
407
|
+
whatever ran next.
|
|
408
|
+
|
|
409
|
+
- [#399](https://github.com/softistx/nxgt-material/pull/399) [`448b036`](https://github.com/softistx/nxgt-material/commit/448b0360ee21de7ec750e134941bcb3e0d519a24) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The Nuxt module now adds pdfkit's standard-font files to what Nitro copies
|
|
410
|
+
into `.output/server/node_modules`. Before, a production build rendered no
|
|
411
|
+
PDF on the server: every `pdfResponse` route answered HTTP 500 with
|
|
412
|
+
`Cannot find module '…/pdfkit/js/standard-fonts/Helvetica.cjs'`, because
|
|
413
|
+
pdfkit loads those files with a runtime `require` Nitro's tracer never sees.
|
|
414
|
+
`nuxi dev` and servers built with `pdf.bundleStandardFonts` under
|
|
415
|
+
`noExternals` were not affected. `@nxgt/material-core` needs nothing more:
|
|
416
|
+
Nitro traces it like any dependency, or inlines it under `noExternals`.
|
|
417
|
+
|
|
418
|
+
- [#398](https://github.com/softistx/nxgt-material/pull/398) [`b4e5770`](https://github.com/softistx/nxgt-material/commit/b4e5770922ad4582a1ad2dcca439f7c8c999a0c7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Docs: the roadmap's Shipped list now has 0.23.0 — the framework-free code comes from `@nxgt/material-core`, with the same imports as before.
|
|
419
|
+
- Updated dependencies [[`1abb908`](https://github.com/softistx/nxgt-material/commit/1abb90800ec213d8ec98abd7df5dda9f65c14204), [`b4e5770`](https://github.com/softistx/nxgt-material/commit/b4e5770922ad4582a1ad2dcca439f7c8c999a0c7)]:
|
|
420
|
+
- @nxgt/material-core@0.1.1
|
|
421
|
+
|
|
422
|
+
## 0.23.0
|
|
423
|
+
|
|
424
|
+
### Minor Changes
|
|
425
|
+
|
|
426
|
+
- [#391](https://github.com/softistx/nxgt-material/pull/391) [`deaf0c4`](https://github.com/softistx/nxgt-material/commit/deaf0c49cbc2268fd20e9e2272104dbd27e4ce7f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `@nxgt/material-vue` now depends on a new package, `@nxgt/material-core`,
|
|
427
|
+
which your install adds on its own: there is nothing to change in your
|
|
428
|
+
`package.json`, your imports or your Nuxt config.
|
|
429
|
+
|
|
430
|
+
`@nxgt/material-core` holds the code `@nxgt/material-vue` and
|
|
431
|
+
`@nxgt/material` used to ship as two identical copies: the PDF document model
|
|
432
|
+
and its renderer, the print formatters (`formatAmount`, `formatDate`,
|
|
433
|
+
`createFormatters`), the column and value helpers of `/pdf`, the PDF file
|
|
434
|
+
helpers behind `PdfReader` and `usePdf`, the page geometry, scroll spy and
|
|
435
|
+
text search inside `PdfReader`, the decimals of `CurrencyField`, the rule that
|
|
436
|
+
keeps a field from blurring while focus is in its own popover, and
|
|
437
|
+
`pdfkitStandardFonts()`.
|
|
438
|
+
`@nxgt/material-vue/pdf`, `/lib`, `/vite`, `/components` and the other
|
|
439
|
+
entries export exactly the same names as before, with the same types, and now
|
|
440
|
+
import that code from `@nxgt/material-core` instead of bundling it. `react`
|
|
441
|
+
and `@react-pdf/renderer` stay optional peers, loaded only when a PDF is
|
|
442
|
+
rendered.
|
|
443
|
+
|
|
444
|
+
One case to check: a server bundled into a single file and run **without**
|
|
445
|
+
`node_modules` must bundle `@nxgt/material-core` too, like any other
|
|
446
|
+
dependency of `@nxgt/material-vue` — a bundler that inlines everything
|
|
447
|
+
already does. A server that keeps `node_modules` loads it from there. With Vite, list both:
|
|
448
|
+
`ssr: { noExternal: ['@nxgt/material-vue', '@nxgt/material-core'] }`. Without it
|
|
449
|
+
the server fails at boot with `Cannot find package '@nxgt/material-core'`
|
|
450
|
+
([troubleshooting](https://cdn.jsdelivr.net/npm/@nxgt/material-vue@0/docs/troubleshooting.md#cannot-find-package-nxgtmaterial-core)).
|
|
451
|
+
|
|
452
|
+
### Patch Changes
|
|
453
|
+
|
|
454
|
+
- [#388](https://github.com/softistx/nxgt-material/pull/388) [`a3dae5c`](https://github.com/softistx/nxgt-material/commit/a3dae5c66b76e6ab31f591fddefdd0723a640152) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The README now links to the upgrade notes in Getting started, which list what to check when moving to each version.
|
|
455
|
+
- Updated dependencies [[`deaf0c4`](https://github.com/softistx/nxgt-material/commit/deaf0c49cbc2268fd20e9e2272104dbd27e4ce7f)]:
|
|
456
|
+
- @nxgt/material-core@0.1.0
|
|
457
|
+
|
|
458
|
+
## 0.22.0
|
|
459
|
+
|
|
460
|
+
### Minor Changes
|
|
461
|
+
|
|
462
|
+
- [#157](https://github.com/softistx/nxgt-material-vue/pull/157) [`be1264a`](https://github.com/softistx/nxgt-material-vue/commit/be1264a9d9fec18e22a7f3f8a272df6eb53773e3) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `AttributesField` follows its `attributes`, and shows helper text
|
|
463
|
+
|
|
464
|
+
- `AttributesField` read `attributes` once, on mount, so a form `resetForm()`
|
|
465
|
+
or `setFieldValue()` on an `AttributesFormField` did not change the list on
|
|
466
|
+
screen. It now follows the prop when its value changes, without echoing the
|
|
467
|
+
change back through `onChange`. A new array with the same content (a list
|
|
468
|
+
rebuilt on each render) is not a change and does not undo the user's edits.
|
|
469
|
+
Edits no longer mutate the array you passed in place.
|
|
470
|
+
- `AttributesField` gains `error` and `helperText`. `AttributesFormField`
|
|
471
|
+
passes its error through them and gains a `helperText` prop, shown when
|
|
472
|
+
there is no error.
|
|
473
|
+
|
|
474
|
+
- [#223](https://github.com/softistx/nxgt-material-vue/pull/223) [`58ee698`](https://github.com/softistx/nxgt-material-vue/commit/58ee698e4bbc4bc10204fb507ae7adeb756d565f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `CurrencyField` / `CurrencyFormField`: new `fraction-digits` option. The
|
|
475
|
+
amount is shown with the currency's own decimals by default (ISO 4217: `JPY`
|
|
476
|
+
0, `EUR` 2, `KWD` 3), the rule `formatAmount` already follows; it always
|
|
477
|
+
showed two before. Pass `:fraction-digits="2"` to keep two decimals whatever
|
|
478
|
+
the currency; it is clamped to 0–20 (the range every `Intl.NumberFormat`
|
|
479
|
+
accepts), and `NaN` or `Infinity` counts as not given. The emitted number is
|
|
480
|
+
unchanged.
|
|
481
|
+
|
|
482
|
+
The helpers guide now says which formatter to use: `useFormatters()`'s
|
|
483
|
+
`formatAmount` for money, `useNumberFormatter()` for the other
|
|
484
|
+
`Intl.NumberFormat` styles.
|
|
485
|
+
|
|
486
|
+
- [#200](https://github.com/softistx/nxgt-material-vue/pull/200) [`eb82839`](https://github.com/softistx/nxgt-material-vue/commit/eb828391bc6dee29108fbd95dfbee5069ecc3a0c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Every `*FormField` now marks its field touched when focus leaves it **and validates it then**, so a required field's error appears as the user moves past it rather than only on submit — as vee-validate's `<Field>` does by default (`validateOnBlur: true`). Until now no wrapper but `RichTextEditorFormField` and `FilterFormField` called `handleBlur`, so `meta.touched` stayed `false` until submit and "show errors once touched" never showed anything. Moving between a field's own controls, or into the popover or dialog it opened, is not leaving it: a picker is touched when focus leaves its trigger and its popover. `RichTextEditorFormField` now counts its toolbar as part of the field, and validates on blur too. `FilterFormField` is unchanged (touched when applied). Validation on value change and on submit is unchanged.
|
|
487
|
+
|
|
488
|
+
- [#157](https://github.com/softistx/nxgt-material-vue/pull/157) [`351fc37`](https://github.com/softistx/nxgt-material-vue/commit/351fc37dce0639078225fa47bce0451ef531e550) Thanks [@SteveGT96](https://github.com/SteveGT96)! - i18n fallbacks are formatted, and Zod messages are English in English
|
|
489
|
+
|
|
490
|
+
- Components rendered without an `I18nProvider` no longer show raw ICU
|
|
491
|
+
placeholders: the JsonViewer reads `3 items` (not `{count} items`), the
|
|
492
|
+
Kanban WIP badge `3/5`, and so on.
|
|
493
|
+
`useMaterialTranslation().t(key, fallback, values)` now formats the fallback
|
|
494
|
+
with `values`, with or without a provider, and on a server. A fallback that
|
|
495
|
+
cannot be formatted (a stray `{`) is shown as written, with a
|
|
496
|
+
`[@nxgt/material-vue] Could not format the fallback` warning in development
|
|
497
|
+
only. Plain fallbacks are not parsed at all, and parsed messages are cached.
|
|
498
|
+
- `zodLocaleError()`'s `invalid_type` messages were French in the English
|
|
499
|
+
bundle. They are English now (`This value must be a number.`), and a type
|
|
500
|
+
with no message of its own gets `This value has the wrong type.` instead of
|
|
501
|
+
its raw key.
|
|
502
|
+
- `zodLocaleError()` no longer throws on a server or when storage is blocked:
|
|
503
|
+
it writes English. It takes optional `{ storageKey, language, translate }`
|
|
504
|
+
(`ZodLocaleErrorOptions`) so it can read the `storageKey` you gave
|
|
505
|
+
`I18nProvider`, follow a language you pass, and format through your own
|
|
506
|
+
merged translator so your `material.zod.*` overrides apply. Calling it with
|
|
507
|
+
no argument behaves as before.
|
|
508
|
+
|
|
509
|
+
- [#182](https://github.com/softistx/nxgt-material-vue/pull/182) [`690ec8a`](https://github.com/softistx/nxgt-material-vue/commit/690ec8a12ce42639c27a3ec46388aedf6211b009) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The calendar, data table, filter, spinner, scroll-to-top, network upload, map marker and the editor's slash menu, fonts and table alignment follow `I18nProvider`
|
|
510
|
+
|
|
511
|
+
82 keys join the `material` bundles, in English and French, with the same
|
|
512
|
+
names and the same French as `@nxgt/material`:
|
|
513
|
+
|
|
514
|
+
- `material.rich-text-editor.*` (47): the slash menu's group, item titles and
|
|
515
|
+
descriptions (`slash-menu.*`), the font menu (`font-default`, `font-sans`,
|
|
516
|
+
`font-serif`, `font-mono`) and the table-caption alignment choices
|
|
517
|
+
(`table-align-left` / `-center` / `-right`).
|
|
518
|
+
- `material.filter.*` (19): `min`, `max`, and the presets menu and dialog
|
|
519
|
+
(`presets.*`).
|
|
520
|
+
- `material.calendar.*` (9): the previous/next month buttons' labels, on
|
|
521
|
+
`Calendar` and `DateRangeField`, use two;
|
|
522
|
+
the others (year paging, `Go to Today`, the caption button) are React's,
|
|
523
|
+
kept so both bundles stay identical.
|
|
524
|
+
- `material.table.labels.select-all` / `select-row`,
|
|
525
|
+
`material.upload.retry` / `remove`, `material.spinner.loading`,
|
|
526
|
+
`material['scroll-to-top'].label`, `material.map.you-are-here`.
|
|
527
|
+
|
|
528
|
+
The slash menu filters on the translated title and description and on the
|
|
529
|
+
English ones, accent-insensitively; `RichTextEditor` hands the menu its own
|
|
530
|
+
translator, so there is nothing to wire.
|
|
531
|
+
|
|
532
|
+
Without a provider the English is unchanged. An explicit `aria-label` on
|
|
533
|
+
`Spinner`, `ScrollToTop`, `CalendarPrevButton` or `CalendarNextButton` still
|
|
534
|
+
wins.
|
|
535
|
+
`LocationMarker` now shows `You are here` as its tooltip by default, as the
|
|
536
|
+
React marker does; fill its `#tooltip` slot to replace it.
|
|
537
|
+
|
|
538
|
+
- [#207](https://github.com/softistx/nxgt-material-vue/pull/207) [`08a7e81`](https://github.com/softistx/nxgt-material-vue/commit/08a7e816ce285048bcc8fba03807c08503af3506) Thanks [@SteveGT96](https://github.com/SteveGT96)! - New entry `@nxgt/material-vue/pdf`: PDF documents from plain data, with the
|
|
539
|
+
same document model and renderer as `@nxgt/material/print` (byte for byte, so
|
|
540
|
+
a document template written for one library renders identically in the
|
|
541
|
+
other).
|
|
542
|
+
|
|
543
|
+
- Builders (`pdfDocument`, `page`, `header`, `text`, `table`, `dataTable`,
|
|
544
|
+
`keyValueOf`, `metric`, …) produce a plain `PdfDocument`, serialisable and
|
|
545
|
+
usable on the server.
|
|
546
|
+
- `renderPdfBlob`, `renderPdfBuffer`, `renderPdfStream`, `pdfResponse` (a
|
|
547
|
+
`Response` with the right headers, for a Nitro/H3 route), `downloadPdf`,
|
|
548
|
+
`openPdf`, and `contentDisposition` for a response of your own.
|
|
549
|
+
- `usePdf(source, { fileName, immediate })` returns `{ blob, url, loading,
|
|
550
|
+
error, refresh, download }` and does nothing on the server; `download()`
|
|
551
|
+
saves the document `source` holds when it is called, waiting for its render.
|
|
552
|
+
`PdfDownloadButton` renders one document on click, emits `error`, and
|
|
553
|
+
rethrows a failure when nothing listens to `@error` (it reaches
|
|
554
|
+
`app.config.errorHandler`, else the console).
|
|
555
|
+
- A `definePdfDocument` template annotates its data parameter, and its other
|
|
556
|
+
parameters may take defaults (`(invoice: Invoice, language = 'en') => …`).
|
|
557
|
+
- The print table and value helpers are exported here too:
|
|
558
|
+
`definePrintColumns`, `resolvePrintTable`, `resolvePrintFields`,
|
|
559
|
+
`toPrintValue`, `formatPrintValue`, `isEmptyPrintValue` and the
|
|
560
|
+
`PrintColumn` / `PrintValue` types. A `'sum'` total over amounts in more
|
|
561
|
+
than one currency is left empty, and a `Date` cell prints as a date.
|
|
562
|
+
- The theme (`defaultPdfTheme`, `resolvePdfTheme`, `resolvePdfColor`) and
|
|
563
|
+
`PdfPeerMissingError`.
|
|
564
|
+
- Built-in strings (page numbers, totals, the empty table) follow the
|
|
565
|
+
library's i18n, in English and French.
|
|
566
|
+
|
|
567
|
+
`react` (`^18.2.0 || ^19.0.0`) and `@react-pdf/renderer` (`^4.9.0`) are
|
|
568
|
+
**optional peers**, loaded on the first render: nothing changes for an app
|
|
569
|
+
that does not import `/pdf`. An app that does installs them with
|
|
570
|
+
`bun add react @react-pdf/renderer@^4.9`; without them, rendering throws
|
|
571
|
+
`PdfPeerMissingError` with that command.
|
|
572
|
+
|
|
573
|
+
Also new: `@nxgt/material-vue/vite` exports `pdfkitStandardFonts()`, and the
|
|
574
|
+
Nuxt module takes `pdf: { bundleStandardFonts: true }` to add it to Nitro, for
|
|
575
|
+
a server whose runtime image has no `node_modules` (pdfkit loads its fonts
|
|
576
|
+
from a specifier no bundler resolves).
|
|
577
|
+
|
|
578
|
+
- [#202](https://github.com/softistx/nxgt-material-vue/pull/202) [`68a1295`](https://github.com/softistx/nxgt-material-vue/commit/68a129571f713ecc60291251bc4de18237b8b0f1) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader` opens any source: `file` takes a `Blob` (a `File`, a fetched PDF),
|
|
579
|
+
an `ArrayBuffer` or a `Uint8Array`, a `URL`, or
|
|
580
|
+
`{ url, httpHeaders, withCredentials }` for a URL that needs a token, as well
|
|
581
|
+
as a URL string. The new `PdfSource` and `PdfUrlSource` types are exported.
|
|
582
|
+
|
|
583
|
+
- Bytes are copied: pdf.js empties the buffer it is given, and yours stays
|
|
584
|
+
usable after the reader opened it.
|
|
585
|
+
- The document reloads only when it changes: a URL with the same headers, even
|
|
586
|
+
in a new object on each render, keeps the view; a Blob or a buffer is
|
|
587
|
+
compared by identity.
|
|
588
|
+
- Download and print fetch a URL source with its headers, and save a Blob or
|
|
589
|
+
bytes as they are. When that fetch fails, a URL with headers is not opened
|
|
590
|
+
in a new tab, which would load it without them. With no `fileName`, a
|
|
591
|
+
`File`'s name or a URL segment, it is named "document.pdf", translated
|
|
592
|
+
(`material.pdf-reader.default-file-name`).
|
|
593
|
+
- The headers are part of what identifies the document: new headers (a
|
|
594
|
+
renewed token) load it again, from `initialPage`.
|
|
595
|
+
|
|
596
|
+
- [#197](https://github.com/softistx/nxgt-material-vue/pull/197) [`64db655`](https://github.com/softistx/nxgt-material-vue/commit/64db655efd464bd3fdef4a8be94e71bf319d4f5e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: Download now finishes in Firefox and Safari too. The link is
|
|
597
|
+
attached before its click and the object URL is revoked a minute later, not
|
|
598
|
+
right away. A new `fileName` prop names the saved file, and a URL document is
|
|
599
|
+
named after its last path segment instead of always `document.pdf` (`.pdf` is
|
|
600
|
+
added when missing). A URL document is saved from the bytes already loaded,
|
|
601
|
+
so a cross-origin one downloads instead of navigating. Print uses a
|
|
602
|
+
same-origin copy too, and opens a new tab instead of throwing `SecurityError`
|
|
603
|
+
when the browser refuses.
|
|
604
|
+
|
|
605
|
+
- [#222](https://github.com/softistx/nxgt-material-vue/pull/222) [`9014823`](https://github.com/softistx/nxgt-material-vue/commit/90148230c7fb9b9b3587d6a8e77eb62868de71ed) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader` takes `externalLinkTarget` (`'_blank' | '_self' | '_parent' |
|
|
606
|
+
'_top'`, default `'_blank'`): a link to a website inside the PDF opens in a new
|
|
607
|
+
tab by default, whatever the PDF asks; `'_self'` opens it in place.
|
|
608
|
+
`rel` stays `noopener noreferrer nofollow`.
|
|
609
|
+
|
|
610
|
+
`toPdfjsSource` and `toPdfjsParams` are exported beside `usePdfReader` (with
|
|
611
|
+
the `PdfjsSourceParams` / `PdfjsUrlParams` types), so a layout of your own
|
|
612
|
+
loads bytes with pdf.js without detaching your buffer.
|
|
613
|
+
|
|
614
|
+
`TooltipContent` takes `to`, where the tooltip is teleported.
|
|
615
|
+
|
|
616
|
+
- [#202](https://github.com/softistx/nxgt-material-vue/pull/202) [`6b30301`](https://github.com/softistx/nxgt-material-vue/commit/6b303018afb00568a40030f661e311a837a793f4) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader` makes the links inside the PDF clickable, as `@nxgt/material` does:
|
|
617
|
+
a link to another page goes to it, and a link to a website opens in a new tab
|
|
618
|
+
by default, with `rel="noopener noreferrer nofollow"` (`externalLinkTarget`
|
|
619
|
+
picks another target).
|
|
620
|
+
|
|
621
|
+
Its zoom menu is a `DropdownMenu`: it opens from the keyboard (Enter or Space,
|
|
622
|
+
the arrows move, Escape closes and gives focus back), its button is named after
|
|
623
|
+
the current zoom ("Zoom level 150%", `material.pdf-reader.zoom-menu`), and in
|
|
624
|
+
fullscreen it opens inside the reader. Keys pressed in the menu no longer turn
|
|
625
|
+
pages. An outline entry without a title reads "Untitled" in the reader's
|
|
626
|
+
language (`material.pdf-reader.untitled`).
|
|
627
|
+
|
|
628
|
+
`DropdownMenuContent` takes `to`, the element the menu is teleported into
|
|
629
|
+
(`body` by default): pass the fullscreen element, read when the menu opens,
|
|
630
|
+
for a menu opened in fullscreen.
|
|
631
|
+
|
|
632
|
+
- [#202](https://github.com/softistx/nxgt-material-vue/pull/202) [`c4b7965`](https://github.com/softistx/nxgt-material-vue/commit/c4b7965667131469b0645c3a526885393bf230f5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `formatAmount` and `formatDate` take a locale and a time zone, move to
|
|
633
|
+
`@nxgt/material-vue/lib` (as in `@nxgt/material`), and `useFormatters()` /
|
|
634
|
+
`createFormatters()` bind them.
|
|
635
|
+
|
|
636
|
+
- `formatAmount(value, currency?, { locale?, fractionDigits? })` and
|
|
637
|
+
`formatDate(value, { locale?, timeZone?, dateStyle?, timeStyle? })`. Without a
|
|
638
|
+
`locale` they still use the runtime's (a deterministic default is planned for
|
|
639
|
+
1.0). `formatDate` also accepts a `Date` or an epoch number.
|
|
640
|
+
- They are exported from `/lib`, as in `@nxgt/material`; `/components` and
|
|
641
|
+
the root barrel still export them.
|
|
642
|
+
- `useFormatters({ locale?, timeZone? })` from `@nxgt/material-vue/composables`
|
|
643
|
+
(auto-imported by the Nuxt module) binds both to the `I18nProvider` language
|
|
644
|
+
(`en` without a provider), so a server render and the browser print the same
|
|
645
|
+
string (for a date with a time, pass `timeZone`). `locale` and `timeZone` may be refs or getters; the language and the
|
|
646
|
+
options are read on each call, so a template follows them.
|
|
647
|
+
- `createFormatters({ locale?, timeZone? })` from `/lib` binds them outside a
|
|
648
|
+
component: a Nuxt server route.
|
|
649
|
+
|
|
650
|
+
**Changed output.** Amounts use their currency's own decimals (ISO 4217):
|
|
651
|
+
`formatAmount(1234.5, 'JPY')` is now `¥1,235` (was `¥1,234.50`), KWD, BHD and
|
|
652
|
+
OMR show three decimals. EUR, USD, GBP and the other two-decimal currencies do
|
|
653
|
+
not change, nor does an amount without a currency. To keep two decimals, pass
|
|
654
|
+
`{ fractionDigits: 2 }`. `fractionDigits` is clamped to 0–20, as in
|
|
655
|
+
`CurrencyField`, and `NaN` or `Infinity` counts as not given.
|
|
656
|
+
|
|
657
|
+
**Fixed.** A date-only string (`'2026-03-01'`) keeps its calendar day in every
|
|
658
|
+
time zone; west of UTC it used to show the day before.
|
|
659
|
+
|
|
660
|
+
- [#207](https://github.com/softistx/nxgt-material-vue/pull/207) [`c67631c`](https://github.com/softistx/nxgt-material-vue/commit/c67631c5e3859a2d0e55218f3efb0aaa6236450f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PrintHeader` takes a logo image; `translateMaterial()` for strings outside a component
|
|
661
|
+
|
|
662
|
+
- **`PrintHeader`**: a `logo` image (URL or data URL, or
|
|
663
|
+
`{ src, width, height }` in points) with its `logoAlt` (empty, so
|
|
664
|
+
decorative, by default), a `subtitle` and a `referencePrefix` (`'#'` by
|
|
665
|
+
default). **Changed:** with no `logo` and no `logoText` it no
|
|
666
|
+
longer draws a grey "LOGO" placeholder, and with no `qrDataUrl` no empty
|
|
667
|
+
QR box; the title stays centred. Pass `logo-text="LOGO"` to keep the old
|
|
668
|
+
box. Same props and behaviour as `@nxgt/material`'s `PrintHeader`.
|
|
669
|
+
- **`translateMaterial(language, key, fallback, values)`**
|
|
670
|
+
(`@nxgt/material-vue/i18n`): the package's own strings for a language given
|
|
671
|
+
as a value, with no plugin and no composable — for a PDF's page-number
|
|
672
|
+
callback or a server. `useMaterialTranslation().t` now goes through it.
|
|
673
|
+
- New i18n keys `material.print.page-of` ("Page {page} of {pages}" / "Page
|
|
674
|
+
{page} sur {pages}") and `material.print.page`, in English and French, for
|
|
675
|
+
the new `@nxgt/material-vue/pdf`.
|
|
676
|
+
- `@nxgt/material-vue/pdf` exports `PrintValue` and `formatPrintValue`, with
|
|
677
|
+
the same behaviour as in `@nxgt/material`.
|
|
678
|
+
|
|
679
|
+
- [#207](https://github.com/softistx/nxgt-material-vue/pull/207) [`1e578d4`](https://github.com/softistx/nxgt-material-vue/commit/1e578d4502a80485a9a4e93418c2888d925d2c43) Thanks [@SteveGT96](https://github.com/SteveGT96)! - i18n keys for printed tables
|
|
680
|
+
|
|
681
|
+
- New keys `material.print.table.total` ("Total") and
|
|
682
|
+
`material.print.table.empty` ("No rows" / "Aucune ligne"), in English and
|
|
683
|
+
French, for the tables of the new `@nxgt/material-vue/pdf`.
|
|
684
|
+
- `@nxgt/material-vue/pdf` exports `definePrintColumns`, `resolvePrintTable`,
|
|
685
|
+
`resolvePrintFields` and `toPrintValue`, which resolve columns and rows the
|
|
686
|
+
way `@nxgt/material`'s `PrintDataTable`, `PrintKeyValue` and `PrintMetric`
|
|
687
|
+
do.
|
|
688
|
+
|
|
689
|
+
- [#157](https://github.com/softistx/nxgt-material-vue/pull/157) [`2c378f7`](https://github.com/softistx/nxgt-material-vue/commit/2c378f7dc16f9eb99eb101d292a9f4834f0991cf) Thanks [@SteveGT96](https://github.com/SteveGT96)! - CodeBlock dark body, ButtonGroup active label, AvatarGroup initials, menu
|
|
690
|
+
`error` items, editor mention items, ThemeToggle
|
|
691
|
+
|
|
692
|
+
- `CodeBlock scheme="dark"` showed a dark header over a light code area: the
|
|
693
|
+
global `pre` / `code` rules (`bg-muted`, padding, radius) painted over its
|
|
694
|
+
body. CodeBlock now resets them on its own `<pre>` and `<code>`; a plain
|
|
695
|
+
`<pre>` elsewhere keeps its styling.
|
|
696
|
+
- `ButtonGroup`: an active tonal button painted `bg-primary` under its
|
|
697
|
+
`text-primary` label, so the label disappeared. The active button now uses
|
|
698
|
+
the primary foreground for its text and icons.
|
|
699
|
+
- `AvatarGroup`: the initials inherited the page's font size and ran under
|
|
700
|
+
the next avatar. Each size now sets the initials' size, and the overlap is
|
|
701
|
+
smaller so they fit (`-space-x-0.5` / `-1` / `-1.5`).
|
|
702
|
+
- `MenubarItem`, `ContextMenuItem` and `DropdownMenuItem` accept
|
|
703
|
+
`variant="error"`, as in `@nxgt/material`. `'destructive'` is deprecated and
|
|
704
|
+
kept as an alias; both render `data-variant="error"`, so a selector on
|
|
705
|
+
`[data-variant=destructive]` stops matching. `MenubarItem` and
|
|
706
|
+
`ContextMenuItem` used `text-destructive-foreground`, a colour the theme does
|
|
707
|
+
not define, so their destructive items were not red at all; they are now.
|
|
708
|
+
- `RichTextEditor` `options.mentions.suggestions` accepts
|
|
709
|
+
`(string | MentionItem)[]`. Strings become `{ id, label }`; choosing an item
|
|
710
|
+
inserts its `id` and shows its `label`. `filterMentions` takes
|
|
711
|
+
`{ match: 'prefix' | 'substring' }` (default `'substring'`, unchanged;
|
|
712
|
+
`FilterMentionsOptions`), and the editor uses `'prefix'`, as before.
|
|
713
|
+
- `ThemeToggle` no longer freezes on the choice it mounted with: it
|
|
714
|
+
destructured `useTheme()`'s getters, so its selected item never followed a
|
|
715
|
+
click.
|
|
716
|
+
|
|
717
|
+
### Patch Changes
|
|
718
|
+
|
|
719
|
+
- [#205](https://github.com/softistx/nxgt-material-vue/pull/205) [`85be906`](https://github.com/softistx/nxgt-material-vue/commit/85be906c78a0518e6bc99d45392913c4b9e94758) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NetworkUploadField` / `S3UploadField`: the field is a `group` named by its
|
|
720
|
+
label, and once a file hides the drop zone (or it is disabled: `maxFiles`
|
|
721
|
+
reached, or `disabled`) the group carries the error (the `helper-text`, or a
|
|
722
|
+
hidden "This value is not valid."), which nothing said before. `ImageField`: a
|
|
723
|
+
failed upload with no message of its own is described as not valid, not only
|
|
724
|
+
outlined in red.
|
|
725
|
+
|
|
726
|
+
`AppBreadcrumb`: the home crumb is a link named "Home" rather than a
|
|
727
|
+
`<button>` inside a link.
|
|
728
|
+
|
|
729
|
+
`QRCode`: `aria-label` is a declared prop that names the `<svg role="img">`
|
|
730
|
+
(and wins over `title`), instead of falling through to the wrapper `div`.
|
|
731
|
+
|
|
732
|
+
- [#225](https://github.com/softistx/nxgt-material-vue/pull/225) [`e0de943`](https://github.com/softistx/nxgt-material-vue/commit/e0de9432c03922518c3b652b66033fcbeb8df3df) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `AlertDialogContent` honours an `@open-auto-focus` that calls
|
|
733
|
+
`event.preventDefault()`: focus stays where it was, as it does on
|
|
734
|
+
`DialogContent`, `SheetContent` and `DrawerContent`. reka focused the
|
|
735
|
+
`AlertDialogCancel` a tick later regardless, and its focus trap kept focus
|
|
736
|
+
there. Opening without the opt-out still focuses the Cancel (or the first
|
|
737
|
+
control when there is none).
|
|
738
|
+
|
|
739
|
+
- [#223](https://github.com/softistx/nxgt-material-vue/pull/223) [`319fc46`](https://github.com/softistx/nxgt-material-vue/commit/319fc46ae60a20830ed4ef017c963deb2a014bf7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Form wrappers: leaving a field straight into another field's freshly opened
|
|
740
|
+
overlay — a `SelectFormField` list opened by pressing the mouse on its
|
|
741
|
+
trigger, which takes focus without the trigger ever having it — marks the
|
|
742
|
+
field touched (and validates it) as it is left. It used to count that overlay
|
|
743
|
+
as the field's own and wait until the list handed focus back to its trigger.
|
|
744
|
+
A field's own list also stays its overlay when it opened before focus reached
|
|
745
|
+
the field, as long as a control of the field names it (`aria-controls`), like
|
|
746
|
+
`@nxgt/material`.
|
|
747
|
+
|
|
748
|
+
- [#208](https://github.com/softistx/nxgt-material-vue/pull/208) [`1b0d117`](https://github.com/softistx/nxgt-material-vue/commit/1b0d117083e592fbed6188ab3fd1388e4f46cf00) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `AppBreadcrumb`: a crumb on a route record with params links to its path with
|
|
749
|
+
the current params filled in (`/users/42`), not to the record's pattern
|
|
750
|
+
(`/users/:id`, which vue-router rendered as a literal `:id`). Home and every
|
|
751
|
+
crumb keep going through the router's history base.
|
|
752
|
+
|
|
753
|
+
`CheckboxGroup` / `RadioGroupField`: the group element carries its `id` (yours,
|
|
754
|
+
or the generated one its option ids start with), as React's groups do; it
|
|
755
|
+
had none.
|
|
756
|
+
|
|
757
|
+
- [#228](https://github.com/softistx/nxgt-material-vue/pull/228) [`e9aafcc`](https://github.com/softistx/nxgt-material-vue/commit/e9aafccc69a1b225060cfcf753ab13663a21c8ff) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Bug reports have an address: `bugs.email` in `package.json`, and the
|
|
758
|
+
"Reporting a bug" section of the troubleshooting page, linked from the README.
|
|
759
|
+
|
|
760
|
+
- [#216](https://github.com/softistx/nxgt-material-vue/pull/216) [`357360a`](https://github.com/softistx/nxgt-material-vue/commit/357360ad855577d1acedb83ef7be12c5e5d4aeb5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A dismissible `Chip` given both a `label` and a default slot named its ✕ after
|
|
761
|
+
the `label` it was not showing. The ✕ is now named after the text the chip
|
|
762
|
+
shows: the default slot's when one is given (`Remove Lyon`), else `label`; with
|
|
763
|
+
no text it keeps "Remove". The same rule as `@nxgt/material`'s `Chip`.
|
|
764
|
+
|
|
765
|
+
- [#184](https://github.com/softistx/nxgt-material-vue/pull/184) [`d70cc8a`](https://github.com/softistx/nxgt-material-vue/commit/d70cc8a21893e64a112d3e34b2877e9317301c2f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The close buttons of dialogs, sheets and `DialogFooter`, and the map's zoom
|
|
766
|
+
and "My position" buttons, follow `I18nProvider` (`material.buttons.close`,
|
|
767
|
+
`material.map.zoom-in`, `material.map.zoom-out`, `material.map.my-position`,
|
|
768
|
+
the same keys as `@nxgt/material`): they were English in every language.
|
|
769
|
+
|
|
770
|
+
- [#227](https://github.com/softistx/nxgt-material-vue/pull/227) [`7283634`](https://github.com/softistx/nxgt-material-vue/commit/72836342d91ce23af594ed0bb66ff226985f02c8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A Tailwind app that imports `@nxgt/material-vue/styles.css` now gets the CSS
|
|
771
|
+
the components need, which reached only the compiled stylesheet before:
|
|
772
|
+
KaTeX (`Markdown` maths), highlight.js (`RichTextEditor` code blocks),
|
|
773
|
+
vue-sonner (`Toaster`), vue-advanced-cropper (`ImageCropper`), the `Spinner`
|
|
774
|
+
animation, the `ImageCropper` handles, and the stylesheets of `ButtonGroup`,
|
|
775
|
+
`ContactItem`, `OpeningHoursItem`, `AttributeForm` and `AttributeValuesForm`,
|
|
776
|
+
which were CSS modules and are global `nxgt-*` classes now.
|
|
777
|
+
The compiled stylesheet gains vue-advanced-cropper's stylesheet, which it
|
|
778
|
+
was missing.
|
|
779
|
+
|
|
780
|
+
- [#159](https://github.com/softistx/nxgt-material-vue/pull/159) [`292a111`](https://github.com/softistx/nxgt-material-vue/commit/292a111f476f8d6c24be1326cd37f9105e006e89) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Documentation with a preview of every component
|
|
781
|
+
|
|
782
|
+
- The README catalogue has a **Preview** column, and each name links to its
|
|
783
|
+
entry in `docs/components/`. Its rows and categories are the same as
|
|
784
|
+
`@nxgt/material`'s.
|
|
785
|
+
- `docs/` now ships in the package:
|
|
786
|
+
- one page per category: preview, example, options;
|
|
787
|
+
- the component gallery;
|
|
788
|
+
- getting started;
|
|
789
|
+
- guides for forms (vee-validate and Zod), i18n, the app shell, theming,
|
|
790
|
+
printing, maps, SSR and Nuxt, and the helpers;
|
|
791
|
+
- troubleshooting;
|
|
792
|
+
- the roadmap.
|
|
793
|
+
- File names, headings and preview names match `@nxgt/material`'s docs, so a
|
|
794
|
+
link keeps working when you switch framework.
|
|
795
|
+
- The README's long sections moved to those guides.
|
|
796
|
+
|
|
797
|
+
- [#190](https://github.com/softistx/nxgt-material-vue/pull/190) [`240b28e`](https://github.com/softistx/nxgt-material-vue/commit/240b28e3fb3758f5b4501b29cedb1d170cb19860) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DateField`, `DateRangeField` and `TimeField` pass the attributes you give them
|
|
798
|
+
(`id`, `aria-describedby`, `data-*`, listeners) to the trigger: their root is a
|
|
799
|
+
popover (or a dialog), which renders no element, so they were dropped. An `id`
|
|
800
|
+
becomes the popover trigger's id, which also labels the open calendar
|
|
801
|
+
(`PopoverTrigger` now honours an `id`). `TimeField` renders the desktop trigger
|
|
802
|
+
on the server (`useMediaQuery` with `ssrWidth`), as a desktop client's first
|
|
803
|
+
render does, so SSR pages hydrate without a mismatch; a phone switches to the
|
|
804
|
+
dialog once mounted.
|
|
805
|
+
|
|
806
|
+
`UploadField`: its file input is visually hidden instead of `hidden`, so a
|
|
807
|
+
`required` field with no file stops the submit with the browser's message
|
|
808
|
+
instead of a console-only "An invalid form control … is not focusable".
|
|
809
|
+
Without a trailing button, that input is now the field's tab stop.
|
|
810
|
+
`UploadField`, `ImageField`, `FileListField` and the `NetworkUploadField` /
|
|
811
|
+
`S3UploadField` drop zone no longer put `aria-invalid` on a `group` or a
|
|
812
|
+
`button`: the error text describes them, and the outline comes from
|
|
813
|
+
`data-invalid` (give an `error` its `helper-text`).
|
|
814
|
+
|
|
815
|
+
- [#192](https://github.com/softistx/nxgt-material-vue/pull/192) [`acc86c6`](https://github.com/softistx/nxgt-material-vue/commit/acc86c698a6a7687b5e23cdfe4461c9b60870484) Thanks [@SteveGT96](https://github.com/SteveGT96)! - An `aria-label` passed to `Icon`, `ScrollProgress`, `FileList` or `Tree`, and a
|
|
816
|
+
`data-slot` passed to `ScrollProgress`, `Pager`, `Toc` or `SeeAlso`, now reach
|
|
817
|
+
the element. They were declared as props under their kebab-case names, which
|
|
818
|
+
Vue stores camelized, so the component always fell back to its default (for
|
|
819
|
+
`Icon`, `Icon <name>`). `DocProgress` had the same bug.
|
|
820
|
+
|
|
821
|
+
Inside `Doc`, `DocToc`, `DocPager`, `DocSeeAlso` and `DocProgress` now render
|
|
822
|
+
their own `data-slot` (`doc-toc`, `doc-pager`, `doc-see-also`,
|
|
823
|
+
`doc-progress`) instead of the inner component's (`toc`, `pager`, `see-also`,
|
|
824
|
+
`scroll-progress`).
|
|
825
|
+
|
|
826
|
+
- [#194](https://github.com/softistx/nxgt-material-vue/pull/194) [`2cc0785`](https://github.com/softistx/nxgt-material-vue/commit/2cc07857497baba6e2b4657374672b28d9f3d704) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Icon badges that looked like an `IconButton` but did nothing are no longer
|
|
827
|
+
buttons: the `FileListField` row badge, the `NetworkUploadField` file preview,
|
|
828
|
+
the `EntityHeader`, `ConfirmationDialog` and `AppSidebar` icons, the `Stepper`
|
|
829
|
+
info icon and the `AccordionCard` chevron (a button nested in the trigger
|
|
830
|
+
button; it now turns when open). Each was a nameless `<button>` (focusable, except the disabled upload preview); each is now a `<span>`
|
|
831
|
+
(`as="span"`) with `aria-hidden="true"` and the same look. The row badges of
|
|
832
|
+
`Contacts`, `OpeningHours`, `PostalAddress` and `AttributesList`, already
|
|
833
|
+
`<div>`s, are hidden too; a `Contacts` badge is `role="img"`, named by the
|
|
834
|
+
contact type.
|
|
835
|
+
|
|
836
|
+
An `Icon` inside a named `IconButton` (and so `InputGroupButton` and
|
|
837
|
+
`IconLinkButton`) is `aria-hidden` instead of `role="img"` named
|
|
838
|
+
"Icon {name}", so a screen reader reads "Delete", not "Delete, Icon trash". An
|
|
839
|
+
`aria-label` you give the `Icon` still wins; an `Icon` anywhere else keeps its
|
|
840
|
+
"Icon {name}" default. See troubleshooting for the selectors this changes.
|
|
841
|
+
|
|
842
|
+
- [#223](https://github.com/softistx/nxgt-material-vue/pull/223) [`e748a8f`](https://github.com/softistx/nxgt-material-vue/commit/e748a8f9d6675373f9fbd45f869423617deff309) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `definePdfDocument`: an unannotated data parameter is typed `unknown`, not
|
|
843
|
+
`never`. With `never`, the template compiled and the error appeared only
|
|
844
|
+
where the template was called (`Argument of type 'Invoice' is not assignable
|
|
845
|
+
to parameter of type 'never'`); now reading a property of it fails in the
|
|
846
|
+
template itself. Annotated parameters and defaults (`language = 'en'`) are
|
|
847
|
+
typed as before.
|
|
848
|
+
|
|
849
|
+
- [#166](https://github.com/softistx/nxgt-material-vue/pull/166) [`c87b446`](https://github.com/softistx/nxgt-material-vue/commit/c87b4469b2af4113d4a4006f4901bf576983ec70) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ContactItem` and `OpeningHoursItem` (and their props types) are deprecated, as in `@nxgt/material`, and will be removed in 1.0: use `ContactsFormField` and `OpeningHoursFormField`.
|
|
850
|
+
|
|
851
|
+
- [#157](https://github.com/softistx/nxgt-material-vue/pull/157) [`82db5a2`](https://github.com/softistx/nxgt-material-vue/commit/82db5a24d1be1c34615670552b33b241e0944c3a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Dialog fixes
|
|
852
|
+
|
|
853
|
+
- `CustomDialog` (and `ConfirmationDialog`, through it) no longer wraps its
|
|
854
|
+
`#trigger` slot in a second `<button>`: the trigger is merged into the
|
|
855
|
+
slotted element (`as-child`), so a `Button` there is the dialog trigger
|
|
856
|
+
itself instead of a button nested in a button.
|
|
857
|
+
- `ConfirmDialog` awaits `@confirm` (now typed `onConfirm: () => void |
|
|
858
|
+
Promise<void>`). It stays open while the handler runs (both buttons
|
|
859
|
+
disabled, "Processing..."), closes on success, and on a throw or rejection
|
|
860
|
+
stays open and shows the error's message instead of closing. Before, it
|
|
861
|
+
closed on click whatever the handler did. The pending label and the message
|
|
862
|
+
for an error without one are translated
|
|
863
|
+
(`material.confirm-dialog.processing`, `material.confirm-dialog.failed`, en
|
|
864
|
+
and fr). A plain `@confirm="open = false"` keeps working.
|
|
865
|
+
|
|
866
|
+
- [#224](https://github.com/softistx/nxgt-material-vue/pull/224) [`bed9e08`](https://github.com/softistx/nxgt-material-vue/commit/bed9e08d86c8b29dc96f56369fe85e8439507130) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DrawerContent` hands focus back, on close, to the element that had it when
|
|
867
|
+
the drawer opened: the button of yours that opened a controlled `Drawer` (no
|
|
868
|
+
`DrawerTrigger`) gets it back, where focus used to fall to `<body>`. Focus
|
|
869
|
+
that already went elsewhere stays there, and an `@close-auto-focus` that calls
|
|
870
|
+
`event.preventDefault()` opts out. `Dialog`, `Sheet` and `AlertDialog`
|
|
871
|
+
already did this.
|
|
872
|
+
|
|
873
|
+
- [#191](https://github.com/softistx/nxgt-material-vue/pull/191) [`8104999`](https://github.com/softistx/nxgt-material-vue/commit/8104999a2fadc09aa621fc7718438f53154da6e1) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The package no longer ships type declarations for story helpers and story
|
|
874
|
+
data. None was reachable from an entry point, so no import changes.
|
|
875
|
+
|
|
876
|
+
- [#221](https://github.com/softistx/nxgt-material-vue/pull/221) [`3025a37`](https://github.com/softistx/nxgt-material-vue/commit/3025a37a6ccc225de0f6963d003685be05edcb49) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `DateField`, `DateRangeField` and `TimeField`: the label and the helper text
|
|
877
|
+
are no longer inside the trigger button (a `<label>` in a `<button>` is
|
|
878
|
+
invalid, and the helper text was read as part of the value). They sit beside
|
|
879
|
+
it in the field's root `div`, which takes `class`; the trigger is named by the
|
|
880
|
+
label (`aria-labelledby`) and described by the helper text, then your
|
|
881
|
+
`aria-describedby` ids. The label is `for` the trigger (yours, else a
|
|
882
|
+
generated id), so a click on it opens the picker, and the open popover (or
|
|
883
|
+
`TimeField`'s dialog on a phone) is labelled by the trigger. The label and
|
|
884
|
+
the helper text are still not dimmed with a disabled trigger.
|
|
885
|
+
|
|
886
|
+
`Slider`: an `aria-label` or `aria-labelledby` names every thumb (a vertical
|
|
887
|
+
slider had nameless thumbs), and `aria-invalid` (`SliderField`'s `error`) goes
|
|
888
|
+
on the thumbs rather than on the root `span`.
|
|
889
|
+
|
|
890
|
+
`DurationField`: a `group` named by its label and described by its helper
|
|
891
|
+
text; the inputs are named "Hours" and "Minutes"
|
|
892
|
+
(`material.duration-field.hours-label` / `minutes-label`, en and fr, the same
|
|
893
|
+
keys and strings as `@nxgt/material` 2.2.0). The minutes input had no name. `NumberField` takes an
|
|
894
|
+
`aria-label`.
|
|
895
|
+
|
|
896
|
+
`CodeEditor`: Monaco's textarea is named by the field's label (`ariaLabel`),
|
|
897
|
+
and follows it when it changes.
|
|
898
|
+
|
|
899
|
+
- [#169](https://github.com/softistx/nxgt-material-vue/pull/169) [`e643e39`](https://github.com/softistx/nxgt-material-vue/commit/e643e39dd2617154b7eb4e4183a1c50ecadfa9ea) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The filter trigger's accessible name reads "Filters, 2 active" instead of
|
|
900
|
+
"Filters2": the count badge is hidden from assistive technology and the count
|
|
901
|
+
is announced through `material.filter.active-count` (en, fr), as in
|
|
902
|
+
`@nxgt/material`.
|
|
903
|
+
|
|
904
|
+
- [#165](https://github.com/softistx/nxgt-material-vue/pull/165) [`56c3349`](https://github.com/softistx/nxgt-material-vue/commit/56c334903673a20894c64c036407a9cb9723e79e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `LinkButton`, `IconLinkButton` and `ResponsiveLinkButton` render one link styled as a button instead of a `<button>` inside an `<a>`. `Steps` numbers its `StepsItem`s by position when they have no `index`, as in `@nxgt/material`. A collapsed `ResponsiveButton` keeps its label as screen-reader text, so the `Filter` popover trigger (and any icon-only responsive button) has an accessible name. The doc examples import icons from `@lucide/vue`.
|
|
905
|
+
|
|
906
|
+
- [#172](https://github.com/softistx/nxgt-material-vue/pull/172) [`c930ab4`](https://github.com/softistx/nxgt-material-vue/commit/c930ab47c66a4c24ce46b7870ae1fbf6472348dd) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ResponsiveButton` (and `ResponsiveLinkButton`, `LoadMoreButton`) no longer
|
|
907
|
+
sets `aria-expanded`: it said whether the label was showing, so screen readers
|
|
908
|
+
announced a button that controls nothing as "collapsed". Used as a popover,
|
|
909
|
+
drawer or menu trigger (the `Filter` trigger), it still carries the trigger's
|
|
910
|
+
own `aria-expanded`, as in `@nxgt/material`.
|
|
911
|
+
|
|
912
|
+
`Switch`: the row's text is now the switch's `<label>`, with a generated `id`
|
|
913
|
+
when none is given, so a switch with a `label` has an accessible name and
|
|
914
|
+
clicking the text toggles it. An uncontrolled switch's row (`default-value`)
|
|
915
|
+
is tinted while it is on and follows each toggle; before, only `v-model`
|
|
916
|
+
tinted it.
|
|
917
|
+
|
|
918
|
+
- [#164](https://github.com/softistx/nxgt-material-vue/pull/164) [`45ff37f`](https://github.com/softistx/nxgt-material-vue/commit/45ff37fea19330c1a3cf8562f4c13c4c03295df4) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `HeatmapChart` cells take the theme colours instead of rendering black: chart colours resolve to `rgb()` (the `--chart-*` tokens are `oklch()`, which ECharts' visualMap cannot interpolate), and `colors` accepts any CSS colour. `toast()` hands `Toast` its real id, so the action button dismisses the toast and Vue no longer warns about the `id` prop. `Markdown` typesets `$$` display math and `$` inline math instead of showing escaped KaTeX markup, and leaves `$` inside code alone. `Table` is `table-auto`, as in `@nxgt/material`, so `ParamTable` and the other tables size their columns to their content instead of clipping them.
|
|
919
|
+
|
|
920
|
+
- [#160](https://github.com/softistx/nxgt-material-vue/pull/160) [`65e3995`](https://github.com/softistx/nxgt-material-vue/commit/65e3995d9df2359484b10cf28148d64fcef245cd) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `CheckboxGroup` shows and toggles its checked options (it bound `checked`, which Reka's `CheckboxRoot` does not read). `ToggleGroup` items follow a `size`, `variant` or `spacing` that changes after mount. `Switch` shows `helperText` without a `placeholder`, under the row or the bare switch.
|
|
921
|
+
|
|
922
|
+
- [#163](https://github.com/softistx/nxgt-material-vue/pull/163) [`5b5a4a5`](https://github.com/softistx/nxgt-material-vue/commit/5b5a4a5d217c77dfb09da2e989f3da052be4d22f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `useTranslation()` from `createTypedTranslation` follows `changeLanguage`: `t` and `i18n.language` read the provider's language on every call instead of a setup-time copy. `defineStepFormStore` resumes from what `updateStep` stored under its `name` (and `reset()` clears it). The Nuxt module registers every component `/components` exports, including `PdfReader` and its parts, `Camera`, `StxPlayer`, `VideoPlayer`, `PaneLayout` / `ListDetailsLayout` and their parts, the `Filter` parts and `SortableHandle`, and no longer registers rich-text-editor internals the barrel does not export. `ConfirmDialog` and `ConfirmationDialog` translate their default button labels (`material.confirm-dialog.confirm` / `.cancel`, English and French).
|
|
923
|
+
|
|
924
|
+
- [#162](https://github.com/softistx/nxgt-material-vue/pull/162) [`e7231c2`](https://github.com/softistx/nxgt-material-vue/commit/e7231c220ffe9da2e0f2ab2c1ebca507abe4cf8c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A `Map` without `center` opens on its default position again: `useGeolocation().coords` is `null` until the first fix, so `LocationMarker` and "My position" also wait for a real position. Print `tw()` writes every length with a unit (points for the scale, radii and tracking, 1 px borders, arbitrary values as written), and `border-b` draws the bottom side only, so the `Print*` blocks get their padding and hairlines in the browser without a stylesheet workaround.
|
|
925
|
+
|
|
926
|
+
- [#161](https://github.com/softistx/nxgt-material-vue/pull/161) [`2d36932`](https://github.com/softistx/nxgt-material-vue/commit/2d369329956eae03662b261e4e29212a08286915) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Optional boolean props no longer turn into `false` when omitted. Vue casts an absent `Boolean` prop to `false`, which overrode the documented defaults: `RichTextEditor` (and `RichTextEditorFormField`) was read-only without `editable`; `Notifications`, `Gallery`, `ImageCropperDialog` and `PaneLayout` could not run uncontrolled (`default-open` and the trigger were ignored); charts never showed their empty state for empty data, and `AreaChart` dropped `#emptyState`; `DataTable` hid its header row; `ResponsiveButton` / `ResponsiveLinkButton` stayed icon-only on desktop; `TextareaField` did not count from `max-length` alone; `DocPage` hid the copy buttons; `Filter` hid the inline actions and the trigger label; and `RatingFormField`, `SliderFormField`, `TextareaFormField`, `SortableListFormField`, `TransferListFormField` and `FilterFormField` switched off their field's `true` defaults (clear, readout, search, drag, select all, transfer all).
|
|
927
|
+
|
|
928
|
+
- [#210](https://github.com/softistx/nxgt-material-vue/pull/210) [`f38ecc5`](https://github.com/softistx/nxgt-material-vue/commit/f38ecc5f0d68e52adfe7239afb826c3223312b49) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `RadioGroupField`, `CheckboxGroup` and their form wrappers are now named by
|
|
929
|
+
their `label`: the `radiogroup` (and `CheckboxGroup`'s wrapper, now a
|
|
930
|
+
`role="group"`) carries `aria-labelledby` to the label and `aria-describedby`
|
|
931
|
+
to the helper or error text, so a screen reader announces the question, not
|
|
932
|
+
only the first option. The `radiogroup` carries `aria-invalid` while `error`;
|
|
933
|
+
a `CheckboxGroup` error without text is described by a visually hidden "This
|
|
934
|
+
value is not valid.", and so is a `CheckboxGroupFormField` in error with no
|
|
935
|
+
message that shows the caller's `helper-text` (through `CheckboxGroup`'s new
|
|
936
|
+
`#helper-text` slot, so the hint stays inside the description). A caller's
|
|
937
|
+
`aria-label` / `aria-labelledby` wins and its `aria-describedby` ids are kept;
|
|
938
|
+
on `RadioGroupField` attributes other than `class` and `style` now land on the
|
|
939
|
+
`radiogroup` rather than the layout wrapper, and `CheckboxGroup` drops an
|
|
940
|
+
`aria-invalid` passed to it.
|
|
941
|
+
|
|
942
|
+
Option ids are now `` `${id}-${index}` `` instead of `` `${id}-${value}` ``, as
|
|
943
|
+
in `@nxgt/material`: a value with a space gave an invalid id and a label that
|
|
944
|
+
pointed nowhere. A selector such as `#<id>-<value>` must move to the index, or
|
|
945
|
+
better to role and name — see the troubleshooting entry.
|
|
946
|
+
|
|
947
|
+
- [#206](https://github.com/softistx/nxgt-material-vue/pull/206) [`3d6a67f`](https://github.com/softistx/nxgt-material-vue/commit/3d6a67fc2b1c33cdeffae1a4a1981a0c948b1318) Thanks [@SteveGT96](https://github.com/SteveGT96)! - More built-in labels follow `I18nProvider`
|
|
948
|
+
|
|
949
|
+
30 keys join the `material` bundles, in English and French, with the same
|
|
950
|
+
names and French as `@nxgt/material`, and a few existing keys are now used
|
|
951
|
+
where the text was hard-coded:
|
|
952
|
+
|
|
953
|
+
- Pagination: the buttons' names and text, which reka-ui left in English
|
|
954
|
+
("First Page", "Page 2"…), the ellipsis's "More pages" and the `nav`'s
|
|
955
|
+
name (`pagination.first`, `previous`, `next`, `last`, `page`, `more`,
|
|
956
|
+
`label`). The buttons are now named by their text in English too:
|
|
957
|
+
"First", "Previous", "Next", "Last", as in `@nxgt/material`.
|
|
958
|
+
- `CommandDialog`'s default title and description (`command.*`), the
|
|
959
|
+
carousel's `aria-roledescription` (`carousel.roledescription` / `slide`) and
|
|
960
|
+
the attribute options' "Add option" (`attributes.buttons.add-option`).
|
|
961
|
+
- The filter's empty state, `+N more` chip and the Yes/No, From, Until and Up
|
|
962
|
+
to of its chips (`filter.empty`, `filter.more`, `filter.value.*`);
|
|
963
|
+
`Breadcrumb`'s name and ellipsis, `DocHeader`'s breadcrumb
|
|
964
|
+
(`breadcrumb.*`, `doc.breadcrumb`); `MessageCard`'s "Unread"
|
|
965
|
+
(`cards.unread`); the network upload field's "Replace {name}", "Upload
|
|
966
|
+
failed" and its type, size and count errors (`upload.*`); the editor's
|
|
967
|
+
placeholder and emoji buttons; `CircularProgress`'s label, `StxPlayer`'s
|
|
968
|
+
"Media player", `PaneLayoutPane`'s sheet title, `JsonViewer`'s "Empty JSON"
|
|
969
|
+
and `TimePicker`'s AM/PM.
|
|
970
|
+
|
|
971
|
+
The editor's default placeholder now follows a language change without
|
|
972
|
+
rebuilding the editor, as does a new `placeholder`. `formatFilterValue` takes
|
|
973
|
+
the chip words as an optional third argument, typed `FilterValueWords`, with
|
|
974
|
+
the English in the newly exported `FILTER_VALUE_WORDS`; `getValidationMessage`
|
|
975
|
+
/ `getUploadErrorMessage` take `t` (typed `UploadMessageTranslate`) as an
|
|
976
|
+
optional last argument. Without them the English is unchanged, except that the
|
|
977
|
+
count error reads "Maximum of 1 file reached" for a single file.
|
|
978
|
+
`parseJsonSource` marks a blank source with `empty: true`. Your
|
|
979
|
+
`placeholder`, `sheetTitle`, `title`, `description` and `aria-label` still win.
|
|
980
|
+
|
|
981
|
+
- [#188](https://github.com/softistx/nxgt-material-vue/pull/188) [`6a476f3`](https://github.com/softistx/nxgt-material-vue/commit/6a476f3e2bc54a6fdbf8d01ceab3bbac4779c2ce) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Icon-only buttons that screen readers announced as a bare "button", or by
|
|
982
|
+
their icon's name ("Icon chevron-down", "Icon trash"), now have a name,
|
|
983
|
+
translated under `I18nProvider`: the `Sidebar` toggle ("Toggle sidebar",
|
|
984
|
+
`material.sidebar.toggle`, with `aria-expanded`), the data table's `expand`
|
|
985
|
+
column ("Toggle row details", `material.table.labels.toggle-row`, with
|
|
986
|
+
`aria-expanded`), and the delete button of the deprecated `ContactItem` /
|
|
987
|
+
`OpeningHoursItem` (the existing `material.contacts.buttons.remove` /
|
|
988
|
+
`material.opening-hours.buttons.remove`).
|
|
989
|
+
|
|
990
|
+
A `Chip`'s remove button, and so each `Autocomplete` chip's, is named after the
|
|
991
|
+
text the chip shows: "Remove {label}" (`material.chip.dismiss-label`)
|
|
992
|
+
instead of "Remove" for every chip. The `LocationPreview` default trigger is
|
|
993
|
+
"Preview {name}" / "Preview location" (`material.map.preview-named` /
|
|
994
|
+
`preview`), translated, instead of the bare place name or an English string.
|
|
995
|
+
A disabled `Autocomplete` now disables its chips' remove buttons, and the
|
|
996
|
+
`Sidebar` toggle also shows while focus is inside the sidebar, so the keyboard
|
|
997
|
+
can reach it (it used to appear on hover only).
|
|
998
|
+
|
|
999
|
+
- [#187](https://github.com/softistx/nxgt-material-vue/pull/187) [`4cb61a7`](https://github.com/softistx/nxgt-material-vue/commit/4cb61a73c81488631e4a31dccb4df2e4d3f1ede8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Label`'s required asterisk is hidden from screen readers (`aria-hidden`), as
|
|
1000
|
+
in `@nxgt/material`: a required field was named "Email*" or read "Email star".
|
|
1001
|
+
The field's own `required` / `aria-required` says it, which every field of the
|
|
1002
|
+
library now sets. A test that found a field by a name ending in `*` finds it by
|
|
1003
|
+
the label alone: see the troubleshooting page.
|
|
1004
|
+
|
|
1005
|
+
- [#179](https://github.com/softistx/nxgt-material-vue/pull/179) [`52be74e`](https://github.com/softistx/nxgt-material-vue/commit/52be74e00e81a4e6befdc38cfc2726890c0ea02d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Switch`'s `helper-text` (the validation message under `SwitchFormField`) now
|
|
1006
|
+
describes the switch through `aria-describedby`, beside the row text and any
|
|
1007
|
+
`aria-describedby` you pass, as in `@nxgt/material`.
|
|
1008
|
+
|
|
1009
|
+
`SwitchField` used without `v-model` now toggles: it used to hold the switch
|
|
1010
|
+
off.
|
|
1011
|
+
|
|
1012
|
+
`Label` no longer renders `withasterisk="false"` / `"true"` as an HTML
|
|
1013
|
+
attribute on the `<label>`.
|
|
1014
|
+
|
|
1015
|
+
- [#185](https://github.com/softistx/nxgt-material-vue/pull/185) [`b0c787a`](https://github.com/softistx/nxgt-material-vue/commit/b0c787a382246e446c69dd849f501df69eaacc7b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `LocationField`'s dialog no longer renders an empty, unnamed button beside its
|
|
1016
|
+
close X. The extra `DialogClose` had no content, since Vue's `DialogClose` only
|
|
1017
|
+
renders its slot.
|
|
1018
|
+
|
|
1019
|
+
- [#157](https://github.com/softistx/nxgt-material-vue/pull/157) [`81dc973`](https://github.com/softistx/nxgt-material-vue/commit/81dc9732db253f23a9d52acd023a6d4ca921f674) Thanks [@SteveGT96](https://github.com/SteveGT96)! - LocationField empty state and labels; IconButton `aria-label`
|
|
1020
|
+
|
|
1021
|
+
- `LocationField` (`@nxgt/material-vue/map`) with a `null` value showed
|
|
1022
|
+
`5.44087 - 10.06843` (Yaoundé) and a hover preview there. It now shows an
|
|
1023
|
+
empty input with a translated placeholder and no preview. The dialog's pin
|
|
1024
|
+
still starts at that position, and OK on an empty field commits the position
|
|
1025
|
+
the pin shows: the last one dragged to, or the start. Without `v-model`, OK
|
|
1026
|
+
no longer drops the drag.
|
|
1027
|
+
- Its placeholder, dialog title and OK button are translated, with new
|
|
1028
|
+
`material.location-field.{placeholder,dialog-title,confirm}` keys (en and
|
|
1029
|
+
fr). `dialogTitle`, `closeLabel` and `placeholder` still win.
|
|
1030
|
+
- `IconButton` dropped its `aria-label`. Icon buttons given an `aria-label` (and no `tooltip`) had no
|
|
1031
|
+
accessible name; they now have it.
|
|
1032
|
+
|
|
1033
|
+
- [#171](https://github.com/softistx/nxgt-material-vue/pull/171) [`35c0227`](https://github.com/softistx/nxgt-material-vue/commit/35c022782fbb99b174b0f10c8038eae8408c7652) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Icons come from `@lucide/vue` only; the deprecated `lucide-vue-next` is no longer a dependency. `@lucide/vue` was already a dependency and stays one, so there is nothing to install. Lucide 1.x redrew some glyphs the components use (among them `Calendar`, `Clock`, `CircleCheck`, `File`/`FileText`, `Trash`, `Bookmark`), and a Lucide icon without `aria-label` or `title` now renders with `aria-hidden="true"`.
|
|
1034
|
+
|
|
1035
|
+
- [#215](https://github.com/softistx/nxgt-material-vue/pull/215) [`d9cb581`](https://github.com/softistx/nxgt-material-vue/commit/d9cb581e71f9182d28344cbe8db85c36092246e8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Map` (`@nxgt/material-vue/map`): closing a `LocationField` dialog before the
|
|
1036
|
+
map had loaded no longer throws `Map container not found.` as an unhandled
|
|
1037
|
+
rejection. `@vue-leaflet/vue-leaflet` builds the map, its layers and controls in
|
|
1038
|
+
async `onMounted` hooks; once the map is unmounting, errors from them are
|
|
1039
|
+
ignored.
|
|
1040
|
+
|
|
1041
|
+
`DateRangeField`: the trigger button carries `data-slot="date-range-field-trigger"`
|
|
1042
|
+
(instead of `popover-trigger`) and the default `data-pw` (`name`, or
|
|
1043
|
+
`date-range-field`), as `DateField`'s does; `data-pw` was on the box inside it.
|
|
1044
|
+
|
|
1045
|
+
The package no longer ships `docs/previews/form-fields-switchfield.webp`, a
|
|
1046
|
+
preview no page linked to (`SwitchField` is pictured by the Switch preview).
|
|
1047
|
+
|
|
1048
|
+
- [#195](https://github.com/softistx/nxgt-material-vue/pull/195) [`c0bcd56`](https://github.com/softistx/nxgt-material-vue/commit/c0bcd560cd7171b827014858968a45ebf8c44e3a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `useIsMobile`, `useTheme`, and every component that reads them
|
|
1049
|
+
(`ResponsiveButton`, `AppHeader`, `AppBreadcrumb`, `DataTable`, `Stepper`,
|
|
1050
|
+
`ThemeToggle`, `CodeBlock`, `CodeDiff`, `JsonViewer`, `CodeEditor`) now give
|
|
1051
|
+
the server an answer for their media query, as `TimeField` already did: the
|
|
1052
|
+
server and the first client render answer for `provideSSRWidth()`'s width, or
|
|
1053
|
+
a 1024 px desktop, and a light color scheme, then the client switches. A phone
|
|
1054
|
+
or a dark-mode browser no longer hits `Hydration completed but contains
|
|
1055
|
+
mismatches.` on those components.
|
|
1056
|
+
|
|
1057
|
+
- [#222](https://github.com/softistx/nxgt-material-vue/pull/222) [`9014823`](https://github.com/softistx/nxgt-material-vue/commit/90148230c7fb9b9b3587d6a8e77eb62868de71ed) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`:
|
|
1058
|
+
|
|
1059
|
+
- A page's own `/Rotate` is honoured: a page the PDF shows landscape is drawn,
|
|
1060
|
+
thumbnailed, placed and fitted landscape (it was drawn at rotation 0).
|
|
1061
|
+
`PdfPageSize` gains an optional `rotate`.
|
|
1062
|
+
- Fit width and fit page use the first 25 pages, read together when the
|
|
1063
|
+
document opens, so the zoom no longer moves as later page sizes arrive
|
|
1064
|
+
(still read 25 pages at a time); the fit stops at 500%.
|
|
1065
|
+
- `@page-change` also reports the page the reader moves to itself: an
|
|
1066
|
+
`initialPage` clamped to the last page, and `initialPage` again after a new
|
|
1067
|
+
`file`.
|
|
1068
|
+
- The password field is named "Password" (new key
|
|
1069
|
+
`material.pdf-reader.password-label`), not after the "Password protected"
|
|
1070
|
+
heading.
|
|
1071
|
+
- The first search renders the pages once per 25 pages read, not once per
|
|
1072
|
+
page.
|
|
1073
|
+
- Notes show their icon and open their popup, and shapes are styled, with
|
|
1074
|
+
nothing to add to your imports.
|
|
1075
|
+
|
|
1076
|
+
`TooltipContent` (and so every `tooltip` on a `Button` or `IconButton`) opens
|
|
1077
|
+
inside the element in fullscreen while there is one: `PdfReader`'s toolbar
|
|
1078
|
+
tooltips show in fullscreen.
|
|
1079
|
+
|
|
1080
|
+
- [#181](https://github.com/softistx/nxgt-material-vue/pull/181) [`84b59c4`](https://github.com/softistx/nxgt-material-vue/commit/84b59c4f7f5ef04c2e49ccfe4775a923d2a6173f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: `@page-change`, `@load-success` and `@load-error` run once per
|
|
1081
|
+
event. They ran twice, because the reader called the handler as a declared
|
|
1082
|
+
prop and emitted the event too. The `onPageChange`, `onLoadSuccess` and
|
|
1083
|
+
`onLoadError` props are deprecated in favour of the events and go in 1.0;
|
|
1084
|
+
passing them (`:on-page-change="fn"`) still works and runs once.
|
|
1085
|
+
|
|
1086
|
+
- [#197](https://github.com/softistx/nxgt-material-vue/pull/197) [`0f2a280`](https://github.com/softistx/nxgt-material-vue/commit/0f2a2800bdea292c211cab95127324efaf9c2d0f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: fit width and fit page use each page's real size instead of
|
|
1087
|
+
assuming US Letter, fitting the widest and tallest page with one zoom, so A4
|
|
1088
|
+
and landscape pages no longer overflow or leave a gap. Placeholders and
|
|
1089
|
+
thumbnails take their page's shape before it draws. `PdfPageList`,
|
|
1090
|
+
`PdfSidebar` and `PdfThumbnailSidebar` take an optional `pageSizes`, and the
|
|
1091
|
+
`PdfPageSize` type is exported.
|
|
1092
|
+
|
|
1093
|
+
- [#197](https://github.com/softistx/nxgt-material-vue/pull/197) [`a734547`](https://github.com/softistx/nxgt-material-vue/commit/a734547379c06a8f9e0f6564a8def74f82204c43) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: a wrong password says "Incorrect password. Try again." (new key
|
|
1094
|
+
`material.pdf-reader.password-incorrect`, en and fr), marks the field
|
|
1095
|
+
`aria-invalid`, announces it and focuses the field again. Escape is handled
|
|
1096
|
+
only when the search bar is open, so a `Dialog` around the reader closes on
|
|
1097
|
+
Escape again. `@page-change` reports a page inside the document, and only when
|
|
1098
|
+
it changes.
|
|
1099
|
+
|
|
1100
|
+
- [#197](https://github.com/softistx/nxgt-material-vue/pull/197) [`7891491`](https://github.com/softistx/nxgt-material-vue/commit/7891491f1a42411f066cf16aa2576bdb6ddbb4c7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: opens on `initialPage`, which it showed in the page field but
|
|
1101
|
+
never scrolled to (past the end, it opens the last page; a new `file` opens on
|
|
1102
|
+
`initialPage` again). The page number follows scrolling, and `@page-change`
|
|
1103
|
+
reports the page most on screen; a page you ask for is reported once, not each
|
|
1104
|
+
page passed on the way.
|
|
1105
|
+
|
|
1106
|
+
- [#197](https://github.com/softistx/nxgt-material-vue/pull/197) [`e9c10d1`](https://github.com/softistx/nxgt-material-vue/commit/e9c10d1478c22a9b9c695ebd71c704fb42e7d374) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `PdfReader`: search covers the whole document, pages not drawn yet included,
|
|
1107
|
+
and counts as you type. It finds every match, including one split across text
|
|
1108
|
+
runs, and ignores case, accents, ligatures and the width of white space.
|
|
1109
|
+
Moving to a match shows its page and marks it. `PdfPageList` takes an optional
|
|
1110
|
+
`highlight`, which `PdfReader` passes it, and the `PdfSearchHighlight` type is
|
|
1111
|
+
exported. A page asked to redraw while it was still drawing (a zoom or the
|
|
1112
|
+
page sizes arriving during the first render) now redraws; it used to keep its
|
|
1113
|
+
first drawing.
|
|
1114
|
+
|
|
1115
|
+
- [#211](https://github.com/softistx/nxgt-material-vue/pull/211) [`5d15b44`](https://github.com/softistx/nxgt-material-vue/commit/5d15b4491856ac1d7d2b71642606f798b0d9f14e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The tarball no longer ships `lib/nuxt`'s test files.
|
|
1116
|
+
|
|
1117
|
+
- [#187](https://github.com/softistx/nxgt-material-vue/pull/187) [`49ee618`](https://github.com/softistx/nxgt-material-vue/commit/49ee618a47f538026b08489a437307eba903a6ee) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Every field that shows the required asterisk now says "required" on the
|
|
1118
|
+
element a screen reader lands on, not only with the `*`, as in
|
|
1119
|
+
`@nxgt/material`:
|
|
1120
|
+
|
|
1121
|
+
- `DateField`, `DateRangeField`, `TimeField`: the trigger is a `combobox`
|
|
1122
|
+
(a `button` may not carry `aria-required`) named by an `aria-label` /
|
|
1123
|
+
`aria-labelledby` you pass, else by the label, else by `placeholder` (a
|
|
1124
|
+
picker with no label needs one of them), with `aria-required` (and
|
|
1125
|
+
`aria-invalid` with `error`).
|
|
1126
|
+
- `DurationField`: `required` on both inputs.
|
|
1127
|
+
- `SliderField`: `aria-required` on every thumb, and each thumb is named by
|
|
1128
|
+
the label ("Price Minimum" / "Price Maximum" for a range). The bare `Slider`
|
|
1129
|
+
takes `label-id` and `required` for the same.
|
|
1130
|
+
- `RatingField`: the stars are a `radiogroup`, named by the label, with
|
|
1131
|
+
`aria-required`.
|
|
1132
|
+
- `RichTextEditor`: the editable area is a multi-line `textbox` named by the
|
|
1133
|
+
label, with `aria-required`. `CodeEditor`: Monaco's `ariaRequired`; its
|
|
1134
|
+
`disabled` (Monaco's `readOnly`) now also reaches the editor when it
|
|
1135
|
+
changes after mount.
|
|
1136
|
+
- `TransferList`: `aria-required` on the Selected listbox, and both panes are
|
|
1137
|
+
named by the label, then their title ("Team Selected"); the label no longer
|
|
1138
|
+
points its `for` at nothing. `SortableList`: the
|
|
1139
|
+
listbox is named by the label, with `aria-required`.
|
|
1140
|
+
- `ComboboxField`: `aria-required` on its `combobox` trigger. `Autocomplete`:
|
|
1141
|
+
`aria-required` on its input.
|
|
1142
|
+
- `ImageField`, `FileListField`, `UploadField` (a file picker is a button, and
|
|
1143
|
+
their file input is hidden): the field is a `group` named by the label and
|
|
1144
|
+
described by a visually hidden "This field is required."
|
|
1145
|
+
- Tests that found a picker by the `button` role, or a thumb or a pane by its
|
|
1146
|
+
old exact name: see the troubleshooting page.
|
|
1147
|
+
|
|
1148
|
+
- [#173](https://github.com/softistx/nxgt-material-vue/pull/173) [`a5984d3`](https://github.com/softistx/nxgt-material-vue/commit/a5984d3f1f93f25c87c34cfdd819bb66825875d3) Thanks [@SteveGT96](https://github.com/SteveGT96)! - The rich text editor's alignment buttons are named "Align left", "Align
|
|
1149
|
+
center", "Align right" and "Justify" without an `I18nProvider`, instead of the
|
|
1150
|
+
raw values `left`, `center`, `right`, `justify`.
|
|
1151
|
+
|
|
1152
|
+
- [#224](https://github.com/softistx/nxgt-material-vue/pull/224) [`10a0860`](https://github.com/softistx/nxgt-material-vue/commit/10a0860db3d56c5eb811d3787293030de6792912) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `SliderField` honours an `aria-invalid` you pass, as `@nxgt/material`'s
|
|
1153
|
+
`Slider` does: it goes on every thumb and wins over `error`. It used to land
|
|
1154
|
+
on the field's root `div`, where it is not allowed and nothing reads it.
|
|
1155
|
+
|
|
1156
|
+
- [#198](https://github.com/softistx/nxgt-material-vue/pull/198) [`b0e17dc`](https://github.com/softistx/nxgt-material-vue/commit/b0e17dca58b7a1d57ed71441a8d7eb935b5cae44) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `useTheme()` reads the stored preference once the component has mounted
|
|
1157
|
+
(before paint) instead of in the first render, so a stored `dark` no longer
|
|
1158
|
+
makes `ThemeToggle` or the code blocks mismatch the server HTML. Outside a
|
|
1159
|
+
component it still reads the storage straight away.
|
|
1160
|
+
|
|
1161
|
+
`PaneLayout` and `ListDetailsLayout` answer their width query through the
|
|
1162
|
+
same helper as `useIsMobile()` (`Doc` too, for its desktop-only sidebar
|
|
1163
|
+
reset, which renders nothing): on the server they follow
|
|
1164
|
+
`provideSSRWidth()` (a 1024 px desktop when the app provides none) instead of
|
|
1165
|
+
always rendering the desktop layout, and the client switches once mounted.
|
|
1166
|
+
|
|
1167
|
+
- [#223](https://github.com/softistx/nxgt-material-vue/pull/223) [`4ca2585`](https://github.com/softistx/nxgt-material-vue/commit/4ca25858c83b223d553fb8c76ad2c213ac4e337d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Docs: the SSR guide shows how to give the client the width the server passed
|
|
1168
|
+
to `provideSSRWidth()` — through your own server and client entries, or
|
|
1169
|
+
`useState` in Nuxt — so a phone layout rendered on the server hydrates
|
|
1170
|
+
without a mismatch.
|
|
1171
|
+
|
|
1172
|
+
- [#216](https://github.com/softistx/nxgt-material-vue/pull/216) [`e40d733`](https://github.com/softistx/nxgt-material-vue/commit/e40d733fe0986420cc1cb0d3a6361f154ba6eab5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - A server-rendered wizard built on `defineStepFormStore` hydrates without a
|
|
1173
|
+
mismatch: while hydrating, the store renders step 0, as the server does, and
|
|
1174
|
+
resumes at the stored step once mounted. A plain client mount still shows the
|
|
1175
|
+
stored step from its first render, and `reset()` still clears it.
|
|
1176
|
+
|
|
1177
|
+
- [#227](https://github.com/softistx/nxgt-material-vue/pull/227) [`75cc4e8`](https://github.com/softistx/nxgt-material-vue/commit/75cc4e8de709d4265e83c796338bed9f0b8a1dc8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Switch` and `Autocomplete` no longer put `aria-invalid` on a plain `div`,
|
|
1178
|
+
where it is not allowed. An invalid `Switch` says so on the `switch` itself,
|
|
1179
|
+
which it did not do at all before, and its bordered row shows it with a red
|
|
1180
|
+
border; an invalid `Autocomplete` says so on its input, and the chips box
|
|
1181
|
+
shows it with a red border. An `aria-invalid` you pass the `Switch` still wins.
|
|
1182
|
+
|
|
1183
|
+
- [#174](https://github.com/softistx/nxgt-material-vue/pull/174) [`e632322`](https://github.com/softistx/nxgt-material-vue/commit/e632322811e73725ddcdb9d45e21ae437aacef9d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Switch` with both a `label` and a `placeholder` now names itself from the
|
|
1184
|
+
`label` explicitly (`aria-labelledby`) and takes the row text as its
|
|
1185
|
+
description (`aria-describedby`), as `@nxgt/material` does. An `aria-label` /
|
|
1186
|
+
`aria-labelledby` you pass still wins.
|
|
1187
|
+
|
|
1188
|
+
The row now carries `data-checked="true"` / `"false"`, the same values as
|
|
1189
|
+
`@nxgt/material`. `data-filed` (misspelt) is still present while on and is
|
|
1190
|
+
deprecated; it is removed in 1.0.
|
|
1191
|
+
|
|
1192
|
+
- [#175](https://github.com/softistx/nxgt-material-vue/pull/175) [`56de732`](https://github.com/softistx/nxgt-material-vue/commit/56de732117698aa49cd71cc890cb37d81182960d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `Switch` (and `SwitchField`, `SwitchFormField`) now forwards `required` to the
|
|
1193
|
+
switch, as in `@nxgt/material`: it is announced as required (`aria-required`),
|
|
1194
|
+
and with a `name` inside a `<form>` its hidden input is `required`, so an
|
|
1195
|
+
unchecked required switch now blocks the browser's native submit, like a
|
|
1196
|
+
required checkbox. It used to show only the label's asterisk.
|
|
1197
|
+
|
|
1198
|
+
- [#224](https://github.com/softistx/nxgt-material-vue/pull/224) [`b65a5fe`](https://github.com/softistx/nxgt-material-vue/commit/b65a5fe501add96a80223f2a220ba50bd69392c6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `TimeField` no longer puts `aria-invalid` on the plain `div` inside its
|
|
1199
|
+
trigger, where it is not allowed: that box shows an error with a red border
|
|
1200
|
+
now, and the trigger `combobox` alone says the field is invalid.
|
|
1201
|
+
|
|
1202
|
+
- [#227](https://github.com/softistx/nxgt-material-vue/pull/227) [`383e526`](https://github.com/softistx/nxgt-material-vue/commit/383e5262d870888213727dbc014080aa08ca4735) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Troubleshooting: focus falling to `<body>` when a controlled `Drawer` closes,
|
|
1203
|
+
why it happened up to 0.21.0, and how to hand it back on an older version.
|
|
1204
|
+
|
|
1205
|
+
- [#220](https://github.com/softistx/nxgt-material-vue/pull/220) [`a380465`](https://github.com/softistx/nxgt-material-vue/commit/a380465c513cf7ee23c3e5364130848e072f8d2a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `NetworkUploadField`: the drop zone's limits line ("Max 2.0 MB · Up to 3
|
|
1206
|
+
files") follows the language like the rest of the field
|
|
1207
|
+
(`material.upload.dropzone.max-size` / `max-files`, with French), and says
|
|
1208
|
+
"Up to 1 file" instead of "Up to 1 files".
|
|
1209
|
+
|
|
1210
|
+
- [#196](https://github.com/softistx/nxgt-material-vue/pull/196) [`7237aac`](https://github.com/softistx/nxgt-material-vue/commit/7237aac58895c05e99359766311af3204d481437) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `FileListField` says its error once: the field group is described by the error
|
|
1211
|
+
text, and the drop zone no longer is as well (a screen reader read it on
|
|
1212
|
+
entering the group and again on the drop zone). `ImageField`,
|
|
1213
|
+
`FileListField`, `UploadField` with a trailing button, and the
|
|
1214
|
+
`NetworkUploadField` / `S3UploadField` drop zone, in error without
|
|
1215
|
+
`helper-text`, are described by a visually hidden "This value is
|
|
1216
|
+
not valid." (`material.zod.default`, translated) instead of being only a red
|
|
1217
|
+
outline.
|
|
1218
|
+
|
|
1219
|
+
## 0.21.0
|
|
1220
|
+
|
|
1221
|
+
### Minor Changes
|
|
1222
|
+
|
|
1223
|
+
- [#154](https://github.com/softistx/nxgt-material-vue/pull/154) [`f654936`](https://github.com/softistx/nxgt-material-vue/commit/f6549360ad197993787b57708ca1eef31d302112) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `@nxgt/material-vue/map` — the leaflet map, mirroring `@nxgt/material/map`
|
|
1224
|
+
|
|
1225
|
+
`Map`, `Marker`, `LocationMarker`, `LocationPreview`, `MapActions`,
|
|
1226
|
+
`LocationField`, `LocationFormField` and `useGeolocation`, in an entry of its own
|
|
1227
|
+
with `leaflet` and `@vue-leaflet/vue-leaflet` as **optional peers** — an app that
|
|
1228
|
+
renders no map never has leaflet in its tree.
|
|
1229
|
+
|
|
1230
|
+
```sh
|
|
1231
|
+
bun add leaflet @vue-leaflet/vue-leaflet
|
|
1232
|
+
```
|
|
1233
|
+
|
|
1234
|
+
```vue
|
|
1235
|
+
<script setup lang="ts">
|
|
1236
|
+
import "@nxgt/material-vue/map.css";
|
|
1237
|
+
import { LocationFormField } from "@nxgt/material-vue/map";
|
|
1238
|
+
</script>
|
|
1239
|
+
```
|
|
1240
|
+
|
|
1241
|
+
`useGeolocation` wraps `@vueuse/core`'s — already a peer — rather than adding a
|
|
1242
|
+
second geolocation dependency, and normalises `coords` to
|
|
1243
|
+
`{ latitude, longitude } | null` so `NaN` before the first fix does not read as a
|
|
1244
|
+
position. `LocationFormField` uses `useField` from vee-validate, like every other
|
|
1245
|
+
`*FormField` here.
|
|
1246
|
+
|
|
1247
|
+
**Not auto-registered by the Nuxt module**, deliberately: auto-registration would
|
|
1248
|
+
make leaflet resolvable from an app that never renders a map.
|
|
1249
|
+
|
|
1250
|
+
**SSR.** `@vue-leaflet/vue-leaflet` loads leaflet with `import()` on mount, so
|
|
1251
|
+
this entry can be imported in a server process — the React mirror's cannot, since
|
|
1252
|
+
`react-leaflet` imports leaflet statically. Leaflet still initialises in the
|
|
1253
|
+
browser only, so wrap it in `<ClientOnly>` under Nuxt. `verify:ssr` gained an
|
|
1254
|
+
`ENTRY_ONLY` check: no entry but `map.js` may reach either package.
|
|
1255
|
+
|
|
1256
|
+
`MinimapControl` is not ported — it is built on `@react-leaflet/core` internals
|
|
1257
|
+
with no Vue counterpart. An arbitrary marker is `LIcon`'s slot rather than a
|
|
1258
|
+
component-marker dependency.
|
|
1259
|
+
|
|
1260
|
+
## 0.20.0
|
|
1261
|
+
|
|
1262
|
+
### Minor Changes
|
|
1263
|
+
|
|
1264
|
+
- [#152](https://github.com/softistx/nxgt-material-vue/pull/152) [`5f72f54`](https://github.com/softistx/nxgt-material-vue/commit/5f72f54b0775f3376503c711c5846b340c4ac88f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `bun run build` now verifies what a consumer's server will do with the bundle
|
|
1265
|
+
|
|
1266
|
+
`postbuild` runs `verify:ssr`, which imports all eight built entries in a runtime
|
|
1267
|
+
with **no DOM** — the same thing a Nuxt server does at boot — and then fails if
|
|
1268
|
+
any entry **statically** reaches a dependency that must stay behind `import()`
|
|
1269
|
+
(`pdfjs-dist` today). Until now this repo only bundled; the modules were never
|
|
1270
|
+
executed, and AGENTS.md said so: "the check is the consumer, not this repo".
|
|
1271
|
+
|
|
1272
|
+
Nothing in the package changed: all eight entries pass both halves today. The
|
|
1273
|
+
check is there so the next barrel change cannot quietly take a consumer's server
|
|
1274
|
+
down at boot — and so the failure is named here rather than diagnosed there.
|
|
1275
|
+
|
|
1276
|
+
Also declares `"sideEffects": ["**/*.css"]`. It is true, not a fix: measured in
|
|
1277
|
+
the React sibling, it changes nothing about what a consumer bundles, because
|
|
1278
|
+
tree-shaking keeps a module whose own package does not promise to be
|
|
1279
|
+
side-effect-free. The CSS entry is not decoration — a bare `false` lets a bundler
|
|
1280
|
+
drop `dist/material-vue.css`.
|
|
1281
|
+
|
|
1282
|
+
## 0.19.4
|
|
1283
|
+
|
|
1284
|
+
### Patch Changes
|
|
1285
|
+
|
|
1286
|
+
- [#150](https://github.com/softistx/nxgt-material-vue/pull/150) [`cabe6d7`](https://github.com/softistx/nxgt-material-vue/commit/cabe6d7f74b91505282688d424a4330038e9fd46) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Fit gallery lightbox media to the viewport instead of cropping it: tiles keep the uniform `object-cover` crop, while the lightbox renders the whole media with `object-contain`.
|
|
1287
|
+
|
|
1288
|
+
## 0.19.3
|
|
1289
|
+
|
|
1290
|
+
### Patch Changes
|
|
1291
|
+
|
|
1292
|
+
- [#148](https://github.com/softistx/nxgt-material-vue/pull/148) [`220999c`](https://github.com/softistx/nxgt-material-vue/commit/220999c2f30ed98cd108fdf996f2ec4c8df31e17) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Crop gallery media to a uniform aspect and restyle carousel controls.
|
|
1293
|
+
|
|
1294
|
+
## 0.19.2
|
|
1295
|
+
|
|
1296
|
+
### Patch Changes
|
|
1297
|
+
|
|
1298
|
+
- [#146](https://github.com/softistx/nxgt-material-vue/pull/146) [`4f78749`](https://github.com/softistx/nxgt-material-vue/commit/4f7874990468d7cf16dba4654a2c27b4ea265bc3) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Close the chat composer mention list when a suggestion is selected.
|
|
1299
|
+
|
|
1300
|
+
## 0.19.1
|
|
1301
|
+
|
|
1302
|
+
### Patch Changes
|
|
1303
|
+
|
|
1304
|
+
- [#144](https://github.com/softistx/nxgt-material-vue/pull/144) [`c156dc4`](https://github.com/softistx/nxgt-material-vue/commit/c156dc4c671d9410433df5d0942b54c897f6f2c5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Modernise the emoji picker and add stories for emoji, mentions, chat, markdown and the editor.
|
|
1305
|
+
|
|
1306
|
+
## 0.19.0
|
|
1307
|
+
|
|
1308
|
+
### Minor Changes
|
|
1309
|
+
|
|
1310
|
+
- [#142](https://github.com/softistx/nxgt-material-vue/pull/142) [`8e7187d`](https://github.com/softistx/nxgt-material-vue/commit/8e7187dfa5e9a16a999ac667dd5b12aaaaefd819) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add MentionList (items + local search) for chat and the rich text editor.
|
|
1311
|
+
|
|
1312
|
+
## 0.18.0
|
|
1313
|
+
|
|
1314
|
+
### Minor Changes
|
|
1315
|
+
|
|
1316
|
+
- [#141](https://github.com/softistx/nxgt-material-vue/pull/141) [`7fe0ba2`](https://github.com/softistx/nxgt-material-vue/commit/7fe0ba2ddbff30b69d5936ce9b9632a72b4c0ab0) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Extract EmojiPicker for chat, markdown shortcodes, and the rich text editor.
|
|
1317
|
+
|
|
1318
|
+
- [#139](https://github.com/softistx/nxgt-material-vue/pull/139) [`25eca3c`](https://github.com/softistx/nxgt-material-vue/commit/25eca3ceb2459ad84dec9f0bebf51b40d2bbc9fe) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Terminal, a display-only prompt and log with copy.
|
|
1319
|
+
|
|
1320
|
+
## 0.17.0
|
|
1321
|
+
|
|
1322
|
+
### Minor Changes
|
|
1323
|
+
|
|
1324
|
+
- [#138](https://github.com/softistx/nxgt-material-vue/pull/138) [`d196132`](https://github.com/softistx/nxgt-material-vue/commit/d196132c9f50adcda4333b55443e1d1e4e90a70d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Markdown (GFM, KaTeX, mermaid) and route ChatMarkdown through it.
|
|
1325
|
+
|
|
1326
|
+
### Patch Changes
|
|
1327
|
+
|
|
1328
|
+
- [#135](https://github.com/softistx/nxgt-material-vue/pull/135) [`ed66431`](https://github.com/softistx/nxgt-material-vue/commit/ed66431569df540b574901b60b8893dd2f510ba4) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Make EntityHeader a container: stack on small cards, wrap actions.
|
|
1329
|
+
|
|
1330
|
+
- [#136](https://github.com/softistx/nxgt-material-vue/pull/136) [`0f3f6d3`](https://github.com/softistx/nxgt-material-vue/commit/0f3f6d3bab7a1975eaaac41a776d29b00cb329eb) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Kanban columns use bg-background and rounded; add a 390px Phone story.
|
|
1331
|
+
|
|
1332
|
+
## 0.16.0
|
|
1333
|
+
|
|
1334
|
+
### Minor Changes
|
|
1335
|
+
|
|
1336
|
+
- [#133](https://github.com/softistx/nxgt-material-vue/pull/133) [`7a67eab`](https://github.com/softistx/nxgt-material-vue/commit/7a67eab8e5ee3183ecf11bdbef872aa1b888ad5a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Rebuild Quiz and QuestionCard on Card, ActionCard, GaugeCard and ChecklistCard.
|
|
1337
|
+
|
|
1338
|
+
## 0.15.3
|
|
1339
|
+
|
|
1340
|
+
### Patch Changes
|
|
1341
|
+
|
|
1342
|
+
- [#131](https://github.com/softistx/nxgt-material-vue/pull/131) [`3e55bca`](https://github.com/softistx/nxgt-material-vue/commit/3e55bca0adb87295cb771e97a1505964812f9675) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Fix ChatInbox desktop layout: side-by-side from @md via a nested container.
|
|
1343
|
+
|
|
1344
|
+
## 0.15.2
|
|
1345
|
+
|
|
1346
|
+
### Patch Changes
|
|
1347
|
+
|
|
1348
|
+
- [#129](https://github.com/softistx/nxgt-material-vue/pull/129) [`e0634d8`](https://github.com/softistx/nxgt-material-vue/commit/e0634d8d0320a0165fbcf090f06f903561eca4a7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Drop bg-muted gallery wells and wrap lightbox chrome on small viewports.
|
|
1349
|
+
|
|
1350
|
+
## 0.15.1
|
|
1351
|
+
|
|
1352
|
+
### Patch Changes
|
|
1353
|
+
|
|
1354
|
+
- [#127](https://github.com/softistx/nxgt-material-vue/pull/127) [`06435ae`](https://github.com/softistx/nxgt-material-vue/commit/06435aefc5eb940f06d6ab751ac0dcc9e4af9115) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Let the PDF toolbar wrap on small containers instead of overflowing a 48px bar.
|
|
1355
|
+
|
|
1356
|
+
- [#125](https://github.com/softistx/nxgt-material-vue/pull/125) [`5ede4ea`](https://github.com/softistx/nxgt-material-vue/commit/5ede4ea0ecd6600a763578cb9f8c2b79b360c0e5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Make Quiz container-query responsive and show results on a GaugeCard.
|
|
1357
|
+
|
|
1358
|
+
## 0.15.0
|
|
1359
|
+
|
|
1360
|
+
### Minor Changes
|
|
1361
|
+
|
|
1362
|
+
- [#124](https://github.com/softistx/nxgt-material-vue/pull/124) [`4d7582e`](https://github.com/softistx/nxgt-material-vue/commit/4d7582e9126c7e21a4781d77fd720a1afdb7244a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ChatInbox (list + thread, container queries) and fix assistant bubbles in dark.
|
|
1363
|
+
|
|
1364
|
+
## 0.14.0
|
|
1365
|
+
|
|
1366
|
+
### Minor Changes
|
|
1367
|
+
|
|
1368
|
+
- [#122](https://github.com/softistx/nxgt-material-vue/pull/122) [`7600881`](https://github.com/softistx/nxgt-material-vue/commit/7600881938c68b989077779382c895869e7b39bf) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add EmptyState offline, search and maintenance presets, and drop bg-muted on not-found.
|
|
1369
|
+
|
|
1370
|
+
## 0.13.0
|
|
1371
|
+
|
|
1372
|
+
### Minor Changes
|
|
1373
|
+
|
|
1374
|
+
- [#120](https://github.com/softistx/nxgt-material-vue/pull/120) [`1136c40`](https://github.com/softistx/nxgt-material-vue/commit/1136c40179f69d2570abf872a063828734c264b9) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ScoreCard, ShortcutCard, ChecklistCard, PaceCard and HistogramCard presets.
|
|
1375
|
+
|
|
1376
|
+
## 0.12.0
|
|
1377
|
+
|
|
1378
|
+
### Minor Changes
|
|
1379
|
+
|
|
1380
|
+
- [#118](https://github.com/softistx/nxgt-material-vue/pull/118) [`d242ffc`](https://github.com/softistx/nxgt-material-vue/commit/d242ffc81d51810574fd6a9203fbc9fd6bcb750a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add PlaceCard, FileCard, StatusCard, RatioCard and ThresholdCard presets.
|
|
1381
|
+
|
|
1382
|
+
## 0.11.0
|
|
1383
|
+
|
|
1384
|
+
### Minor Changes
|
|
1385
|
+
|
|
1386
|
+
- [#116](https://github.com/softistx/nxgt-material-vue/pull/116) [`0d910a6`](https://github.com/softistx/nxgt-material-vue/commit/0d910a660cddb86d3650fbae743d8d39351477dd) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ReceiptCard, ReviewCard, OfferCard, BandCard and LatencyCard presets.
|
|
1387
|
+
|
|
1388
|
+
## 0.10.0
|
|
1389
|
+
|
|
1390
|
+
### Minor Changes
|
|
1391
|
+
|
|
1392
|
+
- [#115](https://github.com/softistx/nxgt-material-vue/pull/115) [`4f20cce`](https://github.com/softistx/nxgt-material-vue/commit/4f20cce91630f564bfc39beb3bc818854949320b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add AlbumCard, TagCard and DeltaListCard presets.
|
|
1393
|
+
|
|
1394
|
+
- [#113](https://github.com/softistx/nxgt-material-vue/pull/113) [`f6eb240`](https://github.com/softistx/nxgt-material-vue/commit/f6eb240c6c1216ee06939fdcae3882838daa034e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add LinkCard and SparkbarCard presets.
|
|
1395
|
+
|
|
1396
|
+
## 0.9.0
|
|
1397
|
+
|
|
1398
|
+
### Minor Changes
|
|
1399
|
+
|
|
1400
|
+
- [#111](https://github.com/softistx/nxgt-material-vue/pull/111) [`35ea2af`](https://github.com/softistx/nxgt-material-vue/commit/35ea2af1af716c7fb4698b7051578ff8d06c0469) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add EventCard and StackCard presets.
|
|
1401
|
+
|
|
1402
|
+
## 0.8.0
|
|
1403
|
+
|
|
1404
|
+
### Minor Changes
|
|
1405
|
+
|
|
1406
|
+
- [#109](https://github.com/softistx/nxgt-material-vue/pull/109) [`cd5402a`](https://github.com/softistx/nxgt-material-vue/commit/cd5402a9bfdea7a583f86e18e811c18acca5bfd5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add MessageCard and GaugeCard presets.
|
|
1407
|
+
|
|
1408
|
+
## 0.7.0
|
|
1409
|
+
|
|
1410
|
+
### Minor Changes
|
|
1411
|
+
|
|
1412
|
+
- [#108](https://github.com/softistx/nxgt-material-vue/pull/108) [`587463c`](https://github.com/softistx/nxgt-material-vue/commit/587463c35ca13c8620ceaf7a3964b13e0e31dff1) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add TimelineCard and FunnelCard presets.
|
|
1413
|
+
|
|
1414
|
+
### Patch Changes
|
|
1415
|
+
|
|
1416
|
+
- [#105](https://github.com/softistx/nxgt-material-vue/pull/105) [`5a9212b`](https://github.com/softistx/nxgt-material-vue/commit/5a9212ba0c691c621871b1679ed69db6a3c3cf40) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Tree rows are full-width rounded bars, including indent.
|
|
1417
|
+
|
|
1418
|
+
## 0.6.0
|
|
1419
|
+
|
|
1420
|
+
### Minor Changes
|
|
1421
|
+
|
|
1422
|
+
- [#104](https://github.com/softistx/nxgt-material-vue/pull/104) [`216c354`](https://github.com/softistx/nxgt-material-vue/commit/216c354742f853aacd6a051f90604929ca69773c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add CompareCard and HeatweekCard dashboard tiles.
|
|
1423
|
+
|
|
1424
|
+
## 0.5.0
|
|
1425
|
+
|
|
1426
|
+
### Minor Changes
|
|
1427
|
+
|
|
1428
|
+
- [#101](https://github.com/softistx/nxgt-material-vue/pull/101) [`9c41e63`](https://github.com/softistx/nxgt-material-vue/commit/9c41e63a8b23ff765c7640ab25f773c05959834b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add SplitCard, TicketCard and NoticeCard presets.
|
|
1429
|
+
|
|
1430
|
+
### Patch Changes
|
|
1431
|
+
|
|
1432
|
+
- [#102](https://github.com/softistx/nxgt-material-vue/pull/102) [`897f72e`](https://github.com/softistx/nxgt-material-vue/commit/897f72e35ba44110d091571101cc80c2d245ba81) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Tree rows are rounded pills that hug the label; indent is empty gutter, not a full-width bar.
|
|
1433
|
+
|
|
1434
|
+
## 0.4.0
|
|
1435
|
+
|
|
1436
|
+
### Minor Changes
|
|
1437
|
+
|
|
1438
|
+
- [#73](https://github.com/softistx/nxgt-material-vue/pull/73) [`4dd1961`](https://github.com/softistx/nxgt-material-vue/commit/4dd1961b4c3368ea557480dde34115a375e05d91) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ApiOperation: method + path, optional ParamTable, optional example CodeGroup.
|
|
1439
|
+
|
|
1440
|
+
- [#100](https://github.com/softistx/nxgt-material-vue/pull/100) [`65bb526`](https://github.com/softistx/nxgt-material-vue/commit/65bb5262501acafda2c2c4995a9eaeebadf83413) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add OverlayCard, SpotlightCard and CrewCard presets.
|
|
1441
|
+
|
|
1442
|
+
- [#95](https://github.com/softistx/nxgt-material-vue/pull/95) [`63f729c`](https://github.com/softistx/nxgt-material-vue/commit/63f729c0a855ae6ea39185446ce419550fa362bc) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add FeatureCard and MediaCard presets (responsive, compose Card).
|
|
1443
|
+
|
|
1444
|
+
- [#96](https://github.com/softistx/nxgt-material-vue/pull/96) [`2c87cc9`](https://github.com/softistx/nxgt-material-vue/commit/2c87cc9186af19f9922961591a51386a75e48d6a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add PricingCard and ProfileCard presets.
|
|
1445
|
+
|
|
1446
|
+
- [#97](https://github.com/softistx/nxgt-material-vue/pull/97) [`421335e`](https://github.com/softistx/nxgt-material-vue/commit/421335e0dbc6884fbf565418769f6fa10ba0f7e6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add QuoteCard and a responsive UI/Cards Gallery story.
|
|
1447
|
+
|
|
1448
|
+
- [#69](https://github.com/softistx/nxgt-material-vue/pull/69) [`4a45429`](https://github.com/softistx/nxgt-material-vue/commit/4a454294e715552c0ca66169bc95820fdbc3a506) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ParamTable, AnchorHeading, a reading-progress bar, copy-page on DocHeader, and DocChildCards for section landings.
|
|
1449
|
+
|
|
1450
|
+
- [#67](https://github.com/softistx/nxgt-material-vue/pull/67) [`66a6d37`](https://github.com/softistx/nxgt-material-vue/commit/66a6d3742c30f7768aee2c8ad11dc47eed8e0a2f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Port the documentation shell (`Doc`) and the generic `CodeGroup`, `ApiEndpoint`, `Steps`, `Hero` and `Figure` widgets from `@nxgt/material`. Repo-sync now covers adding and improving catalog components, not only shared-contract fixes.
|
|
1451
|
+
|
|
1452
|
+
- [#70](https://github.com/softistx/nxgt-material-vue/pull/70) [`47f381c`](https://github.com/softistx/nxgt-material-vue/commit/47f381ce3b622c2e82e3486e39a6108486510bf5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Doc sidebar can filter pages in place. `[` / `]` move to the previous / next page. Skip-to-content link and hash restore after navigation.
|
|
1453
|
+
|
|
1454
|
+
- [#72](https://github.com/softistx/nxgt-material-vue/pull/72) [`13c133e`](https://github.com/softistx/nxgt-material-vue/commit/13c133e78553bac28b3312dfbdf7e1e718e515c8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - DocPage lists sibling pages in a See also block before the pager.
|
|
1455
|
+
|
|
1456
|
+
- [#78](https://github.com/softistx/nxgt-material-vue/pull/78) [`24cc0ae`](https://github.com/softistx/nxgt-material-vue/commit/24cc0aeab94ee8cbd9c19bd5c27f0352627f4a1d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - EmptyState uses a tinted icon well and tighter type. DocEmpty is the docs 404/empty slot.
|
|
1457
|
+
|
|
1458
|
+
- [#94](https://github.com/softistx/nxgt-material-vue/pull/94) [`5bc03da`](https://github.com/softistx/nxgt-material-vue/commit/5bc03da362b281d5e867c32e2eea4f48db579cf3) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add useHeadingSpy (vueuse useIntersectionObserver). Doc chrome uses it for the on-this-page active heading.
|
|
1459
|
+
|
|
1460
|
+
- [#93](https://github.com/softistx/nxgt-material-vue/pull/93) [`1f68eee`](https://github.com/softistx/nxgt-material-vue/commit/1f68eee8fd177d603186854328d3b35dcf6d08d0) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add HighlightText and splitMatch. Doc search hits highlight the query.
|
|
1461
|
+
|
|
1462
|
+
- [#99](https://github.com/softistx/nxgt-material-vue/pull/99) [`e277b94`](https://github.com/softistx/nxgt-material-vue/commit/e277b944b5bf6082bf7b9433d09ebc6a8e041a1a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add BreakdownCard and RankCard, plus a UI/Metrics Dashboard gallery.
|
|
1463
|
+
|
|
1464
|
+
- [#98](https://github.com/softistx/nxgt-material-vue/pull/98) [`9fbd6b2`](https://github.com/softistx/nxgt-material-vue/commit/9fbd6b2d01fcb33f49a11c6b196ceff3706fde83) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add TrendCard and GoalCard dashboard tiles (metrics folder).
|
|
1465
|
+
|
|
1466
|
+
- [#87](https://github.com/softistx/nxgt-material-vue/pull/87) [`407d0b0`](https://github.com/softistx/nxgt-material-vue/commit/407d0b02f57440c031b0f8dc193da3376e94e727) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Extract Pager from the doc shell. isExternalHref lives on @nxgt/material-vue/lib.
|
|
1467
|
+
|
|
1468
|
+
- [#86](https://github.com/softistx/nxgt-material-vue/pull/86) [`d44ebaf`](https://github.com/softistx/nxgt-material-vue/commit/d44ebafb684ea8640a528e55a75274f5bec96fc7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Extract ScrollProgress and SkipLink from the doc shell. Scroll chrome uses @vueuse/core (useScroll / useWindowScroll).
|
|
1469
|
+
|
|
1470
|
+
- [#89](https://github.com/softistx/nxgt-material-vue/pull/89) [`1ad4155`](https://github.com/softistx/nxgt-material-vue/commit/1ad4155ff8bc0cab3c74405c7ef1c5d6de29dc10) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Extract SeeAlso from the doc shell. Rows use a dark-safe hover, not bg-muted.
|
|
1471
|
+
|
|
1472
|
+
- [#88](https://github.com/softistx/nxgt-material-vue/pull/88) [`3a23832`](https://github.com/softistx/nxgt-material-vue/commit/3a238324626da8e69f2ce7e7035e9c13ebab91e5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Extract Toc from the doc shell. DocToc composes it with DocLink and the active heading.
|
|
1473
|
+
|
|
1474
|
+
### Patch Changes
|
|
1475
|
+
|
|
1476
|
+
- [#90](https://github.com/softistx/nxgt-material-vue/pull/90) [`785a944`](https://github.com/softistx/nxgt-material-vue/commit/785a94492625b74d75e025fb5b9f1b36c126453e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - CopyButton uses @vueuse/core useClipboard. Doc copy actions compose it.
|
|
1477
|
+
|
|
1478
|
+
- [#81](https://github.com/softistx/nxgt-material-vue/pull/81) [`998e97b`](https://github.com/softistx/nxgt-material-vue/commit/998e97b1b0067b4ac495b023cab83f6a606cb18c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Document the Storybook UI/Doc/Api recipe: DocPage with AnchorHeading, ApiOperation, ParamTable and CodeGroup.
|
|
1479
|
+
|
|
1480
|
+
- [#71](https://github.com/softistx/nxgt-material-vue/pull/71) [`5e0e3df`](https://github.com/softistx/nxgt-material-vue/commit/5e0e3df3e1c595a5b5aa5ff6bc4dac2871e6dd9b) Thanks [@SteveGT96](https://github.com/SteveGT96)! - DocHeader can copy the page as markdown (`markdown` prop, or the article text as a fallback).
|
|
1481
|
+
|
|
1482
|
+
- [#85](https://github.com/softistx/nxgt-material-vue/pull/85) [`5b14b64`](https://github.com/softistx/nxgt-material-vue/commit/5b14b64b69f65519052a5e4ead4e06b6ea6aaa69) Thanks [@SteveGT96](https://github.com/SteveGT96)! - DocHeader editHref shows a pencil and an outbound icon on external links.
|
|
1483
|
+
|
|
1484
|
+
- [#84](https://github.com/softistx/nxgt-material-vue/pull/84) [`462185f`](https://github.com/softistx/nxgt-material-vue/commit/462185fcfc57f9e6034734fce8dabc53a3ea9890) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Sidebar filter empty uses a compact well, and nav icon wells use bg-background.
|
|
1485
|
+
|
|
1486
|
+
- [#80](https://github.com/softistx/nxgt-material-vue/pull/80) [`283dd79`](https://github.com/softistx/nxgt-material-vue/commit/283dd7935297e4cc0082fb3a958d684d68c3949f) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Pager and See also show an outbound icon on external hrefs, same as the sidebar.
|
|
1487
|
+
|
|
1488
|
+
- [#82](https://github.com/softistx/nxgt-material-vue/pull/82) [`37d6361`](https://github.com/softistx/nxgt-material-vue/commit/37d636115bc796fcec80d6d38c452fc0167b4141) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Doc search hits are airier: icon well, snippet, outbound icon, compact empty, and a kbd footer.
|
|
1489
|
+
|
|
1490
|
+
- [#76](https://github.com/softistx/nxgt-material-vue/pull/76) [`7c19c7e`](https://github.com/softistx/nxgt-material-vue/commit/7c19c7e4b1f9b141423571a4e598e40eb39ecf02) Thanks [@SteveGT96](https://github.com/SteveGT96)! - On this page: per-item primary marker (transparent when idle), active row bg-primary/10 and text-primary.
|
|
1491
|
+
|
|
1492
|
+
- [#77](https://github.com/softistx/nxgt-material-vue/pull/77) [`39a886f`](https://github.com/softistx/nxgt-material-vue/commit/39a886fac5b0737e32968392c7a30ea402222a92) Thanks [@SteveGT96](https://github.com/SteveGT96)! - On this page uses `rounded` on the rail panel, items, and marker.
|
|
1493
|
+
|
|
1494
|
+
- [#74](https://github.com/softistx/nxgt-material-vue/pull/74) [`622f206`](https://github.com/softistx/nxgt-material-vue/commit/622f206fe665fb826812a89860568f739a6517c8) Thanks [@SteveGT96](https://github.com/SteveGT96)! - On this page items each have a left bar (primary when active) so the indicator stays on the text. Search hits show descriptions; pager cards show `[` / `]`.
|
|
1495
|
+
|
|
1496
|
+
- [#92](https://github.com/softistx/nxgt-material-vue/pull/92) [`8cc183f`](https://github.com/softistx/nxgt-material-vue/commit/8cc183f584f7aa7d06ab63c8051e08f353e6186c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Doc topbar search chip uses bg-background and rounded, not bg-muted.
|
|
1497
|
+
|
|
1498
|
+
- [#79](https://github.com/softistx/nxgt-material-vue/pull/79) [`4daf75f`](https://github.com/softistx/nxgt-material-vue/commit/4daf75f12672c314d9b4995edfb3a8ab8f9341e6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - DocHeader accepts a Date for `updatedAt` and renders it with RelativeTime.
|
|
1499
|
+
|
|
1500
|
+
- [#91](https://github.com/softistx/nxgt-material-vue/pull/91) [`17f1f4d`](https://github.com/softistx/nxgt-material-vue/commit/17f1f4d9c2b092c00573ec5215025d6a6eade263) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Doc chrome uses @vueuse/core for keydown (useEventListener) and the md breakpoint (useMediaQuery).
|
|
1501
|
+
|
|
1502
|
+
- [#75](https://github.com/softistx/nxgt-material-vue/pull/75) [`99efd7f`](https://github.com/softistx/nxgt-material-vue/commit/99efd7feb204cb25d82725154b7b0ff1fa05bca9) Thanks [@SteveGT96](https://github.com/SteveGT96)! - ThemeToggle and ToggleGroup use bg-background so dark-mode icons stay visible.
|
|
1503
|
+
|
|
1504
|
+
## 0.3.2
|
|
1505
|
+
|
|
1506
|
+
### Patch Changes
|
|
1507
|
+
|
|
1508
|
+
- [#65](https://github.com/softistx/nxgt-material-vue/pull/65) [`8b08c05`](https://github.com/softistx/nxgt-material-vue/commit/8b08c05901808cb759599ae4be183e14b2fbd779) Thanks [@SteveGT96](https://github.com/SteveGT96)! - README: "At a glance" overview, full component catalogue with React equivalents, and a helpers reference for every subpath.
|
|
1509
|
+
|
|
1510
|
+
- [#65](https://github.com/softistx/nxgt-material-vue/pull/65) [`8b08c05`](https://github.com/softistx/nxgt-material-vue/commit/8b08c05901808cb759599ae4be183e14b2fbd779) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Ship type declarations at the paths `package.json` points to (`dist/lib/main.d.ts`, `dist/lib/components/index.d.ts`, …), so TypeScript resolves the package's types. The Nuxt module now auto-imports `useNavigationHandler`, `useNavigationHandlers` and `createTypedTranslation` instead of names that do not exist. `AppSidebar`'s default brand is the icon alone. Licensed under MIT.
|
|
1511
|
+
|
|
1512
|
+
## 0.3.1
|
|
1513
|
+
|
|
1514
|
+
### Patch Changes
|
|
1515
|
+
|
|
1516
|
+
- [#63](https://github.com/softistx/nxgt-material-vue/pull/63) [`8c54295`](https://github.com/softistx/nxgt-material-vue/commit/8c54295f941527290503f7930bde8835c376f79e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Keep the `ActionCard` icon box square and cap its height (`max-h-16 aspect-square`) so tall content no longer stretches it.
|
|
1517
|
+
|
|
1518
|
+
## 0.3.0
|
|
1519
|
+
|
|
1520
|
+
### Minor Changes
|
|
1521
|
+
|
|
1522
|
+
- [#61](https://github.com/softistx/nxgt-material-vue/pull/61) [`3a41f84`](https://github.com/softistx/nxgt-material-vue/commit/3a41f84419741fc159f5499d3feeeb8b1d62fbba) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Remove the Nuxt CSS auto-injection and the `css` module option: import `@nxgt/material-vue/styles.css` explicitly after `@import "tailwindcss"` (one `@theme` graph, and Tailwind IntelliSense can read the tokens). `styles.css` declares `@source "../dist"` so component utilities are generated by the consumer build. Pre-bundle `jsbarcode` in the Nuxt module (CommonJS default export), and stop passing `undefined` options to JsBarcode so barcodes no longer render 0×0.
|
|
1523
|
+
|
|
1524
|
+
## 0.2.0
|
|
1525
|
+
|
|
1526
|
+
### Minor Changes
|
|
1527
|
+
|
|
1528
|
+
- [#57](https://github.com/softistx/nxgt-material-vue/pull/57) [`c00cf7c`](https://github.com/softistx/nxgt-material-vue/commit/c00cf7c1c2d888a3615217fb81cdb906c4cf4f67) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Port the remaining Feedback catalog (Alert, empty state, confirm dialogs, toasts, progress field) and composed skeleton variants from @nxgt/material.
|
|
1529
|
+
|
|
1530
|
+
### Patch Changes
|
|
1531
|
+
|
|
1532
|
+
- [#58](https://github.com/softistx/nxgt-material-vue/pull/58) [`0ade7fe`](https://github.com/softistx/nxgt-material-vue/commit/0ade7fe0ee04300fc3dd6c5d8b4b8a327404b9a7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Inject material styles into the app Tailwind CSS entry so @theme tokens apply without a manual @import.
|
|
1533
|
+
|
|
1534
|
+
- [#60](https://github.com/softistx/nxgt-material-vue/pull/60) [`858bb9c`](https://github.com/softistx/nxgt-material-vue/commit/858bb9c69913fdea94843d2f3851df7ae95457d6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Keep icon buttons from collapsing (RTE toolbar) and resolve JsBarcode so barcodes paint on canvas.
|
|
1535
|
+
|
|
1536
|
+
## 0.1.0
|
|
1537
|
+
|
|
1538
|
+
### Minor Changes
|
|
1539
|
+
|
|
1540
|
+
- [#18](https://github.com/softistx/nxgt-material-vue/pull/18) [`dd2a076`](https://github.com/softistx/nxgt-material-vue/commit/dd2a076315798015608768f74684090d5d5a9e9e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Sidebar, AppBar, Background, and AppShell (ActivityLayout, vue-router breadcrumbs).
|
|
1541
|
+
|
|
1542
|
+
- [#30](https://github.com/softistx/nxgt-material-vue/pull/30) [`8834bb4`](https://github.com/softistx/nxgt-material-vue/commit/8834bb40469015742e8ca517281e42a6cf9e0e21) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add AttributesField, AttributeForm, AttributeValuesForm, and vee-validate wrappers.
|
|
1543
|
+
|
|
1544
|
+
- [#11](https://github.com/softistx/nxgt-material-vue/pull/11) [`3074832`](https://github.com/softistx/nxgt-material-vue/commit/3074832e34cc6e79f0f48f76d2c4613331e2b3d2) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Port ButtonGroup, LinkButton, ResponsiveButton, and SplitButton.
|
|
1545
|
+
|
|
1546
|
+
- [#44](https://github.com/softistx/nxgt-material-vue/pull/44) [`338be4b`](https://github.com/softistx/nxgt-material-vue/commit/338be4b834bb51f43bcc8813c0fa8e6dee9a1e0d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Camera, StxPlayer, and a deprecated VideoPlayer re-export.
|
|
1547
|
+
|
|
1548
|
+
- [#27](https://github.com/softistx/nxgt-material-vue/pull/27) [`769af7b`](https://github.com/softistx/nxgt-material-vue/commit/769af7b7361b7765d88b6e1864cdea158e914675) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Carousel, QRCode, and Barecode.
|
|
1549
|
+
|
|
1550
|
+
- [#32](https://github.com/softistx/nxgt-material-vue/pull/32) [`eff1b1d`](https://github.com/softistx/nxgt-material-vue/commit/eff1b1d5f089b08c96618d8a272f7b602dd614fc) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ECharts chart components (Bar, Line, Area, Pie, Radar, Scatter, Heatmap, Funnel).
|
|
1551
|
+
|
|
1552
|
+
- [#43](https://github.com/softistx/nxgt-material-vue/pull/43) [`8f923d7`](https://github.com/softistx/nxgt-material-vue/commit/8f923d76468fa4e8d061827fe9f6cb71d8e07c27) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Chat thread, composer, markdown, and message primitives.
|
|
1553
|
+
|
|
1554
|
+
- [#19](https://github.com/softistx/nxgt-material-vue/pull/19) [`2af1269`](https://github.com/softistx/nxgt-material-vue/commit/2af12699088bb76101a04a586de90d68298e69b3) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add typography, kbd, list-tile, chrome toggles, banner, cards, avatar-group, switcher, layouts, and related overlays.
|
|
1555
|
+
|
|
1556
|
+
- [#45](https://github.com/softistx/nxgt-material-vue/pull/45) [`e3d3168`](https://github.com/softistx/nxgt-material-vue/commit/e3d316871940369e1f8eaf42409b84e104688221) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add CodeEditor (Monaco via dynamic import) and mark the Vue catalog overlays complete on the roadmap.
|
|
1557
|
+
|
|
1558
|
+
- [#20](https://github.com/softistx/nxgt-material-vue/pull/20) [`37a3b64`](https://github.com/softistx/nxgt-material-vue/commit/37a3b64b28c48231cb852497e6ec765e6405788c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ComboboxField, TimezoneField, SelectCardField, CheckCardField, SliderField, and vee-validate wrappers.
|
|
1559
|
+
|
|
1560
|
+
- [#26](https://github.com/softistx/nxgt-material-vue/pull/26) [`8585bff`](https://github.com/softistx/nxgt-material-vue/commit/8585bff3049461d37b370a3197c330f26e1b50a1) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Contacts, PostalAddress, and OpeningHours display widgets, dialogs, and vee-validate form fields.
|
|
1561
|
+
|
|
1562
|
+
- [#36](https://github.com/softistx/nxgt-material-vue/pull/36) [`883f340`](https://github.com/softistx/nxgt-material-vue/commit/883f34026280f800df3318ba07002fe8f1ea37f6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add ImageCropper, ImageCropperDialog, and print document primitives.
|
|
1563
|
+
|
|
1564
|
+
- [#24](https://github.com/softistx/nxgt-material-vue/pull/24) [`76a0acd`](https://github.com/softistx/nxgt-material-vue/commit/76a0acd89ad391ebdf9c589cc40245395742617e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add DataTable with sorting, pagination, column visibility, row selection, and expandable rows.
|
|
1565
|
+
|
|
1566
|
+
- [#14](https://github.com/softistx/nxgt-material-vue/pull/14) [`bbb7f46`](https://github.com/softistx/nxgt-material-vue/commit/bbb7f4622a937f5204f0b3c2e287f7f84cb52fff) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add DateField, TimeField, TimePicker, SwitchField, RadioGroupField, and vee-validate wrappers.
|
|
1567
|
+
|
|
1568
|
+
- [#33](https://github.com/softistx/nxgt-material-vue/pull/33) [`3239025`](https://github.com/softistx/nxgt-material-vue/commit/3239025925519e3c334837123c0c63616154ac42) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add pointer-based DnD primitives and SortableList with a vee-validate form wrapper.
|
|
1569
|
+
|
|
1570
|
+
- [#41](https://github.com/softistx/nxgt-material-vue/pull/41) [`64ee793`](https://github.com/softistx/nxgt-material-vue/commit/64ee793f34a0cdcd25abe7778a6b8e721e08ef5e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add QuestionCard and Quiz education components.
|
|
1571
|
+
|
|
1572
|
+
- [#38](https://github.com/softistx/nxgt-material-vue/pull/38) [`8f344b6`](https://github.com/softistx/nxgt-material-vue/commit/8f344b64d26fb6b0b95bf34d984587f35423d419) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add EventCalendar with month, week, workweek, day, and agenda views.
|
|
1573
|
+
|
|
1574
|
+
- [#46](https://github.com/softistx/nxgt-material-vue/pull/46) [`7c119c7`](https://github.com/softistx/nxgt-material-vue/commit/7c119c776129d930b889b5bf843910e419048f05) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add the Field config dispatcher that renders nxgt field overlays from a typed config.
|
|
1575
|
+
|
|
1576
|
+
- [#10](https://github.com/softistx/nxgt-material-vue/pull/10) [`9979e9c`](https://github.com/softistx/nxgt-material-vue/commit/9979e9c8f3413fe8ffb9eac60fcadf1ebc064b9c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add TextField, TextareaField, NumberField and vee-validate form wrappers.
|
|
1577
|
+
|
|
1578
|
+
- [#13](https://github.com/softistx/nxgt-material-vue/pull/13) [`39cdb63`](https://github.com/softistx/nxgt-material-vue/commit/39cdb63f682087947a8997f2d60a840c6d9854a1) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add EmailField, UrlField, PasswordField, OtpField, SelectField, CheckboxGroup, CopyButton, and vee-validate wrappers.
|
|
1579
|
+
|
|
1580
|
+
- [#28](https://github.com/softistx/nxgt-material-vue/pull/28) [`8d59fd4`](https://github.com/softistx/nxgt-material-vue/commit/8d59fd4f553495f35e3a2e63c54b2c65ef1366a6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add FileList, FileListField, ImageField, Tree, and their vee-validate form wrappers.
|
|
1581
|
+
|
|
1582
|
+
- [#37](https://github.com/softistx/nxgt-material-vue/pull/37) [`c8482cd`](https://github.com/softistx/nxgt-material-vue/commit/c8482cdfa3bf01207f7609905bd0c11451abbf71) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Filter composite with Pinia local store, layout variants, and vee-validate wrapper.
|
|
1583
|
+
|
|
1584
|
+
- [#4](https://github.com/softistx/nxgt-material-vue/pull/4) [`d6963ce`](https://github.com/softistx/nxgt-material-vue/commit/d6963ce4166480987f86e4777f277e3577178413) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Port utils, i18n, composables, and RTK slice helpers from nxgt-material.
|
|
1585
|
+
|
|
1586
|
+
- [#42](https://github.com/softistx/nxgt-material-vue/pull/42) [`7dd8f54`](https://github.com/softistx/nxgt-material-vue/commit/7dd8f5451fed6f82a87961dbf1a22034de0cea56) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Gallery, LightboxGallery, and MiniGallery with layout presets and lightbox chrome.
|
|
1587
|
+
|
|
1588
|
+
- [#15](https://github.com/softistx/nxgt-material-vue/pull/15) [`80e2ea9`](https://github.com/softistx/nxgt-material-vue/commit/80e2ea9f0d338371ac81d59585e5e0051c6efe2c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add InputGroup, InputGroupField, PhoneField (E.164 via libphonenumber-js), and vee-validate wrappers.
|
|
1589
|
+
|
|
1590
|
+
- [#35](https://github.com/softistx/nxgt-material-vue/pull/35) [`c6fa1bd`](https://github.com/softistx/nxgt-material-vue/commit/c6fa1bd11c0dd9361d4360f484203af268cd943c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Kanban with column and card reorder, groups, WIP limits, and keyboard moves.
|
|
1591
|
+
|
|
1592
|
+
- [#29](https://github.com/softistx/nxgt-material-vue/pull/29) [`ce35547`](https://github.com/softistx/nxgt-material-vue/commit/ce35547b79956344ec99e50738d1fb45849271c9) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Notifications, CodeBlock, CodeDiff, and JsonViewer.
|
|
1593
|
+
|
|
1594
|
+
- [#48](https://github.com/softistx/nxgt-material-vue/pull/48) [`da702eb`](https://github.com/softistx/nxgt-material-vue/commit/da702eb10260741ff011bf39cc2342007e40aad6) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add a Nuxt module (`@nxgt/material-vue/nuxt`) that injects CSS and auto-imports components and composables.
|
|
1595
|
+
|
|
1596
|
+
- [#9](https://github.com/softistx/nxgt-material-vue/pull/9) [`8966fe9`](https://github.com/softistx/nxgt-material-vue/commit/8966fe9c7977e0bdd422c3c8a161c5320d6bef31) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Port nxgt Button variants, Icon, Spinner, IconButton, Chip, CountBadge, HelperText.
|
|
1597
|
+
|
|
1598
|
+
- [#23](https://github.com/softistx/nxgt-material-vue/pull/23) [`9c3a10c`](https://github.com/softistx/nxgt-material-vue/commit/9c3a10c519c746b589febf19a1fb08d0cae499df) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add PaneLayout and ListDetailsLayout.
|
|
1599
|
+
|
|
1600
|
+
- [#40](https://github.com/softistx/nxgt-material-vue/pull/40) [`30577eb`](https://github.com/softistx/nxgt-material-vue/commit/30577eb885a3171d3f603ed50f570d042a1b7e29) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add PdfReader, a client-only PDF viewer with toolbar, thumbnails, outline, search, and zoom.
|
|
1601
|
+
|
|
1602
|
+
- [#7](https://github.com/softistx/nxgt-material-vue/pull/7) [`b1b49d8`](https://github.com/softistx/nxgt-material-vue/commit/b1b49d84d14660d2b287159d5992c413e44ecca2) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Replace Redux Toolkit slices with Pinia local stores for component chrome.
|
|
1603
|
+
|
|
1604
|
+
- [#22](https://github.com/softistx/nxgt-material-vue/pull/22) [`85c479a`](https://github.com/softistx/nxgt-material-vue/commit/85c479a97ac7529053597c04b605d908a8ad3ce9) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Autocomplete, CountryField, SelectChipField, DateRangeField, EventChip, and vee-validate wrappers.
|
|
1605
|
+
|
|
1606
|
+
- [#39](https://github.com/softistx/nxgt-material-vue/pull/39) [`d3c7f4f`](https://github.com/softistx/nxgt-material-vue/commit/d3c7f4f3b93e1744e4464f84c45d5a926d0db975) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add RichTextEditor with TipTap Vue 3, custom nodes, and a vee-validate form field.
|
|
1607
|
+
|
|
1608
|
+
- [#1](https://github.com/softistx/nxgt-material-vue/pull/1) [`b4ba98f`](https://github.com/softistx/nxgt-material-vue/commit/b4ba98fe65843ba86424d1e6845e851cd1a23ffd) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Scaffold the Vue library: Vite, shadcn-vue, Storybook, CI, and changesets.
|
|
1609
|
+
|
|
1610
|
+
- [#5](https://github.com/softistx/nxgt-material-vue/pull/5) [`9713868`](https://github.com/softistx/nxgt-material-vue/commit/9713868226f86969fbb73cb1a24010f96c9d218c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add shadcn-vue (Reka UI) primitives: button, inputs, overlays, data display.
|
|
1611
|
+
|
|
1612
|
+
- [#21](https://github.com/softistx/nxgt-material-vue/pull/21) [`16dd940`](https://github.com/softistx/nxgt-material-vue/commit/16dd940cd1016ce83b570b21aa060c7ec3319c38) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Stepper, Timeline, RelativeTime, and InlineEdit.
|
|
1613
|
+
|
|
1614
|
+
- [#34](https://github.com/softistx/nxgt-material-vue/pull/34) [`09c7160`](https://github.com/softistx/nxgt-material-vue/commit/09c7160171d09ecda94651a553b388f8a40f558e) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add TransferList dual-pane selector with Pinia chrome, drag-and-drop, and a vee-validate wrapper.
|
|
1615
|
+
|
|
1616
|
+
- [#31](https://github.com/softistx/nxgt-material-vue/pull/31) [`fba155e`](https://github.com/softistx/nxgt-material-vue/commit/fba155ebf547e4a6ac62ae45ed54f0dac5d6dffd) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add UploadField, NetworkUploadField, S3UploadField, and their vee-validate form wrappers.
|
|
1617
|
+
|
|
1618
|
+
- [#17](https://github.com/softistx/nxgt-material-vue/pull/17) [`5ac1a31`](https://github.com/softistx/nxgt-material-vue/commit/5ac1a31fab52ec8c1132f26eaf343992f80a16ba) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add PercentField, DurationField, CurrencyField, RatingField, SearchField, ColorField, and vee-validate wrappers.
|
|
1619
|
+
|
|
1620
|
+
### Patch Changes
|
|
1621
|
+
|
|
1622
|
+
- [#12](https://github.com/softistx/nxgt-material-vue/pull/12) [`349678d`](https://github.com/softistx/nxgt-material-vue/commit/349678dd607cc8953c6ece69c444555f7e98b2bf) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Require kebab-case on new nxgt files and make the code-reviewer run tsc/tests, not only reciting AGENTS.md.
|
|
1623
|
+
|
|
1624
|
+
- [#2](https://github.com/softistx/nxgt-material-vue/pull/2) [`1c547fb`](https://github.com/softistx/nxgt-material-vue/commit/1c547fbd3412adc565480e5f4fcd3684784ca010) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Vue-patched agent docs, Claude skills, and shadcn-vue MCP config.
|
|
1625
|
+
|
|
1626
|
+
- [#51](https://github.com/softistx/nxgt-material-vue/pull/51) [`2dce802`](https://github.com/softistx/nxgt-material-vue/commit/2dce802534c953ca4476586ccbf747bc8a43e271) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Keep DateField and DateRangeField pickers at 280px with 2rem day cells so the popover no longer stretches with the input.
|
|
1627
|
+
|
|
1628
|
+
- [#52](https://github.com/softistx/nxgt-material-vue/pull/52) [`817f0a7`](https://github.com/softistx/nxgt-material-vue/commit/817f0a7ee2fbbd03612254913c2b7809106fd7d5) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Give charts a real CSS height (numeric px) and load vue-sonner styles on the Toaster.
|
|
1629
|
+
|
|
1630
|
+
- [#8](https://github.com/softistx/nxgt-material-vue/pull/8) [`cf2f154`](https://github.com/softistx/nxgt-material-vue/commit/cf2f154216d939aaf635f99b840da9ce743fe7a4) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add Claude project agents (roadmap, docs, review, catalog porter, SSR audit) and ROADMAP.md.
|
|
1631
|
+
|
|
1632
|
+
- [#53](https://github.com/softistx/nxgt-material-vue/pull/53) [`2b52939`](https://github.com/softistx/nxgt-material-vue/commit/2b52939c40835b1ebda30280b330f193719d5afc) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Align CodeBlock lines to the top-left, render barcodes on canvas, match Switch to nxgt-material, and group Storybook stories by role.
|
|
1633
|
+
|
|
1634
|
+
- [#47](https://github.com/softistx/nxgt-material-vue/pull/47) [`f6842a1`](https://github.com/softistx/nxgt-material-vue/commit/f6842a1963543e6da7d3c9b3bdfec64bc1881d74) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Rebuild Autocomplete (inline chips + typeahead) and DateRangeField (single trigger + range calendar). Stretch ActionCard content so the indicator sits at the end.
|
|
1635
|
+
|
|
1636
|
+
- [#16](https://github.com/softistx/nxgt-material-vue/pull/16) [`78bc6e7`](https://github.com/softistx/nxgt-material-vue/commit/78bc6e7904b05b0cae155d4b818ab06810b18f07) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Forward InputGroupField error and disabled onto the control so the invalid ring and addon opacity apply.
|
|
1637
|
+
|
|
1638
|
+
- [#56](https://github.com/softistx/nxgt-material-vue/pull/56) [`5f8db40`](https://github.com/softistx/nxgt-material-vue/commit/5f8db40fd924173e694a03283b5c97d6ca697e86) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Point the package style export at dist/material-vue.css, the file Vite actually emits.
|
|
1639
|
+
|
|
1640
|
+
- [#6](https://github.com/softistx/nxgt-material-vue/pull/6) [`53ec953`](https://github.com/softistx/nxgt-material-vue/commit/53ec953c8beb795bd5e0ab098c337b35282276a7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Pin CI Biome to 2.5.5 and format vite.config.ts so biome ci passes.
|
|
1641
|
+
|
|
1642
|
+
- [#11](https://github.com/softistx/nxgt-material-vue/pull/11) [`3074832`](https://github.com/softistx/nxgt-material-vue/commit/3074832e34cc6e79f0f48f76d2c4613331e2b3d2) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Update ROADMAP after chrome, fields batch 1, and the remaining button family.
|
|
1643
|
+
|
|
1644
|
+
- [#54](https://github.com/softistx/nxgt-material-vue/pull/54) [`1a145ec`](https://github.com/softistx/nxgt-material-vue/commit/1a145ec8a758c19a676af3ea99a2f597ba02b8f7) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Add fill-available size utilities and stretch the split-button chevron to the control height.
|
|
1645
|
+
|
|
1646
|
+
- [#49](https://github.com/softistx/nxgt-material-vue/pull/49) [`b51ab16`](https://github.com/softistx/nxgt-material-vue/commit/b51ab162bd2aff05cca0894d06c4b0c7ca59f3bf) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Switch Storybook Vue docgen from deprecated vue-docgen-api to vue-component-meta so the preview builds.
|
|
1647
|
+
|
|
1648
|
+
- [#50](https://github.com/softistx/nxgt-material-vue/pull/50) [`1266198`](https://github.com/softistx/nxgt-material-vue/commit/1266198b4e0a006da85ad5944b30ecef555c473d) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Move Vue SFC type aliases and re-exports into .ts modules so Storybook docgen can parse every component.
|
|
1649
|
+
|
|
1650
|
+
- [#55](https://github.com/softistx/nxgt-material-vue/pull/55) [`ad0f6ba`](https://github.com/softistx/nxgt-material-vue/commit/ad0f6bafdeceef9fda202fe7367ff8d59eb9d997) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Ship code-moonlight.css next to the published stylesheet so Nuxt can resolve the relative import.
|