@nxgt/material 3.34.0 → 3.35.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (172) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +4 -4
  3. package/dist/{async-slice-C9q_eMJD.js → async-slice-BNI_F0jz.js} +2 -2
  4. package/dist/{button-CoAu_GuF.js → button-EMWOFSDB.js} +1 -1
  5. package/dist/charts.js +3 -3
  6. package/dist/{chip-Ch21Qbnj.js → chip-B6m3yagf.js} +1 -1
  7. package/dist/{code-editor-CEdEmolU.js → code-editor-BdiufnpC.js} +4 -4
  8. package/dist/code-editor.js +4 -4
  9. package/dist/{code-language-items-BNMM7YlZ.js → code-language-items-v5Rnq425.js} +2 -2
  10. package/dist/{components-BM9WHviO.js → components-jh9l5bIA.js} +16962 -14252
  11. package/dist/components.js +26 -26
  12. package/dist/{dialog-C_U4twIJ.js → dialog-Cdv9IXVo.js} +1 -1
  13. package/dist/dnd.js +1 -1
  14. package/dist/{dropdown-menu-DSgkmogX.js → dropdown-menu-CpSnRXd-.js} +1 -1
  15. package/dist/editor.js +7 -7
  16. package/dist/{empty-state-CJZ0sVE8.js → empty-state-DMr94lsF.js} +1 -1
  17. package/dist/hooks.js +2 -2
  18. package/dist/{i18n-provider-CLq-1Qgc.js → i18n-provider-A4mI4vc1.js} +1 -1
  19. package/dist/i18n.js +5 -5
  20. package/dist/{icon-badge-Dssl4rfn.js → icon-badge-BFScQnp9.js} +1 -1
  21. package/dist/lib/components/ui/collections/server-table/bulk-action-targets.d.ts +6 -5
  22. package/dist/lib/components/ui/collections/server-table/bulk-action.d.ts +6 -5
  23. package/dist/lib/components/ui/collections/server-table/partials/server-table-bulk-buttons.d.ts +6 -5
  24. package/dist/lib/components/ui/collections/server-table/selected-rows.d.ts +17 -0
  25. package/dist/lib/components/ui/collections/server-table/use-query-selection.d.ts +6 -1
  26. package/dist/lib/components/ui/collections/server-table/use-server-table-selection.d.ts +3 -1
  27. package/dist/lib/components/ui/collections/server-table/use-server-table.d.ts +1 -0
  28. package/dist/lib/components/ui/dates/picker-trigger/typed-box-compact.d.ts +12 -0
  29. package/dist/lib/components/ui/dates/picker-trigger/typed-box.d.ts +6 -2
  30. package/dist/lib/components/ui/dates/picker-trigger/typed-trigger.d.ts +3 -2
  31. package/dist/lib/components/ui/dates/time-field/index.d.ts +1 -0
  32. package/dist/lib/components/ui/dates/time-field/partials/time-field-body.d.ts +2 -1
  33. package/dist/lib/components/ui/dates/time-field/partials/time-field-entry.d.ts +1 -0
  34. package/dist/lib/components/ui/dates/time-field/partials/time-field-typed.d.ts +2 -2
  35. package/dist/lib/components/ui/dates/time-field/time-field.d.ts +6 -1
  36. package/dist/lib/components/ui/dates/time-field/time-string-field.d.ts +14 -0
  37. package/dist/lib/components/ui/fields/attributes/attribute-dialog.d.ts +3 -1
  38. package/dist/lib/components/ui/fields/attributes/attribute-form/attribute-form.d.ts +3 -1
  39. package/dist/lib/components/ui/fields/attributes/attribute-form/attribute-text-form-fields.d.ts +6 -0
  40. package/dist/lib/components/ui/fields/attributes/attribute-form/consts.d.ts +7 -6
  41. package/dist/lib/components/ui/fields/attributes/attribute-form/use-attribute-form.d.ts +44 -0
  42. package/dist/lib/components/ui/fields/attributes/attributes-editor.d.ts +22 -0
  43. package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-dialog-field.d.ts +14 -0
  44. package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-field.d.ts +14 -12
  45. package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-inline-field.d.ts +8 -0
  46. package/dist/lib/components/ui/fields/attributes/attributes-field/use-dialog-field.d.ts +15 -0
  47. package/dist/lib/components/ui/fields/attributes/attributes-form-field/attributes-form-field.d.ts +7 -1
  48. package/dist/lib/components/ui/fields/attributes/attributes-summary.d.ts +22 -0
  49. package/dist/lib/components/ui/fields/attributes/index.d.ts +3 -0
  50. package/dist/lib/components/ui/fields/attributes/logic/names.d.ts +13 -0
  51. package/dist/lib/components/ui/fields/attributes/logic/order.d.ts +15 -0
  52. package/dist/lib/components/ui/fields/attributes/logic/reorder-keys.d.ts +9 -0
  53. package/dist/lib/components/ui/fields/attributes/logic/value.d.ts +42 -0
  54. package/dist/lib/components/ui/fields/attributes/models/attribute.d.ts +5 -1
  55. package/dist/lib/components/ui/fields/attributes/partials/attribute-row.d.ts +18 -0
  56. package/dist/lib/components/ui/fields/attributes/partials/default-choices.d.ts +5 -0
  57. package/dist/lib/components/ui/fields/attributes/partials/default-field.d.ts +12 -0
  58. package/dist/lib/components/ui/fields/attributes/partials/default-inputs.d.ts +16 -0
  59. package/dist/lib/components/ui/fields/attributes/partials/editor-notes.d.ts +11 -0
  60. package/dist/lib/components/ui/fields/attributes/partials/labeled.d.ts +10 -0
  61. package/dist/lib/components/ui/fields/attributes/partials/name-field.d.ts +15 -0
  62. package/dist/lib/components/ui/fields/attributes/partials/options-field.d.ts +11 -0
  63. package/dist/lib/components/ui/fields/attributes/partials/phone-sheet.d.ts +12 -0
  64. package/dist/lib/components/ui/fields/attributes/partials/reorder-handle.d.ts +19 -0
  65. package/dist/lib/components/ui/fields/attributes/partials/row-fields.d.ts +16 -0
  66. package/dist/lib/components/ui/fields/attributes/partials/row-footer.d.ts +12 -0
  67. package/dist/lib/components/ui/fields/attributes/partials/row-head.d.ts +12 -0
  68. package/dist/lib/components/ui/fields/attributes/partials/row-panel.d.ts +15 -0
  69. package/dist/lib/components/ui/fields/attributes/partials/rows-dnd.d.ts +11 -0
  70. package/dist/lib/components/ui/fields/attributes/partials/simple-fields.d.ts +20 -0
  71. package/dist/lib/components/ui/fields/attributes/partials/summary-item.d.ts +9 -0
  72. package/dist/lib/components/ui/fields/attributes/partials/type-icon.d.ts +13 -0
  73. package/dist/lib/components/ui/fields/attributes/partials/value-text.d.ts +12 -0
  74. package/dist/lib/components/ui/fields/attributes/schema.d.ts +32 -0
  75. package/dist/lib/components/ui/fields/attributes/use-announce.d.ts +14 -0
  76. package/dist/lib/components/ui/fields/attributes/use-attribute-text.d.ts +13 -0
  77. package/dist/lib/components/ui/fields/attributes/use-attributes-editor.d.ts +34 -0
  78. package/dist/lib/components/ui/fields/attributes/use-reorder.d.ts +26 -0
  79. package/dist/lib/components/ui/fields/contacts/contacts-dialog-form-field.d.ts +9 -0
  80. package/dist/lib/components/ui/fields/contacts/contacts-editor.d.ts +29 -0
  81. package/dist/lib/components/ui/fields/contacts/contacts-form-field.d.ts +14 -1
  82. package/dist/lib/components/ui/fields/contacts/contacts-summary.d.ts +23 -0
  83. package/dist/lib/components/ui/fields/contacts/index.d.ts +3 -0
  84. package/dist/lib/components/ui/fields/contacts/logic/check-contact.d.ts +11 -0
  85. package/dist/lib/components/ui/fields/contacts/logic/contact-action.d.ts +11 -0
  86. package/dist/lib/components/ui/fields/contacts/logic/duplicates.d.ts +17 -0
  87. package/dist/lib/components/ui/fields/contacts/logic/issues.d.ts +7 -0
  88. package/dist/lib/components/ui/fields/contacts/logic/primary.d.ts +33 -0
  89. package/dist/lib/components/ui/fields/contacts/models.d.ts +7 -0
  90. package/dist/lib/components/ui/fields/contacts/partials/contact-fields.d.ts +29 -0
  91. package/dist/lib/components/ui/fields/contacts/partials/contact-links.d.ts +15 -0
  92. package/dist/lib/components/ui/fields/contacts/partials/contact-row.d.ts +14 -0
  93. package/dist/lib/components/ui/fields/contacts/partials/phone-sheet.d.ts +14 -0
  94. package/dist/lib/components/ui/fields/contacts/partials/quick-add.d.ts +12 -0
  95. package/dist/lib/components/ui/fields/contacts/partials/row-actions.d.ts +16 -0
  96. package/dist/lib/components/ui/fields/contacts/partials/summary-item.d.ts +11 -0
  97. package/dist/lib/components/ui/fields/contacts/partials/summary-row.d.ts +14 -0
  98. package/dist/lib/components/ui/fields/contacts/partials/type-group.d.ts +15 -0
  99. package/dist/lib/components/ui/fields/contacts/partials/type-icon.d.ts +12 -0
  100. package/dist/lib/components/ui/fields/contacts/partials/value-field.d.ts +25 -0
  101. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +2 -0
  102. package/dist/lib/components/ui/fields/contacts/schema.d.ts +18 -0
  103. package/dist/lib/components/ui/fields/contacts/use-contact-text.d.ts +9 -0
  104. package/dist/lib/components/ui/fields/contacts/use-contacts-editor.d.ts +33 -0
  105. package/dist/lib/components/ui/fields/inline-editor/action-tone.d.ts +2 -0
  106. package/dist/lib/components/ui/fields/inline-editor/editor-header.d.ts +19 -0
  107. package/dist/lib/components/ui/fields/inline-editor/editor-sheet.d.ts +20 -0
  108. package/dist/lib/components/ui/fields/inline-editor/empty-summary.d.ts +19 -0
  109. package/dist/lib/components/ui/fields/inline-editor/use-focus-request.d.ts +13 -0
  110. package/dist/lib/components/ui/fields/inline-editor/use-row-ids.d.ts +13 -0
  111. package/dist/lib/components/ui/fields/opening-hours/consts.d.ts +17 -3
  112. package/dist/lib/components/ui/fields/opening-hours/index.d.ts +2 -0
  113. package/dist/lib/components/ui/fields/opening-hours/logic/edit-days.d.ts +9 -0
  114. package/dist/lib/components/ui/fields/opening-hours/logic/first-day.d.ts +14 -0
  115. package/dist/lib/components/ui/fields/opening-hours/logic/format.d.ts +6 -0
  116. package/dist/lib/components/ui/fields/opening-hours/logic/group.d.ts +13 -0
  117. package/dist/lib/components/ui/fields/opening-hours/logic/range-errors.d.ts +20 -0
  118. package/dist/lib/components/ui/fields/opening-hours/logic/status.d.ts +19 -0
  119. package/dist/lib/components/ui/fields/opening-hours/logic/week.d.ts +32 -0
  120. package/dist/lib/components/ui/fields/opening-hours/logic/zoned.d.ts +10 -0
  121. package/dist/lib/components/ui/fields/opening-hours/opening-hours-dialog-form-field.d.ts +10 -0
  122. package/dist/lib/components/ui/fields/opening-hours/opening-hours-editor.d.ts +26 -0
  123. package/dist/lib/components/ui/fields/opening-hours/opening-hours-form-field.d.ts +17 -1
  124. package/dist/lib/components/ui/fields/opening-hours/opening-hours-summary.d.ts +32 -0
  125. package/dist/lib/components/ui/fields/opening-hours/partials/copy-chips.d.ts +12 -0
  126. package/dist/lib/components/ui/fields/opening-hours/partials/copy-menu.d.ts +10 -0
  127. package/dist/lib/components/ui/fields/opening-hours/partials/day-controls.d.ts +14 -0
  128. package/dist/lib/components/ui/fields/opening-hours/partials/day-row.d.ts +15 -0
  129. package/dist/lib/components/ui/fields/opening-hours/partials/day-summary-row.d.ts +15 -0
  130. package/dist/lib/components/ui/fields/opening-hours/partials/group-row.d.ts +13 -0
  131. package/dist/lib/components/ui/fields/opening-hours/partials/phone-sheet.d.ts +18 -0
  132. package/dist/lib/components/ui/fields/opening-hours/partials/range-field-props.d.ts +28 -0
  133. package/dist/lib/components/ui/fields/opening-hours/partials/range-row.d.ts +24 -0
  134. package/dist/lib/components/ui/fields/opening-hours/partials/status-pill.d.ts +13 -0
  135. package/dist/lib/components/ui/fields/opening-hours/use-first-day.d.ts +8 -0
  136. package/dist/lib/components/ui/fields/opening-hours/use-hours-editor.d.ts +26 -0
  137. package/dist/lib/components/ui/fields/opening-hours/use-hours-text.d.ts +8 -0
  138. package/dist/lib/components/ui/fields/opening-hours/use-now.d.ts +6 -0
  139. package/dist/lib/i18n/resources/en/en.d.ts +75 -0
  140. package/dist/lib/i18n/resources/en/material.json.d.ts +86 -11
  141. package/dist/lib/i18n/resources/fr/fr.d.ts +75 -0
  142. package/dist/lib/i18n/resources/fr/material.json.d.ts +86 -11
  143. package/dist/lib/i18n/resources/resources.d.ts +150 -0
  144. package/dist/lib/i18n/translator.d.ts +1 -1
  145. package/dist/lib.js +1 -1
  146. package/dist/main.js +43 -43
  147. package/dist/map.js +4 -4
  148. package/dist/material.css +1 -1
  149. package/dist/pdf-reader.js +1 -1
  150. package/dist/print.js +2 -2
  151. package/dist/{public-CX7FN97X.js → public-CYdnlHqA.js} +6 -6
  152. package/dist/{rich-code-block-cc1NZtbD.js → rich-code-block-Bwhfhu7J.js} +4 -4
  153. package/dist/{sortable-provider-D43VdFMP.js → sortable-provider-CY_YD3Ee.js} +1 -1
  154. package/dist/{spinner-wKfFAVU9.js → spinner-CKlDba5I.js} +1 -1
  155. package/dist/{stored-language-D73ujVW4.js → stored-language-CfQGHLq9.js} +176 -22
  156. package/dist/theme-picker.js +2 -2
  157. package/dist/{theme-toggle-Drab-hke.js → theme-toggle--Zcf5AM8.js} +1 -1
  158. package/dist/{toolbar-items-D7R9YtYx.js → toolbar-items-B1W-uVHS.js} +2 -2
  159. package/dist/{translate-material-CdpLjkcD.js → translate-material-xDh10aWZ.js} +2 -2
  160. package/dist/{translator-BE-yEb0p.js → translator-BbOZntEF.js} +1 -1
  161. package/dist/{use-chat-composer-CpKh8564.js → use-chat-composer-CoyqPKbt.js} +12 -12
  162. package/dist/{use-heading-spy-DgWhvYfh.js → use-heading-spy-DXYCeegh.js} +1 -1
  163. package/dist/{use-material-translation-Da9Ponn5.js → use-material-translation-BK2YYCY3.js} +2 -2
  164. package/docs/components/data-table-filter-and-lists.md +10 -3
  165. package/docs/components/date-and-time.md +9 -1
  166. package/docs/components/form-fields.md +298 -67
  167. package/docs/guides/forms.md +18 -12
  168. package/docs/guides/i18n.md +1 -1
  169. package/docs/guides/ssr.md +1 -0
  170. package/docs/previews/form-fields-contacts.webp +0 -0
  171. package/docs/previews/form-fields-openinghours.webp +0 -0
  172. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @nxgt/material
2
2
 
3
+ ## 3.35.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [#1739](https://github.com/softistx/nxgt-material/pull/1739) [`a816463`](https://github.com/softistx/nxgt-material/commit/a8164639f08a1667a804ac006e2662b355c1aa94) Thanks [@SteveGT96](https://github.com/SteveGT96)! - fix(server-table): bulk actions count and pass the selected rows across pages ([#1735](https://github.com/softistx/nxgt-material/issues/1735), a gap in [#1717](https://github.com/softistx/nxgt-material/issues/1717)). `ServerTable` keeps the row last seen for each selected id (taken when it was ticked, refreshed each time it is on screen again, dropped when deselected, cleared or on a new query), and `appliesTo`, the "Label (n)" counts and `onClick(ids, selection, rows)` use these rows whatever page is shown: 3 archived rows ticked on page 1 and 2 live ones on page 2 read "Restore (3)" and "Archive (2)". An id selected with no row ever seen does not apply to an action that has `appliesTo`. The server-rendered markup is unchanged.
8
+
9
+ ## 3.35.0
10
+
11
+ ### Minor Changes
12
+
13
+ - [#1682](https://github.com/softistx/nxgt-material/pull/1682) [`bf781c3`](https://github.com/softistx/nxgt-material/commit/bf781c3fb0d346100a5f1b8932085e971033b0cb) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `AttributesField` and `AttributesFormField` edit the attributes in place by default (`editing="inline"`, a new `AttributesEditor`): one row each with the type's icon, the label with `name · Type`, the unit and the default value (a Yes or No, a colour swatch, a number with its unit), opening to its fields (label, name, type, unit, options, the default value edited the way its type is, description) with Delete and Done, and no toast per change. A grip reorders the rows: drag it, or press Space or Enter to lift the row, the arrows to move it, Space or Enter to drop it and Escape to put it back, each step announced in a live region; a drop sets every attribute's `priority` to its place (`1` first), and the editor shows the attributes by `priority`. A name must be unique and not empty: a name another attribute has is a `role="alert"` under the field, the header counts the problems ("2 issues to fix"), and `AttributeDialog` and `AttributeForm` take `otherNames` to do the same. `AttributeForm`'s `name` no longer needs four characters. New `BOOLEAN` attribute type: a switch for its default value, in the editor, the dialog form and `AttributeValuesForm`. Below 640px each attribute is a summary row that opens a bottom sheet with the same fields. `editing="dialog"` keeps today's list and dialog, which, like `AttributesList`, the value model (`priority` is documented, nothing else is added), the `data-slot`s and the existing `material.attributes.*` keys, are unchanged; the list now shows each type's icon. New: `AttributesSummary`, a read-only display (type icons, labels and default values, in `priority` order). `AttributeValuesForm` reads a bare `yyyy-MM-dd` date as that local day. New `material.attributes.*` strings in English and French.
14
+
15
+ Upgrade note: `AttributesField` and `AttributesFormField` now edit inline by default. Pass `editing="dialog"` to keep the previous list and dialog.
16
+
17
+ - [#1645](https://github.com/softistx/nxgt-material/pull/1645) [`57ea92a`](https://github.com/softistx/nxgt-material/commit/57ea92ab57d7872f7c4d694f287098a04dddb21a) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `ContactsFormField` edits the contacts in place by default (`editing="inline"`, a new `ContactsEditor`): grouped by type, each row has its type icon, the value and an optional label, links to call (`tel:`), write (`mailto:`) or open the site, a copy button that announces "Copied", a star that makes it the primary contact of its type, and remove. "Add Contact" chips add a contact of a type. A wrong format (email, 7 to 15 digits for a number, an `http(s)` website) or a duplicate is a `role="alert"` under its value, and the header counts them ("2 issues to fix"). The optional `primary` flag on `Contact` is one per type and always shown first in its type. `variant="cards"` is a second look (tinted cards, a round tile for the primary one) that keeps the library's field radius. Below 640px each contact is a summary row that opens a bottom sheet with the same fields. `editing="dialog"` keeps today's list and dialog, which, like `Contacts`, `ContactDialog`, the value model (`primary` is an optional addition), the `data-slot`s and the existing `material.contacts.*` keys, are unchanged. New: `ContactsSummary`, a read-only display (type icons, values as call / write / open links and copy, the primary contact marked, `variant`). New `material.contacts.*` strings in English and French.
18
+
19
+ Upgrade note: `ContactsFormField` now edits inline by default. Pass `editing="dialog"` to keep the previous list and dialog.
20
+
21
+ - [#1628](https://github.com/softistx/nxgt-material/pull/1628) [`aa59601`](https://github.com/softistx/nxgt-material/commit/aa59601afc14dab15e12a9d3fc56dfddd2e8146c) Thanks [@SteveGT96](https://github.com/SteveGT96)! - `OpeningHoursFormField` edits the week in place by default (`editing="inline"`, a new `OpeningHoursEditor`): seven days, an open / closed switch and several ranges a day, a "Copy to" menu (Monday to Friday, the weekend, all days) with a "Copied to …" note, and inline errors under any range whose close is not after its open, that overlaps another, or that lacks a time, with an "N issues to fix" count. `weekStartsOn` defaults to the locale's first day. Below 640px each day is a summary row that opens a bottom sheet with the same controls and copy-to day chips. `editing="dialog"` keeps today's list and dialog, which, like `OpeningHours`, `OpeningHoursDialog`, `openingHoursSchema()`, the value model (`OpeningHour[]`, one entry per range), the `data-slot`s and the existing `material.opening-hours.*` keys, are unchanged. New: `OpeningHoursSummary`, a read-only display ("Open · closes at 6:00 PM", "Closed · opens Monday at 9:00 AM" in a tonal pill, identical consecutive days grouped, today's group tagged with the selected-row look, locale times, `now`, `timeZone` and `locale` props), and `openingHoursListSchema()`, the week's schema with the editor's cross-field rules. `TimeField` gains `size="sm"` (a 36px box with the field radius) and a new `TimeStringField` takes an `HH:mm` string. New `material.opening-hours.*` strings in English and French, and the empty copy no longer points at a button "below".
22
+
23
+ Upgrade note: `OpeningHoursFormField` now edits inline by default. Pass `editing="dialog"` to keep the previous list and dialog.
24
+
25
+ - [#1724](https://github.com/softistx/nxgt-material/pull/1724) [`b823e81`](https://github.com/softistx/nxgt-material/commit/b823e81f6ec2b20cbca33b1aab37d627eb85e044) Thanks [@SteveGT96](https://github.com/SteveGT96)! - Review fixes for the inline editors (`ContactsEditor`, `OpeningHoursEditor`, `AttributesEditor`) and their summaries.
26
+
27
+ - Two editors on one page no longer share row ids, focus keys or DOM ids. Contacts rows have stable ids too. After a remove, focus goes to the next row's value, else the type's "Add" chip (Contacts), the next range's opening time, "Add hours" or the day's switch (OpeningHours), the "Add attribute" button (Attributes). "Add hours" focuses the new range's opening time.
28
+ - A contact's wrong format is said once the field was left, like an empty value, and counted in the header only then; a duplicate stays live and counted at once.
29
+ - On a coarse pointer the editors' inputs, selects, chips and row actions are 44px targets that do not overlap.
30
+ - `openingHoursListSchema()` reports a blank time once, as `missing`. New `contactsListSchema()` (format by type, no repeated value) and `attributesListSchema()` (unique names, a default that fits the type) reuse the editors' own rules. Their messages are the English defaults of the editors' keys, and each issue carries its code in `params.code` (`'close'`, `'overlap'`, `'missing'`; `'email'`, `'phone'`, `'website'`, `'duplicate'`; `'empty'`, `'duplicate'`, `'option'`, `'boolean'`, `'number'`, `'date'`) so a form can show the translated message.
31
+ - `ContactsSummary`, `AttributesSummary` and `OpeningHoursSummary` take `empty?: ReactNode`, the node shown when there is nothing to list: a quiet "No contacts" / "No attributes" / "Hours not set" by default (new `material.contacts.labels.none` and `material.attributes.labels.none`, in English and French), your own node to replace it, or `null` for nothing.
32
+ - `openingHoursSchema()` (one entry) also accepts `''` for a time, since the list schema reports it once as `missing`.
33
+ - Hydration: an attribute's `DATE`, `DATETIME` and `TIME` instants are written in UTC on the server and in the first client render, and in the viewer's time zone and locale once mounted. The opening-hours first day of the week comes from the language alone until mounted, then from the locale's week info.
34
+ - Each editor takes `headingLevel` (`3` by default); `ContactsEditor`'s type headings sit one level below it. The OpeningHours "Copied to …" note has its own live region, so it is announced while issues are shown.
35
+ - The grip uses the library's `grip-vertical` icon.
36
+
3
37
  ## 3.34.0
4
38
 
5
39
  ### Minor Changes
package/README.md CHANGED
@@ -546,10 +546,10 @@ Not components: what the stylesheet gives any element.
546
546
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-ratingfield.webp" width="120" alt="RatingField"> | [`RatingField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#ratingfield) · `RatingFormField` | Star rating with hover preview, click-to-clear and a read-only mode. | `RatingField`, `RatingFormField` |
547
547
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-slider.webp" width="120" alt="Slider"> | [`Slider`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#slider), `SliderField` · `SliderFormField` | Labelled single or range slider with an editable value, stop dots and a value bubble. `SliderField` is an alias, Vue's name. | `Slider`, `SliderField`, `SliderFormField` |
548
548
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-switch.webp" width="120" alt="Switch"> | [`Switch`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#switch), `SwitchField` · `SwitchFormField` | Toggle switch, optionally in a labelled, bordered row. `SwitchField` is an alias, Vue's name. | `Switch`, `SwitchField`, `SwitchFormField` |
549
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-attributes.webp" width="120" alt="AttributesField"> | [`AttributesField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#attributes), `AttributesList`, `AttributeDialog`, `AttributeForm`, `AttributeValuesForm` · `AttributesFormField`, `AttributeValuesFormFieldSet`, `AttributeValueFormField` | Editor for typed custom attributes (string, number, date, select, rich text…). | `AttributesField`, `AttributesList`, `AttributeDialog`, `AttributeForm`, `AttributeValuesForm`, `AttributesFormField`, `AttributeValuesFormFieldSet`, `AttributeValueFormField` |
550
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-contacts.webp" width="120" alt="Contacts"> | [`Contacts`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#contacts), `ContactDialog` · `ContactsFormField` | Typed contact list (phone, email, URL…) with an add / edit dialog. | `Contacts`, `ContactDialog`, `ContactsFormField` |
549
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-attributes.webp" width="120" alt="AttributesField"> | [`AttributesField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#attributes), `AttributesEditor`, `AttributesSummary`, `AttributesList`, `AttributeDialog`, `AttributeForm`, `AttributeValuesForm`, `AttributesFormField`, `AttributeValuesFormFieldSet`, `AttributeValueFormField`, `attributesListSchema()` | Typed custom attributes (string, number, boolean, date, select, rich text…) edited in place: a row each with its type icon, unit and default, drag and keyboard reorder that sets `priority`, unique names, a bottom sheet on a phone, a read-only summary, and the earlier list and dialog as `editing="dialog"`. | `AttributesField`, `AttributesList`, `AttributeDialog`, `AttributeForm`, `AttributeValuesForm`, `AttributesFormField`, `AttributeValuesFormFieldSet`, `AttributeValueFormField`; `AttributesEditor`, `AttributesSummary`, `attributesListSchema()`: — (later) |
550
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-contacts.webp" width="120" alt="Contacts"> | [`Contacts`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#contacts), `ContactsEditor`, `ContactsSummary`, `ContactDialog`, `ContactsFormField`, `contactsListSchema()` | Typed contacts (phone, email, URL…) grouped by type and edited in place, with call / write / open and copy actions, format and duplicate checks, one primary per type, a cards variant and a bottom sheet on a phone, a read-only summary, and the earlier list and dialog as `editing="dialog"`. | `Contacts`, `ContactDialog`, `ContactsFormField`; `ContactsEditor`, `ContactsSummary`, `contactsListSchema()`: — (later) |
551
551
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-postaladdress.webp" width="120" alt="PostalAddress"> | [`PostalAddress`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#postaladdress), `PostalAddressDialog` · `PostalAddressFormField` | Address card with an edit dialog. | `PostalAddress`, `PostalAddressDialog`, `PostalAddressFormField` |
552
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-openinghours.webp" width="120" alt="OpeningHours"> | [`OpeningHours`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#openinghours), `OpeningHoursDialog` · `OpeningHoursFormField` | Weekly opening hours with an add / edit dialog. | `OpeningHours`, `OpeningHoursDialog`, `OpeningHoursFormField`, `openingHoursSchema()` |
552
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/form-fields-openinghours.webp" width="120" alt="OpeningHours"> | [`OpeningHours`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/form-fields.md#openinghours), `OpeningHoursEditor`, `OpeningHoursSummary`, `OpeningHoursDialog`, `OpeningHoursFormField`, `openingHoursSchema()`, `openingHoursListSchema()` | Opening hours edited in place (a switch and several ranges a day, copy to other days, inline errors; a bottom sheet on a phone), with an open-now summary and the earlier list and dialog as `editing="dialog"`. | `OpeningHours`, `OpeningHoursDialog`, `OpeningHoursFormField`, `openingHoursSchema()`; `OpeningHoursEditor`, `OpeningHoursSummary`, `openingHoursListSchema()`: — (later) |
553
553
 
554
554
  ### Date & time
555
555
 
@@ -558,7 +558,7 @@ Not components: what the stylesheet gives any element.
558
558
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-calendar.webp" width="120" alt="Calendar"> | [`Calendar`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#calendar), `CalendarDayButton` | Day-picker calendar with a year view, a today shortcut and `disablePast` / `disableFuture`. Round days, a shaped chosen day via `dayShape`, a tonal header, ranges as a connected pill. | `Calendar` (Reka parts) |
559
559
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-datefield.webp" width="120" alt="DateField"> | [`DateField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#datefield) · `DateFormField` | A date typed in segments (dd/mm/yyyy in French), with a button that opens a calendar popover (a bottom sheet on a phone), and an optional time picker (tiles, with Cancel and OK). A tonal box, a rounder popover and a hero on the phone sheet. | `DateField`, `DateFormField` |
560
560
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-daterangefield.webp" width="120" alt="DateRangeField"> | [`DateRangeField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#daterangefield) · `DateRangeFormField` | From / to range typed in segments or picked in a calendar (two months on a desktop, a bottom sheet on a phone), with presets (label and dates, the chosen one tinted with a bar) and times. A tonal box, ranges as a connected pill. | `DateRangeField`, `DateRangeFormField` |
561
- | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-timefield.webp" width="120" alt="TimeField"> | [`TimeField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#timefield) · `TimeFormField` | A time typed in segments, with a button that opens a `TimePicker` in a popover, or in a bottom sheet on a phone. A tonal box. | `TimeField`, `TimeFormField` |
561
+ | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-timefield.webp" width="120" alt="TimeField"> | [`TimeField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#timefield), `TimeStringField`, `TimeFormField` | A time typed in segments, with a button that opens a `TimePicker` in a popover, or in a bottom sheet on a phone. A tonal box; `size="sm"` is compact, `TimeStringField` takes an `HH:mm` string. | `TimeField`, `TimeFormField`; `TimeStringField`: — (later) |
562
562
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-timepicker.webp" width="120" alt="TimePicker"> | [`TimePicker`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#timepicker) | Hours and minutes as big tiles with steppers, an AM / PM pair and quick minutes (columns with `variant="columns"`), 12- or 24-hour by language. | `TimePicker` |
563
563
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-durationfield.webp" width="120" alt="DurationField"> | [`DurationField`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#durationfield) · `DurationFormField` | Hours and minutes combined into a total in minutes, typed on one line, "1 h 29 min", with one −/+ pair for the focused part (`variant="fields"` for the two number fields). | `DurationField`, `DurationFormField` |
564
564
  | <img src="https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/previews/date-time-minimonth.webp" width="120" alt="MiniMonth"> | [`MiniMonth`](https://cdn.jsdelivr.net/npm/@nxgt/material@3/docs/components/date-and-time.md#minimonth) | Compact month navigator: today ringed, a week band, event dots, a keyboard date grid. | — |
@@ -1,5 +1,5 @@
1
- import { i as e, r as t, t as n } from "./stored-language-D73ujVW4.js";
2
- import { r } from "./translator-BE-yEb0p.js";
1
+ import { i as e, r as t, t as n } from "./stored-language-CfQGHLq9.js";
2
+ import { r } from "./translator-BbOZntEF.js";
3
3
  import { t as i } from "./_baseIsEqual-C6ksIHya.js";
4
4
  import { useMemo as a } from "react";
5
5
  import { asyncThunkCreator as o, buildCreateSlice as s } from "@reduxjs/toolkit";
@@ -2,7 +2,7 @@ import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { n as t, t as n } from "./dist-DVRQkaTK.js";
3
3
  import { o as r, t as i } from "./tooltip-CkttDIab.js";
4
4
  import { t as a } from "./is-production-GLw59WU8.js";
5
- import { t as o } from "./spinner-wKfFAVU9.js";
5
+ import { t as o } from "./spinner-CKlDba5I.js";
6
6
  import { a as s, i as c, r as l, t as u } from "./button-tones-BwuVvAmd.js";
7
7
  import { t as d } from "./button-group-context-CaP0X5p_.js";
8
8
  import { t as f } from "./has-text-content-Ds2dkHX_.js";
package/dist/charts.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { t as e } from "./ui.utils-CAnKTCw5.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
- import { t as n } from "./use-material-translation-Da9Ponn5.js";
4
- import { t as r } from "./button-CoAu_GuF.js";
3
+ import { t as n } from "./use-material-translation-BK2YYCY3.js";
4
+ import { t as r } from "./button-EMWOFSDB.js";
5
5
  import { t as i } from "./use-ssr-media-query-C6M5m8sf.js";
6
6
  import { i as a, n as o, r as s, t as c } from "./util-4heV2LPI.js";
7
7
  import { t as l } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
8
8
  import { t as u } from "./warn-once-C_e47JM8.js";
9
- import { t as d } from "./chip-Ch21Qbnj.js";
9
+ import { t as d } from "./chip-B6m3yagf.js";
10
10
  import { c as f, d as p, f as m, i as h, o as g, p as _, s as v, t as y } from "./line-path-C5pZGC49.js";
11
11
  import { t as b } from "./live-status-BGPaN8r8.js";
12
12
  import { t as x } from "./linear-G97mfnKF.js";
@@ -1,6 +1,6 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { t } from "./tooltip-CkttDIab.js";
3
- import { t as n } from "./use-material-translation-Da9Ponn5.js";
3
+ import { t as n } from "./use-material-translation-BK2YYCY3.js";
4
4
  import { a as r } from "./button-tones-BwuVvAmd.js";
5
5
  import { t as i } from "./react-node-text-Crkpfpco.js";
6
6
  import { Check as a, X as o } from "lucide-react";
@@ -1,12 +1,12 @@
1
1
  import { r as e } from "./rolldown-runtime-BFFgcFxR.js";
2
2
  import { t } from "./utils-BLfntITJ.js";
3
3
  import { a as n } from "./dist-lmHmz_bu.js";
4
- import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-DSgkmogX.js";
4
+ import { c as r, d as i, f as a, n as o, t as s } from "./dropdown-menu-CpSnRXd-.js";
5
5
  import { a as c, i as l, n as u } from "./field-blur-context-Cft9s7Hg.js";
6
- import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-D7R9YtYx.js";
6
+ import { a as d, d as f, r as p, t as m, u as h } from "./toolbar-items-B1W-uVHS.js";
7
7
  import { t as g } from "./is-production-GLw59WU8.js";
8
- import { t as _ } from "./use-material-translation-Da9Ponn5.js";
9
- import { i as v, n as y, o as b, t as x } from "./code-language-items-BNMM7YlZ.js";
8
+ import { t as _ } from "./use-material-translation-BK2YYCY3.js";
9
+ import { i as v, n as y, o as b, t as x } from "./code-language-items-v5Rnq425.js";
10
10
  import { t as S } from "./useIsomorphicLayoutEffect-DfgAhWcH.js";
11
11
  import { n as C, t as w } from "./escape-owner-C4W_sOAU.js";
12
12
  import { t as T } from "./skeleton-DSdtr2qc.js";
@@ -1,14 +1,14 @@
1
1
  import { t as e } from "./utils-BLfntITJ.js";
2
2
  import { a as t } from "./dist-lmHmz_bu.js";
3
- import { d as n, r, t as i, u as a } from "./toolbar-items-D7R9YtYx.js";
4
- import { t as o } from "./use-material-translation-Da9Ponn5.js";
5
- import { i as s, n as c, o as l } from "./code-language-items-BNMM7YlZ.js";
3
+ import { d as n, r, t as i, u as a } from "./toolbar-items-B1W-uVHS.js";
4
+ import { t as o } from "./use-material-translation-BK2YYCY3.js";
5
+ import { i as s, n as c, o as l } from "./code-language-items-v5Rnq425.js";
6
6
  import { r as u, t as d } from "./field-blur-CJHzVSh9.js";
7
7
  import { t as f } from "./skeleton-DSdtr2qc.js";
8
8
  import { t as p } from "./live-status-BGPaN8r8.js";
9
9
  import { t as m } from "./use-mobile-BDro060N.js";
10
10
  import { t as h } from "./react-node-text-Crkpfpco.js";
11
- import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-CEdEmolU.js";
11
+ import { a as g, c as _, d as v, f as y, i as b, l as x, m as S, o as C, p as w, r as T, s as E, t as D, u as O } from "./code-editor-BdiufnpC.js";
12
12
  import { ChevronDown as k, ChevronUp as A, Columns2 as j } from "lucide-react";
13
13
  import { useEffect as M, useRef as N, useState as P } from "react";
14
14
  import { Fragment as F, jsx as I, jsxs as L } from "react/jsx-runtime";
@@ -1,5 +1,5 @@
1
- import { d as e, f as t } from "./dropdown-menu-DSgkmogX.js";
2
- import { t as n } from "./use-material-translation-Da9Ponn5.js";
1
+ import { d as e, f as t } from "./dropdown-menu-CpSnRXd-.js";
2
+ import { t as n } from "./use-material-translation-BK2YYCY3.js";
3
3
  import { t as r } from "./live-status-BGPaN8r8.js";
4
4
  import { useEffect as i, useRef as a, useState as o } from "react";
5
5
  import { jsx as s } from "react/jsx-runtime";