@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
@@ -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}
@@ -5,7 +5,25 @@ export type ScrollOrientation = 'vertical' | 'horizontal' | 'both';
5
5
  export type ScrollbarSize = 'thin' | 'medium' | 'thick';
6
6
  export type ScrollAreaVariant = 'default' | 'overlay' | 'glass';
7
7
 
8
- export interface ScrollAreaProps extends Omit<BoxProps, 'ref'> {
8
+ /**
9
+ * Conditionally-required copy for the scroll-to-top control. The fab only exists
10
+ * when `scrollToTopButton` is set, so only that side of the union owes a name —
11
+ * a host that never shows the button is not asked for a word it cannot place.
12
+ */
13
+ type ScrollAreaScrollToTop =
14
+ | { scrollToTopButton?: false; scrollToTopLabel?: never }
15
+ | { scrollToTopButton: true; scrollToTopLabel: string };
16
+
17
+ export type ScrollAreaProps = ScrollAreaBase & ScrollAreaScrollToTop;
18
+
19
+ export interface ScrollAreaBase extends Omit<BoxProps, 'ref'> {
20
+ /**
21
+ * The scroll region's accessible name. REQUIRED: the viewport is a
22
+ * `role="region"`, so a screen reader announces this word and no other. The
23
+ * package cannot know whether it wraps a menu, a chat log or a table.
24
+ */
25
+ regionLabel: string;
26
+
9
27
  /** Content to be rendered inside the scrollable area */
10
28
  children: ReactNode;
11
29
 
@@ -45,9 +63,6 @@ export interface ScrollAreaProps extends Omit<BoxProps, 'ref'> {
45
63
  /** Scroll event handler */
46
64
  onScroll?: (event: React.UIEvent<HTMLDivElement>) => void;
47
65
 
48
- /** Show scroll-to-top button */
49
- scrollToTopButton?: boolean;
50
-
51
66
  /** Threshold for showing scroll-to-top button (in pixels) */
52
67
  scrollToTopThreshold?: number;
53
68
 
@@ -20,6 +20,8 @@ export interface ScrollViewportProps
20
20
  | 'loading'
21
21
  | 'smoothScroll'
22
22
  > {
23
+ /** The scroll region's accessible name. REQUIRED. */
24
+ regionLabel: string;
23
25
  children: ReactNode;
24
26
  shouldShowScrollbar: boolean;
25
27
  setScrollRef: (node: HTMLDivElement | null) => void;
@@ -29,6 +31,7 @@ export interface ScrollViewportProps
29
31
  // The element that actually scrolls: its own overflow and scrollbar styling,
30
32
  // plus the disabled and loading treatments.
31
33
  export const ScrollViewport: FC<ScrollViewportProps> = ({
34
+ regionLabel,
32
35
  children,
33
36
  height,
34
37
  maxHeight,
@@ -52,7 +55,7 @@ export const ScrollViewport: FC<ScrollViewportProps> = ({
52
55
  ref={setScrollRef}
53
56
  onScroll={onScroll}
54
57
  role="region"
55
- aria-label="Scrollable content"
58
+ aria-label={regionLabel}
56
59
  aria-busy={loading}
57
60
  tabIndex={disabled ? -1 : 0}
58
61
  sx={{
@@ -54,9 +54,10 @@ export function TableFilter({
54
54
  open,
55
55
  onOpenChange,
56
56
  hasActiveFilters = false,
57
+ copy,
57
58
  }: TableFilterProps): React.JSX.Element {
58
59
  return (
59
- <TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters }}>
60
+ <TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters, copy }}>
60
61
  {children}
61
62
  </TableFilterContext.Provider>
62
63
  );
@@ -97,7 +98,7 @@ const TableFilterPanel = ({
97
98
  ariaLabel = 'Filters',
98
99
  clearTestId,
99
100
  }: TableFilterPanelProps): React.JSX.Element => {
100
- const { open } = useTableFilterContext();
101
+ const { open, copy } = useTableFilterContext();
101
102
  return (
102
103
  <Box
103
104
  component="aside"
@@ -142,7 +143,7 @@ const TableFilterPanel = ({
142
143
  onClick={onClearAll}
143
144
  sx={{ fontSize: '0.75rem', color: 'text.secondary' }}
144
145
  >
145
- Clear All Filters
146
+ {copy.clearAllFilters}
146
147
  </Link>
147
148
  </Box>
148
149
  {children}
@@ -160,6 +161,7 @@ const TableFilterKeyword = ({
160
161
  label = 'Filter by keyword',
161
162
  testId,
162
163
  }: TableFilterKeywordProps): React.JSX.Element => {
164
+ const { copy } = useTableFilterContext();
163
165
  const [draft, setDraft] = useState(value);
164
166
  const prevValue = useRef(value);
165
167
  if (prevValue.current !== value) {
@@ -204,7 +206,7 @@ const TableFilterKeyword = ({
204
206
  <InputAdornment position="end">
205
207
  <IconButton
206
208
  size="small"
207
- aria-label="Clear keyword filter"
209
+ aria-label={copy.clearKeyword}
208
210
  data-testid={testId ? `${testId}-clear` : undefined}
209
211
  onMouseDown={(event) => event.preventDefault()}
210
212
  onClick={clearKeyword}
@@ -326,12 +328,18 @@ const TableFilterRangeField = ({
326
328
  onChange,
327
329
  unit,
328
330
  step,
329
- minPlaceholder = 'min',
330
- maxPlaceholder = 'max',
331
+ minPlaceholder,
332
+ maxPlaceholder,
331
333
  invalidLabel,
332
334
  testId,
333
335
  }: TableFilterRangeFieldProps): React.JSX.Element => {
336
+ const { copy } = useTableFilterContext();
334
337
  const invalid = isRangeInverted(value);
338
+ // A field may override any of the three; unset, they come from the root's
339
+ // table. Neither path reaches an English literal in this package.
340
+ const minText = minPlaceholder ?? copy.rangeMin;
341
+ const maxText = maxPlaceholder ?? copy.rangeMax;
342
+ const invalidText = invalidLabel ?? copy.invalidRange;
335
343
  return (
336
344
  <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>
337
345
  <Typography sx={{ fontSize: '0.75rem', fontWeight: 500, color: 'text.secondary' }}>
@@ -342,9 +350,9 @@ const TableFilterRangeField = ({
342
350
  <RangeBound
343
351
  bound={value.min}
344
352
  error={invalid}
345
- placeholder={minPlaceholder}
353
+ placeholder={minText}
346
354
  step={step}
347
- ariaLabel={`${label} ${minPlaceholder}`}
355
+ ariaLabel={`${label} ${minText}`}
348
356
  testId={testId ? `${testId}-min` : undefined}
349
357
  onChange={(min) => onChange({ ...value, min })}
350
358
  />
@@ -354,9 +362,9 @@ const TableFilterRangeField = ({
354
362
  <RangeBound
355
363
  bound={value.max}
356
364
  error={invalid}
357
- placeholder={maxPlaceholder}
365
+ placeholder={maxText}
358
366
  step={step}
359
- ariaLabel={`${label} ${maxPlaceholder}`}
367
+ ariaLabel={`${label} ${maxText}`}
360
368
  testId={testId ? `${testId}-max` : undefined}
361
369
  onChange={(max) => onChange({ ...value, max })}
362
370
  />
@@ -367,7 +375,7 @@ const TableFilterRangeField = ({
367
375
  data-testid={testId ? `${testId}-error` : undefined}
368
376
  sx={{ fontSize: '0.7rem', color: 'error.main' }}
369
377
  >
370
- {invalidLabel}
378
+ {invalidText}
371
379
  </Typography>
372
380
  )}
373
381
  </Box>
@@ -1,8 +1,16 @@
1
1
  import type { ReactNode } from 'react';
2
2
 
3
+ import type { TableFilterCopy } from '../../../copy';
4
+
3
5
  /** Props for the `<TableFilter>` root (provider). */
4
6
  export interface TableFilterProps {
5
7
  children: ReactNode;
8
+ /**
9
+ * Every word this compound renders. REQUIRED: this package ships no default
10
+ * copy, and the two ends of a range plus the panel's clear link are read by
11
+ * the store's own customer, in the store's own language.
12
+ */
13
+ copy: TableFilterCopy;
6
14
  /** Whether the panel is open. */
7
15
  open: boolean;
8
16
  /** Toggle the panel. */
@@ -2,6 +2,8 @@
2
2
 
3
3
  import { createContext, useContext } from 'react';
4
4
 
5
+ import type { TableFilterCopy } from '../../../copy';
6
+
5
7
  /** Open/close + active state shared by every `TableFilter` compound part. */
6
8
  export interface TableFilterContextValue {
7
9
  /** Whether the filter panel is expanded. */
@@ -10,6 +12,14 @@ export interface TableFilterContextValue {
10
12
  onOpenChange: (open: boolean) => void;
11
13
  /** When true, the trigger shows a filled indicator dot. */
12
14
  hasActiveFilters: boolean;
15
+ /**
16
+ * Every word the compound's parts render. Carried on the root's context
17
+ * rather than on each part's props because the parts are a TREE — a host
18
+ * composes `Panel`, `Keyword` and the fields under one root, and asking each
19
+ * one separately for its share of the same table is the shape that makes a
20
+ * host answer four times and get one of them wrong.
21
+ */
22
+ copy: TableFilterCopy;
13
23
  }
14
24
 
15
25
  /** Backing context. `null` outside a `<TableFilter>` root. */
@@ -6,6 +6,7 @@ import React from 'react';
6
6
 
7
7
  import { breadcrumbLinkStyles } from './Breadcrumbs.styles';
8
8
  import type { BreadcrumbItem } from './Breadcrumbs.types';
9
+ import type { BreadcrumbCopy } from '../../../copy';
9
10
 
10
11
  const BreadcrumbLink = styled(Link, {
11
12
  shouldForwardProp: (prop) => prop !== 'size' && prop !== 'active' && prop !== 'visualStyle' })<{ size?: string; active?: boolean; visualStyle?: string }>(
@@ -96,10 +97,12 @@ const CollapsedMenu = ({
96
97
  items,
97
98
  size,
98
99
  visualStyle,
100
+ copy,
99
101
  dataTestId }: {
100
102
  items: BreadcrumbItem[];
101
103
  size: string;
102
104
  visualStyle?: string;
105
+ copy: BreadcrumbCopy;
103
106
  dataTestId?: string;
104
107
  }) => {
105
108
  const [anchorEl, setAnchorEl] = React.useState<null | HTMLElement>(null);
@@ -115,7 +118,7 @@ const CollapsedMenu = ({
115
118
 
116
119
  return (
117
120
  <>
118
- <Tooltip title="Show more" arrow>
121
+ <Tooltip title={copy.showMore} arrow>
119
122
  <BreadcrumbLink
120
123
  onClick={handleClick}
121
124
  size={size}
@@ -174,10 +177,11 @@ const crumbIcon = ({
174
177
  );
175
178
  };
176
179
 
177
- const EllipsisCrumb: React.FC<{ label: string; dataTestId?: string }> = ({
180
+ const EllipsisCrumb: React.FC<{ label: string; copy: BreadcrumbCopy; dataTestId?: string }> = ({
178
181
  label,
182
+ copy,
179
183
  dataTestId }) => (
180
- <Tooltip title="More items" arrow>
184
+ <Tooltip title={copy.moreItems} arrow>
181
185
  <Box
182
186
  sx={{
183
187
  px: 1,
@@ -237,6 +241,7 @@ export const BreadcrumbEntry: React.FC<{
237
241
  iconSize: 'small' | 'medium';
238
242
  size: string;
239
243
  variant: string;
244
+ copy: BreadcrumbCopy;
240
245
  dataTestId?: string;
241
246
  }> = ({
242
247
  item,
@@ -249,6 +254,7 @@ export const BreadcrumbEntry: React.FC<{
249
254
  iconSize,
250
255
  size,
251
256
  variant,
257
+ copy,
252
258
  dataTestId }) => {
253
259
  const testId = makeTestId(dataTestId);
254
260
  const isLast = index === itemCount - 1;
@@ -262,6 +268,7 @@ export const BreadcrumbEntry: React.FC<{
262
268
  return (
263
269
  <>
264
270
  <CollapsedMenu
271
+ copy={copy}
265
272
  items={collapsedItems}
266
273
  size={size}
267
274
  visualStyle={variant}
@@ -273,7 +280,7 @@ export const BreadcrumbEntry: React.FC<{
273
280
  }
274
281
 
275
282
  if (item.isEllipsis) {
276
- return <EllipsisCrumb label={item.label} dataTestId={dataTestId} />;
283
+ return <EllipsisCrumb copy={copy} label={item.label} dataTestId={dataTestId} />;
277
284
  }
278
285
 
279
286
  const icon = crumbIcon({ item, isFirst: index === 0, showHomeIcon, iconSize });
@@ -145,6 +145,7 @@ export const Breadcrumbs = React.forwardRef<HTMLElement, BreadcrumbsProps>(
145
145
  collapseBehavior,
146
146
  mobileMaxItems,
147
147
  ariaLabel,
148
+ copy,
148
149
  dataTestId,
149
150
  ...props
150
151
  } = resolveProps(componentProps);
@@ -181,6 +182,7 @@ export const Breadcrumbs = React.forwardRef<HTMLElement, BreadcrumbsProps>(
181
182
  >
182
183
  {displayItems.map((item, index) => (
183
184
  <BreadcrumbEntry
185
+ copy={copy}
184
186
  key={index}
185
187
  item={item}
186
188
  index={index}
@@ -1,6 +1,7 @@
1
1
  import type { ColorValue, SizeValue } from '../../../tokens/scales';
2
2
  import type { BreadcrumbsProps as MuiBreadcrumbsProps } from '@mui/material';
3
3
  import type { ReactNode } from 'react';
4
+ import type { BreadcrumbCopy } from '../../../copy';
4
5
 
5
6
  export interface BreadcrumbItem {
6
7
  /**
@@ -57,6 +58,8 @@ export interface BreadcrumbItem {
57
58
  }
58
59
 
59
60
  export interface BreadcrumbsProps extends Omit<MuiBreadcrumbsProps, 'separator'> {
61
+ /** The overflow control's tooltip, in its two spellings. REQUIRED. */
62
+ copy: BreadcrumbCopy;
60
63
  /**
61
64
  * The visual variant of the breadcrumbs container
62
65
  * - default: No special styling