@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
@@ -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
@@ -21,6 +21,7 @@ import { useCommandPalette } from './CommandPalette.hooks';
21
21
  import { PaletteResults } from './CommandPaletteResults';
22
22
  import { ShortcutChip } from './ShortcutChip';
23
23
  import type { CommandPaletteProps } from './CommandPalette.types';
24
+ import type { CommandPaletteCopy } from '../../../copy';
24
25
 
25
26
  // Styled components
26
27
  const StyledDialog = styled(Dialog)(() => ({
@@ -98,7 +99,10 @@ const PaletteSearch: React.FC<{
98
99
  </SearchContainer>
99
100
  );
100
101
 
101
- const PaletteFooter: React.FC<{ commandCount: number }> = ({ commandCount }) => {
102
+ const PaletteFooter: React.FC<{ commandCount: number; copy: CommandPaletteCopy }> = ({
103
+ commandCount,
104
+ copy,
105
+ }) => {
102
106
  const theme = useTheme();
103
107
 
104
108
  return (
@@ -112,9 +116,13 @@ const PaletteFooter: React.FC<{ commandCount: number }> = ({ commandCount }) =>
112
116
  background: alpha(theme.palette.background.default, 0.4) }}
113
117
  >
114
118
  <Box sx={{ display: 'flex', gap: 1 }}>
115
- <ShortcutChip icon={<EnterIcon sx={{ fontSize: 12 }} />} label="Execute" size="small" />
116
- <ShortcutChip label="↑↓ Navigate" size="small" />
117
- <ShortcutChip label="ESC Close" size="small" />
119
+ <ShortcutChip
120
+ icon={<EnterIcon sx={{ fontSize: 12 }} />}
121
+ label={copy.execute}
122
+ size="small"
123
+ />
124
+ <ShortcutChip label={copy.navigate} size="small" />
125
+ <ShortcutChip label={copy.close} size="small" />
118
126
  </Box>
119
127
  <Typography variant="caption" color="text.secondary">
120
128
  {commandCount} commands
@@ -124,6 +132,7 @@ const PaletteFooter: React.FC<{ commandCount: number }> = ({ commandCount }) =>
124
132
  };
125
133
 
126
134
  export const CommandPalette: FC<CommandPaletteProps> = ({
135
+ copy,
127
136
  open,
128
137
  onClose,
129
138
  commands,
@@ -177,6 +186,7 @@ export const CommandPalette: FC<CommandPaletteProps> = ({
177
186
  />
178
187
 
179
188
  <PaletteResults
189
+ copy={copy}
180
190
  listRef={listRef}
181
191
  dataTestId={dataTestId}
182
192
  searchQuery={searchQuery}
@@ -190,7 +200,7 @@ export const CommandPalette: FC<CommandPaletteProps> = ({
190
200
  onExecute={executeCommand}
191
201
  />
192
202
 
193
- <PaletteFooter commandCount={filteredCommands.length} />
203
+ <PaletteFooter copy={copy} commandCount={filteredCommands.length} />
194
204
  </PaletteContainer>
195
205
  </DialogContent>
196
206
  </StyledDialog>
@@ -1,4 +1,5 @@
1
1
  import type React from 'react';
2
+ import type { CommandPaletteCopy } from '../../../copy';
2
3
 
3
4
  export interface PaletteCommand {
4
5
  id: string;
@@ -12,6 +13,8 @@ export interface PaletteCommand {
12
13
  }
13
14
 
14
15
  export interface CommandPaletteProps {
16
+ /** The footer's keyboard hints and the empty state's nudge. REQUIRED. */
17
+ copy: CommandPaletteCopy;
15
18
  open: boolean;
16
19
  onClose: () => void;
17
20
  commands: PaletteCommand[];
@@ -5,6 +5,7 @@ import React from 'react';
5
5
 
6
6
  import { ShortcutChip } from './ShortcutChip';
7
7
  import type { PaletteCommand } from './CommandPalette.types';
8
+ import type { CommandPaletteCopy } from '../../../copy';
8
9
 
9
10
  const ResultsList = styled(List)(({ theme }) => ({
10
11
  maxHeight: 400,
@@ -90,6 +91,7 @@ const slug = (value: string) => value.toLowerCase().replace(/\s+/g, '-');
90
91
  // has to stay consistent across both sections, so it is threaded through here
91
92
  // rather than mutated from inside the render as it was before.
92
93
  export const PaletteResults: React.FC<{
94
+ copy: CommandPaletteCopy;
93
95
  listRef: React.Ref<globalThis.HTMLUListElement>;
94
96
  dataTestId?: string;
95
97
  searchQuery: string;
@@ -102,6 +104,7 @@ export const PaletteResults: React.FC<{
102
104
  onSelect: (index: number) => void;
103
105
  onExecute: (command: PaletteCommand) => void;
104
106
  }> = ({
107
+ copy,
105
108
  listRef,
106
109
  dataTestId,
107
110
  searchQuery,
@@ -121,7 +124,7 @@ export const PaletteResults: React.FC<{
121
124
  No commands found for "{searchQuery}"
122
125
  </Typography>
123
126
  <Typography variant="caption" color="text.disabled" sx={{ mt: 1 }}>
124
- Try a different search term
127
+ {copy.tryAnotherTerm}
125
128
  </Typography>
126
129
  </NoResults>
127
130
  );
@@ -160,7 +163,7 @@ export const PaletteResults: React.FC<{
160
163
  <>
161
164
  <CategoryLabel data-testid={`${dataTestId}-group-recent`}>
162
165
  <RecentIcon sx={{ fontSize: 14, mr: 0.5, verticalAlign: 'middle' }} />
163
- Recent
166
+ {copy.recent}
164
167
  </CategoryLabel>
165
168
  {recent.map(row)}
166
169
  {filteredCommands.length > recentCommandIds.length && <Divider sx={{ my: 1 }} />}
@@ -152,6 +152,7 @@ export const Pagination = React.forwardRef<HTMLElement, PaginationProps>(
152
152
  (componentProps, ref) => {
153
153
  const resolved = resolvePaginationProps(componentProps);
154
154
  const {
155
+ pageSizeLabel,
155
156
  variant,
156
157
  size,
157
158
  page,
@@ -194,6 +195,7 @@ export const Pagination = React.forwardRef<HTMLElement, PaginationProps>(
194
195
  <PaginationContainer className={className} data-testid={dataTestId || 'pagination'}>
195
196
  {showItemsPerPage && onItemsPerPageChange && (
196
197
  <ItemsPerPageSelect
198
+ pageSizeLabel={pageSizeLabel}
197
199
  value={itemsPerPage}
198
200
  options={itemsPerPageOptions}
199
201
  size={size}
@@ -3,6 +3,8 @@ import type { PaginationProps as MuiPaginationProps } from '@mui/material';
3
3
  import type { ReactNode } from 'react';
4
4
 
5
5
  export interface PaginationProps extends Omit<MuiPaginationProps, 'variant' | 'size' | 'color'> {
6
+ /** The label in front of the page-size select. REQUIRED. */
7
+ pageSizeLabel: string;
6
8
  /**
7
9
  * The variant of the pagination
8
10
  */
@@ -20,6 +20,8 @@ const PageInfoContainer = styled(Box)(({ theme }) => ({
20
20
  }));
21
21
 
22
22
  export interface ItemsPerPageSelectProps {
23
+ /** The label in front of the select. REQUIRED — it was `"Show:"`. */
24
+ pageSizeLabel: string;
23
25
  value: number;
24
26
  options: number[];
25
27
  size: string;
@@ -29,6 +31,7 @@ export interface ItemsPerPageSelectProps {
29
31
  }
30
32
 
31
33
  export const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({
34
+ pageSizeLabel,
32
35
  value,
33
36
  options,
34
37
  size,
@@ -38,7 +41,7 @@ export const ItemsPerPageSelect: FC<ItemsPerPageSelectProps> = ({
38
41
  }) => (
39
42
  <ItemsPerPageContainer>
40
43
  <Typography variant="body2" color="text.secondary">
41
- Show:
44
+ {pageSizeLabel}
42
45
  </Typography>
43
46
  <FormControl size="small" sx={{ minWidth: 80 }}>
44
47
  <Select
@@ -105,8 +105,9 @@ const buildTabsSx = ({
105
105
  // A tab's label: icon, text, optional close affordance, optionally badged.
106
106
  const TabLabel: React.FC<{
107
107
  item: TabItem;
108
+ closeTabLabel: string;
108
109
  onClose: (event: React.MouseEvent | React.KeyboardEvent, tabId: string) => void;
109
- }> = ({ item, onClose }) => {
110
+ }> = ({ item, closeTabLabel, onClose }) => {
110
111
  const content = (
111
112
  <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>
112
113
  {item.icon}
@@ -116,7 +117,7 @@ const TabLabel: React.FC<{
116
117
  onClick={(e) => onClose(e, item.id)}
117
118
  role="button"
118
119
  tabIndex={0}
119
- aria-label="Close tab"
120
+ aria-label={closeTabLabel}
120
121
  onKeyDown={(e) => {
121
122
  if (e.key !== 'Enter' && e.key !== ' ') return;
122
123
  onClose(e, item.id);
@@ -176,7 +177,7 @@ const TabsBar: React.FC<
176
177
  <MuiTab
177
178
  key={item.id}
178
179
  value={item.id}
179
- label={<TabLabel item={item} onClose={onCloseTab} />}
180
+ label={<TabLabel closeTabLabel={p.closeTabLabel} item={item} onClose={onCloseTab} />}
180
181
  disabled={item.disabled || p.disabled}
181
182
  className={item.className}
182
183
  id={`tab-${item.id}`}
@@ -224,6 +225,10 @@ export const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(
224
225
  (tabsProps, ref) => {
225
226
  const resolved = { ...TABS_DEFAULTS, ...definedProps(tabsProps) } as TabsProps;
226
227
  const {
228
+ // Destructured only to keep it OUT of `rest`, which is spread onto the
229
+ // DOM node — `{...resolved}` below is what actually carries it to
230
+ // `TabsBar`. Same reason as `value` on the next line.
231
+ closeTabLabel: _closeTabLabel,
227
232
  value: _value,
228
233
  onChange,
229
234
  onTabClose,
@@ -50,6 +50,8 @@ export interface TabItem {
50
50
  }
51
51
 
52
52
  export interface TabsProps extends Omit<MuiTabsProps, 'variant' | 'children' | 'indicatorColor' | 'scrollButtons'> {
53
+ /** A closable tab's dismiss — a glyph with no visible label. REQUIRED. */
54
+ closeTabLabel: string;
53
55
  /**
54
56
  * The visual variant of the tabs
55
57
  */
@@ -12,19 +12,19 @@ const CENTERED = {
12
12
  p: 2,
13
13
  } as const;
14
14
 
15
- export const DefaultLoader: React.FC = () => (
15
+ export const DefaultLoader: React.FC<{ loadingText: string }> = ({ loadingText }) => (
16
16
  <Box sx={CENTERED}>
17
17
  <CircularProgress size={24} />
18
18
  <Typography variant="body2" sx={{ ml: 1 }}>
19
- Loading...
19
+ {loadingText}
20
20
  </Typography>
21
21
  </Box>
22
22
  );
23
23
 
24
- export const DefaultEndMessage: React.FC = () => (
24
+ export const DefaultEndMessage: React.FC<{ endText: string }> = ({ endText }) => (
25
25
  <Box sx={CENTERED}>
26
26
  <Typography variant="body2" color="text.secondary">
27
- No more items to load
27
+ {endText}
28
28
  </Typography>
29
29
  </Box>
30
30
  );
@@ -18,6 +18,8 @@ export const InfiniteScroll: React.FC<InfiniteScrollProps> = ({
18
18
  threshold = 150,
19
19
  loadMore,
20
20
  loader,
21
+ loadingText,
22
+ endText,
21
23
  endMessage,
22
24
  error,
23
25
  errorComponent,
@@ -45,9 +47,9 @@ export const InfiniteScroll: React.FC<InfiniteScrollProps> = ({
45
47
  // The tail of the list is one of four things: the end message, an error, a
46
48
  // spinner, or the sentinel that asks for the next page.
47
49
  const renderSentinel = () => {
48
- if (!hasMore) return endMessage || <DefaultEndMessage />;
50
+ if (!hasMore) return endMessage || <DefaultEndMessage endText={endText} />;
49
51
  if (error) return errorComponent || <DefaultError error={error} />;
50
- if (loading) return loader || <DefaultLoader />;
52
+ if (loading) return loader || <DefaultLoader loadingText={loadingText} />;
51
53
 
52
54
  return (
53
55
  <div
@@ -3,6 +3,12 @@ import type { ReactNode } from 'react';
3
3
  export type InfiniteScrollVariant = 'default' | 'reverse' | 'horizontal';
4
4
 
5
5
  export interface InfiniteScrollProps {
6
+ /**
7
+ * The two states the scroller renders on its own: fetching the next page,
8
+ * and having reached the end. REQUIRED — both were English literals.
9
+ */
10
+ loadingText: string;
11
+ endText: string;
6
12
  children: ReactNode;
7
13
  variant?: InfiniteScrollVariant;
8
14
  hasMore: boolean;