@12-apps/ui 6.7.0 → 6.9.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 (405) hide show
  1. package/dist/chunk-3X3JVF6E.js +438 -0
  2. package/dist/chunk-3X3JVF6E.js.map +1 -0
  3. package/dist/chunk-AL3W7TXN.js +465 -0
  4. package/dist/chunk-AL3W7TXN.js.map +1 -0
  5. package/dist/{chunk-QLBYAYUG.js → chunk-KR2BP7NK.js} +4 -4
  6. package/dist/chunk-KR2BP7NK.js.map +1 -0
  7. package/dist/{chunk-DFVRZ3UK.js → chunk-KXARS46L.js} +3 -3
  8. package/dist/chunk-KXARS46L.js.map +1 -0
  9. package/dist/{chunk-JP55QWVR.js → chunk-L7L6SX64.js} +5 -2
  10. package/dist/chunk-L7L6SX64.js.map +1 -0
  11. package/dist/{chunk-QZZVHY6U.js → chunk-PVLDKXKR.js} +7 -3
  12. package/dist/chunk-PVLDKXKR.js.map +1 -0
  13. package/dist/{chunk-H7UAGTVW.js → chunk-TSG5C7MP.js} +4 -3
  14. package/dist/chunk-TSG5C7MP.js.map +1 -0
  15. package/dist/{chunk-NUCLEOHF.js → chunk-UNM7KFDX.js} +44 -14
  16. package/dist/chunk-UNM7KFDX.js.map +1 -0
  17. package/dist/{chunk-CEKPLUQV.js → chunk-UY7UF7IN.js} +19 -13
  18. package/dist/chunk-UY7UF7IN.js.map +1 -0
  19. package/dist/data-display/DataGrid.js +1 -1
  20. package/dist/data-display/DataViews.js +88 -65
  21. package/dist/data-display/DataViews.js.map +1 -1
  22. package/dist/data-display/HoverCard.js +4 -1
  23. package/dist/data-display/HoverCard.js.map +1 -1
  24. package/dist/data-display/Table.js +4 -2
  25. package/dist/data-display/Table.js.map +1 -1
  26. package/dist/data-display/TimingDiagram.js +3 -2
  27. package/dist/data-display/TimingDiagram.js.map +1 -1
  28. package/dist/en-US.js +56 -0
  29. package/dist/en-US.js.map +1 -0
  30. package/dist/feedback/Sonner.js +5 -4
  31. package/dist/feedback/Sonner.js.map +1 -1
  32. package/dist/feedback/StackedModal.js +1 -1
  33. package/dist/feedback/TutorialOverlay.js +19 -5
  34. package/dist/feedback/TutorialOverlay.js.map +1 -1
  35. package/dist/form/AddressAutocomplete.js +16 -8
  36. package/dist/form/AddressAutocomplete.js.map +1 -1
  37. package/dist/form/Autocomplete.js +9 -7
  38. package/dist/form/Autocomplete.js.map +1 -1
  39. package/dist/form/Calendar.js +1 -1
  40. package/dist/form/CodeEditor.js +14 -9
  41. package/dist/form/CodeEditor.js.map +1 -1
  42. package/dist/form/DateRangePicker.js +10 -3
  43. package/dist/form/DateRangePicker.js.map +1 -1
  44. package/dist/form/Menubar.js +4 -1
  45. package/dist/form/Menubar.js.map +1 -1
  46. package/dist/form/PasswordStrength.js +48 -28
  47. package/dist/form/PasswordStrength.js.map +1 -1
  48. package/dist/form/PhoneInput.js +11 -5
  49. package/dist/form/PhoneInput.js.map +1 -1
  50. package/dist/form/SearchPalette.js +4 -1
  51. package/dist/form/SearchPalette.js.map +1 -1
  52. package/dist/form/Textarea.js +21 -19
  53. package/dist/form/Textarea.js.map +1 -1
  54. package/dist/form/UploadButton.js +16 -11
  55. package/dist/form/UploadButton.js.map +1 -1
  56. package/dist/layout/ContentToolbar.js +1 -1
  57. package/dist/layout/Dashboard.js +2 -1
  58. package/dist/layout/Dashboard.js.map +1 -1
  59. package/dist/layout/ScrollArea.js +9 -3
  60. package/dist/layout/ScrollArea.js.map +1 -1
  61. package/dist/layout/TableFilter.js +1 -1
  62. package/dist/locales.js +171 -0
  63. package/dist/locales.js.map +1 -0
  64. package/dist/navigation/Breadcrumbs.js +9 -3
  65. package/dist/navigation/Breadcrumbs.js.map +1 -1
  66. package/dist/navigation/CommandPalette.js +20 -7
  67. package/dist/navigation/CommandPalette.js.map +1 -1
  68. package/dist/navigation/Pagination.js +1 -1
  69. package/dist/navigation/Tabs.js +7 -3
  70. package/dist/navigation/Tabs.js.map +1 -1
  71. package/dist/pt-BR.js +42 -274
  72. package/dist/pt-BR.js.map +1 -1
  73. package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts +1 -0
  74. package/dist/types/components/data-display/DataGrid/DataGrid.states.d.ts.map +1 -1
  75. package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts +5 -0
  76. package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts.map +1 -1
  77. package/dist/types/components/data-display/DataViews/data-views-category-pill.d.ts.map +1 -1
  78. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +27 -1
  79. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
  80. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts +12 -1
  81. package/dist/types/components/data-display/DataViews/data-views-day-input.d.ts.map +1 -1
  82. package/dist/types/components/data-display/DataViews/data-views-filter-panel.d.ts.map +1 -1
  83. package/dist/types/components/data-display/DataViews/data-views-grid-bodies.d.ts.map +1 -1
  84. package/dist/types/components/data-display/DataViews/data-views-grid-parts.d.ts.map +1 -1
  85. package/dist/types/components/data-display/DataViews/data-views-more-fields.d.ts.map +1 -1
  86. package/dist/types/components/data-display/DataViews/data-views-pagination.d.ts.map +1 -1
  87. package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
  88. package/dist/types/components/data-display/DataViews/data-views-toolbar.d.ts.map +1 -1
  89. package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts +1 -1
  90. package/dist/types/components/data-display/HoverCard/HoverCard.content.d.ts.map +1 -1
  91. package/dist/types/components/data-display/HoverCard/HoverCard.d.ts.map +1 -1
  92. package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts +2 -0
  93. package/dist/types/components/data-display/HoverCard/HoverCard.types.d.ts.map +1 -1
  94. package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
  95. package/dist/types/components/data-display/Table/Table.types.d.ts +5 -0
  96. package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
  97. package/dist/types/components/data-display/Table/TableStates.d.ts +3 -1
  98. package/dist/types/components/data-display/Table/TableStates.d.ts.map +1 -1
  99. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.d.ts.map +1 -1
  100. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts +3 -0
  101. package/dist/types/components/data-display/TimingDiagram/TimingDiagram.types.d.ts.map +1 -1
  102. package/dist/types/components/feedback/Sonner/Sonner.d.ts +8 -0
  103. package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
  104. package/dist/types/components/feedback/Sonner/Sonner.types.d.ts +2 -0
  105. package/dist/types/components/feedback/Sonner/Sonner.types.d.ts.map +1 -1
  106. package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
  107. package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
  108. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
  109. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
  110. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +2 -0
  111. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
  112. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  113. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts +3 -0
  114. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.types.d.ts.map +1 -1
  115. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts +2 -0
  116. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  117. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts +7 -0
  118. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.types.d.ts.map +1 -1
  119. package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
  120. package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts +1 -0
  121. package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts.map +1 -1
  122. package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts +1 -0
  123. package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts.map +1 -1
  124. package/dist/types/components/form/Autocomplete/Autocomplete.d.ts.map +1 -1
  125. package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts +9 -3
  126. package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts.map +1 -1
  127. package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts +7 -0
  128. package/dist/types/components/form/Autocomplete/Autocomplete.types.d.ts.map +1 -1
  129. package/dist/types/components/form/Calendar/Calendar.types.d.ts +6 -0
  130. package/dist/types/components/form/Calendar/Calendar.types.d.ts.map +1 -1
  131. package/dist/types/components/form/CodeEditor/CodeEditor.d.ts.map +1 -1
  132. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts +7 -0
  133. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts.map +1 -1
  134. package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts +2 -0
  135. package/dist/types/components/form/CodeEditor/CodeEditorToolbar.d.ts.map +1 -1
  136. package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  137. package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
  138. package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts +11 -0
  139. package/dist/types/components/form/DateRangePicker/DateRangePicker.types.d.ts.map +1 -1
  140. package/dist/types/components/form/DateRangePicker/DateRangePickerFields.d.ts.map +1 -1
  141. package/dist/types/components/form/Menubar/Menubar.d.ts.map +1 -1
  142. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts +1 -0
  143. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts.map +1 -1
  144. package/dist/types/components/form/Menubar/Menubar.types.d.ts +5 -0
  145. package/dist/types/components/form/Menubar/Menubar.types.d.ts.map +1 -1
  146. package/dist/types/components/form/PasswordStrength/PasswordStrength.d.ts.map +1 -1
  147. package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts +4 -2
  148. package/dist/types/components/form/PasswordStrength/PasswordStrength.helpers.d.ts.map +1 -1
  149. package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts +8 -0
  150. package/dist/types/components/form/PasswordStrength/PasswordStrength.types.d.ts.map +1 -1
  151. package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
  152. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +7 -0
  153. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
  154. package/dist/types/components/form/SearchPalette/SearchPalette.d.ts.map +1 -1
  155. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts +2 -0
  156. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
  157. package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts +6 -0
  158. package/dist/types/components/form/SearchPalette/SearchPalette.types.d.ts.map +1 -1
  159. package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
  160. package/dist/types/components/form/Textarea/Textarea.types.d.ts +16 -1
  161. package/dist/types/components/form/Textarea/Textarea.types.d.ts.map +1 -1
  162. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts +7 -0
  163. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
  164. package/dist/types/components/form/UploadButton/UploadButton.d.ts.map +1 -1
  165. package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts +6 -3
  166. package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
  167. package/dist/types/components/form/UploadButton/UploadButton.types.d.ts +7 -0
  168. package/dist/types/components/form/UploadButton/UploadButton.types.d.ts.map +1 -1
  169. package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts +1 -1
  170. package/dist/types/components/layout/ContentToolbar/ContentToolbar.d.ts.map +1 -1
  171. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +12 -0
  172. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
  173. package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts +1 -1
  174. package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
  175. package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts +1 -1
  176. package/dist/types/components/layout/ContentToolbar/SortByDropdown.d.ts.map +1 -1
  177. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
  178. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
  179. package/dist/types/components/layout/Dashboard/Dashboard.d.ts +1 -1
  180. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +4 -0
  181. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
  182. package/dist/types/components/layout/Dashboard/DashboardParts.d.ts +1 -1
  183. package/dist/types/components/layout/Dashboard/DashboardParts.d.ts.map +1 -1
  184. package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
  185. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +21 -3
  186. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts.map +1 -1
  187. package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts +2 -0
  188. package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
  189. package/dist/types/components/layout/TableFilter/TableFilter.d.ts +1 -1
  190. package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
  191. package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts +7 -0
  192. package/dist/types/components/layout/TableFilter/TableFilter.types.d.ts.map +1 -1
  193. package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts +9 -0
  194. package/dist/types/components/layout/TableFilter/TableFilterContext.d.ts.map +1 -1
  195. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts +2 -0
  196. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEntry.d.ts.map +1 -1
  197. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  198. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +3 -0
  199. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts.map +1 -1
  200. package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
  201. package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts +3 -0
  202. package/dist/types/components/navigation/CommandPalette/CommandPalette.types.d.ts.map +1 -1
  203. package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts +2 -0
  204. package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
  205. package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
  206. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +2 -0
  207. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts.map +1 -1
  208. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts +2 -0
  209. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
  210. package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
  211. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -0
  212. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts.map +1 -1
  213. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
  214. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts +6 -2
  215. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts.map +1 -1
  216. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts +6 -0
  217. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts.map +1 -1
  218. package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts +4 -2
  219. package/dist/types/components/utility/InstallPrompt/InstallPrompt.d.ts.map +1 -1
  220. package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts +8 -7
  221. package/dist/types/components/utility/InstallPrompt/InstallPrompt.types.d.ts.map +1 -1
  222. package/dist/types/copy/data-display.d.ts +56 -0
  223. package/dist/types/copy/data-display.d.ts.map +1 -0
  224. package/dist/types/copy/feedback.d.ts +38 -0
  225. package/dist/types/copy/feedback.d.ts.map +1 -0
  226. package/dist/types/copy/form.d.ts +146 -0
  227. package/dist/types/copy/form.d.ts.map +1 -0
  228. package/dist/types/copy/layout.d.ts +18 -0
  229. package/dist/types/copy/layout.d.ts.map +1 -0
  230. package/dist/types/copy/navigation.d.ts +24 -0
  231. package/dist/types/copy/navigation.d.ts.map +1 -0
  232. package/dist/types/copy/shared.d.ts +119 -0
  233. package/dist/types/copy/shared.d.ts.map +1 -0
  234. package/dist/types/copy/utility.d.ts +35 -0
  235. package/dist/types/copy/utility.d.ts.map +1 -0
  236. package/dist/types/copy.d.ts +12 -165
  237. package/dist/types/copy.d.ts.map +1 -1
  238. package/dist/types/en-US.d.ts +24 -0
  239. package/dist/types/en-US.d.ts.map +1 -0
  240. package/dist/types/en-US.data-display.d.ts +13 -0
  241. package/dist/types/en-US.data-display.d.ts.map +1 -0
  242. package/dist/types/en-US.feedback.d.ts +8 -0
  243. package/dist/types/en-US.feedback.d.ts.map +1 -0
  244. package/dist/types/en-US.form.d.ts +13 -0
  245. package/dist/types/en-US.form.d.ts.map +1 -0
  246. package/dist/types/en-US.layout.d.ts +7 -0
  247. package/dist/types/en-US.layout.d.ts.map +1 -0
  248. package/dist/types/en-US.navigation.d.ts +8 -0
  249. package/dist/types/en-US.navigation.d.ts.map +1 -0
  250. package/dist/types/en-US.shared.d.ts +26 -0
  251. package/dist/types/en-US.shared.d.ts.map +1 -0
  252. package/dist/types/en-US.utility.d.ts +8 -0
  253. package/dist/types/en-US.utility.d.ts.map +1 -0
  254. package/dist/types/locales.d.ts +53 -0
  255. package/dist/types/locales.d.ts.map +1 -0
  256. package/dist/types/pt-BR.d.ts +15 -22
  257. package/dist/types/pt-BR.d.ts.map +1 -1
  258. package/dist/types/pt-BR.data-display.d.ts +13 -0
  259. package/dist/types/pt-BR.data-display.d.ts.map +1 -0
  260. package/dist/types/pt-BR.feedback.d.ts +8 -0
  261. package/dist/types/pt-BR.feedback.d.ts.map +1 -0
  262. package/dist/types/pt-BR.form.d.ts +13 -0
  263. package/dist/types/pt-BR.form.d.ts.map +1 -0
  264. package/dist/types/pt-BR.layout.d.ts +7 -0
  265. package/dist/types/pt-BR.layout.d.ts.map +1 -0
  266. package/dist/types/pt-BR.navigation.d.ts +8 -0
  267. package/dist/types/pt-BR.navigation.d.ts.map +1 -0
  268. package/dist/types/pt-BR.shared.d.ts +21 -0
  269. package/dist/types/pt-BR.shared.d.ts.map +1 -0
  270. package/dist/types/pt-BR.utility.d.ts +8 -0
  271. package/dist/types/pt-BR.utility.d.ts.map +1 -0
  272. package/dist/types/user-avatar/user-avatar.d.ts +7 -1
  273. package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
  274. package/dist/user-avatar.js +2 -2
  275. package/dist/user-avatar.js.map +1 -1
  276. package/dist/utility/InfiniteScroll.js +7 -5
  277. package/dist/utility/InfiniteScroll.js.map +1 -1
  278. package/dist/utility/InstallPrompt.js +14 -13
  279. package/dist/utility/InstallPrompt.js.map +1 -1
  280. package/package.json +10 -1
  281. package/src/components/data-display/DataGrid/DataGrid.states.tsx +3 -3
  282. package/src/components/data-display/DataGrid/DataGrid.tsx +1 -1
  283. package/src/components/data-display/DataGrid/DataGrid.types.ts +5 -0
  284. package/src/components/data-display/DataViews/data-views-category-pill.tsx +2 -0
  285. package/src/components/data-display/DataViews/data-views-copy.ts +27 -1
  286. package/src/components/data-display/DataViews/data-views-day-input.tsx +14 -3
  287. package/src/components/data-display/DataViews/data-views-filter-panel.tsx +2 -1
  288. package/src/components/data-display/DataViews/data-views-grid-bodies.tsx +3 -0
  289. package/src/components/data-display/DataViews/data-views-grid-parts.tsx +9 -10
  290. package/src/components/data-display/DataViews/data-views-more-fields.tsx +3 -1
  291. package/src/components/data-display/DataViews/data-views-pagination.tsx +3 -0
  292. package/src/components/data-display/DataViews/data-views-range-pill.tsx +3 -1
  293. package/src/components/data-display/DataViews/data-views-toolbar.tsx +2 -0
  294. package/src/components/data-display/HoverCard/HoverCard.content.tsx +10 -2
  295. package/src/components/data-display/HoverCard/HoverCard.tsx +2 -3
  296. package/src/components/data-display/HoverCard/HoverCard.types.ts +2 -0
  297. package/src/components/data-display/Table/Table.tsx +7 -2
  298. package/src/components/data-display/Table/Table.types.ts +5 -0
  299. package/src/components/data-display/Table/TableStates.tsx +2 -2
  300. package/src/components/data-display/TimingDiagram/TimingDiagram.tsx +3 -2
  301. package/src/components/data-display/TimingDiagram/TimingDiagram.types.ts +3 -0
  302. package/src/components/feedback/Sonner/Sonner.tsx +15 -3
  303. package/src/components/feedback/Sonner/Sonner.types.ts +2 -0
  304. package/src/components/feedback/Sonner/SonnerToast.tsx +2 -1
  305. package/src/components/feedback/StackedModal/StackedModal.parts.tsx +10 -3
  306. package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
  307. package/src/components/feedback/StackedModal/StackedModal.types.ts +2 -0
  308. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +13 -1
  309. package/src/components/feedback/TutorialOverlay/TutorialOverlay.types.ts +3 -0
  310. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +10 -4
  311. package/src/components/form/AddressAutocomplete/AddressAutocomplete.types.ts +7 -0
  312. package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +2 -0
  313. package/src/components/form/AddressAutocomplete/AddressFallbackField.tsx +4 -2
  314. package/src/components/form/AddressAutocomplete/AddressInputField.tsx +13 -6
  315. package/src/components/form/Autocomplete/Autocomplete.parts.tsx +9 -6
  316. package/src/components/form/Autocomplete/Autocomplete.tsx +2 -1
  317. package/src/components/form/Autocomplete/Autocomplete.types.ts +7 -0
  318. package/src/components/form/Calendar/Calendar.tsx +2 -2
  319. package/src/components/form/Calendar/Calendar.types.ts +7 -0
  320. package/src/components/form/CodeEditor/CodeEditor.tsx +6 -4
  321. package/src/components/form/CodeEditor/CodeEditor.types.ts +7 -0
  322. package/src/components/form/CodeEditor/CodeEditorToolbar.tsx +12 -5
  323. package/src/components/form/DateRangePicker/DateRangePicker.range.ts +2 -0
  324. package/src/components/form/DateRangePicker/DateRangePicker.tsx +4 -0
  325. package/src/components/form/DateRangePicker/DateRangePicker.types.ts +11 -0
  326. package/src/components/form/DateRangePicker/DateRangePickerFields.tsx +2 -0
  327. package/src/components/form/Menubar/Menubar.toolbar.tsx +3 -1
  328. package/src/components/form/Menubar/Menubar.tsx +2 -1
  329. package/src/components/form/Menubar/Menubar.types.ts +5 -0
  330. package/src/components/form/PasswordStrength/PasswordStrength.helpers.tsx +33 -17
  331. package/src/components/form/PasswordStrength/PasswordStrength.tsx +29 -13
  332. package/src/components/form/PasswordStrength/PasswordStrength.types.ts +9 -0
  333. package/src/components/form/PhoneInput/PhoneInput.tsx +15 -5
  334. package/src/components/form/PhoneInput/PhoneInput.types.ts +7 -0
  335. package/src/components/form/SearchPalette/SearchPalette.parts.tsx +4 -1
  336. package/src/components/form/SearchPalette/SearchPalette.tsx +4 -1
  337. package/src/components/form/SearchPalette/SearchPalette.types.ts +6 -0
  338. package/src/components/form/Textarea/Textarea.tsx +6 -1
  339. package/src/components/form/Textarea/Textarea.types.ts +14 -1
  340. package/src/components/form/Textarea/TextareaRichEditor.tsx +28 -18
  341. package/src/components/form/UploadButton/UploadButton.parts.tsx +16 -7
  342. package/src/components/form/UploadButton/UploadButton.tsx +4 -1
  343. package/src/components/form/UploadButton/UploadButton.types.ts +8 -0
  344. package/src/components/layout/ContentToolbar/ContentToolbar.tsx +10 -2
  345. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +12 -0
  346. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +15 -4
  347. package/src/components/layout/ContentToolbar/SortByDropdown.tsx +12 -3
  348. package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -1
  349. package/src/components/layout/Dashboard/Dashboard.types.ts +4 -0
  350. package/src/components/layout/Dashboard/DashboardParts.tsx +2 -1
  351. package/src/components/layout/ScrollArea/ScrollArea.tsx +16 -3
  352. package/src/components/layout/ScrollArea/ScrollArea.types.ts +19 -4
  353. package/src/components/layout/ScrollArea/ScrollViewport.tsx +4 -1
  354. package/src/components/layout/TableFilter/TableFilter.tsx +19 -11
  355. package/src/components/layout/TableFilter/TableFilter.types.ts +8 -0
  356. package/src/components/layout/TableFilter/TableFilterContext.tsx +10 -0
  357. package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +11 -4
  358. package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +2 -0
  359. package/src/components/navigation/Breadcrumbs/Breadcrumbs.types.ts +3 -0
  360. package/src/components/navigation/CommandPalette/CommandPalette.tsx +15 -5
  361. package/src/components/navigation/CommandPalette/CommandPalette.types.ts +3 -0
  362. package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -2
  363. package/src/components/navigation/Pagination/Pagination.tsx +2 -0
  364. package/src/components/navigation/Pagination/Pagination.types.ts +2 -0
  365. package/src/components/navigation/Pagination/PaginationParts.tsx +4 -1
  366. package/src/components/navigation/Tabs/Tabs.tsx +8 -3
  367. package/src/components/navigation/Tabs/Tabs.types.ts +2 -0
  368. package/src/components/utility/InfiniteScroll/InfiniteScroll.parts.tsx +4 -4
  369. package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +4 -2
  370. package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +6 -0
  371. package/src/components/utility/InstallPrompt/InstallPrompt.tsx +18 -13
  372. package/src/components/utility/InstallPrompt/InstallPrompt.types.ts +9 -7
  373. package/src/copy/data-display.ts +60 -0
  374. package/src/copy/feedback.ts +39 -0
  375. package/src/copy/form.ts +154 -0
  376. package/src/copy/layout.ts +18 -0
  377. package/src/copy/navigation.ts +25 -0
  378. package/src/copy/shared.ts +122 -0
  379. package/src/copy/utility.ts +36 -0
  380. package/src/copy.ts +12 -173
  381. package/src/en-US.data-display.ts +244 -0
  382. package/src/en-US.feedback.ts +25 -0
  383. package/src/en-US.form.ts +103 -0
  384. package/src/en-US.layout.ts +15 -0
  385. package/src/en-US.navigation.ts +23 -0
  386. package/src/en-US.shared.ts +105 -0
  387. package/src/en-US.ts +24 -0
  388. package/src/en-US.utility.ts +24 -0
  389. package/src/locales.ts +151 -0
  390. package/src/pt-BR.data-display.ts +236 -0
  391. package/src/pt-BR.feedback.ts +25 -0
  392. package/src/pt-BR.form.ts +96 -0
  393. package/src/pt-BR.layout.ts +15 -0
  394. package/src/pt-BR.navigation.ts +21 -0
  395. package/src/pt-BR.shared.ts +94 -0
  396. package/src/pt-BR.ts +15 -307
  397. package/src/pt-BR.utility.ts +21 -0
  398. package/src/user-avatar/user-avatar.tsx +8 -2
  399. package/dist/chunk-CEKPLUQV.js.map +0 -1
  400. package/dist/chunk-DFVRZ3UK.js.map +0 -1
  401. package/dist/chunk-H7UAGTVW.js.map +0 -1
  402. package/dist/chunk-JP55QWVR.js.map +0 -1
  403. package/dist/chunk-NUCLEOHF.js.map +0 -1
  404. package/dist/chunk-QLBYAYUG.js.map +0 -1
  405. package/dist/chunk-QZZVHY6U.js.map +0 -1
@@ -1,8 +1,21 @@
1
+ import type { RichEditorToolbarCopy } from '../../../copy';
1
2
  import type { ColorValue, SizeValue } from '../../../tokens/scales';
2
3
  import type { TextareaAutosizeProps } from '@mui/material';
3
4
  import type React from 'react';
4
5
 
5
- export interface TextareaProps extends Omit<TextareaAutosizeProps, 'variant' | 'color' | 'size'> {
6
+ /**
7
+ * The rich variant mounts a formatting toolbar of ten glyph buttons; the other
8
+ * three variants mount no toolbar at all. So only that variant owes the words
9
+ * — a plain textarea is not asked for tooltips it has nowhere to put.
10
+ */
11
+ type TextareaRichCopy =
12
+ | { variant?: 'default' | 'autosize' | 'resizable'; richEditorCopy?: never }
13
+ | { variant: 'rich'; richEditorCopy: RichEditorToolbarCopy };
14
+
15
+ export type TextareaProps = TextareaBaseProps & TextareaRichCopy;
16
+
17
+ export interface TextareaBaseProps
18
+ extends Omit<TextareaAutosizeProps, 'variant' | 'color' | 'size'> {
6
19
  /**
7
20
  * The variant of the textarea
8
21
  */
@@ -14,6 +14,7 @@ import { styled } from '@mui/material';
14
14
  import React, { useEffect, useRef, useState } from 'react';
15
15
 
16
16
  import { floatAnimation, getColorFromTheme } from './Textarea.styles';
17
+ import type { RichEditorToolbarCopy } from '../../../copy';
17
18
 
18
19
  const RichToolbar = styled(Box)<{ glass?: boolean }>(({ theme, glass }) => ({
19
20
  display: 'flex',
@@ -206,11 +207,12 @@ const useRichEditorState = ({
206
207
  };
207
208
 
208
209
  const InlineFormatButtons: React.FC<{
210
+ copy: RichEditorToolbarCopy;
209
211
  activeFormats: Record<string, boolean>;
210
212
  onCommand: (command: string, value?: string) => void;
211
- }> = ({ activeFormats, onCommand }) => (
213
+ }> = ({ copy, activeFormats, onCommand }) => (
212
214
  <>
213
- <Tooltip title="Bold" arrow>
215
+ <Tooltip title={copy.bold} arrow>
214
216
  <ToolbarButton
215
217
  size="small"
216
218
  active={activeFormats.bold}
@@ -220,7 +222,7 @@ const InlineFormatButtons: React.FC<{
220
222
  </ToolbarButton>
221
223
  </Tooltip>
222
224
 
223
- <Tooltip title="Italic" arrow>
225
+ <Tooltip title={copy.italic} arrow>
224
226
  <ToolbarButton
225
227
  size="small"
226
228
  active={activeFormats.italic}
@@ -230,7 +232,7 @@ const InlineFormatButtons: React.FC<{
230
232
  </ToolbarButton>
231
233
  </Tooltip>
232
234
 
233
- <Tooltip title="Underline" arrow>
235
+ <Tooltip title={copy.underline} arrow>
234
236
  <ToolbarButton
235
237
  size="small"
236
238
  active={activeFormats.underline}
@@ -244,13 +246,14 @@ const InlineFormatButtons: React.FC<{
244
246
  );
245
247
 
246
248
  const BlockFormatButtons: React.FC<{
249
+ copy: RichEditorToolbarCopy;
247
250
  activeFormats: Record<string, boolean>;
248
251
  onCommand: (command: string, value?: string) => void;
249
- }> = ({ activeFormats, onCommand }) => (
252
+ }> = ({ copy, activeFormats, onCommand }) => (
250
253
  <>
251
254
  <Divider orientation="vertical" flexItem />
252
255
 
253
- <Tooltip title="Bullet List" arrow>
256
+ <Tooltip title={copy.bulletList} arrow>
254
257
  <ToolbarButton
255
258
  size="small"
256
259
  active={activeFormats.list}
@@ -260,7 +263,7 @@ const BlockFormatButtons: React.FC<{
260
263
  </ToolbarButton>
261
264
  </Tooltip>
262
265
 
263
- <Tooltip title="Numbered List" arrow>
266
+ <Tooltip title={copy.numberedList} arrow>
264
267
  <ToolbarButton
265
268
  size="small"
266
269
  active={activeFormats.orderedList}
@@ -272,13 +275,13 @@ const BlockFormatButtons: React.FC<{
272
275
 
273
276
  <Divider orientation="vertical" flexItem />
274
277
 
275
- <Tooltip title="Quote" arrow>
278
+ <Tooltip title={copy.quote} arrow>
276
279
  <ToolbarButton size="small" onClick={() => onCommand('formatBlock', 'blockquote')}>
277
280
  <FormatQuote fontSize="small" />
278
281
  </ToolbarButton>
279
282
  </Tooltip>
280
283
 
281
- <Tooltip title="Code" arrow>
284
+ <Tooltip title={copy.code} arrow>
282
285
  <ToolbarButton size="small" onClick={() => onCommand('formatBlock', 'pre')}>
283
286
  <Code fontSize="small" />
284
287
  </ToolbarButton>
@@ -286,11 +289,11 @@ const BlockFormatButtons: React.FC<{
286
289
 
287
290
  <Divider orientation="vertical" flexItem />
288
291
 
289
- <Tooltip title="Insert Link" arrow>
292
+ <Tooltip title={copy.insertLink} arrow>
290
293
  <ToolbarButton
291
294
  size="small"
292
295
  onClick={() => {
293
- const url = window.prompt('Enter URL:');
296
+ const url = window.prompt(copy.linkPrompt);
294
297
  if (url) onCommand('createLink', url);
295
298
  }}
296
299
  >
@@ -298,13 +301,13 @@ const BlockFormatButtons: React.FC<{
298
301
  </ToolbarButton>
299
302
  </Tooltip>
300
303
 
301
- <Tooltip title="Text Color" arrow>
304
+ <Tooltip title={copy.textColor} arrow>
302
305
  <ToolbarButton size="small">
303
306
  <FormatColorText fontSize="small" />
304
307
  </ToolbarButton>
305
308
  </Tooltip>
306
309
 
307
- <Tooltip title="Background Color" arrow>
310
+ <Tooltip title={copy.backgroundColor} arrow>
308
311
  <ToolbarButton size="small">
309
312
  <FormatColorFill fontSize="small" />
310
313
  </ToolbarButton>
@@ -315,17 +318,24 @@ const BlockFormatButtons: React.FC<{
315
318
  // The formatting buttons. Split out so the editor body is state, handlers and
316
319
  // the editable region.
317
320
  const EditorToolbar: React.FC<{
321
+ copy: RichEditorToolbarCopy;
318
322
  glass?: boolean;
319
323
  activeFormats: Record<string, boolean>;
320
324
  onCommand: (command: string, value?: string) => void;
321
- }> = ({ glass, activeFormats, onCommand }) => (
325
+ }> = ({ copy, glass, activeFormats, onCommand }) => (
322
326
  <RichToolbar glass={glass}>
323
- <InlineFormatButtons activeFormats={activeFormats} onCommand={onCommand} />
324
- <BlockFormatButtons activeFormats={activeFormats} onCommand={onCommand} />
327
+ <InlineFormatButtons copy={copy} activeFormats={activeFormats} onCommand={onCommand} />
328
+ <BlockFormatButtons copy={copy} activeFormats={activeFormats} onCommand={onCommand} />
325
329
  </RichToolbar>
326
330
  );
327
331
 
328
332
  export const TextareaRichEditor: React.FC<{
333
+ /**
334
+ * The ten toolbar buttons' tooltips — which are also their accessible names,
335
+ * since every one of them is a glyph — plus the link prompt. REQUIRED: this
336
+ * package ships no default copy.
337
+ */
338
+ copy: RichEditorToolbarCopy;
329
339
  value?: string;
330
340
  onChange?: (html: string) => void;
331
341
  placeholder?: string;
@@ -333,7 +343,7 @@ export const TextareaRichEditor: React.FC<{
333
343
  glass?: boolean;
334
344
  color?: string;
335
345
  characterLimit?: number;
336
- }> = ({ value, onChange, placeholder, error, glass, color, characterLimit }) => {
346
+ }> = ({ copy, value, onChange, placeholder, error, glass, color, characterLimit }) => {
337
347
  const {
338
348
  focused,
339
349
  setFocused,
@@ -346,7 +356,7 @@ export const TextareaRichEditor: React.FC<{
346
356
 
347
357
  return (
348
358
  <Box sx={{ position: 'relative' }}>
349
- <EditorToolbar glass={glass} activeFormats={activeFormats} onCommand={handleFormat} />
359
+ <EditorToolbar copy={copy} glass={glass} activeFormats={activeFormats} onCommand={handleFormat} />
350
360
 
351
361
  <ContentEditableDiv
352
362
  ref={contentRef}
@@ -4,10 +4,12 @@ import { Box, Button, LinearProgress, Typography, useTheme } from '@mui/material
4
4
  import type React from 'react';
5
5
 
6
6
  import type { DragHandlers } from './UploadButton.hooks';
7
+ import type { UploadButtonCopy } from '../../../copy';
7
8
  import type { UploadButtonProps } from './UploadButton.types';
8
9
 
9
10
  /** Shared shape for the two trigger variants. */
10
11
  export interface TriggerProps {
12
+ copy: UploadButtonCopy;
11
13
  label: string;
12
14
  icon?: React.ReactNode;
13
15
  disabled: boolean;
@@ -19,6 +21,7 @@ export interface TriggerProps {
19
21
 
20
22
  /** The drag-and-drop surface. */
21
23
  export function UploadDropzone({
24
+ copy,
22
25
  label,
23
26
  icon,
24
27
  disabled,
@@ -61,7 +64,7 @@ export function UploadDropzone({
61
64
  onOpen();
62
65
  }}
63
66
  aria-describedby={describedBy}
64
- aria-label={`Upload file dropzone. ${label}`}
67
+ aria-label={copy.dropzoneRole(label)}
65
68
  >
66
69
  <Box sx={{ mb: 2 }}>
67
70
  {icon || <CloudUploadOutlined sx={{ fontSize: 48, color: 'text.secondary' }} />}
@@ -70,7 +73,7 @@ export function UploadDropzone({
70
73
  {label}
71
74
  </Typography>
72
75
  <Typography variant="body2" color="text.secondary">
73
- Drop your file here or click to browse
76
+ {copy.dropzoneHint}
74
77
  </Typography>
75
78
  </Box>
76
79
  );
@@ -81,6 +84,7 @@ const MUI_VARIANT = { outline: 'outlined', ghost: 'text' } as const;
81
84
 
82
85
  /** The plain-button trigger. */
83
86
  export function UploadTrigger({
87
+ copy,
84
88
  label,
85
89
  icon,
86
90
  disabled,
@@ -110,18 +114,20 @@ export function UploadTrigger({
110
114
  }),
111
115
  }}
112
116
  >
113
- {isUploading ? 'Uploading...' : label}
117
+ {isUploading ? copy.uploading : label}
114
118
  </Button>
115
119
  );
116
120
  }
117
121
 
118
122
  /** The screen-reader live region — drag, progress and error announcements. */
119
123
  function UploadAnnouncer({
124
+ copy,
120
125
  announceDragOver,
121
126
  isUploading,
122
127
  progress,
123
128
  error,
124
129
  }: {
130
+ copy: UploadButtonCopy;
125
131
  announceDragOver: boolean;
126
132
  isUploading: boolean;
127
133
  progress: number;
@@ -140,15 +146,16 @@ function UploadAnnouncer({
140
146
  overflow: 'hidden',
141
147
  }}
142
148
  >
143
- {announceDragOver && 'File ready to drop'}
144
- {isUploading && `Upload in progress: ${Math.round(progress)}%`}
145
- {error && `Error: ${error}`}
149
+ {announceDragOver && copy.dropReady}
150
+ {isUploading && copy.uploadInProgress(Math.round(progress))}
151
+ {error && copy.errorAnnouncement(error)}
146
152
  </div>
147
153
  );
148
154
  }
149
155
 
150
156
  /** Progress bar, helper text, error text and the live region. */
151
157
  export function UploadFeedback({
158
+ copy,
152
159
  isUploading,
153
160
  progress,
154
161
  helperText,
@@ -157,6 +164,7 @@ export function UploadFeedback({
157
164
  errorId,
158
165
  announceDragOver,
159
166
  }: {
167
+ copy: UploadButtonCopy;
160
168
  isUploading: boolean;
161
169
  progress: number;
162
170
  helperText?: string;
@@ -171,7 +179,7 @@ export function UploadFeedback({
171
179
  <Box sx={{ mt: 1 }}>
172
180
  <LinearProgress variant="determinate" value={progress} sx={{ borderRadius: 1 }} />
173
181
  <Typography variant="caption" sx={{ mt: 0.5, display: 'block' }}>
174
- {Math.round(progress)}% uploaded
182
+ {copy.percentUploaded(Math.round(progress))}
175
183
  </Typography>
176
184
  </Box>
177
185
  )}
@@ -200,6 +208,7 @@ export function UploadFeedback({
200
208
  )}
201
209
 
202
210
  <UploadAnnouncer
211
+ copy={copy}
203
212
  announceDragOver={announceDragOver}
204
213
  isUploading={isUploading}
205
214
  progress={progress}
@@ -19,8 +19,9 @@ import type { UploadButtonProps, UploadButtonState } from './UploadButton.types'
19
19
  */
20
20
  const UploadButton = React.forwardRef<HTMLInputElement, UploadButtonProps>((props, ref) => {
21
21
  const {
22
+ copy,
22
23
  variant = 'default',
23
- label = 'Upload File',
24
+ label = props.copy.buttonLabel,
24
25
  disabled = false,
25
26
  multiple = false,
26
27
  accept,
@@ -34,6 +35,7 @@ const UploadButton = React.forwardRef<HTMLInputElement, UploadButtonProps>((prop
34
35
  useUploadButton(props);
35
36
 
36
37
  const trigger: TriggerProps = {
38
+ copy,
37
39
  label,
38
40
  icon,
39
41
  disabled,
@@ -65,6 +67,7 @@ const UploadButton = React.forwardRef<HTMLInputElement, UploadButtonProps>((prop
65
67
  )}
66
68
 
67
69
  <UploadFeedback
70
+ copy={copy}
68
71
  isUploading={derived.isUploading}
69
72
  progress={derived.progress}
70
73
  helperText={helperText}
@@ -1,6 +1,14 @@
1
1
  import type { ReactNode } from 'react';
2
2
 
3
+ import type { UploadButtonCopy } from '../../../copy';
4
+
3
5
  export interface UploadButtonProps {
6
+ /**
7
+ * What this control says beyond the host's own button label. REQUIRED: three
8
+ * of the four are announcements only a screen reader ever receives, which is
9
+ * how they stayed English through every language pass.
10
+ */
11
+ copy: UploadButtonCopy;
4
12
  /** Button variant style */
5
13
  variant?: 'default' | 'outline' | 'ghost' | 'dropzone';
6
14
 
@@ -28,6 +28,8 @@ type SelectionClusterProps = Pick<
28
28
  | 'clearAllTestId'
29
29
  | 'edgeAlign'
30
30
  | 'selectAllLabel'
31
+ | 'selectAllText'
32
+ | 'clearAllText'
31
33
  >;
32
34
 
33
35
  /** The left cluster: Select All + (when selecting) Clear All / count / actions. */
@@ -41,6 +43,8 @@ function SelectionCluster({
41
43
  clearAllTestId,
42
44
  edgeAlign = false,
43
45
  selectAllLabel,
46
+ selectAllText,
47
+ clearAllText,
44
48
  }: SelectionClusterProps): React.JSX.Element {
45
49
  const actionsSlot = actions !== undefined && (
46
50
  <Box sx={{ ml: 0.5, display: 'flex', flexShrink: 0, alignItems: 'center' }}>{actions}</Box>
@@ -68,7 +72,7 @@ function SelectionCluster({
68
72
  data-testid={selectAllTestId}
69
73
  sx={{ ...selectionButtonSx, display: { xs: 'none', md: 'inline-flex' } }}
70
74
  >
71
- Select All
75
+ {selectAllText}
72
76
  </Button>
73
77
  <Checkbox
74
78
  size="small"
@@ -88,7 +92,7 @@ function SelectionCluster({
88
92
  data-testid={clearAllTestId}
89
93
  sx={selectionButtonSx}
90
94
  >
91
- Clear All
95
+ {clearAllText}
92
96
  </Button>
93
97
  <Divider orientation="vertical" flexItem sx={{ height: 16, alignSelf: 'center' }} />
94
98
  <Typography
@@ -216,6 +220,8 @@ export function ContentToolbar({
216
220
  edgeAlign = false,
217
221
  exclusiveSelection = false,
218
222
  selectAllLabel,
223
+ selectAllText,
224
+ clearAllText,
219
225
  }: ContentToolbarProps): React.JSX.Element {
220
226
  // Under `exclusiveSelection` the two states are alternatives, not neighbours:
221
227
  // browsing shows the controls and no checkbox, selecting shows the checkbox
@@ -241,6 +247,8 @@ export function ContentToolbar({
241
247
  >
242
248
  {showSelection && (
243
249
  <SelectionCluster
250
+ selectAllText={selectAllText}
251
+ clearAllText={clearAllText}
244
252
  hasSelection={hasSelection}
245
253
  selectedCount={selectedCount}
246
254
  selectAll={selectAll}
@@ -4,6 +4,9 @@ import type { ReactNode } from 'react';
4
4
 
5
5
  /** Props for {@link ContentToolbar} — the shared content-page toolbar. */
6
6
  export interface ContentToolbarProps {
7
+ /** The two bulk-selection buttons, spelled out where the bar has room. */
8
+ selectAllText: string;
9
+ clearAllText: string;
7
10
  /**
8
11
  * The select-all checkbox's accessible name. It carries no visible label of
9
12
  * its own, so this is the only thing a screen reader gets for it. REQUIRED:
@@ -61,6 +64,8 @@ export type ViewMode = 'grid' | 'list';
61
64
 
62
65
  /** Props for {@link ViewSelector}. */
63
66
  export interface ViewSelectorProps {
67
+ /** The card-size control's accessible name — it renders icons only. */
68
+ cardSizeLabel: string;
64
69
  /** Current view mode. */
65
70
  viewMode: ViewMode;
66
71
  /** Called when the view mode changes. */
@@ -99,6 +104,10 @@ export interface SortFieldDefinition<TField extends string = string> {
99
104
 
100
105
  /** Props for {@link SortByDropdown}. */
101
106
  export interface SortByDropdownProps<TField extends string = string> {
107
+ /** The menu's two section headings, and the trigger's own prefix. */
108
+ orderHeading: string;
109
+ sortHeading: string;
110
+ triggerPrefix: string;
102
111
  fields: SortFieldDefinition<TField>[];
103
112
  activeField: TField;
104
113
  activeOrder?: string;
@@ -126,6 +135,9 @@ export interface MultiSelectExtraOption {
126
135
 
127
136
  /** Props for {@link MultiSelectDropdown}. */
128
137
  export interface MultiSelectDropdownProps<TValue extends string = string> {
138
+ /** The extra-options section heading, and the clear-selection action. */
139
+ extraOptionsHeading: string;
140
+ clearText: string;
129
141
  /** Label before the trigger (e.g. "Content Type"). */
130
142
  label: string;
131
143
  options: MultiSelectOption<TValue>[];
@@ -62,6 +62,8 @@ export function MultiSelectDropdown<TValue extends string = string>({
62
62
  onClear,
63
63
  allLabel = 'All',
64
64
  clearLabel,
65
+ clearText,
66
+ extraOptionsHeading,
65
67
  extraOptions,
66
68
  searchable,
67
69
  searchPlaceholder = 'Search…',
@@ -111,7 +113,7 @@ export function MultiSelectDropdown<TValue extends string = string>({
111
113
  <>
112
114
  {renderTrigger()}
113
115
  <MultiSelectMenu
114
- anchorEl={anchorEl}
116
+ extraOptionsHeading={extraOptionsHeading} clearText={clearText} anchorEl={anchorEl}
115
117
  open={open}
116
118
  close={close}
117
119
  options={options}
@@ -184,6 +186,8 @@ interface MultiSelectMenuProps<TValue extends string> {
184
186
  onQueryChange: (value: string) => void;
185
187
  searchPlaceholder: string;
186
188
  noResultsLabel: string;
189
+ extraOptionsHeading: string;
190
+ clearText: string;
187
191
  /** Match the menu width to the trigger and left-align it (stacked select). */
188
192
  matchAnchorWidth?: boolean;
189
193
  testId?: string;
@@ -211,6 +215,8 @@ function MultiSelectMenu<TValue extends string>({
211
215
  selected,
212
216
  onToggle,
213
217
  extraOptions,
218
+ extraOptionsHeading,
219
+ clearText,
214
220
  clearDisabled,
215
221
  onClear,
216
222
  showSearch,
@@ -267,25 +273,30 @@ function MultiSelectMenu<TValue extends string>({
267
273
  ? [
268
274
  <Divider key="extra-divider" />,
269
275
  <ListSubheader key="extra-label" sx={{ px: 1, py: 0.75, fontSize: '0.75rem', fontWeight: 600 }}>
270
- Options
276
+ {extraOptionsHeading}
271
277
  </ListSubheader>,
272
278
  ...extraOptions.map((extra) => (
273
279
  <CheckboxRow key={extra.id} label={extra.label} checked={extra.checked} onToggle={(next) => extra.onCheckedChange(next)} />
274
280
  )),
275
281
  ]
276
282
  : null}
277
- <MenuClearFooter clearDisabled={clearDisabled} onClear={onClear} close={close} testId={testId} />
283
+ <MenuClearFooter
284
+ clearText={clearText} clearDisabled={clearDisabled} onClear={onClear}
285
+ close={close} testId={testId}
286
+ />
278
287
  </Menu>
279
288
  );
280
289
  }
281
290
 
282
291
  /** The bottom "Clear" footer that resets the selection and closes the menu. */
283
292
  function MenuClearFooter({
293
+ clearText,
284
294
  clearDisabled,
285
295
  onClear,
286
296
  close,
287
297
  testId,
288
298
  }: {
299
+ clearText: string;
289
300
  clearDisabled: boolean;
290
301
  onClear: () => void;
291
302
  close: () => void;
@@ -320,7 +331,7 @@ function MenuClearFooter({
320
331
  }}
321
332
  sx={{ minWidth: 0, px: 1, py: 0.25, fontSize: '0.75rem', fontWeight: 400, textTransform: 'none', color: 'text.secondary' }}
322
333
  >
323
- Clear
334
+ {clearText}
324
335
  </Button>
325
336
  </Box>
326
337
  );
@@ -103,6 +103,8 @@ interface SortMenuProps<TField extends string> {
103
103
  fields: SortFieldDefinition<TField>[];
104
104
  activeField: TField;
105
105
  onFieldSelect: (field: TField) => void;
106
+ orderHeading: string;
107
+ sortHeading: string;
106
108
  }
107
109
 
108
110
  /** The Order + Sort sections of the dropdown menu. */
@@ -116,6 +118,8 @@ function SortMenu<TField extends string>({
116
118
  fields,
117
119
  activeField,
118
120
  onFieldSelect,
121
+ orderHeading,
122
+ sortHeading,
119
123
  }: SortMenuProps<TField>): React.JSX.Element {
120
124
  return (
121
125
  <Menu
@@ -128,7 +132,7 @@ function SortMenu<TField extends string>({
128
132
  >
129
133
  {orderOptions.length > 0 && [
130
134
  <ListSubheader key="order-label" sx={sectionLabelSx}>
131
- Order
135
+ {orderHeading}
132
136
  </ListSubheader>,
133
137
  ...orderOptions.map((option) => (
134
138
  <SortRow
@@ -141,7 +145,7 @@ function SortMenu<TField extends string>({
141
145
  )),
142
146
  <Divider key="order-divider" />,
143
147
  ]}
144
- <ListSubheader sx={sectionLabelSx}>Sort</ListSubheader>
148
+ <ListSubheader sx={sectionLabelSx}>{sortHeading}</ListSubheader>
145
149
  {fields.map((field) => (
146
150
  <SortRow
147
151
  key={field.value}
@@ -167,6 +171,9 @@ export function SortByDropdown<TField extends string = string>({
167
171
  activeOrder,
168
172
  onFieldChange,
169
173
  onOrderChange,
174
+ orderHeading,
175
+ sortHeading,
176
+ triggerPrefix,
170
177
  'data-testid': testId,
171
178
  }: SortByDropdownProps<TField>): React.JSX.Element {
172
179
  const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
@@ -195,7 +202,7 @@ export function SortByDropdown<TField extends string = string>({
195
202
  component="span"
196
203
  sx={{ display: { xs: 'none', md: 'inline' }, color: 'text.secondary', fontSize: '0.875rem' }}
197
204
  >
198
- Sort By:
205
+ {triggerPrefix}
199
206
  </Typography>
200
207
  <Button
201
208
  variant="text"
@@ -219,6 +226,8 @@ export function SortByDropdown<TField extends string = string>({
219
226
  <ChevronDownIcon sx={{ fontSize: 14 }} />
220
227
  </Button>
221
228
  <SortMenu
229
+ orderHeading={orderHeading}
230
+ sortHeading={sortHeading}
222
231
  anchorEl={anchorEl}
223
232
  open={open}
224
233
  close={close}
@@ -25,6 +25,7 @@ export function ViewSelector({
25
25
  onViewModeChange,
26
26
  zoom,
27
27
  onZoomChange,
28
+ cardSizeLabel,
28
29
  }: ViewSelectorProps): React.JSX.Element {
29
30
  const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);
30
31
  const open = Boolean(anchorEl);
@@ -37,7 +38,7 @@ export function ViewSelector({
37
38
  <Box sx={{ width: 96, display: 'flex', alignItems: 'center' }}>
38
39
  <Slider
39
40
  data-testid="resize-card-slider"
40
- aria-label="Card size"
41
+ aria-label={cardSizeLabel}
41
42
  value={zoom[0] ?? 0}
42
43
  onChange={(_, value) => onZoomChange([value as number])}
43
44
  min={0}
@@ -75,6 +75,8 @@ interface DashboardSettingsBaseProps {
75
75
  * dialog rendering `children`. Mutually exclusive with link mode.
76
76
  */
77
77
  export interface DashboardSettingsDialogProps extends DashboardSettingsBaseProps {
78
+ /** The dialog's close button — a glyph with no visible label. REQUIRED. */
79
+ closeLabel: string;
78
80
  /** Dialog title. Defaults to `"Settings"`. */
79
81
  title?: ReactNode;
80
82
  /** Dialog body. */
@@ -89,6 +91,8 @@ export interface DashboardSettingsDialogProps extends DashboardSettingsBaseProps
89
91
  * exclusive with dialog mode, so `title`/`children` are not accepted.
90
92
  */
91
93
  export interface DashboardSettingsLinkProps extends DashboardSettingsBaseProps {
94
+ /** Link mode opens no dialog, so there is no close button to name. */
95
+ closeLabel?: never;
92
96
  /** Link target settings route. */
93
97
  href: string;
94
98
  /**
@@ -101,6 +101,7 @@ DashboardFilterToggle.displayName = 'Dashboard.FilterToggle';
101
101
 
102
102
  export const DashboardSettings = ({
103
103
  title = 'Settings',
104
+ closeLabel,
104
105
  children,
105
106
  ariaLabel = 'Settings',
106
107
  href,
@@ -146,7 +147,7 @@ export const DashboardSettings = ({
146
147
  <Dialog open={open} onClose={() => setOpen(false)} maxWidth="sm" fullWidth data-testid={`${testIdPrefix}-settings-dialog`}>
147
148
  <DialogTitle sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>
148
149
  {title}
149
- <IconButton aria-label="Close" size="small" onClick={() => setOpen(false)}>
150
+ <IconButton aria-label={closeLabel} size="small" onClick={() => setOpen(false)}>
150
151
  <CloseIcon fontSize="small" />
151
152
  </IconButton>
152
153
  </DialogTitle>
@@ -148,9 +148,18 @@ const LoadingOverlay: FC = () => (
148
148
  </Box>
149
149
  );
150
150
 
151
- const ScrollToTopFab: FC<{ visible: boolean; glass: boolean; onClick: () => void }> = ({
151
+ // The label is guarded at the call site rather than defaulted: the props union
152
+ // already makes it required alongside `scrollToTopButton`, and a fab with an
153
+ // empty accessible name is the exact failure this port exists to remove.
154
+ const ScrollToTopFab: FC<{
155
+ visible: boolean;
156
+ glass: boolean;
157
+ scrollToTopLabel: string;
158
+ onClick: () => void;
159
+ }> = ({
152
160
  visible,
153
161
  glass,
162
+ scrollToTopLabel,
154
163
  onClick }) => {
155
164
  const theme = useTheme();
156
165
 
@@ -158,7 +167,7 @@ const ScrollToTopFab: FC<{ visible: boolean; glass: boolean; onClick: () => void
158
167
  <Zoom in={visible}>
159
168
  <Fab
160
169
  size="small"
161
- aria-label="Scroll to top"
170
+ aria-label={scrollToTopLabel}
162
171
  onClick={onClick}
163
172
  sx={{
164
173
  position: 'absolute',
@@ -183,6 +192,8 @@ const ScrollToTopFab: FC<{ visible: boolean; glass: boolean; onClick: () => void
183
192
  export const ScrollArea: React.FC<ScrollAreaProps> = (componentProps) => {
184
193
  const resolved = resolveScrollAreaProps(componentProps);
185
194
  const {
195
+ regionLabel,
196
+ scrollToTopLabel,
186
197
  children,
187
198
  width,
188
199
  height,
@@ -231,6 +242,7 @@ export const ScrollArea: React.FC<ScrollAreaProps> = (componentProps) => {
231
242
  >
232
243
  <ScrollViewport
233
244
  {...resolved}
245
+ regionLabel={regionLabel}
234
246
  shouldShowScrollbar={shouldShowScrollbar}
235
247
  setScrollRef={setScrollRef}
236
248
  onScroll={handleScroll}
@@ -246,8 +258,9 @@ export const ScrollArea: React.FC<ScrollAreaProps> = (componentProps) => {
246
258
 
247
259
  {loading && <LoadingOverlay />}
248
260
 
249
- {scrollToTopButton && !disabled && !loading && (
261
+ {scrollToTopButton && scrollToTopLabel && !disabled && !loading && (
250
262
  <ScrollToTopFab
263
+ scrollToTopLabel={scrollToTopLabel}
251
264
  visible={showScrollToTop}
252
265
  glass={variant === 'glass'}
253
266
  onClick={scrollToTop}