@nxgt/material 3.34.0 → 3.35.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/CHANGELOG.md +28 -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-C9Zz2dir.js} +18597 -15903
  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/dates/picker-trigger/typed-box-compact.d.ts +12 -0
  22. package/dist/lib/components/ui/dates/picker-trigger/typed-box.d.ts +6 -2
  23. package/dist/lib/components/ui/dates/picker-trigger/typed-trigger.d.ts +3 -2
  24. package/dist/lib/components/ui/dates/time-field/index.d.ts +1 -0
  25. package/dist/lib/components/ui/dates/time-field/partials/time-field-body.d.ts +2 -1
  26. package/dist/lib/components/ui/dates/time-field/partials/time-field-entry.d.ts +1 -0
  27. package/dist/lib/components/ui/dates/time-field/partials/time-field-typed.d.ts +2 -2
  28. package/dist/lib/components/ui/dates/time-field/time-field.d.ts +6 -1
  29. package/dist/lib/components/ui/dates/time-field/time-string-field.d.ts +14 -0
  30. package/dist/lib/components/ui/fields/attributes/attribute-dialog.d.ts +3 -1
  31. package/dist/lib/components/ui/fields/attributes/attribute-form/attribute-form.d.ts +3 -1
  32. package/dist/lib/components/ui/fields/attributes/attribute-form/attribute-text-form-fields.d.ts +6 -0
  33. package/dist/lib/components/ui/fields/attributes/attribute-form/consts.d.ts +7 -6
  34. package/dist/lib/components/ui/fields/attributes/attribute-form/use-attribute-form.d.ts +44 -0
  35. package/dist/lib/components/ui/fields/attributes/attributes-editor.d.ts +22 -0
  36. package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-dialog-field.d.ts +14 -0
  37. package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-field.d.ts +14 -12
  38. package/dist/lib/components/ui/fields/attributes/attributes-field/attributes-inline-field.d.ts +8 -0
  39. package/dist/lib/components/ui/fields/attributes/attributes-field/use-dialog-field.d.ts +15 -0
  40. package/dist/lib/components/ui/fields/attributes/attributes-form-field/attributes-form-field.d.ts +7 -1
  41. package/dist/lib/components/ui/fields/attributes/attributes-summary.d.ts +22 -0
  42. package/dist/lib/components/ui/fields/attributes/index.d.ts +3 -0
  43. package/dist/lib/components/ui/fields/attributes/logic/names.d.ts +13 -0
  44. package/dist/lib/components/ui/fields/attributes/logic/order.d.ts +15 -0
  45. package/dist/lib/components/ui/fields/attributes/logic/reorder-keys.d.ts +9 -0
  46. package/dist/lib/components/ui/fields/attributes/logic/value.d.ts +42 -0
  47. package/dist/lib/components/ui/fields/attributes/models/attribute.d.ts +5 -1
  48. package/dist/lib/components/ui/fields/attributes/partials/attribute-row.d.ts +18 -0
  49. package/dist/lib/components/ui/fields/attributes/partials/default-choices.d.ts +5 -0
  50. package/dist/lib/components/ui/fields/attributes/partials/default-field.d.ts +12 -0
  51. package/dist/lib/components/ui/fields/attributes/partials/default-inputs.d.ts +16 -0
  52. package/dist/lib/components/ui/fields/attributes/partials/editor-notes.d.ts +11 -0
  53. package/dist/lib/components/ui/fields/attributes/partials/labeled.d.ts +10 -0
  54. package/dist/lib/components/ui/fields/attributes/partials/name-field.d.ts +15 -0
  55. package/dist/lib/components/ui/fields/attributes/partials/options-field.d.ts +11 -0
  56. package/dist/lib/components/ui/fields/attributes/partials/phone-sheet.d.ts +12 -0
  57. package/dist/lib/components/ui/fields/attributes/partials/reorder-handle.d.ts +19 -0
  58. package/dist/lib/components/ui/fields/attributes/partials/row-fields.d.ts +16 -0
  59. package/dist/lib/components/ui/fields/attributes/partials/row-footer.d.ts +12 -0
  60. package/dist/lib/components/ui/fields/attributes/partials/row-head.d.ts +12 -0
  61. package/dist/lib/components/ui/fields/attributes/partials/row-panel.d.ts +15 -0
  62. package/dist/lib/components/ui/fields/attributes/partials/rows-dnd.d.ts +11 -0
  63. package/dist/lib/components/ui/fields/attributes/partials/simple-fields.d.ts +20 -0
  64. package/dist/lib/components/ui/fields/attributes/partials/summary-item.d.ts +9 -0
  65. package/dist/lib/components/ui/fields/attributes/partials/type-icon.d.ts +13 -0
  66. package/dist/lib/components/ui/fields/attributes/partials/value-text.d.ts +12 -0
  67. package/dist/lib/components/ui/fields/attributes/schema.d.ts +32 -0
  68. package/dist/lib/components/ui/fields/attributes/use-announce.d.ts +14 -0
  69. package/dist/lib/components/ui/fields/attributes/use-attribute-text.d.ts +13 -0
  70. package/dist/lib/components/ui/fields/attributes/use-attributes-editor.d.ts +34 -0
  71. package/dist/lib/components/ui/fields/attributes/use-reorder.d.ts +26 -0
  72. package/dist/lib/components/ui/fields/contacts/contacts-dialog-form-field.d.ts +9 -0
  73. package/dist/lib/components/ui/fields/contacts/contacts-editor.d.ts +29 -0
  74. package/dist/lib/components/ui/fields/contacts/contacts-form-field.d.ts +14 -1
  75. package/dist/lib/components/ui/fields/contacts/contacts-summary.d.ts +23 -0
  76. package/dist/lib/components/ui/fields/contacts/index.d.ts +3 -0
  77. package/dist/lib/components/ui/fields/contacts/logic/check-contact.d.ts +11 -0
  78. package/dist/lib/components/ui/fields/contacts/logic/contact-action.d.ts +11 -0
  79. package/dist/lib/components/ui/fields/contacts/logic/duplicates.d.ts +17 -0
  80. package/dist/lib/components/ui/fields/contacts/logic/issues.d.ts +7 -0
  81. package/dist/lib/components/ui/fields/contacts/logic/primary.d.ts +33 -0
  82. package/dist/lib/components/ui/fields/contacts/models.d.ts +7 -0
  83. package/dist/lib/components/ui/fields/contacts/partials/contact-fields.d.ts +29 -0
  84. package/dist/lib/components/ui/fields/contacts/partials/contact-links.d.ts +15 -0
  85. package/dist/lib/components/ui/fields/contacts/partials/contact-row.d.ts +14 -0
  86. package/dist/lib/components/ui/fields/contacts/partials/phone-sheet.d.ts +14 -0
  87. package/dist/lib/components/ui/fields/contacts/partials/quick-add.d.ts +12 -0
  88. package/dist/lib/components/ui/fields/contacts/partials/row-actions.d.ts +16 -0
  89. package/dist/lib/components/ui/fields/contacts/partials/summary-item.d.ts +11 -0
  90. package/dist/lib/components/ui/fields/contacts/partials/summary-row.d.ts +14 -0
  91. package/dist/lib/components/ui/fields/contacts/partials/type-group.d.ts +15 -0
  92. package/dist/lib/components/ui/fields/contacts/partials/type-icon.d.ts +12 -0
  93. package/dist/lib/components/ui/fields/contacts/partials/value-field.d.ts +25 -0
  94. package/dist/lib/components/ui/fields/contacts/placeholders.d.ts +2 -0
  95. package/dist/lib/components/ui/fields/contacts/schema.d.ts +18 -0
  96. package/dist/lib/components/ui/fields/contacts/use-contact-text.d.ts +9 -0
  97. package/dist/lib/components/ui/fields/contacts/use-contacts-editor.d.ts +33 -0
  98. package/dist/lib/components/ui/fields/inline-editor/action-tone.d.ts +2 -0
  99. package/dist/lib/components/ui/fields/inline-editor/editor-header.d.ts +19 -0
  100. package/dist/lib/components/ui/fields/inline-editor/editor-sheet.d.ts +20 -0
  101. package/dist/lib/components/ui/fields/inline-editor/empty-summary.d.ts +19 -0
  102. package/dist/lib/components/ui/fields/inline-editor/use-focus-request.d.ts +13 -0
  103. package/dist/lib/components/ui/fields/inline-editor/use-row-ids.d.ts +13 -0
  104. package/dist/lib/components/ui/fields/opening-hours/consts.d.ts +17 -3
  105. package/dist/lib/components/ui/fields/opening-hours/index.d.ts +2 -0
  106. package/dist/lib/components/ui/fields/opening-hours/logic/edit-days.d.ts +9 -0
  107. package/dist/lib/components/ui/fields/opening-hours/logic/first-day.d.ts +14 -0
  108. package/dist/lib/components/ui/fields/opening-hours/logic/format.d.ts +6 -0
  109. package/dist/lib/components/ui/fields/opening-hours/logic/group.d.ts +13 -0
  110. package/dist/lib/components/ui/fields/opening-hours/logic/range-errors.d.ts +20 -0
  111. package/dist/lib/components/ui/fields/opening-hours/logic/status.d.ts +19 -0
  112. package/dist/lib/components/ui/fields/opening-hours/logic/week.d.ts +32 -0
  113. package/dist/lib/components/ui/fields/opening-hours/logic/zoned.d.ts +10 -0
  114. package/dist/lib/components/ui/fields/opening-hours/opening-hours-dialog-form-field.d.ts +10 -0
  115. package/dist/lib/components/ui/fields/opening-hours/opening-hours-editor.d.ts +26 -0
  116. package/dist/lib/components/ui/fields/opening-hours/opening-hours-form-field.d.ts +17 -1
  117. package/dist/lib/components/ui/fields/opening-hours/opening-hours-summary.d.ts +32 -0
  118. package/dist/lib/components/ui/fields/opening-hours/partials/copy-chips.d.ts +12 -0
  119. package/dist/lib/components/ui/fields/opening-hours/partials/copy-menu.d.ts +10 -0
  120. package/dist/lib/components/ui/fields/opening-hours/partials/day-controls.d.ts +14 -0
  121. package/dist/lib/components/ui/fields/opening-hours/partials/day-row.d.ts +15 -0
  122. package/dist/lib/components/ui/fields/opening-hours/partials/day-summary-row.d.ts +15 -0
  123. package/dist/lib/components/ui/fields/opening-hours/partials/group-row.d.ts +13 -0
  124. package/dist/lib/components/ui/fields/opening-hours/partials/phone-sheet.d.ts +18 -0
  125. package/dist/lib/components/ui/fields/opening-hours/partials/range-field-props.d.ts +28 -0
  126. package/dist/lib/components/ui/fields/opening-hours/partials/range-row.d.ts +24 -0
  127. package/dist/lib/components/ui/fields/opening-hours/partials/status-pill.d.ts +13 -0
  128. package/dist/lib/components/ui/fields/opening-hours/use-first-day.d.ts +8 -0
  129. package/dist/lib/components/ui/fields/opening-hours/use-hours-editor.d.ts +26 -0
  130. package/dist/lib/components/ui/fields/opening-hours/use-hours-text.d.ts +8 -0
  131. package/dist/lib/components/ui/fields/opening-hours/use-now.d.ts +6 -0
  132. package/dist/lib/i18n/resources/en/en.d.ts +75 -0
  133. package/dist/lib/i18n/resources/en/material.json.d.ts +86 -11
  134. package/dist/lib/i18n/resources/fr/fr.d.ts +75 -0
  135. package/dist/lib/i18n/resources/fr/material.json.d.ts +86 -11
  136. package/dist/lib/i18n/resources/resources.d.ts +150 -0
  137. package/dist/lib/i18n/translator.d.ts +1 -1
  138. package/dist/lib.js +1 -1
  139. package/dist/main.js +43 -43
  140. package/dist/map.js +4 -4
  141. package/dist/material.css +1 -1
  142. package/dist/pdf-reader.js +1 -1
  143. package/dist/print.js +2 -2
  144. package/dist/{public-CX7FN97X.js → public-CYdnlHqA.js} +6 -6
  145. package/dist/{rich-code-block-cc1NZtbD.js → rich-code-block-Bwhfhu7J.js} +4 -4
  146. package/dist/{sortable-provider-D43VdFMP.js → sortable-provider-CY_YD3Ee.js} +1 -1
  147. package/dist/{spinner-wKfFAVU9.js → spinner-CKlDba5I.js} +1 -1
  148. package/dist/{stored-language-D73ujVW4.js → stored-language-CfQGHLq9.js} +176 -22
  149. package/dist/theme-picker.js +2 -2
  150. package/dist/{theme-toggle-Drab-hke.js → theme-toggle--Zcf5AM8.js} +1 -1
  151. package/dist/{toolbar-items-D7R9YtYx.js → toolbar-items-B1W-uVHS.js} +2 -2
  152. package/dist/{translate-material-CdpLjkcD.js → translate-material-xDh10aWZ.js} +2 -2
  153. package/dist/{translator-BE-yEb0p.js → translator-BbOZntEF.js} +1 -1
  154. package/dist/{use-chat-composer-CpKh8564.js → use-chat-composer-CoyqPKbt.js} +12 -12
  155. package/dist/{use-heading-spy-DgWhvYfh.js → use-heading-spy-DXYCeegh.js} +1 -1
  156. package/dist/{use-material-translation-Da9Ponn5.js → use-material-translation-BK2YYCY3.js} +2 -2
  157. package/docs/components/date-and-time.md +9 -1
  158. package/docs/components/form-fields.md +298 -67
  159. package/docs/guides/forms.md +18 -12
  160. package/docs/guides/i18n.md +1 -1
  161. package/docs/guides/ssr.md +1 -0
  162. package/docs/previews/form-fields-contacts.webp +0 -0
  163. package/docs/previews/form-fields-openinghours.webp +0 -0
  164. package/package.json +1 -1
@@ -0,0 +1,2 @@
1
+ /** The i18n key and English fallback of the example a value field shows. */
2
+ export declare function contactPlaceholder(type: string): readonly ["material.scroll-progress" | "material.skip-link" | "material.see-also" | "material.filter.title" | "material.filter.max" | "material.filter.min" | "material.filter.trigger" | "material.filter.active-count" | "material.filter.apply" | "material.filter.reset" | "material.filter.clear-all" | "material.filter.empty" | "material.filter.more" | "material.filter.number.hint" | "material.filter.number.min-label" | "material.filter.number.max-label" | "material.filter.number.error.max" | "material.filter.number.error.min" | "material.filter.number.error.between" | "material.filter.number.error.reversed" | "material.filter.error.label" | "material.filter.error.announce" | "material.filter.error.tag" | "material.filter.default.label" | "material.filter.default.hint" | "material.filter.default.tag" | "material.filter.default.change" | "material.filter.summary.yes" | "material.filter.summary.no" | "material.filter.summary.quoted" | "material.filter.summary.range-and" | "material.filter.summary.range-dash" | "material.filter.summary.range-from" | "material.filter.summary.range-since" | "material.filter.summary.range-to" | "material.filter.summary.range-until" | "material.filter.summary.label-pending" | "material.filter.time.from" | "material.filter.time.to" | "material.filter.time.pick" | "material.filter.date.pick-day" | "material.filter.date.pick-range" | "material.filter.value.yes" | "material.filter.value.no" | "material.filter.value.from" | "material.filter.value.until" | "material.filter.value.up-to" | "material.filter.presets.description" | "material.filter.presets.name" | "material.filter.presets.load" | "material.filter.presets.saved" | "material.filter.presets.manage" | "material.filter.presets.set-default" | "material.filter.presets.unset-default" | "material.filter.presets.delete" | "material.filter.presets.create" | "material.filter.presets.limit" | "material.filter.presets.dialog-title" | "material.filter.presets.dialog-description" | "material.filter.presets.name-placeholder" | "material.filter.presets.usage" | "material.filter.presets.description-placeholder" | "material.filter.presets.cancel" | "material.filter.presets.submit" | "material.filter.bar.label" | "material.filter.bar.field" | "material.filter.bar.search" | "material.filter.bar.done" | "material.filter.bar.active" | "material.filter.bar.operator" | "material.filter.bar.chip" | "material.filter.bar.search-min" | "material.filter.bar.locked" | "material.filter.bar.locked-reason" | "material.filter.bar.chip-plain" | "material.filter.bar.remove" | "material.filter.bar.quick-active" | "material.filter.bar.add" | "material.filter.bar.shortcut" | "material.filter.bar.quick" | "material.filter.bar.field-placeholder" | "material.filter.bar.no-field" | "material.filter.bar.operator-placeholder" | "material.filter.bar.no-operator" | "material.filter.bar.back" | "material.filter.bar.done-blocked" | "material.filter.bar.live" | "material.filter.bar.no-value" | "material.filter.sheet.title" | "material.filter.sheet.show" | "material.filter.sheet.locked" | "material.filter.sheet.show-count" | "material.filter.facets.apply" | "material.filter.facets.reset" | "material.filter.facets.show-more" | "material.filter.facets.show-less" | "material.filter.facets.pending" | "material.filter.announce.results" | "material.filter.announce.cleared" | "material.filter.announce.cleared-count" | "material.filter.announce.added" | "material.filter.announce.added-count" | "material.filter.op.is.label" | "material.filter.op.is.chip" | "material.filter.op.in.label" | "material.filter.op.in.chip" | "material.filter.op.in.chip-many" | "material.filter.op.between.label" | "material.filter.op.between.chip" | "material.filter.op.before.label" | "material.filter.op.before.chip" | "material.filter.op.after.label" | "material.filter.op.after.chip" | "material.filter.op.contains.label" | "material.filter.op.contains.chip" | "material.filter.op.empty.label" | "material.filter.op.empty.chip" | "material.filter.op.is_not.label" | "material.filter.op.is_not.chip" | "material.filter.op.is_not.chip-many" | "material.filter.op.gt.label" | "material.filter.op.gt.chip" | "material.filter.op.lt.label" | "material.filter.op.lt.chip" | "material.filter.op.gte.label" | "material.filter.op.gte.chip" | "material.filter.op.lte.label" | "material.filter.op.lte.chip" | "material.filter.date-preset.today" | "material.filter.date-preset.yesterday" | "material.filter.date-preset.this-week" | "material.filter.date-preset.last-7-days" | "material.filter.date-preset.last-30-days" | "material.filter.date-preset.this-month" | "material.filter.date-preset.last-month" | "material.filter.date-preset.this-year" | "material.filter.date-preset.this-school-year" | "material.map.you-are-here" | "material.map.zoom-in" | "material.map.zoom-out" | "material.map.my-position" | "material.map.preview" | "material.map.preview-named" | "material.code.position" | "material.code.find" | "material.code.view" | "material.code.copy" | "material.code.format" | "material.code.language" | "material.code.copied" | "material.code.word-wrap" | "material.code.load-failed" | "material.code.tools" | "material.code.more-tools" | "material.code.copy-failed" | "material.code.errors" | "material.code.warnings" | "material.code.problem-at" | "material.code.read-only" | "material.code.lines" | "material.code.files" | "material.code.unsaved" | "material.code.fullscreen" | "material.code.diff-tools" | "material.code.side-by-side" | "material.code.changes" | "material.code.previous-change" | "material.code.next-change" | "material.code.diff-totals" | "material.code.no-changes" | "material.code.change-count" | "material.code.change-of" | "material.code.plain-text" | "material.code.file-name" | "material.code.opening" | "material.code.original" | "material.code.original-of" | "material.code.modified" | "material.code.modified-of" | "material.code.open-in-editor" | "material.code.file-of" | "material.code.language-is" | "material.pagination.label" | "material.pagination.next" | "material.pagination.previous" | "material.table.loading" | "material.table.pagination.label" | "material.table.pagination.next" | "material.table.pagination.previous" | "material.table.pagination.previous-page" | "material.table.pagination.next-page" | "material.table.pagination.go-to-next-page" | "material.table.pagination.go-to-previous-page" | "material.table.pagination.go-to-first-page" | "material.table.pagination.go-to-last-page" | "material.table.pagination.rows-per-page" | "material.table.pagination.rows-selected" | "material.table.pagination.page-of" | "material.table.pagination.range" | "material.table.pagination.range-open" | "material.table.pagination.range-label" | "material.table.pagination.total" | "material.table.pagination.selected" | "material.table.labels.sort" | "material.table.labels.desc" | "material.table.labels.view" | "material.table.labels.hide" | "material.table.labels.ascending" | "material.table.labels.descending" | "material.table.labels.asc" | "material.table.labels.actions" | "material.table.labels.delete-selected-rows" | "material.table.labels.toggle-columns" | "material.table.labels.no-data" | "material.table.labels.no-results" | "material.table.labels.no-results-description" | "material.table.labels.select-all" | "material.table.labels.select-row" | "material.table.labels.toggle-row" | "material.table.labels.expand" | "material.table.labels.scroll-region" | "material.table.labels.scroll-list" | "material.table.labels.clear-selection" | "material.table.labels.select-page" | "material.table.labels.select-item" | "material.table.labels.sort-by" | "material.table.delete-confirm.title" | "material.table.delete-confirm.description" | "material.table.delete-confirm.cancel" | "material.table.delete-confirm.confirm" | "material.banner.dismiss" | "material.combobox.clear" | "material.combobox.toggle" | "material.slider.value" | "material.slider.minimum" | "material.slider.maximum" | "material.toolbar.more" | "material.toolbar.back" | "material.tree.label" | "material.tree.expand" | "material.tree.collapse" | "material.copy.copy" | "material.copy.copied" | "material.copy.failed" | "material.buttons.cancel" | "material.buttons.add" | "material.buttons.save" | "material.attributes.form.label.label" | "material.attributes.form.label.placeholder" | "material.attributes.form.description.label" | "material.attributes.form.description.placeholder" | "material.attributes.form.name.label" | "material.attributes.form.name.placeholder" | "material.attributes.form.type.label" | "material.attributes.form.type.placeholder" | "material.attributes.form.default-value.label" | "material.attributes.form.default-value.placeholder" | "material.attributes.form.priority.label" | "material.attributes.form.priority.placeholder" | "material.attributes.form.options.label" | "material.attributes.form.options.placeholder" | "material.attributes.form.unit.label" | "material.attributes.form.unit.placeholder" | "material.attributes.buttons.details" | "material.attributes.buttons.done" | "material.attributes.buttons.cancel" | "material.attributes.buttons.remove" | "material.attributes.buttons.add" | "material.attributes.buttons.edit" | "material.attributes.buttons.save" | "material.attributes.buttons.add-option" | "material.attributes.buttons.remove-row" | "material.attributes.buttons.edit-row" | "material.attributes.buttons.reorder" | "material.attributes.announce.move" | "material.attributes.announce.cancel" | "material.attributes.announce.lift" | "material.attributes.announce.drop" | "material.attributes.errors.empty" | "material.attributes.errors.duplicate" | "material.attributes.errors.issues" | "material.attributes.labels.default" | "material.attributes.labels.none" | "material.attributes.labels.yes" | "material.attributes.labels.no" | "material.attributes.labels.hint" | "material.attributes.labels.attributes" | "material.attributes.labels.new-attribute" | "material.attributes.labels.untitled" | "material.attributes.messages.dialog" | "material.attributes.messages.empty" | "material.attributes.messages.sheet" | "material.attributes.messages.create-succeeded" | "material.attributes.messages.update-succeeded" | "material.attributes.messages.delete-succeeded" | "material.attributes.messages.add-first" | "material.attributes.types.string" | "material.attributes.types.number" | "material.attributes.types.boolean" | "material.attributes.types.select" | "material.attributes.types.color" | "material.attributes.types.text" | "material.attributes.types.time" | "material.attributes.types.date" | "material.attributes.types.datetime" | "material.attributes.types.multi-select" | "material.attributes.types.rich-text" | "material.attributes.fields.label" | "material.attributes.fields.description" | "material.attributes.fields.name" | "material.attributes.fields.type" | "material.attributes.fields.default-value" | "material.attributes.fields.priority" | "material.attributes.fields.options" | "material.attributes.fields.unit" | "material.emoji.search" | "material.emoji.empty" | "material.emoji.pick" | "material.emoji.picker" | "material.emoji.groups.all" | "material.emoji.groups.recent" | "material.emoji.groups.general" | "material.emoji.groups.people_body" | "material.emoji.groups.components" | "material.emoji.groups.animals_nature" | "material.emoji.groups.food_drink" | "material.emoji.groups.travel_places" | "material.emoji.groups.activities" | "material.emoji.groups.objects" | "material.emoji.groups.symbols" | "material.emoji.groups.flags" | "material.carousel.position" | "material.carousel.next" | "material.carousel.previous" | "material.carousel.slide" | "material.carousel.roledescription" | "material.carousel.autoplay.play" | "material.carousel.autoplay.pause" | "material.carousel.indicators.label" | "material.carousel.indicators.go-to" | "material.pagination.page" | "material.pagination.more" | "material.pagination.first" | "material.pagination.last" | "material.breadcrumb.label" | "material.breadcrumb.more" | "material.empty-state.search.title" | "material.empty-state.search.description" | "material.empty-state.empty.title" | "material.empty-state.empty.description" | "material.empty-state.not-found.title" | "material.empty-state.not-found.description" | "material.empty-state.unauthorized.title" | "material.empty-state.unauthorized.description" | "material.empty-state.generic.title" | "material.empty-state.generic.description" | "material.empty-state.offline.title" | "material.empty-state.offline.description" | "material.empty-state.maintenance.title" | "material.empty-state.maintenance.description" | "material.error-state.details" | "material.error-state.generic.title" | "material.error-state.generic.description" | "material.error-state.offline.title" | "material.error-state.offline.description" | "material.error-state.maintenance.title" | "material.error-state.maintenance.description" | "material.error-state.retry" | "material.error-state.details-name" | "material.error-state.details-message" | "material.error-state.details-cause" | "material.command.title" | "material.command.list" | "material.command.description" | "material.command.empty" | "material.confirm-dialog.cancel" | "material.confirm-dialog.confirm" | "material.confirm-dialog.failed" | "material.confirm-dialog.processing" | "material.confirm-dialog.form-failed" | "material.mentions.empty" | "material.cards.vs" | "material.cards.total" | "material.cards.per-month" | "material.cards.rating" | "material.cards.unread" | "material.metrics.of-target" | "material.metrics.of-limit" | "material.metrics.this-period" | "material.metrics.last-period" | "material.metrics.weekdays" | "material.pager.next" | "material.pager.previous" | "material.toc.on-this-page" | "material.upload.remove" | "material.upload.failed" | "material.upload.retry" | "material.upload.replace-named" | "material.upload.invalid-type" | "material.upload.too-large" | "material.upload.max-files" | "material.upload.dropzone.max-files" | "material.upload.dropzone.idle" | "material.upload.dropzone.at-capacity" | "material.upload.dropzone.max-size" | "material.upload.dropzone.files-selected" | "material.image-field.replace" | "material.image-field.remove" | "material.image-field.retry" | "material.image-field.choose" | "material.language.fr" | "material.language.en" | "material.buttons.delete" | "material.buttons.load-more" | "material.buttons.ok" | "material.buttons.close" | "material.json-viewer.items" | "material.json-viewer.empty" | "material.json-viewer.expand" | "material.json-viewer.collapse" | "material.json-viewer.invalid" | "material.chat.send" | "material.chat.copy" | "material.chat.scroll-to-latest" | "material.chat.empty" | "material.chat.back" | "material.chat.placeholder" | "material.chat.retry" | "material.chat.attach" | "material.chat.remove-attachment" | "material.chat.add-reaction" | "material.chat.attachment-type" | "material.chat.attachment-max-files" | "material.chat.attachment-max-size" | "material.chat.message" | "material.chat.typing" | "material.chat.empty-description" | "material.chat.pick-conversation" | "material.chat.pick-conversation-description" | "material.chat.send-failed" | "material.chat.status.edited" | "material.chat.status.unread" | "material.chat.status.sending" | "material.chat.status.delivered" | "material.chat.status.read" | "material.chat.actions.label" | "material.chat.actions.more" | "material.chat.actions.delete" | "material.chat.actions.react" | "material.chat.actions.reply" | "material.chat.actions.show-original" | "material.chat.composer.stop" | "material.chat.composer.suggestions" | "material.chat.composer.replying-to" | "material.chat.composer.cancel-reply" | "material.chat.thread.log" | "material.chat.widget.open" | "material.chat.widget.close" | "material.gallery.label" | "material.gallery.select" | "material.gallery.repeat" | "material.gallery.next" | "material.gallery.previous" | "material.gallery.open" | "material.gallery.empty" | "material.gallery.more" | "material.gallery.delete" | "material.gallery.zoom-in" | "material.gallery.zoom-out" | "material.gallery.selected" | "material.gallery.clear-selection" | "material.gallery.play" | "material.gallery.close" | "material.gallery.empty-description" | "material.gallery.of" | "material.gallery.repeat-off" | "material.gallery.download" | "material.gallery.viewer.filmstrip" | "material.gallery.viewer.zoom-level" | "material.gallery.viewer.dismiss-hint" | "material.notifications.label" | "material.notifications.error" | "material.notifications.search" | "material.notifications.empty" | "material.notifications.loading" | "material.notifications.dismiss" | "material.notifications.load-more" | "material.notifications.close" | "material.notifications.empty-description" | "material.notifications.label-unread" | "material.notifications.empty-unread" | "material.notifications.empty-unread-description" | "material.notifications.read-all" | "material.notifications.filter-all" | "material.notifications.filter-unread" | "material.notifications.filter-category-all" | "material.notifications.dismiss-item" | "material.notifications.new-count" | "material.notifications.error-hint" | "material.notifications.filters" | "material.notifications.topics" | "material.education.true" | "material.education.false" | "material.education.progress" | "material.education.results" | "material.education.next" | "material.education.previous" | "material.education.answered" | "material.education.quiz" | "material.education.empty" | "material.education.submit" | "material.education.retry" | "material.education.answer-placeholder" | "material.education.expected" | "material.education.score" | "material.education.review" | "material.education.kind-choice" | "material.education.kind-multi" | "material.education.kind-boolean" | "material.education.kind-text" | "material.quiz.hint" | "material.quiz.correct" | "material.quiz.incorrect" | "material.quiz.count" | "material.quiz.question-number" | "material.quiz.kind-number" | "material.quiz.number-placeholder" | "material.quiz.check" | "material.quiz.see-results" | "material.quiz.show-hint" | "material.quiz.hide-hint" | "material.quiz.unanswered" | "material.quiz.correct-answer" | "material.quiz.your-answer" | "material.quiz.streak" | "material.quiz.to-answer" | "material.quiz.to-continue" | "material.quiz.time-limit" | "material.quiz.timed-out" | "material.quiz.perfect" | "material.quiz.great" | "material.quiz.passed" | "material.quiz.keep-going" | "material.quiz.stat-correct" | "material.quiz.stat-incorrect" | "material.quiz.stat-skipped" | "material.quiz.stat-streak" | "material.quiz.breakdown" | "material.quiz.retry-wrong" | "material.quiz.retrying" | "material.step-dots.label" | "material.step-dots.done" | "material.step-dots.step" | "material.step-dots.current" | "material.step-dots.correct" | "material.step-dots.incorrect" | "material.step-dots.flagged" | "material.countdown-timer.label" | "material.countdown-timer.left" | "material.countdown-timer.expired" | "material.option-tile.correct" | "material.option-tile.incorrect" | "material.option-tile.missed" | "material.stx-player.label" | "material.stx-player.error" | "material.stx-player.repeat" | "material.stx-player.audio" | "material.stx-player.video" | "material.stx-player.next" | "material.stx-player.previous" | "material.stx-player.fullscreen" | "material.stx-player.loading" | "material.stx-player.play" | "material.stx-player.pause" | "material.stx-player.retry" | "material.stx-player.empty-description" | "material.stx-player.repeat-off" | "material.stx-player.mute" | "material.stx-player.unmute" | "material.stx-player.volume" | "material.stx-player.exit-fullscreen" | "material.stx-player.pip" | "material.stx-player.exit-pip" | "material.stx-player.captions" | "material.stx-player.captions-off" | "material.stx-player.playback-rate" | "material.stx-player.queue" | "material.stx-player.now-playing" | "material.stx-player.buffering" | "material.stx-player.empty-title" | "material.stx-player.normal" | "material.camera.start" | "material.camera.stop" | "material.camera.capture" | "material.camera.captured" | "material.contacts.buttons.done" | "material.contacts.buttons.cancel" | "material.contacts.buttons.remove" | "material.contacts.buttons.add" | "material.contacts.buttons.edit" | "material.contacts.buttons.save" | "material.contacts.buttons.remove-row" | "material.contacts.errors.empty" | "material.contacts.errors.duplicate" | "material.contacts.errors.issues" | "material.contacts.labels.none" | "material.contacts.messages.dialog" | "material.contacts.messages.sheet" | "material.contacts.messages.add-first" | "material.contacts.fields.label" | "material.contacts.fields.type" | "material.contacts.buttons.make-primary" | "material.contacts.buttons.is-primary" | "material.contacts.buttons.call" | "material.contacts.buttons.send-email" | "material.contacts.buttons.open-site" | "material.contacts.buttons.copy-value" | "material.contacts.buttons.add-type" | "material.contacts.errors.email" | "material.contacts.errors.phone" | "material.contacts.errors.website" | "material.contacts.labels.primary" | "material.contacts.labels.group" | "material.contacts.labels.contacts" | "material.contacts.messages.no-contacts" | "material.contacts.types.email" | "material.contacts.types.phone" | "material.contacts.types.website" | "material.contacts.types.fax" | "material.contacts.types.mobile" | "material.contacts.fields.value" | "material.contacts.fields.row-type" | "material.contacts.fields.row-value" | "material.contacts.fields.row-label" | "material.contacts.placeholders.label" | "material.contacts.placeholders.email" | "material.contacts.placeholders.type" | "material.contacts.placeholders.value" | "material.contacts.placeholders.phone" | "material.contacts.placeholders.website" | "material.contacts.placeholders.fax" | "material.contacts.placeholders.mobile" | "material.opening-hours.buttons.done" | "material.opening-hours.buttons.cancel" | "material.opening-hours.buttons.remove" | "material.opening-hours.buttons.add" | "material.opening-hours.buttons.edit" | "material.opening-hours.buttons.save" | "material.opening-hours.errors.issues" | "material.opening-hours.messages.dialog" | "material.opening-hours.messages.add-first" | "material.opening-hours.status.closes-at" | "material.opening-hours.status.opens-at" | "material.opening-hours.status.opens-tomorrow" | "material.opening-hours.status.opens-day" | "material.opening-hours.status.unset" | "material.opening-hours.buttons.copy" | "material.opening-hours.buttons.add-all" | "material.opening-hours.buttons.add-range" | "material.opening-hours.buttons.remove-range" | "material.opening-hours.buttons.copy-to" | "material.opening-hours.errors.close" | "material.opening-hours.errors.overlap" | "material.opening-hours.errors.missing" | "material.opening-hours.labels.closed" | "material.opening-hours.labels.open" | "material.opening-hours.labels.today" | "material.opening-hours.labels.copied" | "material.opening-hours.labels.closed-all-day" | "material.opening-hours.labels.open-hours" | "material.opening-hours.labels.copy-weekdays" | "material.opening-hours.labels.copy-weekend" | "material.opening-hours.labels.copy-all" | "material.opening-hours.labels.copy-days" | "material.opening-hours.messages.no-hours" | "material.opening-hours.fields.range-open" | "material.opening-hours.fields.dayOfWeek" | "material.opening-hours.fields.openTime" | "material.opening-hours.fields.closeTime" | "material.opening-hours.fields.isClosed" | "material.opening-hours.fields.range-close" | "material.opening-hours.fields.day-open" | "material.opening-hours.placeholders.dayOfWeek" | "material.opening-hours.placeholders.openTime" | "material.opening-hours.placeholders.closeTime" | "material.opening-hours.days.0" | "material.opening-hours.days.1" | "material.opening-hours.days.2" | "material.opening-hours.days.3" | "material.opening-hours.days.4" | "material.opening-hours.days.5" | "material.opening-hours.days.6" | "material.opening-hours.daysShort.0" | "material.opening-hours.daysShort.1" | "material.opening-hours.daysShort.2" | "material.opening-hours.daysShort.3" | "material.opening-hours.daysShort.4" | "material.opening-hours.daysShort.5" | "material.opening-hours.daysShort.6" | "material.postal-address.buttons.cancel" | "material.postal-address.buttons.remove" | "material.postal-address.buttons.add" | "material.postal-address.buttons.edit" | "material.postal-address.buttons.save" | "material.postal-address.messages.dialog" | "material.postal-address.messages.empty" | "material.postal-address.messages.add-first" | "material.postal-address.labels.address" | "material.postal-address.fields.region" | "material.postal-address.fields.street" | "material.postal-address.fields.locality" | "material.postal-address.fields.postalCode" | "material.postal-address.fields.country" | "material.postal-address.placeholders.region" | "material.postal-address.placeholders.street" | "material.postal-address.placeholders.locality" | "material.postal-address.placeholders.postalCode" | "material.postal-address.placeholders.country" | "material.toast.buttons.close" | "material.toast.operations.success.title" | "material.toast.operations.error.title" | "material.toast.operations.loading.title" | "material.zod.default" | "material.zod.required" | "material.zod.invalid_value_single" | "material.zod.invalid_value_multiple" | "material.zod.too_big_inclusive" | "material.zod.too_big_exclusive" | "material.zod.too_big_no_unit_inclusive" | "material.zod.too_big_no_unit_exclusive" | "material.zod.too_small_inclusive" | "material.zod.too_small_exclusive" | "material.zod.too_small_no_unit_inclusive" | "material.zod.too_small_no_unit_exclusive" | "material.zod.too_big_string_inclusive" | "material.zod.too_big_string_exclusive" | "material.zod.too_small_string_inclusive" | "material.zod.too_small_string_exclusive" | "material.zod.not_multiple_of" | "material.zod.unrecognized_keys_single" | "material.zod.unrecognized_keys_multiple" | "material.zod.invalid_key" | "material.zod.invalid_union" | "material.zod.invalid_element" | "material.zod.invalid_type.string" | "material.zod.invalid_type.number" | "material.zod.invalid_type.bigint" | "material.zod.invalid_type.boolean" | "material.zod.invalid_type.symbol" | "material.zod.invalid_type.undefined" | "material.zod.invalid_type.object" | "material.zod.invalid_type.function" | "material.zod.invalid_type.default" | "material.zod.invalid_type.date" | "material.zod.invalid_type.array" | "material.zod.invalid_type.null" | "material.zod.invalid_type.enum" | "material.zod.invalid_format.default" | "material.zod.invalid_format.includes" | "material.zod.invalid_format.starts_with" | "material.zod.invalid_format.ends_with" | "material.zod.invalid_format.regex" | "material.zod.nouns.duration" | "material.zod.nouns.time" | "material.zod.nouns.url" | "material.zod.nouns.email" | "material.zod.nouns.date" | "material.zod.nouns.emoji" | "material.zod.nouns.nanoid" | "material.zod.nouns.cuid" | "material.zod.nouns.cuid2" | "material.zod.nouns.datetime" | "material.zod.nouns.regex" | "material.zod.nouns.uuid" | "material.zod.nouns.uuidv4" | "material.zod.nouns.uuidv6" | "material.zod.nouns.guid" | "material.zod.nouns.ulid" | "material.zod.nouns.xid" | "material.zod.nouns.ksuid" | "material.zod.nouns.ipv4" | "material.zod.nouns.ipv6" | "material.zod.nouns.mac" | "material.zod.nouns.cidrv4" | "material.zod.nouns.cidrv6" | "material.zod.nouns.base64" | "material.zod.nouns.base64url" | "material.zod.nouns.json_string" | "material.zod.nouns.e164" | "material.zod.nouns.jwt" | "material.zod.nouns.template_literal" | "material.zod.sizing.string.unit" | "material.zod.sizing.string.verb" | "material.zod.sizing.set.unit" | "material.zod.sizing.set.verb" | "material.zod.sizing.array.unit" | "material.zod.sizing.array.verb" | "material.zod.sizing.file.unit" | "material.zod.sizing.file.verb" | "material.pdf-reader.label" | "material.pdf-reader.rotate" | "material.pdf-reader.error" | "material.pdf-reader.outline" | "material.pdf-reader.search" | "material.pdf-reader.sidebar" | "material.pdf-reader.print" | "material.pdf-reader.empty" | "material.pdf-reader.zoom-in" | "material.pdf-reader.zoom-out" | "material.pdf-reader.fullscreen" | "material.pdf-reader.loading" | "material.pdf-reader.previous-page" | "material.pdf-reader.next-page" | "material.pdf-reader.untitled" | "material.pdf-reader.retry" | "material.pdf-reader.download" | "material.pdf-reader.exit-fullscreen" | "material.pdf-reader.password" | "material.pdf-reader.password-placeholder" | "material.pdf-reader.password-label" | "material.pdf-reader.unlock" | "material.pdf-reader.password-incorrect" | "material.pdf-reader.pages" | "material.pdf-reader.outline-empty" | "material.pdf-reader.fit-width" | "material.pdf-reader.fit-page" | "material.pdf-reader.fit-width-full" | "material.pdf-reader.fit-page-full" | "material.pdf-reader.sidebar-toggle" | "material.pdf-reader.current-page" | "material.pdf-reader.search-shortcut" | "material.pdf-reader.search-next" | "material.pdf-reader.search-prev" | "material.pdf-reader.night" | "material.pdf-reader.day" | "material.pdf-reader.thumbnails" | "material.pdf-reader.go-to-page" | "material.pdf-reader.link-external" | "material.pdf-reader.link-go-to-page-titled" | "material.pdf-reader.link-internal" | "material.pdf-reader.default-file-name" | "material.pdf-reader.zoom-menu" | "material.pdf-reader.next.color" | "material.pdf-reader.next.pill" | "material.pdf-reader.next.header" | "material.pdf-reader.next.meta" | "material.pdf-reader.next.back" | "material.pdf-reader.next.tools" | "material.pdf-reader.next.outline-empty" | "material.pdf-reader.next.thumbnails" | "material.pdf-reader.next.panel" | "material.pdf-reader.next.panel-toggle" | "material.pdf-reader.next.annotations" | "material.pdf-reader.next.annotations-empty" | "material.pdf-reader.next.page-field" | "material.pdf-reader.next.page-total" | "material.pdf-reader.next.page-group" | "material.pdf-reader.next.page-go" | "material.pdf-reader.next.panel-views" | "material.pdf-reader.next.layout" | "material.pdf-reader.next.layout-single" | "material.pdf-reader.next.layout-two" | "material.pdf-reader.next.layout-two-cover" | "material.pdf-reader.next.layout-narrow" | "material.pdf-reader.next.read-aloud" | "material.pdf-reader.next.reflow" | "material.pdf-reader.next.annotate" | "material.pdf-reader.next.annotate-title" | "material.pdf-reader.next.annotate-notes" | "material.pdf-reader.next.annotate-done" | "material.pdf-reader.next.annotate-undo" | "material.pdf-reader.next.tool-pointer" | "material.pdf-reader.next.tool-highlight" | "material.pdf-reader.next.tool-underline" | "material.pdf-reader.next.tool-pen" | "material.pdf-reader.next.tool-note" | "material.pdf-reader.next.tool-text" | "material.pdf-reader.next.tool-eraser" | "material.pdf-reader.next.color-yellow" | "material.pdf-reader.next.color-green" | "material.pdf-reader.next.color-blue" | "material.pdf-reader.next.color-pink" | "material.pdf-reader.next.color-red" | "material.pdf-reader.next.search-close" | "material.pdf-reader.next.search-count" | "material.pdf-reader.next.canvas-error" | "material.pdf-reader.next.invalid-error" | "material.pdf-reader.next.page-error" | "material.pdf-reader.next.retry-page" | "material.pdf-reader.next.rail" | "material.pdf-reader.next.announce-page" | "material.pdf-reader.next.announce-zoom" | "material.tree-select-field.search" | "material.tree-select-field.empty" | "material.tree-select-field.selected" | "material.tree-select-field.placeholder" | "material.image-cropper.title" | "material.image-cropper.zoom" | "material.image-cropper.error" | "material.image-cropper.apply" | "material.image-cropper.cancel" | "material.image-cropper.rotate-left" | "material.image-cropper.rotate-right" | "material.image-cropper.free" | "material.image-editor.title" | "material.image-editor.size" | "material.image-editor.error" | "material.image-editor.split" | "material.image-editor.view" | "material.image-editor.description" | "material.image-editor.before" | "material.image-editor.after" | "material.image-editor.reset" | "material.image-editor.cancel" | "material.image-editor.zoom-in" | "material.image-editor.zoom-out" | "material.image-editor.tools" | "material.image-editor.loading" | "material.image-editor.save" | "material.image-editor.stage" | "material.image-editor.undo" | "material.image-editor.redo" | "material.image-editor.compare" | "material.image-editor.zoom-fit" | "material.image-editor.zoom-actual" | "material.image-editor.filter-intensity" | "material.image-editor.filter.none" | "material.image-editor.filter.vivid" | "material.image-editor.filter.golden" | "material.image-editor.filter.arctic" | "material.image-editor.filter.cinema" | "material.image-editor.filter.dramatic" | "material.image-editor.filter.vintage" | "material.image-editor.filter.matte" | "material.image-editor.filter.lomo" | "material.image-editor.filter.chrome" | "material.image-editor.filter.noir" | "material.image-editor.filter.mono" | "material.image-editor.filter.polaroid" | "material.image-editor.panel.filters" | "material.image-editor.panel.adjust" | "material.image-editor.panel.crop" | "material.image-editor.panel.markup" | "material.image-editor.tool.edited" | "material.image-editor.tool.filters" | "material.image-editor.tool.adjust" | "material.image-editor.tool.crop" | "material.image-editor.tool.markup" | "material.image-editor.adjust.blur" | "material.image-editor.adjust.brightness" | "material.image-editor.adjust.contrast" | "material.image-editor.adjust.sepia" | "material.image-editor.adjust.auto" | "material.image-editor.adjust.reset" | "material.image-editor.adjust.exposure" | "material.image-editor.adjust.highlights" | "material.image-editor.adjust.shadows" | "material.image-editor.adjust.saturation" | "material.image-editor.adjust.vibrance" | "material.image-editor.adjust.warmth" | "material.image-editor.adjust.tint" | "material.image-editor.adjust.hue" | "material.image-editor.adjust.fade" | "material.image-editor.adjust.vignette" | "material.image-editor.adjust.grain" | "material.image-editor.adjust.histogram" | "material.image-editor.adjust.group.color" | "material.image-editor.adjust.group.light" | "material.image-editor.adjust.group.effects" | "material.image-editor.crop.aspect" | "material.image-editor.crop.orientation" | "material.image-editor.crop.reset" | "material.image-editor.crop.rotate-left" | "material.image-editor.crop.rotate-right" | "material.image-editor.crop.flip-horizontal" | "material.image-editor.crop.flip-vertical" | "material.image-editor.crop.straighten" | "material.image-editor.crop.aspect-free" | "material.image-editor.crop.aspect-original" | "material.image-editor.crop.frame" | "material.image-editor.crop.frame-hint" | "material.image-editor.markup.clear" | "material.image-editor.markup.fill" | "material.image-editor.markup.size" | "material.image-editor.markup.color" | "material.image-editor.markup.delete" | "material.image-editor.markup.tools" | "material.image-editor.markup.duplicate" | "material.image-editor.markup.background" | "material.image-editor.markup.text-field" | "material.image-editor.markup.selection" | "material.image-editor.markup.to-front" | "material.image-editor.markup.tool.select" | "material.image-editor.markup.tool.text" | "material.image-editor.markup.tool.rect" | "material.image-editor.markup.tool.arrow" | "material.image-editor.markup.tool.ellipse" | "material.image-editor.markup.tool.line" | "material.image-editor.markup.tool.pen" | "material.image-editor.markup.tool.highlighter" | "material.image-editor.markup.tool.eraser" | "material.image-editor.markup.tool.redact" | "material.image-editor.export.label" | "material.image-editor.export.size" | "material.image-editor.export.error" | "material.image-editor.export.format" | "material.image-editor.export.download" | "material.image-editor.export.quality" | "material.image-editor.export.quality-high" | "material.image-editor.export.quality-medium" | "material.image-editor.export.quality-low" | "material.image-editor.shortcuts.title" | "material.image-editor.shortcuts.description" | "material.image-editor.shortcuts.zoom-in" | "material.image-editor.shortcuts.zoom-out" | "material.image-editor.shortcuts.undo" | "material.image-editor.shortcuts.redo" | "material.image-editor.shortcuts.zoom-fit" | "material.image-editor.shortcuts.zoom-actual" | "material.image-editor.shortcuts.help" | "material.image-editor.shortcuts.mark-delete" | "material.image-editor.shortcuts.mark-duplicate" | "material.image-editor.shortcuts.mark-nudge" | "material.image-editor.shortcuts.mark-move" | "material.image-editor.shortcuts.mark-drop" | "material.image-editor.shortcuts.crop-move" | "material.image-editor.shortcuts.crop-resize" | "material.image-editor.shortcuts.key.shift" | "material.image-editor.shortcuts.key.delete" | "material.image-editor.shortcuts.key.ctrl" | "material.image-editor.shortcuts.key.esc" | "material.image-editor.shortcuts.group.mark" | "material.image-editor.shortcuts.group.view" | "material.image-editor.shortcuts.group.general" | "material.image-editor.shortcuts.group.crop" | "material.color-swatches.label" | "material.color-swatches.custom" | "material.compare-slider.label" | "material.compare-slider.before" | "material.compare-slider.after" | "material.mini-month.next" | "material.mini-month.previous" | "material.mini-month.events" | "material.mini-month.week" | "material.now-indicator.label" | "material.timeline.label" | "material.timeline.empty" | "material.tabs.scroll-left" | "material.tabs.scroll-right" | "material.qrcode.label" | "material.barecode.label" | "material.avatar-group.more" | "material.localized-text-fields.reset" | "material.localized-text-fields.others" | "material.localized-text-fields.others-count" | "material.localized-text-fields.others-errors" | "material.localized-text-fields.reset-tooltip" | "material.localized-text-fields.reset-done" | "material.search-field.clear" | "material.search-field.placeholder" | "material.password-field.strong" | "material.password-field.show" | "material.password-field.hide" | "material.password-field.too-weak" | "material.password-field.weak" | "material.password-field.fair" | "material.password-field.very-strong" | "material.stat-card.increase" | "material.stat-card.decrease" | "material.stat-card.unchanged" | "material.color-field.open" | "material.split-button.more" | "material.file-list.label" | "material.file-list.replace" | "material.file-list.empty" | "material.file-list.remove" | "material.file-list.retry" | "material.file-list.download" | "material.inline-edit.cancel" | "material.inline-edit.placeholder" | "material.inline-edit.edit" | "material.inline-edit.save" | "material.number-field.increase" | "material.number-field.decrease" | "material.textarea-field.count" | "material.skeleton.loading" | "material.chip.dismiss" | "material.chip.dismiss-label" | "material.phone-field.search" | "material.phone-field.empty" | "material.phone-field.placeholder" | "material.phone-field.country" | "material.rating-field.star" | "material.theme-picker.label" | "material.theme-picker.mode" | "material.theme-toggle.light" | "material.theme-toggle.dark" | "material.theme-toggle.system" | "material.language-switcher.label" | "material.email-field.invalid" | "material.email-field.mailto" | "material.url-field.open" | "material.url-field.invalid" | "material.stepper.error" | "material.stepper.step" | "material.stepper.completed" | "material.location-field.dialog-title" | "material.location-field.confirm" | "material.location-field.placeholder" | "material.combobox-field.empty" | "material.combobox-field.placeholder" | "material.option-count.label" | "material.facet-group.clear" | "material.facet-group.name" | "material.facet-group.clear-label" | "material.autocomplete.empty" | "material.autocomplete.add" | "material.autocomplete.loading" | "material.autocomplete.suggestions" | "material.autocomplete.search-error" | "material.autocomplete.min-query" | "material.avatar.active" | "material.avatar.offline" | "material.avatar.online" | "material.avatar.away" | "material.avatar.busy" | "material.country-field.placeholder" | "material.duration-field.hours" | "material.duration-field.minutes" | "material.duration-field.hours-label" | "material.duration-field.minutes-label" | "material.duration-field.increase-hours" | "material.duration-field.decrease-hours" | "material.duration-field.increase-minutes" | "material.duration-field.decrease-minutes" | "material.count-badge.label" | "material.notification-row.dismiss" | "material.notification-row.unread" | "material.notification-row.dismiss-item" | "material.notification-row.mark-read" | "material.notification-row.mark-read-item" | "material.day-grouped-list.today" | "material.day-grouped-list.yesterday" | "material.day-grouped-list.week" | "material.day-grouped-list.earlier" | "material.day-grouped-list.undated" | "material.timezone-field.placeholder" | "material.app-shell.navigation" | "material.app-shell.home" | "material.app-shell.open-menu" | "material.app-shell.badge" | "material.app-shell.badge-dot" | "material.account-menu.trigger" | "material.account-menu.sign-out" | "material.account-menu.theme.label" | "material.account-menu.theme.light" | "material.account-menu.theme.dark" | "material.account-menu.theme.system" | "material.transfer-list.search" | "material.transfer-list.max" | "material.transfer-list.locked" | "material.transfer-list.total" | "material.transfer-list.selected" | "material.transfer-list.select-all" | "material.transfer-list.count" | "material.transfer-list.available" | "material.transfer-list.move-to-selected" | "material.transfer-list.move-all-to-selected" | "material.transfer-list.move-to-available" | "material.transfer-list.move-all-to-available" | "material.transfer-list.move-up" | "material.transfer-list.move-down" | "material.transfer-list.empty-available" | "material.transfer-list.empty-selected" | "material.transfer-list.empty-filter" | "material.transfer-list.drag" | "material.transfer-list.moved" | "material.transfer-list.empty-available-hint" | "material.transfer-list.empty-selected-hint" | "material.transfer-list.empty-filter-hint" | "material.sortable-list.search" | "material.sortable-list.hint" | "material.sortable-list.empty" | "material.sortable-list.locked" | "material.sortable-list.remove" | "material.sortable-list.total" | "material.sortable-list.move-up" | "material.sortable-list.move-down" | "material.sortable-list.empty-filter" | "material.sortable-list.drag" | "material.sortable-list.moved" | "material.sortable-list.grabbed" | "material.sortable-list.dropped" | "material.sortable-list.cancelled" | "material.sortable-list.removed" | "material.event-calendar.title" | "material.event-calendar.resize" | "material.event-calendar.color" | "material.event-calendar.search" | "material.event-calendar.next" | "material.event-calendar.previous" | "material.event-calendar.description" | "material.event-calendar.sidebar" | "material.event-calendar.empty" | "material.event-calendar.more" | "material.event-calendar.delete" | "material.event-calendar.add" | "material.event-calendar.today" | "material.event-calendar.delete-confirm" | "material.event-calendar.no-results" | "material.event-calendar.day" | "material.event-calendar.events" | "material.event-calendar.week" | "material.event-calendar.drag" | "material.event-calendar.month" | "material.event-calendar.workweek" | "material.event-calendar.agenda" | "material.event-calendar.all-day" | "material.event-calendar.new-event" | "material.event-calendar.new-all-day" | "material.event-calendar.pick-date" | "material.event-calendar.open-day" | "material.dnd.drag" | "material.rich-text-editor.title" | "material.rich-text-editor.label" | "material.rich-text-editor.caption" | "material.rich-text-editor.clear" | "material.rich-text-editor.columns" | "material.rich-text-editor.content" | "material.rich-text-editor.font-family" | "material.rich-text-editor.size" | "material.rich-text-editor.text-color" | "material.rich-text-editor.bold" | "material.rich-text-editor.link" | "material.rich-text-editor.blockquote" | "material.rich-text-editor.header" | "material.rich-text-editor.table" | "material.rich-text-editor.heading" | "material.rich-text-editor.words" | "material.rich-text-editor.characters" | "material.rich-text-editor.action-card" | "material.rich-text-editor.icon" | "material.rich-text-editor.description" | "material.rich-text-editor.type" | "material.rich-text-editor.orientation" | "material.rich-text-editor.emoji" | "material.rich-text-editor.gallery" | "material.rich-text-editor.apply" | "material.rich-text-editor.cancel" | "material.rich-text-editor.remove" | "material.rich-text-editor.options" | "material.rich-text-editor.placeholder" | "material.rich-text-editor.add-option" | "material.rich-text-editor.selection" | "material.rich-text-editor.italic" | "material.rich-text-editor.underline" | "material.rich-text-editor.strikethrough" | "material.rich-text-editor.subscript" | "material.rich-text-editor.superscript" | "material.rich-text-editor.code-block" | "material.rich-text-editor.heading-n" | "material.rich-text-editor.highlight" | "material.rich-text-editor.pick-color" | "material.rich-text-editor.align-left" | "material.rich-text-editor.align-center" | "material.rich-text-editor.align-right" | "material.rich-text-editor.justify" | "material.rich-text-editor.bullet-list" | "material.rich-text-editor.ordered-list" | "material.rich-text-editor.task-list" | "material.rich-text-editor.horizontal-rule" | "material.rich-text-editor.insert-image" | "material.rich-text-editor.image-url" | "material.rich-text-editor.remove-link" | "material.rich-text-editor.youtube-url" | "material.rich-text-editor.embed-youtube" | "material.rich-text-editor.emoji-picker" | "material.rich-text-editor.emoji-description" | "material.rich-text-editor.no-result" | "material.rich-text-editor.no-commands" | "material.rich-text-editor.insert-table" | "material.rich-text-editor.delete-table" | "material.rich-text-editor.table-properties" | "material.rich-text-editor.rows" | "material.rich-text-editor.insert-before" | "material.rich-text-editor.insert-after" | "material.rich-text-editor.toggle-header-row" | "material.rich-text-editor.toggle-header-column" | "material.rich-text-editor.cell-background" | "material.rich-text-editor.merge-splitting" | "material.rich-text-editor.merge-cells" | "material.rich-text-editor.split-cell" | "material.rich-text-editor.caption-placeholder" | "material.rich-text-editor.caption-alignment" | "material.rich-text-editor.alignment" | "material.rich-text-editor.insert-callout" | "material.rich-text-editor.edit-callout" | "material.rich-text-editor.edit-callout-description" | "material.rich-text-editor.add-description" | "material.rich-text-editor.accordion" | "material.rich-text-editor.edit-item" | "material.rich-text-editor.edit-item-description" | "material.rich-text-editor.remove-item" | "material.rich-text-editor.add-item" | "material.rich-text-editor.action-card-settings" | "material.rich-text-editor.action-card-settings-description" | "material.rich-text-editor.edit-card" | "material.rich-text-editor.edit-card-description" | "material.rich-text-editor.remove-card" | "material.rich-text-editor.add-card" | "material.rich-text-editor.link-optional" | "material.rich-text-editor.edit-gallery" | "material.rich-text-editor.edit-gallery-description" | "material.rich-text-editor.images" | "material.rich-text-editor.add-image" | "material.rich-text-editor.add-images" | "material.rich-text-editor.alt-text" | "material.rich-text-editor.no-images" | "material.rich-text-editor.select-chips" | "material.rich-text-editor.select-cards" | "material.rich-text-editor.edit-selector" | "material.rich-text-editor.edit-selector-description" | "material.rich-text-editor.selector-settings" | "material.rich-text-editor.selector-settings-description" | "material.rich-text-editor.optional-heading" | "material.rich-text-editor.add-options" | "material.rich-text-editor.edit-option" | "material.rich-text-editor.edit-option-description" | "material.rich-text-editor.remove-option" | "material.rich-text-editor.checkbox-group" | "material.rich-text-editor.edit-checkbox-group" | "material.rich-text-editor.edit-checkbox-group-description" | "material.rich-text-editor.radio-group" | "material.rich-text-editor.edit-radio-group" | "material.rich-text-editor.edit-radio-group-description" | "material.rich-text-editor.font-default" | "material.rich-text-editor.font-sans" | "material.rich-text-editor.font-serif" | "material.rich-text-editor.font-mono" | "material.rich-text-editor.table-align-left" | "material.rich-text-editor.table-align-center" | "material.rich-text-editor.table-align-right" | "material.rich-text-editor.insert-emoji" | "material.rich-text-editor.slash-menu.items.blockquote.title" | "material.rich-text-editor.slash-menu.items.blockquote.description" | "material.rich-text-editor.slash-menu.items.table.title" | "material.rich-text-editor.slash-menu.items.table.description" | "material.rich-text-editor.slash-menu.items.action-card.title" | "material.rich-text-editor.slash-menu.items.action-card.description" | "material.rich-text-editor.slash-menu.items.gallery.title" | "material.rich-text-editor.slash-menu.items.gallery.description" | "material.rich-text-editor.slash-menu.items.code-block.title" | "material.rich-text-editor.slash-menu.items.code-block.description" | "material.rich-text-editor.slash-menu.items.bullet-list.title" | "material.rich-text-editor.slash-menu.items.bullet-list.description" | "material.rich-text-editor.slash-menu.items.ordered-list.title" | "material.rich-text-editor.slash-menu.items.ordered-list.description" | "material.rich-text-editor.slash-menu.items.task-list.title" | "material.rich-text-editor.slash-menu.items.task-list.description" | "material.rich-text-editor.slash-menu.items.horizontal-rule.title" | "material.rich-text-editor.slash-menu.items.horizontal-rule.description" | "material.rich-text-editor.slash-menu.items.accordion.title" | "material.rich-text-editor.slash-menu.items.accordion.description" | "material.rich-text-editor.slash-menu.items.checkbox-group.title" | "material.rich-text-editor.slash-menu.items.checkbox-group.description" | "material.rich-text-editor.slash-menu.items.radio-group.title" | "material.rich-text-editor.slash-menu.items.radio-group.description" | "material.rich-text-editor.slash-menu.items.paragraph.title" | "material.rich-text-editor.slash-menu.items.paragraph.description" | "material.rich-text-editor.slash-menu.items.heading-1.title" | "material.rich-text-editor.slash-menu.items.heading-1.description" | "material.rich-text-editor.slash-menu.items.heading-2.title" | "material.rich-text-editor.slash-menu.items.heading-2.description" | "material.rich-text-editor.slash-menu.items.heading-3.title" | "material.rich-text-editor.slash-menu.items.heading-3.description" | "material.rich-text-editor.slash-menu.items.callout.title" | "material.rich-text-editor.slash-menu.items.callout.description" | "material.rich-text-editor.slash-menu.items.select-chip.title" | "material.rich-text-editor.slash-menu.items.select-chip.description" | "material.rich-text-editor.slash-menu.items.select-card.title" | "material.rich-text-editor.slash-menu.items.select-card.description" | "material.rich-text-editor.slash-menu.groups.basic" | "material.rich-text-editor.slash-menu.groups.insert" | "material.kanban.search" | "material.kanban.empty" | "material.kanban.no-results" | "material.kanban.drag" | "material.kanban.add-card" | "material.kanban.wip" | "material.kanban.drag-column" | "material.kanban.ungrouped" | "material.kanban.collapse-group" | "material.kanban.expand-group" | "material.kanban.collapse-column" | "material.kanban.expand-column" | "material.kanban.new-card" | "material.kanban.card-title" | "material.kanban.subtitle" | "material.kanban.wip-full" | "material.doc.filter" | "material.doc.search" | "material.doc.menu" | "material.doc.next" | "material.doc.previous" | "material.doc.breadcrumb" | "material.doc.see-also" | "material.doc.no-results" | "material.doc.expand" | "material.doc.collapse" | "material.doc.edit" | "material.doc.on-this-page" | "material.doc.search-close" | "material.doc.search-placeholder" | "material.doc.filter-empty" | "material.doc.search-navigate" | "material.doc.search-select" | "material.doc.skip-to-content" | "material.doc.reading-progress" | "material.doc.menu-description" | "material.doc.copy-link" | "material.doc.copied-link" | "material.doc.copy-page" | "material.doc.copy-markdown" | "material.doc.last-updated" | "material.doc.callout.success" | "material.doc.callout.info" | "material.doc.callout.warning" | "material.doc.callout.note" | "material.doc.callout.tip" | "material.doc.callout.danger" | "material.param-table.default" | "material.param-table.description" | "material.param-table.name" | "material.param-table.type" | "material.param-table.required" | "material.calendar.today" | "material.calendar.selected" | "material.calendar.previous-year" | "material.calendar.previous-month" | "material.calendar.next-month" | "material.calendar.next-year" | "material.calendar.previous-years" | "material.calendar.next-years" | "material.calendar.choose-year" | "material.calendar.back-to-days" | "material.spinner.loading" | "material.scroll-to-top.label" | "material.scroll-to-latest.label" | "material.scroll-to-latest.new" | "material.typing-indicator.label" | "material.day-separator.today" | "material.day-separator.yesterday" | "material.history.label" | "material.history.summary" | "material.history.hidden" | "material.history.value" | "material.history.before" | "material.history.after" | "material.history.no-value" | "material.history.loading" | "material.history.load-more" | "material.history.empty-description" | "material.history.empty-title" | "material.history.changed-to" | "material.history.hide-changes" | "material.history.fields-changed" | "material.history.fields-set" | "material.history.more-names" | "material.history.showing" | "material.history.summary-undated" | "material.history.verb.created" | "material.history.verb.updated" | "material.history.verb.archived" | "material.history.verb.restored" | "material.history.verb.purged" | "material.history.verb.deleted" | "material.history.kind.created" | "material.history.kind.updated" | "material.history.kind.archived" | "material.history.kind.restored" | "material.history.kind.purged" | "material.history.kind.deleted" | "material.sidebar.toggle" | "material.print.page" | "material.print.page-of" | "material.print.table.empty" | "material.print.table.total" | "material.circular-progress.label" | "material.circular-progress.name" | "material.pane-layout.sheet-title" | "material.time-picker.hours" | "material.time-picker.minutes" | "material.time-picker.increase-hours" | "material.time-picker.decrease-hours" | "material.time-picker.increase-minutes" | "material.time-picker.decrease-minutes" | "material.time-picker.am" | "material.time-picker.pm" | "material.time-picker.quick-minutes" | "material.date-range-field.presets" | "material.date-range-field.start-time" | "material.date-range-field.end-time" | "material.date-range-field.preset.today" | "material.date-range-field.preset.yesterday" | "material.date-range-field.preset.last-7-days" | "material.date-range-field.preset.last-30-days" | "material.date-range-field.preset.this-month" | "material.date-range-field.preset.last-month" | "material.date-range-field.preset.this-year" | "material.file-preview.label" | "material.file-preview.content" | "material.file-preview.error" | "material.file-preview.loading" | "material.file-preview.untitled" | "material.file-preview.download" | "material.file-preview.truncated" | "material.enrolment-secret.manual" | "material.enrolment-secret.copy" | "material.enrolment-secret.copied" | "material.enrolment-secret.qr-label" | "material.enrolment-secret.open-app" | "material.enrolment-secret.secret-label" | "material.recovery-codes.title" | "material.recovery-codes.warning" | "material.recovery-codes.list" | "material.recovery-codes.done" | "material.recovery-codes.copy" | "material.recovery-codes.print" | "material.recovery-codes.saved" | "material.recovery-codes.copied" | "material.recovery-codes.copy-failed" | "material.recovery-codes.download" | "material.recovery-codes.copy-failed-hint" | "material.recovery-codes.saved-required" | "material.repeatable-group.row" | "material.repeatable-group.remove" | "material.repeatable-group.add" | "material.repeatable-group.added" | "material.repeatable-group.move-up" | "material.repeatable-group.move-down" | "material.repeatable-group.moved" | "material.repeatable-group.removed" | "material.repeatable-group.max-reached" | "material.server-table.error" | "material.server-table.results" | "material.server-table.error-hint" | "material.server-table.past-end" | "material.server-table.past-end-hint" | "material.server-table.first-page" | "material.server-table.past-end-status" | "material.server-table.bulk-action" | "material.server-table.bulk-action-name" | "material.list-empty.clear" | "material.data-grid.message" | "material.data-grid.exit-hint" | "material.data-grid.exit-hint-tab" | "material.data-grid.number.max" | "material.data-grid.number.min" | "material.data-grid.number.range" | "material.data-grid.number.invalid" | "material.data-grid.number.invalid-or-code" | "material.data-grid.number.decimals" | "material.data-grid.number.whole" | "material.data-grid.number.codes" | "material.data-grid.fill.copy" | "material.data-grid.fill.series" | "material.data-grid.select.toggle" | "material.data-grid.select.empty" | "material.data-grid.select.invalid" | "material.data-grid.error.required" | "material.data-grid.error.invalid" | "material.data-grid.error.check-timeout" | "material.data-grid.error.unchecked" | "material.data-grid.menu.columns" | "material.data-grid.menu.fit" | "material.data-grid.menu.cell" | "material.data-grid.menu.hide" | "material.data-grid.menu.width" | "material.data-grid.menu.column" | "material.data-grid.menu.width-title" | "material.data-grid.menu.narrower" | "material.data-grid.menu.wider" | "material.data-grid.menu.reset-width" | "material.data-grid.menu.reset-columns" | "material.data-grid.menu.move-left" | "material.data-grid.menu.move-right" | "material.data-grid.menu.move-start" | "material.data-grid.menu.move-end" | "material.data-grid.menu.fill-down" | "material.data-grid.menu.fill-right" | "material.data-grid.menu.fill-series-down" | "material.data-grid.menu.fill-series-right" | "material.data-grid.menu.fill-left" | "material.data-grid.menu.fill-series-left" | "material.data-grid.menu.width-unit" | "material.data-grid.hidden.show" | "material.data-grid.hidden.count" | "material.data-grid.banner.read-only" | "material.data-grid.status.label" | "material.data-grid.status.hidden" | "material.data-grid.status.errors" | "material.data-grid.status.first" | "material.data-grid.status.retry" | "material.data-grid.status.saving" | "material.data-grid.status.conflicts" | "material.data-grid.status.paused" | "material.data-grid.date.toggle" | "material.data-grid.date.max" | "material.data-grid.date.min" | "material.data-grid.date.range" | "material.data-grid.date.invalid" | "material.data-grid.announce.saved" | "material.data-grid.announce.invalid" | "material.data-grid.announce.conflict" | "material.data-grid.announce.save-failed" | "material.data-grid.announce.save-paused" | "material.data-grid.announce.refused" | "material.data-grid.announce.reverted" | "material.data-grid.announce.reverted-reason" | "material.data-grid.announce.refused-reverted" | "material.data-grid.announce.paste-applied" | "material.data-grid.announce.paste-refused" | "material.data-grid.announce.paste-vetoed" | "material.data-grid.announce.paste-dropped" | "material.data-grid.announce.paste-problems" | "material.data-grid.announce.undone" | "material.data-grid.announce.undone-skipped" | "material.data-grid.announce.undone-none" | "material.data-grid.announce.undone-dropped" | "material.data-grid.announce.redone" | "material.data-grid.announce.redone-skipped" | "material.data-grid.announce.redone-none" | "material.data-grid.announce.redone-dropped" | "material.data-grid.announce.edit-dropped" | "material.data-grid.announce.fill-applied" | "material.data-grid.announce.fill-refused" | "material.data-grid.announce.fill-problems" | "material.data-grid.announce.fill-dropped" | "material.data-grid.announce.fill-nothing" | "material.data-grid.announce.fill-vetoed" | "material.data-grid.announce.series-filled" | "material.data-grid.announce.invalid-cleared" | "material.data-grid.announce.async-toggle" | "material.data-grid.announce.clear-dropped" | "material.data-grid.announce.column-resized" | "material.data-grid.announce.column-at-minimum" | "material.data-grid.announce.column-at-maximum" | "material.data-grid.announce.column-fitted" | "material.data-grid.announce.column-hidden" | "material.data-grid.announce.column-shown" | "material.data-grid.announce.column-moved" | "material.data-grid.announce.column-reset" | "material.data-grid.total.max" | "material.data-grid.total.min" | "material.data-grid.total.total" | "material.data-grid.total.count" | "material.data-grid.total.sum" | "material.data-grid.total.mean" | "material.data-grid.phone.position" | "material.data-grid.phone.none" | "material.data-grid.phone.next" | "material.data-grid.phone.previous" | "material.data-grid.phone.yes" | "material.data-grid.phone.no" | "material.data-grid.phone.unsaved" | "material.data-grid.phone.saving" | "material.data-grid.phone.gone" | "material.data-grid.selection.row" | "material.data-grid.selection.all" | "material.data-grid.selection.count" | "material.data-grid.state.error" | "material.data-grid.state.saved" | "material.data-grid.state.locked" | "material.data-grid.state.locked-reason" | "material.data-grid.state.conflict" | "material.data-grid.state.saving" | "material.data-grid.state.dirty" | "material.data-grid.state.readonly" | "material.data-grid.state.readonly-reason" | "material.data-grid.state.computed" | "material.data-grid.conflict.title" | "material.data-grid.conflict.summary" | "material.data-grid.conflict.open" | "material.data-grid.conflict.by" | "material.data-grid.conflict.cleared" | "material.data-grid.conflict.summary-by" | "material.data-grid.conflict.keep-mine" | "material.data-grid.conflict.keep-theirs" | "material.data-grid.conflict.describe" | "material.data-grid.conflict.theirs" | "material.data-grid.conflict.yours" | "material.data-grid.conflict.unknown" | "material.data-grid.conflict.fetching" | "material.data-grid.conflict.fetch-failed" | "material.data-grid.paste.overflow" | "material.data-grid.paste.cell" | "material.data-grid.paste.more" | "material.data-grid.paste.dismiss" | "material.data-grid.paste.unknown" | "material.data-grid.paste.not-boolean" | "material.data-grid.paste.outside" | "material.data-grid.save-bar.label" | "material.data-grid.save-bar.pending" | "material.data-grid.save-bar.save" | "material.data-grid.save-bar.blocked" | "material.data-grid.save-bar.blocked-announce" | "material.data-grid.save-bar.discarded" | "material.data-grid.save-bar.discarded-saving" | "material.data-grid.save-bar.discard" | "material.dates.clear" | "material.dates.end" | "material.dates.start" | "material.dates.apply" | "material.dates.empty" | "material.dates.day" | "material.dates.month" | "material.dates.year" | "material.dates.hour" | "material.dates.minute" | "material.dates.period" | "material.dates.open-calendar" | "material.dates.open-time-picker" | "material.dates.nights" | "material.dates.no-range" | "material.dates.type-date" | "material.dates.type-range" | "material.dates.select-date" | "material.dates.select-dates" | "material.dates.placeholder.day" | "material.dates.placeholder.month" | "material.dates.placeholder.year" | "material.dates.placeholder.hour" | "material.dates.placeholder.minute" | "material.dates.placeholder.period" | "material.editor.outline" | "material.editor.code" | "material.editor.document" | "material.editor.toolbar" | "material.editor.emoji" | "material.editor.mentions" | "material.editor.tools" | "material.editor.loading" | "material.editor.no-results" | "material.editor.upload.remove" | "material.editor.upload.failed" | "material.editor.upload.retry" | "material.editor.upload.too-large" | "material.editor.send-failed" | "material.editor.suggestions" | "material.editor.count" | "material.editor.outline-empty" | "material.editor.group.color" | "material.editor.insert" | "material.editor.text-style" | "material.editor.bubble" | "material.editor.comment" | "material.editor.formatting-toggle" | "material.editor.mention" | "material.editor.send-options" | "material.editor.schedule" | "material.editor.outline-region" | "material.editor.focus-mode" | "material.editor.focus-exit" | "material.editor.find.title" | "material.editor.find.replace" | "material.editor.find.find" | "material.editor.find.none" | "material.editor.find.next" | "material.editor.find.previous" | "material.editor.find.close" | "material.editor.find.count" | "material.editor.find.replace-one" | "material.editor.find.replace-all" | "material.editor.find.match-case" | "material.editor.find.whole-word" | "material.editor.find.show-replace" | "material.editor.footer.status" | "material.editor.footer.words" | "material.editor.footer.saved" | "material.editor.footer.unsaved" | "material.editor.footer.saving" | "material.editor.footer.reading-time" | "material.editor.group.font-family" | "material.editor.group.outline" | "material.editor.group.image" | "material.editor.group.link" | "material.editor.group.find" | "material.editor.group.table" | "material.editor.group.action-card" | "material.editor.group.emoji" | "material.editor.group.gallery" | "material.editor.group.history" | "material.editor.group.code-block" | "material.editor.group.highlight" | "material.editor.group.accordion" | "material.editor.group.checkbox-group" | "material.editor.group.radio-group" | "material.editor.group.callout" | "material.editor.group.select-chip" | "material.editor.group.select-card" | "material.editor.group.focus-mode" | "material.editor.group.assistant" | "material.editor.group.comments" | "material.editor.group.marks" | "material.editor.group.marks-extra" | "material.editor.group.inline-code" | "material.editor.group.headings" | "material.editor.group.text-align" | "material.editor.group.lists" | "material.editor.group.blocks" | "material.editor.group.upload-image" | "material.editor.group.youtube" | "material.editor.page.mode" | "material.editor.page.empty" | "material.editor.page.preview" | "material.editor.page.loading" | "material.editor.page.write" | "material.editor.page.markdown" | "material.editor.upload.image" | "material.editor.upload.alt" | "material.editor.upload.cancel" | "material.editor.upload.upload-image" | "material.editor.upload.from-url" | "material.editor.upload.uploading" | "material.editor.upload.type-not-accepted" | "material.editor.upload.invalid-address" | "material.editor.upload.uploaded" | "material.editor.upload.alt-label" | "material.editor.upload.alt-apply" | "material.editor.history.undo" | "material.editor.history.redo" | "material.editor.callout-type.success" | "material.editor.callout-type.info" | "material.editor.callout-type.warning" | "material.editor.callout-type.error" | "material.editor.block.menu" | "material.editor.block.delete" | "material.editor.block.add" | "material.editor.block.duplicate" | "material.editor.block.move-up" | "material.editor.block.move-down" | "material.editor.block.bullet-list" | "material.editor.block.ordered-list" | "material.editor.block.paragraph" | "material.editor.block.heading-1" | "material.editor.block.heading-2" | "material.editor.block.heading-3" | "material.editor.block.turn-into" | "material.editor.block.quote" | "material.editor.assistant.title" | "material.editor.assistant.replace" | "material.editor.assistant.stop" | "material.editor.assistant.send" | "material.editor.assistant.copy" | "material.editor.assistant.empty" | "material.editor.assistant.back" | "material.editor.assistant.copied" | "material.editor.assistant.read-only" | "material.editor.assistant.actions" | "material.editor.assistant.failed" | "material.editor.assistant.retry" | "material.editor.assistant.discard" | "material.editor.assistant.ask" | "material.editor.assistant.ask-label" | "material.editor.assistant.writing" | "material.editor.assistant.ready" | "material.editor.assistant.stopped" | "material.editor.assistant.insert-below" | "material.editor.assistant.selection-gone" | "material.editor.assistant.lang.pt" | "material.editor.assistant.lang.fr" | "material.editor.assistant.lang.en" | "material.editor.assistant.lang.es" | "material.editor.assistant.lang.de" | "material.editor.assistant.tone.professional" | "material.editor.assistant.tone.friendly" | "material.editor.assistant.tone.direct" | "material.editor.assistant.action.translate" | "material.editor.assistant.action.tone" | "material.editor.assistant.action.improve" | "material.editor.assistant.action.fix" | "material.editor.assistant.action.shorter" | "material.editor.assistant.action.longer" | "material.editor.assistant.action.summarise" | "material.editor.assistant.action.continue" | "material.editor.comments.title" | "material.editor.comments.next" | "material.editor.comments.previous" | "material.editor.comments.empty" | "material.editor.comments.delete" | "material.editor.comments.cancel" | "material.editor.comments.submit" | "material.editor.comments.add" | "material.editor.comments.pending" | "material.editor.comments.added" | "material.editor.comments.load-failed" | "material.editor.comments.read-only" | "material.editor.comments.loading" | "material.editor.comments.failed" | "material.editor.comments.placeholder" | "material.editor.comments.edit" | "material.editor.comments.save" | "material.editor.comments.composer" | "material.editor.comments.thread" | "material.editor.comments.sending" | "material.editor.comments.reply" | "material.editor.comments.count" | "material.editor.comments.comment" | "material.editor.comments.quote" | "material.editor.comments.body-label" | "material.editor.comments.reply-label" | "material.editor.comments.reply-placeholder" | "material.editor.comments.resolve" | "material.editor.comments.reopen" | "material.editor.comments.show-resolved" | "material.editor.comments.detached" | "material.editor.comments.detached-hint" | "material.editor.comments.invalid-id" | "material.editor.comments.replied" | "material.editor.comments.resolved-notice" | "material.editor.comments.reopened-notice" | "material.editor.comments.deleted-notice" | "material.editor.comments.threads" | "material.editor.collab.people" | "material.editor.collab.status.offline" | "material.editor.collab.status.connecting" | "material.editor.collab.status.connected" | "material.editor.slash.assistant.title" | "material.editor.slash.image.title" | "material.editor.slash.image.description" | "material.editor.slash.assistant.description" | "material.choice-group.count" | "material.choice-group.max-reached" | "material.choice-group.min-hint" | "material.media-player.label" | "material.media-player.time" | "material.media-player.region" | "material.media-player.next" | "material.media-player.previous" | "material.media-player.timeline" | "material.media-player.fullscreen" | "material.media-player.play" | "material.media-player.pause" | "material.media-player.repeat-off" | "material.media-player.mute" | "material.media-player.unmute" | "material.media-player.volume" | "material.media-player.exit-fullscreen" | "material.media-player.captions" | "material.media-player.captions-off" | "material.media-player.playback-rate" | "material.media-player.buffering" | "material.media-player.normal" | "material.media-player.error.title" | "material.media-player.quality" | "material.media-player.controls" | "material.media-player.seek-back" | "material.media-player.seek-forward" | "material.media-player.shuffle" | "material.media-player.repeat-all" | "material.media-player.repeat-one" | "material.media-player.playlist" | "material.media-player.volume-value" | "material.media-player.playback-rate-value" | "material.media-player.rate-value" | "material.media-player.chapters" | "material.media-player.quality-value" | "material.media-player.quality-auto" | "material.media-player.quality-auto-active" | "material.media-player.settings" | "material.media-player.timeline-value" | "material.media-player.timeline-value-chapter" | "material.media-player.spoken-hours" | "material.media-player.spoken-minutes" | "material.media-player.spoken-seconds" | "material.media-player.error.generic" | "material.media-player.error.aborted" | "material.media-player.error.network" | "material.media-player.error.decode" | "material.media-player.error.unsupported" | "material.media-player.audio.next" | "material.media-player.audio.previous" | "material.media-player.audio.seek" | "material.media-player.audio.chapter-value" | "material.media-player.announce.track" | "material.media-player.announce.repeat-off" | "material.media-player.announce.volume" | "material.media-player.announce.captions-off" | "material.media-player.announce.repeat-all" | "material.media-player.announce.repeat-one" | "material.media-player.announce.resume" | "material.media-player.announce.seek" | "material.media-player.announce.rate" | "material.media-player.announce.muted" | "material.media-player.announce.unmuted" | "material.media-player.announce.captions-on" | "material.media-player.announce.chapter" | "material.media-player.announce.shuffle-on" | "material.media-player.announce.shuffle-off" | "material.media-player.shortcut.title" | "material.media-player.shortcut.repeat" | "material.media-player.shortcut.next" | "material.media-player.shortcut.toggle" | "material.media-player.shortcut.description" | "material.media-player.shortcut.fullscreen" | "material.media-player.shortcut.mute" | "material.media-player.shortcut.pip" | "material.media-player.shortcut.captions" | "material.media-player.shortcut.help" | "material.media-player.shortcut.group.view" | "material.media-player.shortcut.shuffle" | "material.media-player.shortcut.prev" | "material.media-player.shortcut.rate-down" | "material.media-player.shortcut.rate-up" | "material.media-player.shortcut.seek-back-5" | "material.media-player.shortcut.seek-forward-5" | "material.media-player.shortcut.seek-back-10" | "material.media-player.shortcut.seek-forward-10" | "material.media-player.shortcut.seek-start" | "material.media-player.shortcut.seek-end" | "material.media-player.shortcut.seek-percent" | "material.media-player.shortcut.volume-up" | "material.media-player.shortcut.volume-down" | "material.media-player.shortcut.key.end" | "material.media-player.shortcut.key.left" | "material.media-player.shortcut.key.right" | "material.media-player.shortcut.key.home" | "material.media-player.shortcut.key.space" | "material.media-player.shortcut.key.up" | "material.media-player.shortcut.key.down" | "material.media-player.shortcut.group.volume" | "material.media-player.shortcut.group.seek" | "material.media-player.shortcut.group.playback" | "material.media-player.lightbox.position" | "material.media-player.lightbox.description" | "material.media-player.lightbox.up-next" | "material.media-player.panels.search" | "material.media-player.panels.toggle" | "material.media-player.panels.loading" | "material.media-player.panels.close" | "material.media-player.panels.search-next" | "material.media-player.panels.search-prev" | "material.media-player.panels.search-count" | "material.media-player.panels.search-placeholder" | "material.media-player.panels.transcript" | "material.media-player.panels.no-chapters" | "material.media-player.panels.no-transcript" | "material.media-player.panels.unavailable" | "material.media-player.panels.follow" | "material.media-player.panels.search-none" | "material.media-player.panels.search-position" | "material.media-player.gesture.seconds" | "material.media-player.resume.label" | "material.media-player.resume.at" | "material.media-player.resume.start-over" | "material.media-player.host.closed" | "material.media-player.host.open" | "material.media-player.host.collapse" | "material.media-player.host.close" | "material.media-player.host.queue" | "material.media-player.host.now-playing" | "material.media-player.host.dock" | "material.media-player.mini.region" | "material.media-player.mini.move" | "material.media-player.mini.expand" | "material.media-player.mini.close" | "material.media-player.mini.moved" | "material.media-player.mini.move-start" | "material.media-player.mini.placed" | "material.media-player.mini.corner.top-left" | "material.media-player.mini.corner.top-right" | "material.media-player.mini.corner.bottom-left" | "material.media-player.mini.corner.bottom-right" | "material.period-cards.current" | "material.period-cards.past" | "material.period-cards.upcoming" | "material.charts.loading" | "material.charts.total" | "material.charts.no-data" | "material.charts.series" | "material.charts.view-data" | "material.charts.hide-data" | "material.charts.show-all" | "material.charts.isolate-hint" | "material.charts.plot-label" | "material.charts.status-value" | "material.charts.status-point" | "material.charts.table-caption" | "material.charts.status-slice" | "material.charts.table-slice" | "material.charts.table-value" | "material.charts.table-share" | "material.charts.table-measure" | "material.charts.table-minimum" | "material.charts.table-maximum" | "material.charts.status-step" | "material.charts.status-step-drop" | "material.charts.status-step-growth" | "material.charts.status-cell" | "material.charts.table-ring" | "material.charts.table-of-max" | "material.charts.table-step" | "material.charts.table-of-first" | "material.charts.table-drop-off" | "material.charts.funnel-drop" | "material.charts.funnel-growth" | "material.charts.table-increase" | "material.charts.table-increase-label" | "material.charts.funnel-of-first" | "material.charts.heat-less" | "material.charts.heat-more" | "material.charts.heat-scale" | "material.charts.axis-x" | "material.charts.axis-y" | "material.charts.table-point" | "material.charts.table-series" | "material.charts.table-category" | "material.charts.axis-left" | "material.charts.axis-right" | "material.charts.series-axis" | "material.charts.status-scatter" | "material.charts.zoom-overview" | "material.charts.zoom-start" | "material.charts.zoom-end" | "material.charts.zoom-window" | "material.charts.zoom-reset" | "material.charts.zoom-showing" | "material.charts.zoom-range" | "material.charts.summary.slice" | "material.charts.summary.hidden" | "material.charts.summary.gauge" | "material.charts.summary.range" | "material.charts.summary.series" | "material.charts.summary.funnel-drop" | "material.charts.summary.intro" | "material.charts.summary.slices" | "material.charts.summary.largest" | "material.charts.summary.rings" | "material.charts.summary.ring-list" | "material.charts.summary.funnel" | "material.charts.summary.heatmap" | "material.charts.summary.heat-range" | "material.charts.summary.axes" | "material.charts.summary.radar-series" | "material.charts.summary.scatter" | "material.charts.summary.scatter-range" | "material.charts.summary.scatter-series" | "material.charts.kind.area" | "material.charts.kind.line" | "material.charts.kind.gauge" | "material.charts.kind.bar" | "material.charts.kind.funnel" | "material.charts.kind.heatmap" | "material.charts.kind.scatter" | "material.charts.kind.pie" | "material.charts.kind.donut" | "material.charts.kind.radial-bar" | "material.charts.kind.radar" | "material.charts.kind.combo" | "material.list-details.back" | "material.switcher.clear" | "material.switcher.search" | "material.switcher.results" | "material.switcher.empty" | "material.switcher.manage" | "material.switcher.recent" | "material.switcher.choose" | "material.switcher.search-placeholder" | "material.row-menu.label" | "material.row-menu.column", string];
@@ -0,0 +1,18 @@
1
+ import { default as z } from 'zod';
2
+ import { ContactType } from './models.js';
3
+ /** The codes an issue of {@link contactsListSchema} carries in `params.code`. */
4
+ export type ContactIssueCode = 'email' | 'phone' | 'website' | 'duplicate';
5
+ /**
6
+ * The schema of a list of contacts with the rules the inline editor shows:
7
+ * the value's format by type (an email, an `http(s)` address, 7 to 15 digits
8
+ * for a phone, mobile or fax number) and no value repeated within a type. A
9
+ * blank value is not an issue, as in the editor. An issue sits on the entry's
10
+ * `value` (`[1, 'value']`). Built on the first call, like
11
+ * `openingHoursListSchema`.
12
+ */
13
+ export declare const contactsListSchema: () => z.ZodArray<z.ZodObject<{
14
+ type: z.ZodEnum<typeof ContactType>;
15
+ value: z.ZodString;
16
+ label: z.ZodOptional<z.ZodNullable<z.ZodString>>;
17
+ primary: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
18
+ }, z.core.$strip>>;
@@ -0,0 +1,9 @@
1
+ import { ContactType } from './models.js';
2
+ /** The translator and the names the contact components print with. */
3
+ export declare function useContactText(): {
4
+ t: (key: import('../../../../i18n/index.js').MaterialLocaleKey, fallback: string, options?: import('../../../../i18n/index.js').TranslationContext) => string;
5
+ typeName: (type: ContactType) => string;
6
+ /** The message of a value whose format is wrong, or `null`. */
7
+ formatError: (type: ContactType, value: string) => string | null;
8
+ };
9
+ export type ContactText = ReturnType<typeof useContactText>;
@@ -0,0 +1,33 @@
1
+ import { Contact, ContactType } from './models.js';
2
+ type Options = {
3
+ value: Contact[];
4
+ onValueChange?: (value: Contact[]) => void;
5
+ phone: boolean;
6
+ };
7
+ /**
8
+ * The editor's state and edits over a controlled list: change one contact,
9
+ * toggle its primary flag, remove it, add one of a type (focusing its value
10
+ * field, or opening its sheet on a phone). Each contact has a stable row id,
11
+ * so keys and focus follow it when the list changes around it. After a remove,
12
+ * focus goes to the next row's value in its type, else to that type's Add
13
+ * chip. The sheet drops a contact that was left without a value.
14
+ */
15
+ export declare function useContactsEditor({ value, onValueChange, phone }: Options): {
16
+ sheet: number | null;
17
+ ids: string[];
18
+ /** The ids of the rows whose value field was left. */
19
+ left: ReadonlySet<string>;
20
+ /** The same, as indexes of the value. */
21
+ leftRows: ReadonlySet<number>;
22
+ markLeft: (id: string) => void;
23
+ focusKey: (name: string) => string;
24
+ isPrimary: (index: number) => boolean;
25
+ change: (index: number, patch: Partial<Contact>) => void;
26
+ togglePrimary: (index: number) => void;
27
+ remove: (index: number) => void;
28
+ add: (type: ContactType) => void;
29
+ openSheet: import('react').Dispatch<import('react').SetStateAction<number | null>>;
30
+ closeSheet: () => void;
31
+ };
32
+ export type ContactsEditorState = ReturnType<typeof useContactsEditor>;
33
+ export {};
@@ -0,0 +1,2 @@
1
+ /** Every row action shares one quiet tone; only a lifted, open or primary state is tinted. */
2
+ export declare const ACTION_TONE = "[&_svg]:text-muted-foreground";
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ export type HeadingLevel = 2 | 3 | 4 | 5 | 6;
3
+ type EditorHeaderProps = {
4
+ /** The heading's id, which the editor's section is labelled by. */
5
+ id: string;
6
+ /** The heading. */
7
+ children: ReactNode;
8
+ /** The heading level; `3` by default. */
9
+ headingLevel?: HeadingLevel;
10
+ /** The line beside it, announced politely while `live`; empty while it is `null`. */
11
+ status?: ReactNode;
12
+ /** Tint the line as an error (the default) or as a quiet note. */
13
+ tone?: 'error' | 'muted';
14
+ /** Whether the line is announced; `true` by default. */
15
+ live?: boolean;
16
+ };
17
+ /** The editor's heading, and a live line: issues to fix, or a note. */
18
+ export declare function EditorHeader({ id, children, headingLevel, status, tone, live, }: EditorHeaderProps): import("react").JSX.Element;
19
+ export {};
@@ -0,0 +1,20 @@
1
+ import { ReactNode } from 'react';
2
+ type EditorSheetProps = {
3
+ /** Whether the sheet is open. */
4
+ open: boolean;
5
+ onClose: () => void;
6
+ title: ReactNode;
7
+ description: ReactNode;
8
+ /** The fields; the body scrolls when it is taller than the sheet. */
9
+ children: ReactNode;
10
+ /** The footer's buttons. */
11
+ footer: ReactNode;
12
+ /** The sheet floats away from the screen edge (the `cards` look). */
13
+ inset?: boolean;
14
+ titleClassName?: string;
15
+ /** Class of the body wrapper. */
16
+ bodyClassName?: string;
17
+ };
18
+ /** A phone's bottom sheet around an editor's fields: title, body and footer. */
19
+ export declare function EditorSheet({ open, onClose, title, description, children, footer, inset, titleClassName, bodyClassName, }: EditorSheetProps): import("react").JSX.Element;
20
+ export {};
@@ -0,0 +1,19 @@
1
+ import { ReactNode } from 'react';
2
+ type EmptySummaryProps = {
3
+ /** The summary's `data-slot`. */
4
+ slot: string;
5
+ /** The region's accessible name. */
6
+ label: string;
7
+ className?: string;
8
+ /** The caller's `empty` prop: `undefined` keeps the default, `null` renders nothing. */
9
+ empty?: ReactNode;
10
+ /** The quiet default text, already translated. */
11
+ fallback: string;
12
+ };
13
+ /**
14
+ * What a read-only summary shows when it has nothing to list: a quiet line,
15
+ * the caller's `empty` node instead of it, or nothing at all for
16
+ * `empty={null}`.
17
+ */
18
+ export declare function EmptySummary({ slot, label, className, empty, fallback, }: EmptySummaryProps): import("react").JSX.Element | null;
19
+ export {};
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Hands focus to a control once an edit has rendered. A control carries
3
+ * `data-focus-key={focus.key(name)}`; `focus.request(name)` focuses it after
4
+ * the next commit. Keys carry a per-editor scope (`useId`), so two editors on
5
+ * one page never answer to each other's keys, a sheet portaled out of the
6
+ * editor included.
7
+ */
8
+ export declare function useFocusRequest(): {
9
+ scope: string;
10
+ key: (name: string) => string;
11
+ request: (name: string) => void;
12
+ };
13
+ export type FocusRequest = ReturnType<typeof useFocusRequest>;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * A stable id for each row of a list that is reordered, grown and cut: the
3
+ * rows keep their identity (their open editor, their focus) when the names
4
+ * and the order change. It follows a list that changes length from outside
5
+ * (a form reset) by cutting or adding ids at the end. Every id starts with
6
+ * `scope` (a `useId()` by default), so two editors on one page never share a
7
+ * row id, a focus key or a DOM id.
8
+ */
9
+ export declare function useRowIds(length: number, scope?: string): {
10
+ ids: string[];
11
+ setIds: import('react').Dispatch<import('react').SetStateAction<string[]>>;
12
+ make: () => string;
13
+ };
@@ -2,16 +2,30 @@ import { default as z } from 'zod';
2
2
  import { MaterialLocaleKey } from '../../../../i18n/types.js';
3
3
  /**
4
4
  * The schema of one opening hour: `dayOfWeek` `0`-`6` (coerced from a
5
- * string), `openTime` and `closeTime` as `HH:mm`, `isClosed`. Built on the
5
+ * string), `openTime` and `closeTime` as `HH:mm` (or `''` while blank: the
6
+ * list schema reports that once, as `missing`), `isClosed`. Built on the
6
7
  * first call, then the same schema: nothing is built when the module loads,
7
8
  * so an app under a strict CSP can call `z.config({ jitless: true })` first.
8
9
  */
9
10
  export declare const openingHoursSchema: () => z.ZodObject<{
10
- openTime: z.ZodOptional<z.ZodString>;
11
- closeTime: z.ZodOptional<z.ZodString>;
11
+ openTime: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"">]>>;
12
+ closeTime: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"">]>>;
12
13
  isClosed: z.ZodOptional<z.ZodBoolean>;
13
14
  dayOfWeek: z.ZodCoercedNumber<unknown>;
14
15
  }, z.core.$strip>;
16
+ /**
17
+ * The schema of a whole week (an array of `openingHoursSchema()` entries)
18
+ * with the cross-field rules the inline editor shows: on each open day the
19
+ * closing time is after the opening time, both times are set, and ranges do
20
+ * not overlap. An issue sits on the entry and the field it concerns
21
+ * (`[2, 'closeTime']`). Built on the first call, like `openingHoursSchema`.
22
+ */
23
+ export declare const openingHoursListSchema: () => z.ZodArray<z.ZodObject<{
24
+ openTime: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"">]>>;
25
+ closeTime: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodLiteral<"">]>>;
26
+ isClosed: z.ZodOptional<z.ZodBoolean>;
27
+ dayOfWeek: z.ZodCoercedNumber<unknown>;
28
+ }, z.core.$strip>>;
15
29
  /** English fallback for every `material.opening-hours.days.*` key. */
16
30
  export declare const DAY_OF_WEEK_FALLBACKS: readonly ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
17
31
  /**
@@ -2,4 +2,6 @@ export * from './consts.js';
2
2
  export * from './models.js';
3
3
  export * from './opening-hours.js';
4
4
  export * from './opening-hours-dialog.js';
5
+ export * from './opening-hours-editor.js';
5
6
  export * from './opening-hours-form-field.js';
7
+ export * from './opening-hours-summary.js';
@@ -0,0 +1,9 @@
1
+ import { OpeningHoursFieldValue } from '../models.js';
2
+ import { Day } from './week.js';
3
+ /**
4
+ * The value with one day replaced, every other entry kept as it is. The week
5
+ * stays as sparse as the input: a day with no entry that stays closed gets
6
+ * none, and a closed day is written (`isClosed`) only when it had entries
7
+ * before (the user closed it, or the input already listed it).
8
+ */
9
+ export declare function replaceDay(value: readonly OpeningHoursFieldValue[], dayOfWeek: number, day: Day): OpeningHoursFieldValue[];
@@ -0,0 +1,14 @@
1
+ import { WeekStart } from './week.js';
2
+ /**
3
+ * The first day of the week from the language alone: Monday for the languages
4
+ * that start on it, Sunday for the others. It is the same on a server and in
5
+ * a browser, which `Intl.Locale`'s week info is not (Node and each browser
6
+ * carry their own data), so it is what a page renders until it has mounted.
7
+ */
8
+ export declare function languageFirstDay(locale: string): WeekStart;
9
+ /**
10
+ * The first day of the week for a locale, as a `dayOfWeek` (`0` Sunday):
11
+ * `Intl.Locale`'s week info (`1` Monday to `7` Sunday there), else Monday for
12
+ * the languages that start on it and Sunday for the others.
13
+ */
14
+ export declare function localeFirstDay(locale: string): WeekStart;
@@ -0,0 +1,6 @@
1
+ /** `'09:00'` as the locale writes it (`9:00 AM`, `09:00`); `—` while empty. */
2
+ export declare function formatTime(time: string, locale: string): string;
3
+ /** The name of weekday `day` (`0` Sunday) in `locale`. */
4
+ export declare function weekdayName(day: number, locale: string, width: 'long' | 'short'): string;
5
+ /** `Mon–Fri` for a run of days, `Sat` for one. */
6
+ export declare function groupLabel(days: readonly number[], locale: string): string;
@@ -0,0 +1,13 @@
1
+ import { HoursRange, Week } from './week.js';
2
+ /** Consecutive days (in display order) that share the same ranges. */
3
+ export type Group = {
4
+ days: number[];
5
+ open: boolean;
6
+ ranges: HoursRange[];
7
+ };
8
+ /**
9
+ * Groups identical consecutive days of `order`: Monday to Friday 9:00 to
10
+ * 18:00. The week does not wrap: a Sunday and a Monday that match, with the
11
+ * week starting on Monday, are two groups.
12
+ */
13
+ export declare function groupWeek(week: Week, order: readonly number[]): Group[];
@@ -0,0 +1,20 @@
1
+ import { OpeningHoursFieldValue } from '../models.js';
2
+ import { Day, HoursRange } from './week.js';
3
+ /** Why a range is wrong: a time missing, close not after open, or an overlap. */
4
+ export type HoursRangeError = 'missing' | 'close' | 'overlap';
5
+ /** The error of each range of `ranges`, by index; a valid range has none. */
6
+ export declare function rangeErrorsOf(ranges: readonly HoursRange[]): Record<number, HoursRangeError>;
7
+ /** The errors of an open day's ranges; a closed day has none. */
8
+ export declare function rangeErrors(day: Day): Record<number, HoursRangeError>;
9
+ /** How many ranges of the week are wrong. */
10
+ export declare function countIssues(week: readonly Day[]): number;
11
+ export type EntryIssue = {
12
+ index: number;
13
+ field: 'openTime' | 'closeTime';
14
+ error: HoursRangeError;
15
+ };
16
+ /**
17
+ * The same checks on the value model, per entry (for the list schema): the
18
+ * entries of one open day are its ranges; a closed entry is skipped.
19
+ */
20
+ export declare function entryIssues(values: readonly OpeningHoursFieldValue[]): EntryIssue[];
@@ -0,0 +1,19 @@
1
+ import { Week } from './week.js';
2
+ import { Wall } from './zoned.js';
3
+ /** Open now (until `closesAt`), or closed (and the next opening, if any). */
4
+ export type Status = {
5
+ open: true;
6
+ closesAt: string;
7
+ } | {
8
+ open: false;
9
+ /** `offset` days from today: `0` later today, `1` tomorrow. */
10
+ next?: {
11
+ day: number;
12
+ time: string;
13
+ offset: number;
14
+ };
15
+ };
16
+ /** Whether the place is open at `wall`, and what changes next. */
17
+ export declare function statusAt(week: Week, wall: Wall): Status;
18
+ /** `statusAt` for a moment `now` in `timeZone` (the viewer's without one). */
19
+ export declare function statusOf(week: Week, now: Date, timeZone?: string): Status;
@@ -0,0 +1,32 @@
1
+ import { OpeningHoursFieldValue } from '../models.js';
2
+ /** One open range of a day: `HH:mm` strings, `''` while a time is not set. */
3
+ export type HoursRange = {
4
+ o: string;
5
+ c: string;
6
+ };
7
+ /** A day: open or closed, and its ranges (several a day are allowed). */
8
+ export type Day = {
9
+ open: boolean;
10
+ ranges: HoursRange[];
11
+ };
12
+ /** Seven days, indexed by `dayOfWeek` (`0` is Sunday). */
13
+ export type Week = Day[];
14
+ export type WeekStart = 0 | 1 | 2 | 3 | 4 | 5 | 6;
15
+ /** The days of a week in display order, from `weekStartsOn`. */
16
+ export declare function weekOrder(weekStartsOn?: WeekStart): number[];
17
+ /**
18
+ * The value model, one entry per range, as a week. A day with no entry is
19
+ * closed; an entry that is not `isClosed` opens its day, with `''` for a time
20
+ * it lacks (so a half-filled row survives the round trip). Ranges are sorted.
21
+ */
22
+ export declare function toWeek(values: readonly OpeningHoursFieldValue[], { sort }?: {
23
+ sort?: boolean;
24
+ }): Week;
25
+ /** A week back to the value model: a closed day is one `isClosed` entry. */
26
+ export declare function toValues(week: Week): OpeningHoursFieldValue[];
27
+ /** The week with `from`'s day copied onto every day of `to`. */
28
+ export declare function copyDay(week: Week, from: number, to: readonly number[]): Week;
29
+ /** What switching a day on does: one 09:00 to 17:00 range when it had none. */
30
+ export declare function openDay(day: Day, open: boolean): Day;
31
+ /** A range to add after the last one: it starts where that one ends. */
32
+ export declare function nextRange(day: Day): HoursRange;
@@ -0,0 +1,10 @@
1
+ /** A wall-clock moment: the weekday (`0` Sunday) and minutes since midnight. */
2
+ export type Wall = {
3
+ day: number;
4
+ minutes: number;
5
+ };
6
+ /**
7
+ * The weekday and time of day `now` has in `timeZone` (an IANA name), or on
8
+ * the viewer's clock without one. An unknown zone falls back to the viewer's.
9
+ */
10
+ export declare function wallClock(now: Date, timeZone?: string): Wall;
@@ -0,0 +1,10 @@
1
+ import { ComponentProps } from 'react';
2
+ import { UseControllerProps } from 'react-hook-form';
3
+ export type OpeningHoursDialogFieldProps<T extends Record<string, any>> = Pick<UseControllerProps<T>, 'control' | 'name'> & {
4
+ className?: string;
5
+ disabled?: boolean;
6
+ label?: string;
7
+ showAddAllDays?: boolean;
8
+ } & Omit<ComponentProps<'div'>, 'name'>;
9
+ /** `OpeningHoursFormField` with `editing="dialog"`: a list, and a dialog per range. */
10
+ export declare function OpeningHoursDialogField<T extends Record<string, any>>({ control, name, className, disabled, label, showAddAllDays, ...props }: OpeningHoursDialogFieldProps<T>): import("react").JSX.Element;
@@ -0,0 +1,26 @@
1
+ import { ReactNode } from 'react';
2
+ import { HeadingLevel } from '../inline-editor/editor-header.js';
3
+ import { WeekStart } from './logic/week.js';
4
+ import { OpeningHoursFieldValue } from './models.js';
5
+ export type OpeningHoursEditorProps = {
6
+ value?: OpeningHoursFieldValue[];
7
+ onValueChange?: (value: OpeningHoursFieldValue[]) => void;
8
+ /** The heading; "Opening Hours" by default. */
9
+ label?: ReactNode;
10
+ /** The heading's level; `3` by default. */
11
+ headingLevel?: HeadingLevel;
12
+ /** The first day of the week, `0` Sunday; the locale's by default. */
13
+ weekStartsOn?: WeekStart;
14
+ /** The locale of day and time names; the `I18nProvider` language by default. */
15
+ locale?: string;
16
+ disabled?: boolean;
17
+ className?: string;
18
+ };
19
+ /**
20
+ * The week, edited in place: a switch and one or more ranges for each day,
21
+ * "Copy to" Monday to Friday, the weekend or all days, and an inline error
22
+ * under any range that is wrong. Below 640px each day is a summary row that
23
+ * opens a bottom sheet with the same controls. It holds the value model of
24
+ * `OpeningHours` (one entry per range): a closed day is one `isClosed` entry.
25
+ */
26
+ export declare function OpeningHoursEditor({ value, onValueChange, label, headingLevel, weekStartsOn, locale, disabled, className, }: OpeningHoursEditorProps): import("react").JSX.Element;