@12-apps/ui 6.7.0 → 6.8.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 (370) hide show
  1. package/dist/{chunk-QLBYAYUG.js → chunk-KR2BP7NK.js} +4 -4
  2. package/dist/chunk-KR2BP7NK.js.map +1 -0
  3. package/dist/{chunk-DFVRZ3UK.js → chunk-KXARS46L.js} +3 -3
  4. package/dist/chunk-KXARS46L.js.map +1 -0
  5. package/dist/{chunk-JP55QWVR.js → chunk-L7L6SX64.js} +5 -2
  6. package/dist/chunk-L7L6SX64.js.map +1 -0
  7. package/dist/{chunk-QZZVHY6U.js → chunk-PVLDKXKR.js} +7 -3
  8. package/dist/chunk-PVLDKXKR.js.map +1 -0
  9. package/dist/{chunk-H7UAGTVW.js → chunk-TSG5C7MP.js} +4 -3
  10. package/dist/chunk-TSG5C7MP.js.map +1 -0
  11. package/dist/{chunk-NUCLEOHF.js → chunk-UNM7KFDX.js} +44 -14
  12. package/dist/chunk-UNM7KFDX.js.map +1 -0
  13. package/dist/{chunk-CEKPLUQV.js → chunk-UY7UF7IN.js} +19 -13
  14. package/dist/chunk-UY7UF7IN.js.map +1 -0
  15. package/dist/data-display/DataGrid.js +1 -1
  16. package/dist/data-display/DataViews.js +88 -65
  17. package/dist/data-display/DataViews.js.map +1 -1
  18. package/dist/data-display/HoverCard.js +4 -1
  19. package/dist/data-display/HoverCard.js.map +1 -1
  20. package/dist/data-display/Table.js +4 -2
  21. package/dist/data-display/Table.js.map +1 -1
  22. package/dist/data-display/TimingDiagram.js +3 -2
  23. package/dist/data-display/TimingDiagram.js.map +1 -1
  24. package/dist/feedback/Sonner.js +5 -4
  25. package/dist/feedback/Sonner.js.map +1 -1
  26. package/dist/feedback/StackedModal.js +1 -1
  27. package/dist/feedback/TutorialOverlay.js +19 -5
  28. package/dist/feedback/TutorialOverlay.js.map +1 -1
  29. package/dist/form/AddressAutocomplete.js +16 -8
  30. package/dist/form/AddressAutocomplete.js.map +1 -1
  31. package/dist/form/Autocomplete.js +9 -7
  32. package/dist/form/Autocomplete.js.map +1 -1
  33. package/dist/form/Calendar.js +1 -1
  34. package/dist/form/CodeEditor.js +14 -9
  35. package/dist/form/CodeEditor.js.map +1 -1
  36. package/dist/form/DateRangePicker.js +10 -3
  37. package/dist/form/DateRangePicker.js.map +1 -1
  38. package/dist/form/Menubar.js +4 -1
  39. package/dist/form/Menubar.js.map +1 -1
  40. package/dist/form/PasswordStrength.js +48 -28
  41. package/dist/form/PasswordStrength.js.map +1 -1
  42. package/dist/form/PhoneInput.js +11 -5
  43. package/dist/form/PhoneInput.js.map +1 -1
  44. package/dist/form/SearchPalette.js +4 -1
  45. package/dist/form/SearchPalette.js.map +1 -1
  46. package/dist/form/Textarea.js +21 -19
  47. package/dist/form/Textarea.js.map +1 -1
  48. package/dist/form/UploadButton.js +16 -11
  49. package/dist/form/UploadButton.js.map +1 -1
  50. package/dist/layout/ContentToolbar.js +1 -1
  51. package/dist/layout/Dashboard.js +2 -1
  52. package/dist/layout/Dashboard.js.map +1 -1
  53. package/dist/layout/ScrollArea.js +9 -3
  54. package/dist/layout/ScrollArea.js.map +1 -1
  55. package/dist/layout/TableFilter.js +1 -1
  56. package/dist/navigation/Breadcrumbs.js +9 -3
  57. package/dist/navigation/Breadcrumbs.js.map +1 -1
  58. package/dist/navigation/CommandPalette.js +20 -7
  59. package/dist/navigation/CommandPalette.js.map +1 -1
  60. package/dist/navigation/Pagination.js +1 -1
  61. package/dist/navigation/Tabs.js +7 -3
  62. package/dist/navigation/Tabs.js.map +1 -1
  63. package/dist/pt-BR.js +159 -8
  64. package/dist/pt-BR.js.map +1 -1
  65. package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts +1 -0
  66. package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts.map +1 -1
  67. package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts +5 -0
  68. package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts.map +1 -1
  69. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
  70. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +27 -1
  71. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
  72. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +12 -1
  73. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
  74. package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
  75. package/dist/types/components/data-display/DataViews/data-views-grid-bodies.d.ts.map +1 -1
  76. package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
  77. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  78. package/dist/types/components/data-display/DataViews/data-views-pagination.d.ts.map +1 -1
  79. package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
  80. package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts.map +1 -1
  81. package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts +1 -1
  82. package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts.map +1 -1
  83. package/dist/types/components/data-display/HoverCard/HoverCard.d.ts.map +1 -1
  84. package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts +2 -0
  85. package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts.map +1 -1
  86. package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
  87. package/dist/types/components/data-display/Table/Table.types.d.ts +5 -0
  88. package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
  89. package/dist/types/components/data-display/Table/TableStates.d.ts +3 -1
  90. package/dist/types/components/data-display/Table/TableStates.d.ts.map +1 -1
  91. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.d.ts.map +1 -1
  92. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts +3 -0
  93. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts.map +1 -1
  94. package/dist/types/components/feedback/Sonner/Sonner.d.ts +8 -0
  95. package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
  96. package/dist/types/components/feedback/Sonner/Sonner.types.d.ts +2 -0
  97. package/dist/types/components/feedback/Sonner/Sonner.types.d.ts.map +1 -1
  98. package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
  99. package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
  100. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
  101. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
  102. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +2 -0
  103. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
  104. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  105. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts +3 -0
  106. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts.map +1 -1
  107. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts +2 -0
  108. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  109. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts +7 -0
  110. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts.map +1 -1
  111. package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
  112. package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts +1 -0
  113. package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts.map +1 -1
  114. package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts +1 -0
  115. package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts.map +1 -1
  116. package/dist/types/components/form/Autocomplete/Autocomplete.d.ts.map +1 -1
  117. package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts +9 -3
  118. package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts.map +1 -1
  119. package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts +7 -0
  120. package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts.map +1 -1
  121. package/dist/types/components/form/Calendar/Calendar.types.d.ts +6 -0
  122. package/dist/types/components/form/Calendar/Calendar.types.d.ts.map +1 -1
  123. package/dist/types/components/form/CodeEditor/CodeEditor.d.ts.map +1 -1
  124. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts +7 -0
  125. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts.map +1 -1
  126. package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts +2 -0
  127. package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts.map +1 -1
  128. package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  129. package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
  130. package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts +11 -0
  131. package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts.map +1 -1
  132. package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts.map +1 -1
  133. package/dist/types/components/form/Menubar/Menubar.d.ts.map +1 -1
  134. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts +1 -0
  135. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts.map +1 -1
  136. package/dist/types/components/form/Menubar/Menubar.types.d.ts +5 -0
  137. package/dist/types/components/form/Menubar/Menubar.types.d.ts.map +1 -1
  138. package/dist/types/components/form/PasswordStrength/PasswordStrength.d.ts.map +1 -1
  139. package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts +4 -2
  140. package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts.map +1 -1
  141. package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts +8 -0
  142. package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts.map +1 -1
  143. package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
  144. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +7 -0
  145. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
  146. package/dist/types/components/form/SearchPalette/SearchPalette.d.ts.map +1 -1
  147. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts +2 -0
  148. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
  149. package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts +6 -0
  150. package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts.map +1 -1
  151. package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
  152. package/dist/types/components/form/Textarea/Textarea.types.d.ts +16 -1
  153. package/dist/types/components/form/Textarea/Textarea.types.d.ts.map +1 -1
  154. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts +7 -0
  155. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
  156. package/dist/types/components/form/UploadButton/UploadButton.d.ts.map +1 -1
  157. package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts +6 -3
  158. package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
  159. package/dist/types/components/form/UploadButton/UploadButton.types.d.ts +7 -0
  160. package/dist/types/components/form/UploadButton/UploadButton.types.d.ts.map +1 -1
  161. package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts +1 -1
  162. package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts.map +1 -1
  163. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +12 -0
  164. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
  165. package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts +1 -1
  166. package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
  167. package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts +1 -1
  168. package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts.map +1 -1
  169. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
  170. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
  171. package/dist/types/components/layout/Dashboard/Dashboard.d.ts +1 -1
  172. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +4 -0
  173. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
  174. package/dist/types/components/layout/Dashboard/DashboardParts.d.ts +1 -1
  175. package/dist/types/components/layout/Dashboard/DashboardParts.d.ts.map +1 -1
  176. package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
  177. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +21 -3
  178. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts.map +1 -1
  179. package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts +2 -0
  180. package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
  181. package/dist/types/components/layout/TableFilter/TableFilter.d.ts +1 -1
  182. package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
  183. package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts +7 -0
  184. package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts.map +1 -1
  185. package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts +9 -0
  186. package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts.map +1 -1
  187. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts +2 -0
  188. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts.map +1 -1
  189. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  190. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +3 -0
  191. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -1
  192. package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
  193. package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts +3 -0
  194. package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts.map +1 -1
  195. package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts +2 -0
  196. package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
  197. package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
  198. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +2 -0
  199. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts.map +1 -1
  200. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts +2 -0
  201. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
  202. package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
  203. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -0
  204. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
  205. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
  206. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts +6 -2
  207. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts.map +1 -1
  208. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts +6 -0
  209. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts.map +1 -1
  210. package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts +4 -2
  211. package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts.map +1 -1
  212. package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts +8 -7
  213. package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts.map +1 -1
  214. package/dist/types/copy/data-display.d.ts +56 -0
  215. package/dist/types/copy/data-display.d.ts.map +1 -0
  216. package/dist/types/copy/feedback.d.ts +38 -0
  217. package/dist/types/copy/feedback.d.ts.map +1 -0
  218. package/dist/types/copy/form.d.ts +146 -0
  219. package/dist/types/copy/form.d.ts.map +1 -0
  220. package/dist/types/copy/layout.d.ts +18 -0
  221. package/dist/types/copy/layout.d.ts.map +1 -0
  222. package/dist/types/copy/navigation.d.ts +24 -0
  223. package/dist/types/copy/navigation.d.ts.map +1 -0
  224. package/dist/types/copy/shared.d.ts +119 -0
  225. package/dist/types/copy/shared.d.ts.map +1 -0
  226. package/dist/types/copy/utility.d.ts +35 -0
  227. package/dist/types/copy/utility.d.ts.map +1 -0
  228. package/dist/types/copy.d.ts +12 -165
  229. package/dist/types/copy.d.ts.map +1 -1
  230. package/dist/types/pt-BR.d.ts +15 -22
  231. package/dist/types/pt-BR.d.ts.map +1 -1
  232. package/dist/types/pt-BR.data-display.d.ts +13 -0
  233. package/dist/types/pt-BR.data-display.d.ts.map +1 -0
  234. package/dist/types/pt-BR.feedback.d.ts +8 -0
  235. package/dist/types/pt-BR.feedback.d.ts.map +1 -0
  236. package/dist/types/pt-BR.form.d.ts +13 -0
  237. package/dist/types/pt-BR.form.d.ts.map +1 -0
  238. package/dist/types/pt-BR.layout.d.ts +7 -0
  239. package/dist/types/pt-BR.layout.d.ts.map +1 -0
  240. package/dist/types/pt-BR.navigation.d.ts +8 -0
  241. package/dist/types/pt-BR.navigation.d.ts.map +1 -0
  242. package/dist/types/pt-BR.shared.d.ts +21 -0
  243. package/dist/types/pt-BR.shared.d.ts.map +1 -0
  244. package/dist/types/pt-BR.utility.d.ts +8 -0
  245. package/dist/types/pt-BR.utility.d.ts.map +1 -0
  246. package/dist/types/user-avatar/user-avatar.d.ts +7 -1
  247. package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
  248. package/dist/user-avatar.js +2 -2
  249. package/dist/user-avatar.js.map +1 -1
  250. package/dist/utility/InfiniteScroll.js +7 -5
  251. package/dist/utility/InfiniteScroll.js.map +1 -1
  252. package/dist/utility/InstallPrompt.js +14 -13
  253. package/dist/utility/InstallPrompt.js.map +1 -1
  254. package/package.json +1 -1
  255. package/src/components/data-display/DataGrid/DataGrid.states.tsx +3 -3
  256. package/src/components/data-display/DataGrid/DataGrid.tsx +1 -1
  257. package/src/components/data-display/DataGrid/DataGrid.types.ts +5 -0
  258. package/src/components/data-display/DataViews/data-views-category-pill.tsx +2 -0
  259. package/src/components/data-display/DataViews/data-views-copy.ts +27 -1
  260. package/src/components/data-display/DataViews/data-views-day-input.tsx +14 -3
  261. package/src/components/data-display/DataViews/data-views-filter-panel.tsx +2 -1
  262. package/src/components/data-display/DataViews/data-views-grid-bodies.tsx +3 -0
  263. package/src/components/data-display/DataViews/data-views-grid-parts.tsx +9 -10
  264. package/src/components/data-display/DataViews/data-views-more-fields.tsx +3 -1
  265. package/src/components/data-display/DataViews/data-views-pagination.tsx +3 -0
  266. package/src/components/data-display/DataViews/data-views-range-pill.tsx +3 -1
  267. package/src/components/data-display/DataViews/data-views-toolbar.tsx +2 -0
  268. package/src/components/data-display/HoverCard/HoverCard.content.tsx +10 -2
  269. package/src/components/data-display/HoverCard/HoverCard.tsx +2 -3
  270. package/src/components/data-display/HoverCard/HoverCard.types.ts +2 -0
  271. package/src/components/data-display/Table/Table.tsx +7 -2
  272. package/src/components/data-display/Table/Table.types.ts +5 -0
  273. package/src/components/data-display/Table/TableStates.tsx +2 -2
  274. package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +3 -2
  275. package/src/components/data-display/TimingDiagram/TimingDiagram.types.ts +3 -0
  276. package/src/components/feedback/Sonner/Sonner.tsx +15 -3
  277. package/src/components/feedback/Sonner/Sonner.types.ts +2 -0
  278. package/src/components/feedback/Sonner/SonnerToast.tsx +2 -1
  279. package/src/components/feedback/StackedModal/StackedModal.parts.tsx +10 -3
  280. package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
  281. package/src/components/feedback/StackedModal/StackedModal.types.ts +2 -0
  282. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +13 -1
  283. package/src/components/feedback/TutorialOverlay/TutorialOverlay.types.ts +3 -0
  284. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +10 -4
  285. package/src/components/form/AddressAutocomplete/AddressAutocomplete.types.ts +7 -0
  286. package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +2 -0
  287. package/src/components/form/AddressAutocomplete/AddressFallbackField.tsx +4 -2
  288. package/src/components/form/AddressAutocomplete/AddressInputField.tsx +13 -6
  289. package/src/components/form/Autocomplete/Autocomplete.parts.tsx +9 -6
  290. package/src/components/form/Autocomplete/Autocomplete.tsx +2 -1
  291. package/src/components/form/Autocomplete/Autocomplete.types.ts +7 -0
  292. package/src/components/form/Calendar/Calendar.tsx +2 -2
  293. package/src/components/form/Calendar/Calendar.types.ts +7 -0
  294. package/src/components/form/CodeEditor/CodeEditor.tsx +6 -4
  295. package/src/components/form/CodeEditor/CodeEditor.types.ts +7 -0
  296. package/src/components/form/CodeEditor/CodeEditorToolbar.tsx +12 -5
  297. package/src/components/form/DateRangePicker/DateRangePicker.range.ts +2 -0
  298. package/src/components/form/DateRangePicker/DateRangePicker.tsx +4 -0
  299. package/src/components/form/DateRangePicker/DateRangePicker.types.ts +11 -0
  300. package/src/components/form/DateRangePicker/DateRangePickerFields.tsx +2 -0
  301. package/src/components/form/Menubar/Menubar.toolbar.tsx +3 -1
  302. package/src/components/form/Menubar/Menubar.tsx +2 -1
  303. package/src/components/form/Menubar/Menubar.types.ts +5 -0
  304. package/src/components/form/PasswordStrength/PasswordStrength.helpers.tsx +33 -17
  305. package/src/components/form/PasswordStrength/PasswordStrength.tsx +29 -13
  306. package/src/components/form/PasswordStrength/PasswordStrength.types.ts +9 -0
  307. package/src/components/form/PhoneInput/PhoneInput.tsx +15 -5
  308. package/src/components/form/PhoneInput/PhoneInput.types.ts +7 -0
  309. package/src/components/form/SearchPalette/SearchPalette.parts.tsx +4 -1
  310. package/src/components/form/SearchPalette/SearchPalette.tsx +4 -1
  311. package/src/components/form/SearchPalette/SearchPalette.types.ts +6 -0
  312. package/src/components/form/Textarea/Textarea.tsx +6 -1
  313. package/src/components/form/Textarea/Textarea.types.ts +14 -1
  314. package/src/components/form/Textarea/TextareaRichEditor.tsx +28 -18
  315. package/src/components/form/UploadButton/UploadButton.parts.tsx +16 -7
  316. package/src/components/form/UploadButton/UploadButton.tsx +4 -1
  317. package/src/components/form/UploadButton/UploadButton.types.ts +8 -0
  318. package/src/components/layout/ContentToolbar/ContentToolbar.tsx +10 -2
  319. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +12 -0
  320. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +15 -4
  321. package/src/components/layout/ContentToolbar/SortByDropdown.tsx +12 -3
  322. package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -1
  323. package/src/components/layout/Dashboard/Dashboard.types.ts +4 -0
  324. package/src/components/layout/Dashboard/DashboardParts.tsx +2 -1
  325. package/src/components/layout/ScrollArea/ScrollArea.tsx +16 -3
  326. package/src/components/layout/ScrollArea/ScrollArea.types.ts +19 -4
  327. package/src/components/layout/ScrollArea/ScrollViewport.tsx +4 -1
  328. package/src/components/layout/TableFilter/TableFilter.tsx +19 -11
  329. package/src/components/layout/TableFilter/TableFilter.types.ts +8 -0
  330. package/src/components/layout/TableFilter/TableFilterContext.tsx +10 -0
  331. package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +11 -4
  332. package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +2 -0
  333. package/src/components/navigation/Breadcrumbs/Breadcrumbs.types.ts +3 -0
  334. package/src/components/navigation/CommandPalette/CommandPalette.tsx +15 -5
  335. package/src/components/navigation/CommandPalette/CommandPalette.types.ts +3 -0
  336. package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -2
  337. package/src/components/navigation/Pagination/Pagination.tsx +2 -0
  338. package/src/components/navigation/Pagination/Pagination.types.ts +2 -0
  339. package/src/components/navigation/Pagination/PaginationParts.tsx +4 -1
  340. package/src/components/navigation/Tabs/Tabs.tsx +8 -3
  341. package/src/components/navigation/Tabs/Tabs.types.ts +2 -0
  342. package/src/components/utility/InfiniteScroll/InfiniteScroll.parts.tsx +4 -4
  343. package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +4 -2
  344. package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +6 -0
  345. package/src/components/utility/InstallPrompt/InstallPrompt.tsx +18 -13
  346. package/src/components/utility/InstallPrompt/InstallPrompt.types.ts +9 -7
  347. package/src/copy/data-display.ts +60 -0
  348. package/src/copy/feedback.ts +39 -0
  349. package/src/copy/form.ts +154 -0
  350. package/src/copy/layout.ts +18 -0
  351. package/src/copy/navigation.ts +25 -0
  352. package/src/copy/shared.ts +122 -0
  353. package/src/copy/utility.ts +36 -0
  354. package/src/copy.ts +12 -173
  355. package/src/pt-BR.data-display.ts +236 -0
  356. package/src/pt-BR.feedback.ts +25 -0
  357. package/src/pt-BR.form.ts +96 -0
  358. package/src/pt-BR.layout.ts +15 -0
  359. package/src/pt-BR.navigation.ts +21 -0
  360. package/src/pt-BR.shared.ts +94 -0
  361. package/src/pt-BR.ts +15 -307
  362. package/src/pt-BR.utility.ts +21 -0
  363. package/src/user-avatar/user-avatar.tsx +8 -2
  364. package/dist/chunk-CEKPLUQV.js.map +0 -1
  365. package/dist/chunk-DFVRZ3UK.js.map +0 -1
  366. package/dist/chunk-H7UAGTVW.js.map +0 -1
  367. package/dist/chunk-JP55QWVR.js.map +0 -1
  368. package/dist/chunk-NUCLEOHF.js.map +0 -1
  369. package/dist/chunk-QLBYAYUG.js.map +0 -1
  370. package/dist/chunk-QZZVHY6U.js.map +0 -1
@@ -17,6 +17,7 @@ export type AddressAutocompleteFieldProps = ResolvedAddressProps & AddressAutoco
17
17
 
18
18
  // The live field, rendered once Google Maps (or the mock stand-in) is ready.
19
19
  export const AddressAutocompleteField: FC<AddressAutocompleteFieldProps> = ({
20
+ copy,
20
21
  variant,
21
22
  label,
22
23
  placeholder,
@@ -62,6 +63,7 @@ export const AddressAutocompleteField: FC<AddressAutocompleteFieldProps> = ({
62
63
  )}
63
64
  renderInput={(params) => (
64
65
  <AddressInputField
66
+ copy={copy}
65
67
  params={params}
66
68
  addressVariant={variant}
67
69
  label={floating ? undefined : label}
@@ -6,6 +6,7 @@ import type { AddressAutocompleteProps } from './AddressAutocomplete.types';
6
6
  import { AddressTextField } from './AddressTextField';
7
7
 
8
8
  export interface AddressFallbackFieldProps {
9
+ copy: AddressAutocompleteProps['copy'];
9
10
  variant: AddressAutocompleteProps['variant'];
10
11
  label?: string;
11
12
  placeholder?: string;
@@ -18,6 +19,7 @@ export interface AddressFallbackFieldProps {
18
19
  // Stands in for the Autocomplete before Google Maps is usable: a disabled field
19
20
  // that either spins or explains why it never loaded.
20
21
  export const AddressFallbackField: FC<AddressFallbackFieldProps> = ({
22
+ copy,
21
23
  variant,
22
24
  label,
23
25
  placeholder,
@@ -33,7 +35,7 @@ export const AddressFallbackField: FC<AddressFallbackFieldProps> = ({
33
35
  <AddressTextField
34
36
  addressVariant={variant}
35
37
  label={floating ? undefined : label}
36
- placeholder="Loading Google Maps..."
38
+ placeholder={copy.loadingMaps}
37
39
  disabled
38
40
  fullWidth={fullWidth}
39
41
  InputProps={{
@@ -57,7 +59,7 @@ export const AddressFallbackField: FC<AddressFallbackFieldProps> = ({
57
59
  InputProps={{ startAdornment }}
58
60
  />
59
61
  <Alert severity="error" sx={{ mt: 1 }}>
60
- Google Maps API failed to load. Please check your API key and internet connection.
62
+ {copy.mapsLoadFailed}
61
63
  </Alert>
62
64
  </Box>
63
65
  );
@@ -7,16 +7,17 @@ import React from 'react';
7
7
  import type { AddressAutocompleteProps } from './AddressAutocomplete.types';
8
8
  import { AddressTextField } from './AddressTextField';
9
9
 
10
- const CurrentLocationButton: FC<{ disabled: boolean; onClick: () => void }> = ({
11
- disabled,
12
- onClick,
13
- }) => (
10
+ const CurrentLocationButton: FC<{
11
+ disabled: boolean;
12
+ onClick: () => void;
13
+ currentLocationLabel: string;
14
+ }> = ({ disabled, onClick, currentLocationLabel }) => (
14
15
  <InputAdornment position="end">
15
16
  <IconButton
16
17
  edge="end"
17
18
  onClick={onClick}
18
19
  size="small"
19
- title="Use current location"
20
+ title={currentLocationLabel}
20
21
  disabled={disabled}
21
22
  data-testid="address-current-location-button"
22
23
  >
@@ -26,6 +27,7 @@ const CurrentLocationButton: FC<{ disabled: boolean; onClick: () => void }> = ({
26
27
  );
27
28
 
28
29
  export interface AddressInputFieldProps {
30
+ copy: AddressAutocompleteProps['copy'];
29
31
  params: AutocompleteRenderInputParams;
30
32
  addressVariant: AddressAutocompleteProps['variant'];
31
33
  label?: string;
@@ -41,6 +43,7 @@ export interface AddressInputFieldProps {
41
43
  }
42
44
 
43
45
  export const AddressInputField: FC<AddressInputFieldProps> = ({
46
+ copy,
44
47
  params,
45
48
  addressVariant,
46
49
  label,
@@ -69,7 +72,11 @@ export const AddressInputField: FC<AddressInputFieldProps> = ({
69
72
  <>
70
73
  {loading && <CircularProgress color="inherit" size={20} data-testid="address-loading" />}
71
74
  {showCurrentLocation && (
72
- <CurrentLocationButton disabled={disabled} onClick={onGetCurrentLocation} />
75
+ <CurrentLocationButton
76
+ disabled={disabled}
77
+ onClick={onGetCurrentLocation}
78
+ currentLocationLabel={copy.useCurrentLocation}
79
+ />
73
80
  )}
74
81
  {params.InputProps.endAdornment}
75
82
  </>
@@ -17,6 +17,7 @@ import React from 'react';
17
17
 
18
18
  import { highlightLabel, type MatchMode } from './Autocomplete.helpers';
19
19
  import type { SuggestionItemState, SuggestionType } from './Autocomplete.types';
20
+ import type { AutocompleteCopy } from '../../../copy';
20
21
 
21
22
  const StyledPopper = styled(Popper)(({ theme }) => ({
22
23
  zIndex: theme.zIndex.tooltip,
@@ -213,13 +214,13 @@ export function DefaultSuggestion<T>({
213
214
  }
214
215
 
215
216
  /** A "Loading…" row shown while async suggestions resolve. */
216
- export function LoadingRow(): React.JSX.Element {
217
+ export function LoadingRow({ label }: { label: string }): React.JSX.Element {
217
218
  return (
218
219
  <ListItem>
219
220
  <Box display="flex" alignItems="center" gap={1}>
220
221
  <CircularProgress size={16} />
221
222
  <Typography variant="body2" color="text.secondary">
222
- Loading...
223
+ {label}
223
224
  </Typography>
224
225
  </Box>
225
226
  </ListItem>
@@ -227,11 +228,11 @@ export function LoadingRow(): React.JSX.Element {
227
228
  }
228
229
 
229
230
  /** The empty "No results found" row. */
230
- export function NoResultsRow(): React.JSX.Element {
231
+ export function NoResultsRow({ label }: { label: string }): React.JSX.Element {
231
232
  return (
232
233
  <ListItem>
233
234
  <Typography variant="body2" color="text.secondary">
234
- No results found
235
+ {label}
235
236
  </Typography>
236
237
  </ListItem>
237
238
  );
@@ -251,6 +252,7 @@ const SAME_WIDTH_MODIFIER = {
251
252
  };
252
253
 
253
254
  export interface SuggestionListBoxProps<T> {
255
+ copy: AutocompleteCopy;
254
256
  open: boolean;
255
257
  anchorEl: HTMLElement | null;
256
258
  portal: boolean | { container?: HTMLElement };
@@ -272,6 +274,7 @@ export interface SuggestionListBoxProps<T> {
272
274
 
273
275
  /** The suggestions dropdown: a same-width Popper with the option list + loading/empty rows. */
274
276
  export function SuggestionListBox<T>({
277
+ copy,
275
278
  open,
276
279
  anchorEl,
277
280
  portal,
@@ -328,8 +331,8 @@ export function SuggestionListBox<T>({
328
331
  {renderItem(item, index === activeIndex)}
329
332
  </ListItem>
330
333
  ))}
331
- {isLoading && <LoadingRow />}
332
- {showNoResults && <NoResultsRow />}
334
+ {isLoading && <LoadingRow label={copy.loading} />}
335
+ {showNoResults && <NoResultsRow label={copy.noResults} />}
333
336
  </List>
334
337
  </Paper>
335
338
  </StyledPopper>
@@ -54,7 +54,7 @@ function resolveRenderConfig<T>(p: AutocompleteProps<T>): RenderConfig<T> {
54
54
  selectedItems: p.selectedItems ?? [],
55
55
  isLoading: Boolean(p.isLoading),
56
56
  showGhostText: p.showGhostText ?? true,
57
- placeholder: p.placeholder ?? 'Type to search...',
57
+ placeholder: p.placeholder ?? p.copy.placeholder,
58
58
  autoFocus: Boolean(p.autoFocus),
59
59
  disabled: Boolean(p.disabled),
60
60
  portal: p.portal ?? false,
@@ -137,6 +137,7 @@ export const Autocomplete = <T = AutocompleteOption>(props: AutocompleteProps<T>
137
137
 
138
138
  {s.open && (
139
139
  <SuggestionListBox
140
+ copy={props.copy}
140
141
  open={s.open}
141
142
  anchorEl={s.inputRef.current}
142
143
  portal={cfg.portal}
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import type { AutocompleteCopy } from '../../../copy';
2
3
 
3
4
  /**
4
5
  * A suggestion's behavior on select:
@@ -24,6 +25,12 @@ export interface AutocompleteOption<T = unknown> {
24
25
  }
25
26
 
26
27
  export interface AutocompleteProps<T = AutocompleteOption> {
28
+ /**
29
+ * The two rows the dropdown shows in place of options — while an async
30
+ * fetch is in flight, and when it came back empty. REQUIRED: this package
31
+ * ships no default copy.
32
+ */
33
+ copy: AutocompleteCopy;
27
34
  /** Controlled input value */
28
35
  value: string;
29
36
  /** Input value change */
@@ -23,7 +23,7 @@ const containerSx = (monthsToShow: number): SxProps<Theme> => ({
23
23
 
24
24
  export const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>((componentProps, ref) => {
25
25
  const props = resolveCalendarProps(componentProps);
26
- const { monthsToShow, locale, renderHeader, renderFooter, className } = props;
26
+ const { monthsToShow, locale, renderHeader, renderFooter, className, ariaLabel } = props;
27
27
 
28
28
  const calendar = useCalendar(props);
29
29
 
@@ -48,7 +48,7 @@ export const Calendar = React.forwardRef<HTMLDivElement, CalendarProps>((compone
48
48
  ref={ref}
49
49
  className={className}
50
50
  role="application"
51
- aria-label="Calendar"
51
+ aria-label={ariaLabel}
52
52
  tabIndex={0}
53
53
  onKeyDown={calendar.handleKeyDown}
54
54
  data-testid="calendar-container"
@@ -23,6 +23,13 @@ export interface HeaderRenderContext {
23
23
  }
24
24
 
25
25
  export interface CalendarProps {
26
+ /**
27
+ * The grid's accessible name. REQUIRED: the container is a
28
+ * `role="application"`, so a screen reader announces this and nothing else —
29
+ * and the package cannot know whether it picks a delivery day or a birthday.
30
+ */
31
+ ariaLabel: string;
32
+
26
33
  // Mode
27
34
  selectionMode?: SelectionMode; // default: 'single'
28
35
 
@@ -50,7 +50,7 @@ const PlaceholderOverlay = styled(Box)(({ theme }) => ({
50
50
  userSelect: 'none' }));
51
51
 
52
52
  // Monaco editor themes
53
- const EditorLoading: FC = () => (
53
+ const EditorLoading: FC<{ label: string }> = ({ label }) => (
54
54
  <Box
55
55
  sx={{
56
56
  display: 'flex',
@@ -59,7 +59,7 @@ const EditorLoading: FC = () => (
59
59
  height: '100%',
60
60
  color: 'text.secondary' }}
61
61
  >
62
- <Typography variant="body2">Loading editor...</Typography>
62
+ <Typography variant="body2">{label}</Typography>
63
63
  </Box>
64
64
  );
65
65
 
@@ -116,7 +116,8 @@ export const CodeEditor: FC<CodeEditorProps> = (componentProps) => {
116
116
  autoFormat,
117
117
  placeholder,
118
118
  onSave,
119
- dataTestId } = resolveCodeEditorProps(componentProps);
119
+ dataTestId,
120
+ copy } = resolveCodeEditorProps(componentProps);
120
121
 
121
122
  const testId = makeTestId(dataTestId);
122
123
  const editor = useCodeEditor({ themeProp, wordWrap, autoFormat, readOnly, onSave });
@@ -132,6 +133,7 @@ export const CodeEditor: FC<CodeEditorProps> = (componentProps) => {
132
133
  <EditorContainer elevation={2} data-testid={dataTestId || 'code-editor'}>
133
134
  {showToolbar && (
134
135
  <EditorToolbar
136
+ copy={copy}
135
137
  language={language}
136
138
  readOnly={readOnly}
137
139
  isWrapped={editor.isWrapped}
@@ -158,7 +160,7 @@ export const CodeEditor: FC<CodeEditorProps> = (componentProps) => {
158
160
  theme={editor.editorTheme}
159
161
  options={editorOptions}
160
162
  onMount={editor.handleEditorDidMount}
161
- loading={<EditorLoading />}
163
+ loading={<EditorLoading label={copy.loading} />}
162
164
  />
163
165
  </EditorWrapper>
164
166
  </EditorContainer>
@@ -1,10 +1,17 @@
1
1
  // Types for CodeEditor component
2
+ import type { CodeEditorCopy } from '../../../copy';
2
3
 
3
4
  export type EditorLanguage = 'json' | 'javascript' | 'typescript' | 'css' | 'html' | 'yaml' | 'markdown' | 'sql' | 'python';
4
5
 
5
6
  export type EditorTheme = 'light' | 'dark' | 'auto';
6
7
 
7
8
  export interface CodeEditorProps {
9
+ /**
10
+ * The editor's chrome — the loading line, the read-only badge and the four
11
+ * toolbar tooltips, which are also those buttons' accessible names.
12
+ * REQUIRED: this package ships no default copy.
13
+ */
14
+ copy: CodeEditorCopy;
8
15
  /** Programming language for syntax highlighting */
9
16
  language: EditorLanguage;
10
17
  /** Editor height (default: '400px') */
@@ -7,6 +7,8 @@ import { Box, IconButton, Stack, Tooltip, Typography } from '@mui/material';
7
7
  import { alpha, styled } from '@mui/material';
8
8
  import React from 'react';
9
9
 
10
+ import type { CodeEditorCopy } from '../../../copy';
11
+
10
12
  // Each button repeated the same conditional test id; this is that ternary once.
11
13
  const makeTestId =
12
14
  (dataTestId?: string) =>
@@ -37,6 +39,7 @@ const LanguageBadge = styled(Box)(({ theme }) => ({
37
39
  }));
38
40
 
39
41
  const EditorActions: React.FC<{
42
+ copy: CodeEditorCopy;
40
43
  readOnly: boolean;
41
44
  isWrapped: boolean;
42
45
  isCopied: boolean;
@@ -47,6 +50,7 @@ const EditorActions: React.FC<{
47
50
  onWrapToggle: () => void;
48
51
  onFullscreenToggle: () => void;
49
52
  }> = ({
53
+ copy,
50
54
  readOnly,
51
55
  isWrapped,
52
56
  isCopied,
@@ -62,7 +66,7 @@ const EditorActions: React.FC<{
62
66
  return (
63
67
  <Stack direction="row" spacing={1}>
64
68
  {!readOnly && (
65
- <Tooltip title="Format Code (Ctrl+Shift+F)">
69
+ <Tooltip title={copy.formatCode}>
66
70
  <IconButton
67
71
  size="small"
68
72
  onClick={onFormat}
@@ -73,7 +77,7 @@ const EditorActions: React.FC<{
73
77
  </Tooltip>
74
78
  )}
75
79
 
76
- <Tooltip title={isWrapped ? 'Disable Word Wrap' : 'Enable Word Wrap'}>
80
+ <Tooltip title={isWrapped ? copy.disableWrap : copy.enableWrap}>
77
81
  <IconButton
78
82
  size="small"
79
83
  onClick={onWrapToggle}
@@ -84,7 +88,7 @@ const EditorActions: React.FC<{
84
88
  </IconButton>
85
89
  </Tooltip>
86
90
 
87
- <Tooltip title={isCopied ? 'Copied!' : 'Copy to Clipboard'}>
91
+ <Tooltip title={isCopied ? copy.copied : copy.copyToClipboard}>
88
92
  <IconButton
89
93
  size="small"
90
94
  onClick={onCopy}
@@ -95,7 +99,7 @@ const EditorActions: React.FC<{
95
99
  </IconButton>
96
100
  </Tooltip>
97
101
 
98
- <Tooltip title={isFullscreen ? 'Exit Fullscreen' : 'Enter Fullscreen'}>
102
+ <Tooltip title={isFullscreen ? copy.exitFullscreen : copy.enterFullscreen}>
99
103
  <IconButton
100
104
  size="small"
101
105
  onClick={onFullscreenToggle}
@@ -114,6 +118,7 @@ const EditorActions: React.FC<{
114
118
 
115
119
  // Language badge, read-only marker and the four action buttons.
116
120
  export const EditorToolbar: React.FC<{
121
+ copy: CodeEditorCopy;
117
122
  language: string;
118
123
  readOnly: boolean;
119
124
  isWrapped: boolean;
@@ -125,6 +130,7 @@ export const EditorToolbar: React.FC<{
125
130
  onWrapToggle: () => void;
126
131
  onFullscreenToggle: () => void;
127
132
  }> = ({
133
+ copy,
128
134
  language,
129
135
  readOnly,
130
136
  isWrapped,
@@ -147,12 +153,13 @@ export const EditorToolbar: React.FC<{
147
153
  </LanguageBadge>
148
154
  {readOnly && (
149
155
  <Typography variant="caption" color="text.secondary">
150
- Read Only
156
+ {copy.readOnly}
151
157
  </Typography>
152
158
  )}
153
159
  </Stack>
154
160
 
155
161
  <EditorActions
162
+ copy={copy}
156
163
  readOnly={readOnly}
157
164
  isWrapped={isWrapped}
158
165
  isCopied={isCopied}
@@ -61,6 +61,8 @@ export function defaultMessages(): DateRangePickerMessages {
61
61
  reversed: 'The end date must be on or after the start date.',
62
62
  overMax: ({ maxRangeDays }) => `Choose a range of at most ${maxRangeDays} days.`,
63
63
  summary: ({ from, to }) => `${isoToBr(from)} – ${isoToBr(to)}`,
64
+ calendarLabel: 'Calendar',
65
+ dayMask: 'dd/mm/yyyy',
64
66
  };
65
67
  }
66
68
 
@@ -129,6 +129,7 @@ function useMonthCount(requested: number | undefined): number | undefined {
129
129
 
130
130
  /** The grid, in range mode — `Calendar`, never a second implementation of one. */
131
131
  function RangeCalendar({
132
+ calendarLabel,
132
133
  picker,
133
134
  value,
134
135
  locale,
@@ -142,10 +143,12 @@ function RangeCalendar({
142
143
  weekStartsOn: WeekStart;
143
144
  months: number | undefined;
144
145
  maxRangeDays: number | undefined;
146
+ calendarLabel: string;
145
147
  }): React.JSX.Element {
146
148
  return (
147
149
  <Calendar
148
150
  key={picker.viewNonce}
151
+ ariaLabel={calendarLabel}
149
152
  className={CALENDAR_CLASS}
150
153
  selectionMode="range"
151
154
  locale={locale}
@@ -223,6 +226,7 @@ export function DateRangePicker({
223
226
  <Paper className={className} data-testid={dataTestId} sx={ROOT_SX}>
224
227
  <Box sx={BODY_SX}>
225
228
  <RangeCalendar
229
+ calendarLabel={picker.copy.calendarLabel}
226
230
  picker={picker}
227
231
  value={value}
228
232
  locale={locale}
@@ -96,6 +96,17 @@ export interface DateRangePickerMessages {
96
96
  overMax: (info: { maxRangeDays: number; days: number }) => string;
97
97
  /** The chosen window, in words. */
98
98
  summary: (window: DayWindow) => string;
99
+ /**
100
+ * The month grid's accessible name. The grid is a `role="application"`, so
101
+ * this is the only thing a screen reader announces for it.
102
+ */
103
+ calendarLabel: string;
104
+ /**
105
+ * The two fields' mask, which IS their placeholder — the expected ORDER is
106
+ * on screen before the first keystroke rather than discovered by getting it
107
+ * wrong. `dd/mm/aaaa` is one locale's order and one locale's letters.
108
+ */
109
+ dayMask: string;
99
110
  }
100
111
 
101
112
  /** Which of the three views moved the range, and what it moved it to. */
@@ -57,6 +57,7 @@ export function DateRangeFields({
57
57
  <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>
58
58
  <Box sx={{ display: 'flex', flexWrap: 'wrap', gap: 2 }}>
59
59
  <DayBoundInput
60
+ mask={messages.dayMask}
60
61
  label={messages.from}
61
62
  value={value.from ?? undefined}
62
63
  onChange={(bound) => onEdit('from', bound ?? null)}
@@ -65,6 +66,7 @@ export function DateRangeFields({
65
66
  describedBy={statusId}
66
67
  />
67
68
  <DayBoundInput
69
+ mask={messages.dayMask}
68
70
  label={messages.to}
69
71
  value={value.to ?? undefined}
70
72
  onChange={(bound) => onEdit('to', bound ?? null)}
@@ -7,6 +7,7 @@ import { MenubarSeparator } from './Menubar.separator';
7
7
  import type { MenubarItem, MenubarProps } from './Menubar.types';
8
8
 
9
9
  export interface MenubarToolbarProps {
10
+ ariaLabel: string;
10
11
  barSx: CSSObject;
11
12
  items: MenubarItem[];
12
13
  size: NonNullable<MenubarProps['size']>;
@@ -31,6 +32,7 @@ export interface MenubarToolbarProps {
31
32
  * wrapping it differs.
32
33
  */
33
34
  export const MenubarToolbar: React.FC<MenubarToolbarProps> = ({
35
+ ariaLabel,
34
36
  barSx,
35
37
  items,
36
38
  size,
@@ -53,7 +55,7 @@ export const MenubarToolbar: React.FC<MenubarToolbarProps> = ({
53
55
  return (
54
56
  <Toolbar
55
57
  role="toolbar"
56
- aria-label="Main navigation"
58
+ aria-label={ariaLabel}
57
59
  sx={{
58
60
  ...barSx,
59
61
  width: fullWidth ? '100%' : 'auto',
@@ -47,7 +47,7 @@ type ResolvedProps = MenubarProps & Required<Pick<MenubarProps, keyof typeof DEF
47
47
 
48
48
  export const Menubar: React.FC<MenubarProps> = (props) => {
49
49
  const {
50
- items, variant, size, color, orientation, glow, pulse, glass, gradient,
50
+ ariaLabel, items, variant, size, color, orientation, glow, pulse, glass, gradient,
51
51
  loading, disabled, className, style, logo, endContent, sticky, transparent,
52
52
  blur, elevation, fullWidth, onClick, onFocus, onBlur,
53
53
  'data-testid': dataTestId,
@@ -65,6 +65,7 @@ export const Menubar: React.FC<MenubarProps> = (props) => {
65
65
 
66
66
  const content = (
67
67
  <MenubarToolbar
68
+ ariaLabel={ariaLabel}
68
69
  barSx={barSx}
69
70
  items={items}
70
71
  size={size}
@@ -13,6 +13,11 @@ export interface MenubarItem {
13
13
  }
14
14
 
15
15
  export interface MenubarProps {
16
+ /**
17
+ * The bar's accessible name. REQUIRED: it is a `role="toolbar"` whose items
18
+ * are the host's own, so only the host can say what this bar navigates.
19
+ */
20
+ ariaLabel: string;
16
21
  items: MenubarItem[];
17
22
  variant?: 'default' | 'glass' | 'gradient' | 'elevated' | 'minimal' | 'bordered';
18
23
  size?: SizeValue;
@@ -4,6 +4,7 @@ import WarningIcon from '@mui/icons-material/Warning';
4
4
  import { Box, Typography } from '@mui/material';
5
5
  import React from 'react';
6
6
 
7
+ import type { PasswordRequirementCopy, PasswordStrengthCopy } from '../../../copy';
7
8
  import type { PasswordRequirements } from './PasswordStrength.types';
8
9
 
9
10
  export const defaultRequirements: PasswordRequirements = {
@@ -72,15 +73,19 @@ export const calculatePasswordStrength = (
72
73
  return Math.min(earned + lengthBonus(password.length), 100);
73
74
  };
74
75
 
75
- const STRENGTH_LABELS: ReadonlyArray<[number, string]> = [
76
- [20, 'Very Weak'],
77
- [40, 'Weak'],
78
- [60, 'Fair'],
79
- [80, 'Good'],
76
+ // The four ceilings, and which band each one names. The band NAMES come from
77
+ // the host's table — only the thresholds are ours.
78
+ const STRENGTH_BANDS: ReadonlyArray<[number, keyof PasswordStrengthCopy['bands']]> = [
79
+ [20, 'veryWeak'],
80
+ [40, 'weak'],
81
+ [60, 'fair'],
82
+ [80, 'good'],
80
83
  ];
81
84
 
82
- export const getStrengthLabel = (strength: number): string =>
83
- STRENGTH_LABELS.find(([ceiling]) => strength <= ceiling)?.[1] ?? 'Strong';
85
+ export const getStrengthLabel = (
86
+ strength: number,
87
+ bands: PasswordStrengthCopy['bands'],
88
+ ): string => bands[STRENGTH_BANDS.find(([ceiling]) => strength <= ceiling)?.[1] ?? 'strong'];
84
89
 
85
90
  export const getStrengthIcon = (strength: number) => {
86
91
  if (strength <= 40) return <WarningIcon />;
@@ -88,23 +93,34 @@ export const getStrengthIcon = (strength: number) => {
88
93
  return <SuccessIcon />;
89
94
  };
90
95
 
91
- const SUGGESTIONS: ReadonlyArray<[keyof RequirementChecks, string]> = [
92
- ['length', 'Use at least 8 characters'],
93
- ['uppercase', 'Add uppercase letters'],
94
- ['lowercase', 'Add lowercase letters'],
95
- ['numbers', 'Include numbers'],
96
- ['special', 'Add special characters'],
96
+ // One tip per unmet requirement, in checklist order. The `length` tip carries
97
+ // the configured minimum, so the number in the sentence is the one enforced.
98
+ const SUGGESTION_KEYS: ReadonlyArray<[keyof RequirementChecks, keyof PasswordRequirementCopy]> = [
99
+ ['length', 'minLength'],
100
+ ['uppercase', 'uppercase'],
101
+ ['lowercase', 'lowercase'],
102
+ ['numbers', 'numbers'],
103
+ ['special', 'special'],
97
104
  ];
98
105
 
99
- export const buildSuggestions = (checks: RequirementChecks): string[] =>
100
- SUGGESTIONS.filter(([key]) => !checks[key]).map(([, tip]) => tip);
106
+ export const buildSuggestions = (
107
+ checks: RequirementChecks,
108
+ copy: PasswordRequirementCopy,
109
+ minLength: number,
110
+ ): string[] =>
111
+ SUGGESTION_KEYS.filter(([check]) => !checks[check]).map(([, key]) =>
112
+ key === 'minLength' ? copy.minLength(minLength) : copy[key],
113
+ );
101
114
 
102
115
  // Rendered by PasswordStrength; depends on nothing styled, so it lives beside
103
116
  // the pure helpers rather than in the component file.
104
- export const SuggestionsList: React.FC<{ suggestions: string[] }> = ({ suggestions }) => (
117
+ export const SuggestionsList: React.FC<{ suggestions: string[]; heading: string }> = ({
118
+ suggestions,
119
+ heading,
120
+ }) => (
105
121
  <Box>
106
122
  <Typography variant="caption" color="text.secondary" fontWeight="medium">
107
- Suggestions:
123
+ {heading}
108
124
  </Typography>
109
125
  <Box sx={{ mt: 1 }}>
110
126
  {suggestions.map((tip) => (