@persona/design-system 0.8.1 → 0.8.2

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 (566) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/dist/Accordion.d.mts +1 -1
  3. package/dist/AccordionItem.d.mts +1 -1
  4. package/dist/{Action-BwYS9qaG.d.mts → Action-C6yvIekn.d.mts} +3 -3
  5. package/dist/Action.d.mts +1 -1
  6. package/dist/AdvancedFilterRuleRow.d.mts +2 -2
  7. package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
  8. package/dist/ArrayValueControl.d.mts +1 -1
  9. package/dist/Attribute.d.mts +3 -3
  10. package/dist/{Badge-D-5tbZDw.mjs → Badge-uY8l1p1R.mjs} +2 -2
  11. package/dist/{Badge-D-5tbZDw.mjs.map → Badge-uY8l1p1R.mjs.map} +1 -1
  12. package/dist/BooleanValueControl.d.mts +1 -1
  13. package/dist/{Breadcrumb-BADja8tn.d.mts → Breadcrumb-Tjk9FyiF.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-CxP7ktfM.d.mts → Breadcrumbs-DSCbZmAx.d.mts} +2 -2
  16. package/dist/{Breadcrumbs-CNpM0aXm.mjs → Breadcrumbs-EQm5iiRA.mjs} +8 -8
  17. package/dist/{Breadcrumbs-CNpM0aXm.mjs.map → Breadcrumbs-EQm5iiRA.mjs.map} +1 -1
  18. package/dist/Breadcrumbs.d.mts +1 -1
  19. package/dist/{Button-CnswHEJ2.d.mts → Button-22DkIpYp.d.mts} +4 -4
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/{Calendar-Cke5IlMI.d.mts → Calendar-DANGQNlH.d.mts} +1 -1
  22. package/dist/Calendar.d.mts +1 -1
  23. package/dist/CalendarBase.d.mts +1 -1
  24. package/dist/{Card-Dz6jqJuJ.mjs → Card-BXNxWX5C.mjs} +4 -4
  25. package/dist/{Card-Dz6jqJuJ.mjs.map → Card-BXNxWX5C.mjs.map} +1 -1
  26. package/dist/{Card-Bp6L08H4.d.mts → Card-DQE1J3gk.d.mts} +3 -3
  27. package/dist/Card.d.mts +1 -1
  28. package/dist/{CardV2-DEW6mw_o.mjs → CardV2-Ds6e577k.mjs} +9 -9
  29. package/dist/{CardV2-DEW6mw_o.mjs.map → CardV2-Ds6e577k.mjs.map} +1 -1
  30. package/dist/{Checkbox-GibG2pg5.mjs → Checkbox-BQC_SmBt.mjs} +4 -4
  31. package/dist/{Checkbox-GibG2pg5.mjs.map → Checkbox-BQC_SmBt.mjs.map} +1 -1
  32. package/dist/{Checkbox-DUXws1Os.d.mts → Checkbox-CsJlWz-r.d.mts} +1 -1
  33. package/dist/Checkbox.d.mts +1 -1
  34. package/dist/{CheckboxGroupField-DzdOYIjo.d.mts → CheckboxGroupField-DjKp63Dr.d.mts} +3 -3
  35. package/dist/CheckboxGroupField.d.mts +1 -1
  36. package/dist/ChoicesValueControl.d.mts +1 -1
  37. package/dist/{Combobox-CnxmKUQf.d.mts → Combobox-D1iXiYGV.d.mts} +3 -3
  38. package/dist/{Combobox-CCDoNF9Y.mjs → Combobox-MCaDc7h6.mjs} +10 -10
  39. package/dist/{Combobox-CCDoNF9Y.mjs.map → Combobox-MCaDc7h6.mjs.map} +1 -1
  40. package/dist/Combobox.d.mts +2 -2
  41. package/dist/{ComboboxBase-CtNrsPO9.d.mts → ComboboxBase-DXhu2YSh.d.mts} +6 -6
  42. package/dist/ComboboxBase.d.mts +1 -1
  43. package/dist/{ComboboxMultiSelect-CMH6iVu4.d.mts → ComboboxMultiSelect-BSyJc46m.d.mts} +2 -2
  44. package/dist/ComboboxMultiSelect.d.mts +1 -1
  45. package/dist/{ComboboxSingleSelect-BLPbLmMY.d.mts → ComboboxSingleSelect-Dg_6h4iB.d.mts} +4 -4
  46. package/dist/ComboboxSingleSelect.d.mts +1 -1
  47. package/dist/{CompactBar-BwKIIlWz.d.mts → CompactBar-CVGNq7Zu.d.mts} +3 -3
  48. package/dist/CompactBar.d.mts +1 -1
  49. package/dist/{ConfigFormGroup-BQXN2Pgj.mjs → ConfigFormGroup-CidT_cE9.mjs} +2 -2
  50. package/dist/{ConfigFormGroup-BQXN2Pgj.mjs.map → ConfigFormGroup-CidT_cE9.mjs.map} +1 -1
  51. package/dist/{ControlBar-BJUY6GOX.d.mts → ControlBar-K43YI-LU.d.mts} +17 -2
  52. package/dist/ControlBar.d.mts +1 -1
  53. package/dist/DataTable.d.mts +6 -3
  54. package/dist/{DateField-BojOHfrv.d.mts → DateField-DY3xCygL.d.mts} +2 -2
  55. package/dist/DateField.d.mts +1 -1
  56. package/dist/{DatePicker-BHVx_i_F.d.mts → DatePicker-C56kJLiX.d.mts} +2 -2
  57. package/dist/{DatePicker-LPIJrc0n.mjs → DatePicker-CKk6Hnj2.mjs} +40 -8
  58. package/dist/DatePicker-CKk6Hnj2.mjs.map +1 -0
  59. package/dist/DatePicker.d.mts +1 -1
  60. package/dist/{DateRangePicker-CelDK_44.d.mts → DateRangePicker-C96NKOon.d.mts} +3 -3
  61. package/dist/DateRangePicker.d.mts +1 -1
  62. package/dist/DateRangeValueControl.d.mts +2 -2
  63. package/dist/DateValueControl.d.mts +1 -1
  64. package/dist/{DropdownButton-i5Dmxiq1.mjs → DropdownButton-B-cYK2oi.mjs} +3 -3
  65. package/dist/{DropdownButton-i5Dmxiq1.mjs.map → DropdownButton-B-cYK2oi.mjs.map} +1 -1
  66. package/dist/DropdownButton.d.mts +2 -2
  67. package/dist/{DropdownMenu-YtLxcNWt.d.mts → DropdownMenu-BwPtzVWg.d.mts} +2 -2
  68. package/dist/{DropdownMenu-j8NWbAvM.mjs → DropdownMenu-CedsmO5h.mjs} +2 -2
  69. package/dist/{DropdownMenu-j8NWbAvM.mjs.map → DropdownMenu-CedsmO5h.mjs.map} +1 -1
  70. package/dist/DropdownMenu.d.mts +1 -1
  71. package/dist/{ErrorProps-6dRdJ4QQ.d.mts → ErrorProps-C-sfKFxK.d.mts} +1 -1
  72. package/dist/ErrorProps.d.mts +1 -1
  73. package/dist/{FieldRegistry-DqO8HiYb.d.mts → FieldRegistry-C2eIbP1X.d.mts} +2 -2
  74. package/dist/FieldRegistry.d.mts +1 -1
  75. package/dist/{FilterBar-CpAA2Ozk.d.mts → FilterBar-BNbMjWDC.d.mts} +4 -4
  76. package/dist/FilterBar.d.mts +1 -1
  77. package/dist/FilterPickerMenu.d.mts +3 -3
  78. package/dist/FilterPill.d.mts +1 -1
  79. package/dist/FilterPopover.d.mts +1 -1
  80. package/dist/FloatValueControl.d.mts +1 -1
  81. package/dist/{FormControl-bDxFF0hl.mjs → FormControl-C4CiA0H-.mjs} +4 -4
  82. package/dist/{FormControl-bDxFF0hl.mjs.map → FormControl-C4CiA0H-.mjs.map} +1 -1
  83. package/dist/{FormControl-B-s6G9mp.d.mts → FormControl-DICrNHcc.d.mts} +2 -2
  84. package/dist/FormControl.d.mts +1 -1
  85. package/dist/FormControlLabel.d.mts +1 -1
  86. package/dist/{FormField-DbcqNcx2.mjs → FormField-CB0yCMro.mjs} +16 -16
  87. package/dist/{FormField-DbcqNcx2.mjs.map → FormField-CB0yCMro.mjs.map} +1 -1
  88. package/dist/{FormField-D3k-f3-f.d.mts → FormField-D97xQCxF.d.mts} +2 -2
  89. package/dist/FormField.d.mts +1 -1
  90. package/dist/{Grid-CeH9E5Ai.mjs → Grid-D0mlxk8_.mjs} +1 -1
  91. package/dist/{Grid-CeH9E5Ai.mjs.map → Grid-D0mlxk8_.mjs.map} +1 -1
  92. package/dist/{Header-2K49LYkR.d.mts → Header-Ca554S1F.d.mts} +1 -1
  93. package/dist/Header.d.mts +1 -1
  94. package/dist/{HelperTooltip-CTHUM2nC.d.mts → HelperTooltip-Dk2eqeC_.d.mts} +2 -2
  95. package/dist/HelperTooltip.d.mts +1 -1
  96. package/dist/HighlightedText.d.mts +2 -2
  97. package/dist/{HoverCopyableField-BARZLhfO.mjs → HoverCopyableField-CewUtxZl.mjs} +6 -6
  98. package/dist/{HoverCopyableField-BARZLhfO.mjs.map → HoverCopyableField-CewUtxZl.mjs.map} +1 -1
  99. package/dist/I18nContext-DXcImEuM.d.mts +22 -0
  100. package/dist/I18nContext.d.mts +2 -0
  101. package/dist/{IconButton-BHFCjvzs.mjs → IconButton-H5vDZOdo.mjs} +3 -3
  102. package/dist/{IconButton-BHFCjvzs.mjs.map → IconButton-H5vDZOdo.mjs.map} +1 -1
  103. package/dist/{IconButton-D5hx405r.d.mts → IconButton-Vq0MUaNj.d.mts} +2 -2
  104. package/dist/IconButton.d.mts +1 -1
  105. package/dist/ImageTile.d.mts +1 -1
  106. package/dist/InlineCombobox.d.mts +1 -1
  107. package/dist/InlineInput.d.mts +1 -1
  108. package/dist/{Input-BQbcIiVj.d.mts → Input-BRe0qyUe.d.mts} +3 -3
  109. package/dist/{Input-BQN97Hzm.mjs → Input-CY14-YeD.mjs} +4 -4
  110. package/dist/{Input-BQN97Hzm.mjs.map → Input-CY14-YeD.mjs.map} +1 -1
  111. package/dist/Input.d.mts +1 -1
  112. package/dist/{InputProps-DT1ZReZS.d.mts → InputProps-B2ngFfvF.d.mts} +2 -2
  113. package/dist/InputProps.d.mts +1 -1
  114. package/dist/IntegerValueControl.d.mts +1 -1
  115. package/dist/{Link-Bzm4AL5J.mjs → Link-BSuXrvTu.mjs} +2 -2
  116. package/dist/{Link-Bzm4AL5J.mjs.map → Link-BSuXrvTu.mjs.map} +1 -1
  117. package/dist/Link.d.mts +1 -1
  118. package/dist/{ListBox-DOqN9DNl.mjs → ListBox-2aYWNlO_.mjs} +13 -10
  119. package/dist/{ListBox-DOqN9DNl.mjs.map → ListBox-2aYWNlO_.mjs.map} +1 -1
  120. package/dist/{ListBox-CdqRwBvA.d.mts → ListBox-DzZY7IFz.d.mts} +3 -3
  121. package/dist/ListBox.d.mts +1 -1
  122. package/dist/{ListBoxField-Bl2WLplO.d.mts → ListBoxField-DT_-4_Ct.d.mts} +4 -4
  123. package/dist/ListBoxField.d.mts +1 -1
  124. package/dist/{LoadingShimmer-Ds7rvIUN.mjs → LoadingShimmer-Bqjdut7i.mjs} +1 -1
  125. package/dist/{LoadingShimmer-Ds7rvIUN.mjs.map → LoadingShimmer-Bqjdut7i.mjs.map} +1 -1
  126. package/dist/LoadingShimmer.d.mts +1 -1
  127. package/dist/{LogicRow-CwMAn1sh.d.mts → LogicRow-l66qss7_.d.mts} +3 -3
  128. package/dist/LogicRow.d.mts +1 -1
  129. package/dist/MaskedInput.d.mts +2 -2
  130. package/dist/{Menu-CUN9bmc1.d.mts → Menu-DQXbnpDB.d.mts} +3 -3
  131. package/dist/{Menu-DjW2b3Wk.mjs → Menu-Dw6Rcpk6.mjs} +2 -2
  132. package/dist/{Menu-DjW2b3Wk.mjs.map → Menu-Dw6Rcpk6.mjs.map} +1 -1
  133. package/dist/Menu.d.mts +1 -1
  134. package/dist/{Modal-CGXJGrKg.d.mts → Modal-Bz5Rer1b.d.mts} +2 -2
  135. package/dist/{Modal-DHLPK65-.mjs → Modal-dpBu2MKp.mjs} +6 -6
  136. package/dist/{Modal-DHLPK65-.mjs.map → Modal-dpBu2MKp.mjs.map} +1 -1
  137. package/dist/Modal.d.mts +1 -1
  138. package/dist/{PageHeader-eI4RM_uL.mjs → PageHeader-CLO8SMXV.mjs} +3 -3
  139. package/dist/{PageHeader-eI4RM_uL.mjs.map → PageHeader-CLO8SMXV.mjs.map} +1 -1
  140. package/dist/PageHeader.d.mts +1 -1
  141. package/dist/{PageSelector-kAfYxEky.d.mts → PageSelector--kFA7Xt6.d.mts} +3 -3
  142. package/dist/PageSelector.d.mts +1 -1
  143. package/dist/{Pagination-6BDOn9bX.mjs → Pagination-BEddsarh.mjs} +40 -49
  144. package/dist/Pagination-BEddsarh.mjs.map +1 -0
  145. package/dist/{Pagination-Bhr7xyd2.d.mts → Pagination-CglxJr3f.d.mts} +2 -2
  146. package/dist/Pagination.d.mts +1 -1
  147. package/dist/{Pii-DhL1gblz.mjs → Pii-Ct7yDY7d.mjs} +2 -2
  148. package/dist/{Pii-DhL1gblz.mjs.map → Pii-Ct7yDY7d.mjs.map} +1 -1
  149. package/dist/{PillShell-CVJL1k5I.d.mts → PillShell-CvJzkRFh.d.mts} +2 -2
  150. package/dist/PillShell.d.mts +1 -1
  151. package/dist/{Popover-CbYaWrAy.mjs → Popover-532iYFek.mjs} +3 -3
  152. package/dist/{Popover-CbYaWrAy.mjs.map → Popover-532iYFek.mjs.map} +1 -1
  153. package/dist/{ProgressIndicator-CYyM6OSx.d.mts → ProgressIndicator-Cleq0Tfb.d.mts} +1 -1
  154. package/dist/{ProgressIndicator-BpF3XLn3.mjs → ProgressIndicator-STyTM0Hq.mjs} +1 -1
  155. package/dist/{ProgressIndicator-BpF3XLn3.mjs.map → ProgressIndicator-STyTM0Hq.mjs.map} +1 -1
  156. package/dist/ProgressIndicator.d.mts +1 -1
  157. package/dist/{PseudoClassProps-BOVN6Etr.d.mts → PseudoClassProps-B2R2dyr3.d.mts} +1 -1
  158. package/dist/PseudoClassProps.d.mts +1 -1
  159. package/dist/{Radio-DPaX-9LH.mjs → Radio-BtomkCkL.mjs} +2 -2
  160. package/dist/{Radio-DPaX-9LH.mjs.map → Radio-BtomkCkL.mjs.map} +1 -1
  161. package/dist/{RadioGroup-C0l0pdEt.d.mts → RadioGroup-B3B4PCz6.d.mts} +1 -1
  162. package/dist/{RadioGroup-D7f4m2Uc.mjs → RadioGroup-B6UaoJRd.mjs} +2 -2
  163. package/dist/{RadioGroup-D7f4m2Uc.mjs.map → RadioGroup-B6UaoJRd.mjs.map} +1 -1
  164. package/dist/RadioGroup.d.mts +1 -1
  165. package/dist/{RangeCalendar-BJn9V3iN.d.mts → RangeCalendar-C24q-nvR.d.mts} +2 -2
  166. package/dist/RangeCalendar.d.mts +1 -1
  167. package/dist/RangeCalendarPresets.d.mts +1 -1
  168. package/dist/{RouterContext-BLrzYlJ_.d.mts → RouterContext-BhPPG7d3.d.mts} +2 -2
  169. package/dist/{RouterContext-CsPnkNdI.mjs → RouterContext-nPSb55p9.mjs} +1 -1
  170. package/dist/{RouterContext-CsPnkNdI.mjs.map → RouterContext-nPSb55p9.mjs.map} +1 -1
  171. package/dist/RouterContext.d.mts +1 -1
  172. package/dist/{RouterLink-BHXjhqps.d.mts → RouterLink-IDO10cDE.d.mts} +2 -2
  173. package/dist/RouterLink.d.mts +1 -1
  174. package/dist/RuleEditorFields.d.mts +2 -2
  175. package/dist/RulesPill.d.mts +1 -1
  176. package/dist/{SearchInput-Buh8LdIL.d.mts → SearchInput-7pBMxhuN.d.mts} +2 -2
  177. package/dist/SearchInput.d.mts +1 -1
  178. package/dist/SectionHeading.d.mts +1 -1
  179. package/dist/{SegmentedControl-B9qLyIIW.d.mts → SegmentedControl-B9yo9yMy.d.mts} +1 -1
  180. package/dist/{SegmentedControl-zEvBtVj0.mjs → SegmentedControl-BNVwf7nL.mjs} +2 -2
  181. package/dist/{SegmentedControl-zEvBtVj0.mjs.map → SegmentedControl-BNVwf7nL.mjs.map} +1 -1
  182. package/dist/SegmentedControl.d.mts +1 -1
  183. package/dist/{Select-Cv_9PLOt.d.mts → Select-D7_npfZr.d.mts} +3 -3
  184. package/dist/{Select-BoZuM_e9.mjs → Select-DD7mFvR8.mjs} +7 -7
  185. package/dist/{Select-BoZuM_e9.mjs.map → Select-DD7mFvR8.mjs.map} +1 -1
  186. package/dist/Select.d.mts +1 -1
  187. package/dist/SmartTextInput.d.mts +9 -9
  188. package/dist/SmartTextInputField.d.mts +2 -2
  189. package/dist/SmartTextInputFunctionDialog.d.mts +4 -4
  190. package/dist/SmartTextInputListbox.d.mts +2 -2
  191. package/dist/SmartTextInputPopover.d.mts +1 -1
  192. package/dist/{Spacer-BFOuo0sZ.mjs → Spacer-J_HuhxX2.mjs} +1 -1
  193. package/dist/{Spacer-BFOuo0sZ.mjs.map → Spacer-J_HuhxX2.mjs.map} +1 -1
  194. package/dist/{Spinner-CarSRiBF.mjs → Spinner-uVZyOh1T.mjs} +1 -1
  195. package/dist/{Spinner-CarSRiBF.mjs.map → Spinner-uVZyOh1T.mjs.map} +1 -1
  196. package/dist/{Stack-CEPzs4Pb.mjs → Stack-BkC7FCdF.mjs} +1 -1
  197. package/dist/{Stack-CEPzs4Pb.mjs.map → Stack-BkC7FCdF.mjs.map} +1 -1
  198. package/dist/{Stack-XzBzPvSV.d.mts → Stack-opuYfQvc.d.mts} +1 -1
  199. package/dist/Stack.d.mts +1 -1
  200. package/dist/{StatusIndicator-bEnMWV_S.mjs → StatusIndicator-akDwBiBW.mjs} +1 -1
  201. package/dist/{StatusIndicator-bEnMWV_S.mjs.map → StatusIndicator-akDwBiBW.mjs.map} +1 -1
  202. package/dist/{Sticker-B-fU8lgu.mjs → Sticker-DdhSpTcV.mjs} +3 -3
  203. package/dist/{Sticker-B-fU8lgu.mjs.map → Sticker-DdhSpTcV.mjs.map} +1 -1
  204. package/dist/{Sticker-DGfNuxUK.d.mts → Sticker-rxBNVYlX.d.mts} +4 -4
  205. package/dist/Sticker.d.mts +1 -1
  206. package/dist/StringValueControl.d.mts +1 -1
  207. package/dist/Tab.d.mts +1 -1
  208. package/dist/{TabBar-BSl5v5aa.mjs → TabBar-DBOPWUUa.mjs} +6 -9
  209. package/dist/TabBar-DBOPWUUa.mjs.map +1 -0
  210. package/dist/{Table-msXj0glu.mjs → Table--o4ZLRbb.mjs} +4 -4
  211. package/dist/{Table-msXj0glu.mjs.map → Table--o4ZLRbb.mjs.map} +1 -1
  212. package/dist/{Table-B2V5tlfA.d.mts → Table-Bt7zAlgQ.d.mts} +1 -1
  213. package/dist/Table.d.mts +1 -1
  214. package/dist/{TableBody-SlQe4Jyp.d.mts → TableBody-9AYpXi2y.d.mts} +1 -1
  215. package/dist/TableBody.d.mts +1 -1
  216. package/dist/{TableBox-CF1_Fk0j.mjs → TableBox-BGabyY7E.mjs} +10 -10
  217. package/dist/{TableBox-CF1_Fk0j.mjs.map → TableBox-BGabyY7E.mjs.map} +1 -1
  218. package/dist/TableBox.d.mts +2 -2
  219. package/dist/{TableBoxCell-BRhGeUnO.d.mts → TableBoxCell-6ovTrboM.d.mts} +6 -6
  220. package/dist/TableBoxCell.d.mts +1 -1
  221. package/dist/{TableBoxField-Cq9M1upV.d.mts → TableBoxField-mGTYb-Bz.d.mts} +5 -5
  222. package/dist/TableBoxField.d.mts +1 -1
  223. package/dist/{TableBoxRow-DZzRYoID.d.mts → TableBoxRow-56QatuNm.d.mts} +3 -3
  224. package/dist/TableBoxRow.d.mts +1 -1
  225. package/dist/{TableBoxRowActions-4-j3flJq.d.mts → TableBoxRowActions-9rR-k_4H.d.mts} +2 -2
  226. package/dist/TableBoxRowActions.d.mts +1 -1
  227. package/dist/{TableCell-D5Sqb6iO.d.mts → TableCell-WD0ultKh.d.mts} +2 -2
  228. package/dist/TableCell.d.mts +1 -1
  229. package/dist/{TableControls-CqW_nyBY.mjs → TableControls-B5UGCoO-.mjs} +561 -305
  230. package/dist/TableControls-B5UGCoO-.mjs.map +1 -0
  231. package/dist/{TableControls-B-LakH-8.d.mts → TableControls-DVO-obFo.d.mts} +6 -3
  232. package/dist/TableControls.d.mts +1 -1
  233. package/dist/{TableControlsContext-Dh1YVmBM.d.mts → TableControlsContext-BDl9k4o4.d.mts} +2 -2
  234. package/dist/TableControlsContext.d.mts +1 -1
  235. package/dist/{TableHead-BCrVa0BY.d.mts → TableHead-DqcFsWpz.d.mts} +1 -1
  236. package/dist/TableHead.d.mts +1 -1
  237. package/dist/{TableHeaderCell-CcEkDozs.d.mts → TableHeaderCell-C1PJHhXZ.d.mts} +1 -1
  238. package/dist/TableHeaderCell.d.mts +1 -1
  239. package/dist/{TableLayout-Bhj1QBBz.d.mts → TableLayout-B4qzMWXH.d.mts} +1 -1
  240. package/dist/TableLayout.d.mts +1 -1
  241. package/dist/{TableRow-Cy1y7b9S.d.mts → TableRow-B1yeAiVf.d.mts} +2 -2
  242. package/dist/TableRow.d.mts +1 -1
  243. package/dist/TableTH.d.mts +1 -1
  244. package/dist/{TableViewConfigurationDropdown-BzygLtGm.d.mts → TableViewConfigurationDropdown-DBdUHK__.d.mts} +2 -2
  245. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  246. package/dist/{TechnicalSticker-B6T7cHHc.mjs → TechnicalSticker-CALVwnrT.mjs} +3 -3
  247. package/dist/{TechnicalSticker-B6T7cHHc.mjs.map → TechnicalSticker-CALVwnrT.mjs.map} +1 -1
  248. package/dist/{Text-BdluS7Fy.mjs → Text-CSwFifQF.mjs} +1 -1
  249. package/dist/{Text-BdluS7Fy.mjs.map → Text-CSwFifQF.mjs.map} +1 -1
  250. package/dist/{Text-BVGJ-Nlw.d.mts → Text-D4GzsXFA.d.mts} +3 -3
  251. package/dist/Text.d.mts +1 -1
  252. package/dist/{TextArea-Bzj593VO.d.mts → TextArea-BL8BTgwk.d.mts} +2 -2
  253. package/dist/{TextArea-C1CmFRiz.mjs → TextArea-kOkhZxNR.mjs} +2 -2
  254. package/dist/{TextArea-C1CmFRiz.mjs.map → TextArea-kOkhZxNR.mjs.map} +1 -1
  255. package/dist/TextArea.d.mts +1 -1
  256. package/dist/{TextUnderlineTooltip-CgFmtqF_.d.mts → TextUnderlineTooltip-Sdxqsr6y.d.mts} +2 -2
  257. package/dist/TextUnderlineTooltip.d.mts +1 -1
  258. package/dist/Tile.d.mts +1 -1
  259. package/dist/Toast.d.mts +1 -1
  260. package/dist/{Toggle-CntyMUPJ.mjs → Toggle-CZF6iBql.mjs} +4 -4
  261. package/dist/{Toggle-CntyMUPJ.mjs.map → Toggle-CZF6iBql.mjs.map} +1 -1
  262. package/dist/{Toggle-bSu1xAaq.d.mts → Toggle-cUtrUIIO.d.mts} +1 -1
  263. package/dist/Toggle.d.mts +1 -1
  264. package/dist/{Tooltip-C0FuZS1C.mjs → Tooltip-B-0VRuKT.mjs} +2 -2
  265. package/dist/{Tooltip-C0FuZS1C.mjs.map → Tooltip-B-0VRuKT.mjs.map} +1 -1
  266. package/dist/{Tooltip-Duw4Fz1t.d.mts → Tooltip-CSM977L6.d.mts} +2 -2
  267. package/dist/Tooltip.d.mts +1 -1
  268. package/dist/{TruncatedText-CbTpX_R1.d.mts → TruncatedText-CCUrvW2a.d.mts} +1 -1
  269. package/dist/VersionHistory.d.mts +1 -1
  270. package/dist/{VersionHistoryItem-D05QYej7.d.mts → VersionHistoryItem-DBjL9S5_.d.mts} +1 -1
  271. package/dist/VersionHistoryItem.d.mts +1 -1
  272. package/dist/WizardModal.d.mts +2 -2
  273. package/dist/{accordionTitleTypography-Leehcmb3.d.mts → accordionTitleTypography--GAczLo7.d.mts} +2 -2
  274. package/dist/accordionTitleTypography.d.mts +1 -1
  275. package/dist/{chainTypes-D8SGRGba.d.mts → chainTypes-dY6jc22J.d.mts} +4 -4
  276. package/dist/{codec-Vsztf4fe.d.mts → codec-D2uE0_oJ.d.mts} +2 -2
  277. package/dist/codec.d.mts +1 -1
  278. package/dist/{color-CrlF3pba.d.mts → color-DuKiTH5t.d.mts} +2 -2
  279. package/dist/components/Accordion/index.d.mts +1 -1
  280. package/dist/components/Accordion/index.mjs +2 -2
  281. package/dist/components/Attribute/index.mjs +4 -4
  282. package/dist/components/Badge/index.mjs +1 -1
  283. package/dist/components/Banner/index.mjs +1 -1
  284. package/dist/components/BottomPanel/index.mjs +3 -3
  285. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  286. package/dist/components/Breadcrumbs/index.mjs +1 -1
  287. package/dist/components/Button/index.d.mts +2 -2
  288. package/dist/components/Button/index.mjs +1 -1
  289. package/dist/components/ButtonGroup/index.mjs +2 -2
  290. package/dist/components/Card/index.d.mts +2 -2
  291. package/dist/components/Card/index.mjs +1 -1
  292. package/dist/components/CardV2/index.d.mts +1 -1
  293. package/dist/components/CardV2/index.mjs +1 -1
  294. package/dist/components/Checkbox/index.d.mts +1 -1
  295. package/dist/components/Checkbox/index.mjs +1 -1
  296. package/dist/components/CodeHighlight/index.mjs +2 -2
  297. package/dist/components/Combobox/index.d.mts +2 -2
  298. package/dist/components/Combobox/index.mjs +1 -1
  299. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  300. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  301. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  302. package/dist/components/DataTable/index.d.mts +2 -2
  303. package/dist/components/DataTable/index.mjs +83 -60
  304. package/dist/components/DataTable/index.mjs.map +1 -1
  305. package/dist/components/DataTable/types.d.mts +9 -2
  306. package/dist/components/DatePicker/index.d.mts +5 -5
  307. package/dist/components/DatePicker/index.mjs +1 -1
  308. package/dist/components/DropdownButton/index.mjs +1 -1
  309. package/dist/components/DropdownMenu/index.d.mts +1 -1
  310. package/dist/components/DropdownMenu/index.mjs +1 -1
  311. package/dist/components/FloatingPanel/index.mjs +3 -3
  312. package/dist/components/FormControl/index.d.mts +2 -2
  313. package/dist/components/FormControl/index.mjs +2 -2
  314. package/dist/components/FormField/index.d.mts +5 -5
  315. package/dist/components/FormField/index.mjs +1 -1
  316. package/dist/components/Grid/index.mjs +1 -1
  317. package/dist/components/HoverCopyableField/index.mjs +1 -1
  318. package/dist/components/ImageTile/index.mjs +7 -7
  319. package/dist/components/Input/index.d.mts +1 -1
  320. package/dist/components/Input/index.mjs +1 -1
  321. package/dist/components/Link/index.mjs +1 -1
  322. package/dist/components/ListBox/index.d.mts +3 -3
  323. package/dist/components/ListBox/index.mjs +1 -1
  324. package/dist/components/LoadingShimmer/index.mjs +1 -1
  325. package/dist/components/MaskedInput/index.mjs +1 -1
  326. package/dist/components/Menu/index.d.mts +1 -1
  327. package/dist/components/Menu/index.mjs +1 -1
  328. package/dist/components/Modal/index.d.mts +1 -1
  329. package/dist/components/Modal/index.mjs +1 -1
  330. package/dist/components/PageHeader/index.mjs +1 -1
  331. package/dist/components/Pagination/index.d.mts +3 -3
  332. package/dist/components/Pagination/index.mjs +1 -1
  333. package/dist/components/Pii/index.mjs +1 -1
  334. package/dist/components/Popover/index.mjs +1 -1
  335. package/dist/components/ProgressBar/index.mjs +1 -1
  336. package/dist/components/ProgressIndicator/index.d.mts +1 -1
  337. package/dist/components/ProgressIndicator/index.mjs +1 -1
  338. package/dist/components/Radio/index.mjs +1 -1
  339. package/dist/components/RadioGroup/index.d.mts +1 -1
  340. package/dist/components/RadioGroup/index.mjs +1 -1
  341. package/dist/components/RightPanel/index.mjs +4 -4
  342. package/dist/components/SegmentedControl/index.d.mts +1 -1
  343. package/dist/components/SegmentedControl/index.mjs +1 -1
  344. package/dist/components/Select/index.d.mts +1 -1
  345. package/dist/components/Select/index.mjs +1 -1
  346. package/dist/components/Slider/index.mjs +1 -1
  347. package/dist/components/SmartTextInput/index.d.mts +2 -2
  348. package/dist/components/SmartTextInput/index.mjs +8 -8
  349. package/dist/components/SmartTextInput/index.mjs.map +1 -1
  350. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
  351. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +2 -2
  352. package/dist/components/Spacer/index.mjs +1 -1
  353. package/dist/components/Spinner/index.mjs +1 -1
  354. package/dist/components/Stack/index.d.mts +1 -1
  355. package/dist/components/Stack/index.mjs +1 -1
  356. package/dist/components/StatusIndicator/index.mjs +1 -1
  357. package/dist/components/Sticker/index.d.mts +1 -1
  358. package/dist/components/Sticker/index.mjs +1 -1
  359. package/dist/components/TabBar/index.mjs +1 -1
  360. package/dist/components/Table/index.d.mts +8 -8
  361. package/dist/components/Table/index.mjs +1 -1
  362. package/dist/components/TableBox/index.d.mts +2 -2
  363. package/dist/components/TableBox/index.mjs +1 -1
  364. package/dist/components/TechnicalSticker/index.mjs +1 -1
  365. package/dist/components/Text/index.d.mts +1 -1
  366. package/dist/components/Text/index.mjs +1 -1
  367. package/dist/components/TextArea/index.d.mts +1 -1
  368. package/dist/components/TextArea/index.mjs +1 -1
  369. package/dist/components/Tile/index.mjs +4 -4
  370. package/dist/components/Toast/index.mjs +1 -1
  371. package/dist/components/Toggle/index.d.mts +1 -1
  372. package/dist/components/Toggle/index.mjs +1 -1
  373. package/dist/components/Tooltip/index.d.mts +3 -3
  374. package/dist/components/Tooltip/index.mjs +1 -1
  375. package/dist/components/VersionHistory/index.d.mts +1 -1
  376. package/dist/components/VersionHistory/index.mjs +8 -8
  377. package/dist/compound-expression.d.mts +1 -1
  378. package/dist/{constants-CQUCM6__.d.mts → constants-BiOvZGO5.d.mts} +1 -1
  379. package/dist/constants.d.mts +1 -1
  380. package/dist/{createPath-Bq7wYGt_.d.mts → createPath-B8EZDtSz.d.mts} +2 -2
  381. package/dist/createPath.d.mts +1 -1
  382. package/dist/{date-filter-D6IfCkwp.mjs → date-filter-CWgCXz85.mjs} +1 -1
  383. package/dist/{date-filter-D6IfCkwp.mjs.map → date-filter-CWgCXz85.mjs.map} +1 -1
  384. package/dist/{date-range-rule-value-DVhMQP4-.d.mts → date-range-rule-value-DObVM8xO.d.mts} +2 -2
  385. package/dist/date-range-rule-value.d.mts +1 -1
  386. package/dist/{date-rule-intent-BwQ6OTVD.d.mts → date-rule-intent-DhMMe_wq.d.mts} +3 -3
  387. package/dist/date-rule-intent.d.mts +1 -1
  388. package/dist/display.d.mts +12 -4
  389. package/dist/fieldPickerOptions.d.mts +5 -3
  390. package/dist/{filter-size-context-BjTzcZwZ.d.mts → filter-size-context-DaBdvJHf.d.mts} +2 -2
  391. package/dist/filter-size-context.d.mts +1 -1
  392. package/dist/format-date-value.d.mts +6 -1
  393. package/dist/formatDateTime-mPH4DsDC.d.mts +30 -0
  394. package/dist/formatDateTime.d.mts +2 -0
  395. package/dist/helpers.d.mts +24 -10
  396. package/dist/i18n-UiE7OC4k.mjs +203 -0
  397. package/dist/i18n-UiE7OC4k.mjs.map +1 -0
  398. package/dist/{index-BFIFjR7Q.d.mts → index-Blo6W_k0.d.mts} +2 -2
  399. package/dist/{index-BhDvrF4l.d.mts → index-CTcM_LlP.d.mts} +3 -3
  400. package/dist/{index-C-xpEL8b.d.mts → index-CeUb5INA.d.mts} +2 -2
  401. package/dist/index-kxcPLmUx2.d.mts +1 -0
  402. package/dist/index.d.mts +1 -1
  403. package/dist/index2.d.mts +1 -1
  404. package/dist/index3.d.mts +3 -3
  405. package/dist/index4.d.mts +1 -1
  406. package/dist/index5.d.mts +14 -14
  407. package/dist/{input-DpHBIUpP.d.mts → input-D9rsMlzl.d.mts} +3 -3
  408. package/dist/{inputFields-BVDurw3L.d.mts → inputFields-CXelxYhd.d.mts} +11 -11
  409. package/dist/inputFields.d.mts +1 -1
  410. package/dist/{intersperse-bvY2gibK.mjs → intersperse-ObkRVOag.mjs} +1 -1
  411. package/dist/{intersperse-bvY2gibK.mjs.map → intersperse-ObkRVOag.mjs.map} +1 -1
  412. package/dist/{jsonSchema-Bl-qzgrr.d.mts → jsonSchema-BMPLdT4p.d.mts} +1 -1
  413. package/dist/lib/PDSProvider.d.mts +14 -2
  414. package/dist/lib/PDSProvider.mjs +15 -8
  415. package/dist/lib/PDSProvider.mjs.map +1 -1
  416. package/dist/lib/TruncatedText.d.mts +1 -1
  417. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  418. package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
  419. package/dist/lib/chainTypes.d.mts +1 -1
  420. package/dist/lib/color.d.mts +1 -1
  421. package/dist/lib/customFunctionSchema.d.mts +1 -1
  422. package/dist/lib/date-filter/index.d.mts +2 -2
  423. package/dist/lib/date-filter/index.mjs +1 -1
  424. package/dist/lib/i18n/index.d.mts +4 -0
  425. package/dist/lib/i18n/index.mjs +2 -0
  426. package/dist/lib/jsonSchema.d.mts +1 -1
  427. package/dist/lib/jsonSchemaType.d.mts +1 -1
  428. package/dist/lib/message.d.mts +1 -1
  429. package/dist/lib/methodChain.d.mts +2 -2
  430. package/dist/lib/methodChain.mjs +1 -1
  431. package/dist/lib/methodChainNormalize.d.mts +2 -2
  432. package/dist/lib/methodChainTypes.d.mts +1 -1
  433. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  434. package/dist/lib/platformObject.d.mts +1 -1
  435. package/dist/lib/pseudoClass.d.mts +1 -1
  436. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  437. package/dist/lib/router/adapters/reactRouter.mjs +1 -1
  438. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  439. package/dist/lib/router/adapters/tanstack.mjs +1 -1
  440. package/dist/lib/router/index.d.mts +5 -5
  441. package/dist/lib/router/index.mjs +2 -2
  442. package/dist/lib/schemaOptions.d.mts +1 -1
  443. package/dist/lib/schemaOptions.mjs +1 -1
  444. package/dist/lib/semanticColor.d.mts +1 -1
  445. package/dist/lib/useChain.d.mts +1 -1
  446. package/dist/lib/useChain.mjs +1 -1
  447. package/dist/{listbox-options-BjOkovND.d.mts → listbox-options-BFaMbK-g.d.mts} +3 -3
  448. package/dist/listbox-options.d.mts +1 -1
  449. package/dist/{message-w_1-kTDE.d.mts → message-BOzjC5yA.d.mts} +1 -1
  450. package/dist/{methodChain-B5vZEOff.d.mts → methodChain-CGTIWafl.d.mts} +4 -4
  451. package/dist/{methodChain-L_h8Z8Bx.mjs → methodChain-xZ1_vhbz.mjs} +1 -1
  452. package/dist/{methodChain-L_h8Z8Bx.mjs.map → methodChain-xZ1_vhbz.mjs.map} +1 -1
  453. package/dist/{methodChainTypes-BVkTI8MX.d.mts → methodChainTypes-BtSMV5OZ.d.mts} +2 -2
  454. package/dist/mixins/focus.d.mts +1 -1
  455. package/dist/mixins/hoverable.d.mts +2 -2
  456. package/dist/mixins/input.d.mts +1 -1
  457. package/dist/mixins/menuItem.d.mts +2 -2
  458. package/dist/mixins/scrollbar.d.mts +1 -1
  459. package/dist/mixins/text.d.mts +1 -1
  460. package/dist/{operators-BG82-g3M.d.mts → operators-DfvW8Kmr.d.mts} +9 -4
  461. package/dist/operators.d.mts +1 -1
  462. package/dist/{palette-C8tyI81D.d.mts → palette-CBOBcVu3.d.mts} +3 -3
  463. package/dist/palette.d.mts +1 -1
  464. package/dist/patterns/LayoutLoadingShimmer/index.mjs +5 -5
  465. package/dist/patterns/PageLayout/index.mjs +2 -2
  466. package/dist/patterns/WizardModal/index.mjs +4 -4
  467. package/dist/reactRouterFallback.d.mts +1 -1
  468. package/dist/relative-date-label.d.mts +1 -1
  469. package/dist/{router-7FYDW80v.mjs → router-COrZcVkf.mjs} +2 -2
  470. package/dist/{router-7FYDW80v.mjs.map → router-COrZcVkf.mjs.map} +1 -1
  471. package/dist/safe-parse.d.mts +1 -1
  472. package/dist/{schemaOptions-DGca6x7E.d.mts → schemaOptions-DTeNBwir.d.mts} +3 -3
  473. package/dist/{semantic-D1661f_6.d.mts → semantic-CfiNA4Yy.d.mts} +1 -1
  474. package/dist/{semanticColor-Bg0H3RUL.d.mts → semanticColor-BCPOKF9L.d.mts} +3 -3
  475. package/dist/strings-BaQZhOjo.d.mts +143 -0
  476. package/dist/strings.d.mts +2 -0
  477. package/dist/{text-Iw9DKpbZ.d.mts → text-ucZmPNyH.d.mts} +1 -1
  478. package/dist/{theme-BB1B6Wkz.d.mts → theme-CAPmp1it.d.mts} +3 -3
  479. package/dist/theme.d.mts +1 -1
  480. package/dist/tone.d.mts +3 -3
  481. package/dist/tree.d.mts +1 -1
  482. package/dist/{types-DdTu747j.d.mts → types-B1KzKgBp.d.mts} +1 -1
  483. package/dist/{types-BYRTxB0a.d.mts → types-BB5WwerD.d.mts} +2 -2
  484. package/dist/{types-B0ilOIfE.d.mts → types-BfrEduGv.d.mts} +2 -2
  485. package/dist/{types-CI2bPi02.d.mts → types-CBfgdnuB.d.mts} +1 -1
  486. package/dist/{types-D1DijcJv.d.mts → types-ClbV4wNp.d.mts} +1 -1
  487. package/dist/{types-DZTbvdpO.d.mts → types-CoTzVfFl.d.mts} +1 -1
  488. package/dist/{types-Cs6CdZCO.d.mts → types-CptsgFbu.d.mts} +4 -4
  489. package/dist/{types-Dy3lZv9z.d.mts → types-Rj-C3LGL.d.mts} +2 -2
  490. package/dist/{types-M-rsm1Km.d.mts → types-l-arEBLb.d.mts} +1 -1
  491. package/dist/types.d.mts +1 -1
  492. package/dist/types2.d.mts +1 -1
  493. package/dist/types3.d.mts +1 -1
  494. package/dist/types4.d.mts +1 -1
  495. package/dist/types5.d.mts +1 -1
  496. package/dist/types6.d.mts +1 -1
  497. package/dist/types7.d.mts +1 -1
  498. package/dist/{url-state-DWA7UFxS.d.mts → url-state-CrnZ3Ocy.d.mts} +2 -2
  499. package/dist/url-state.d.mts +1 -1
  500. package/dist/{useChain-CKqYGdx4.mjs → useChain-Cu4KDfFk.mjs} +2 -2
  501. package/dist/{useChain-CKqYGdx4.mjs.map → useChain-Cu4KDfFk.mjs.map} +1 -1
  502. package/dist/{useChain-CEsXE2Bx.d.mts → useChain-DQq1UsGZ.d.mts} +6 -6
  503. package/dist/useChainAtCursor.d.mts +6 -6
  504. package/dist/useCodeChainFunctionPanel.d.mts +1 -1
  505. package/dist/useComboboxFooterAction.d.mts +1 -1
  506. package/dist/{useFilterStateV2-DoJ9lyJx.d.mts → useFilterStateV2-CGGABOcq.d.mts} +3 -3
  507. package/dist/useFilterStateV2.d.mts +1 -1
  508. package/dist/{useFormField-BtnAYcHV.d.mts → useFormField-4w9TNFgD.d.mts} +2 -2
  509. package/dist/{useFormField-BAmkdxtA.mjs → useFormField-CbNYbDdp.mjs} +2 -2
  510. package/dist/{useFormField-BAmkdxtA.mjs.map → useFormField-CbNYbDdp.mjs.map} +1 -1
  511. package/dist/useFormField.d.mts +1 -1
  512. package/dist/{useFormGroup-BZayb9fZ.mjs → useFormGroup-CsKC93Pt.mjs} +1 -1
  513. package/dist/{useFormGroup-BZayb9fZ.mjs.map → useFormGroup-CsKC93Pt.mjs.map} +1 -1
  514. package/dist/{useLocationPathname-pLyLOrAi.d.mts → useLocationPathname-CZwH8h5n.d.mts} +1 -1
  515. package/dist/useLocationPathname.d.mts +1 -1
  516. package/dist/{useTableBoxDragAndDrop-wjc_LCpC.d.mts → useTableBoxDragAndDrop-Bw93rNFH.d.mts} +1 -1
  517. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  518. package/dist/{useToggle-DUHQjohK.mjs → useToggle-DRzCDqrc.mjs} +1 -1
  519. package/dist/{useToggle-DUHQjohK.mjs.map → useToggle-DRzCDqrc.mjs.map} +1 -1
  520. package/dist/useTruncation.d.mts +1 -1
  521. package/dist/{utilities-DL18UdPs.d.mts → utilities-B8PzMOza.d.mts} +1 -1
  522. package/dist/utilities.d.mts +1 -1
  523. package/dist/utils/storybook.mjs +1 -1
  524. package/dist/utils/testing.d.mts +1 -1
  525. package/dist/utils.d.mts +1 -1
  526. package/dist/utils4.d.mts +5 -5
  527. package/dist/{validation-PeVTwtd-.d.mts → validation-DP8f6tgh.d.mts} +3 -3
  528. package/dist/validation.d.mts +1 -1
  529. package/dist/validation2.d.mts +4 -4
  530. package/dist/{value-control-resolver-Cx_wXQFv.d.mts → value-control-resolver-CwjOaVAn.d.mts} +2 -2
  531. package/dist/value-control-resolver.d.mts +1 -1
  532. package/dist/variables/effect.d.mts +1 -1
  533. package/dist/variables/semantic.d.mts +1 -1
  534. package/llms.txt +1 -1
  535. package/package.json +3 -1
  536. package/skills/ui-authoring/COMPONENTS.md +1 -0
  537. package/skills/ui-authoring/SKILL.md +23 -0
  538. package/dist/DatePicker-LPIJrc0n.mjs.map +0 -1
  539. package/dist/Pagination-6BDOn9bX.mjs.map +0 -1
  540. package/dist/TabBar-BSl5v5aa.mjs.map +0 -1
  541. package/dist/TableControls-CqW_nyBY.mjs.map +0 -1
  542. /package/dist/{index-7in8TPrM.d.mts → index-1-AkepUA.d.mts} +0 -0
  543. /package/dist/{index-BCq_fh4A2.d.mts → index-B-Y-ZG2x.d.mts} +0 -0
  544. /package/dist/{index-BINnViIh.d.mts → index-BO_854F2.d.mts} +0 -0
  545. /package/dist/{index-BMBcfD_R.d.mts → index-BSVhZrWN.d.mts} +0 -0
  546. /package/dist/{index-BOn0AAue.d.mts → index-BYARwRq7.d.mts} +0 -0
  547. /package/dist/{index-BjgW3E7y.d.mts → index-B_BBnMou.d.mts} +0 -0
  548. /package/dist/{index-BwXb5CoQ.d.mts → index-BbPybiOV.d.mts} +0 -0
  549. /package/dist/{index-C3usUse7.d.mts → index-Bt4QNofW.d.mts} +0 -0
  550. /package/dist/{index-CCKHlTA4.d.mts → index-CCt0lwyI.d.mts} +0 -0
  551. /package/dist/{index-CP2eJYlK.d.mts → index-CIABef8t.d.mts} +0 -0
  552. /package/dist/{index-CWB6exYm.d.mts → index-CTHojwxd.d.mts} +0 -0
  553. /package/dist/{index-CuYZJcK3.d.mts → index-CliqZ9rj.d.mts} +0 -0
  554. /package/dist/{index-CuheJfs-.d.mts → index-Cm-1i165.d.mts} +0 -0
  555. /package/dist/{index-D-9tW2r5.d.mts → index-CzItj62a.d.mts} +0 -0
  556. /package/dist/{index-D9XihFV1.d.mts → index-CzUpNo0e.d.mts} +0 -0
  557. /package/dist/{index-Deol7ZWO.d.mts → index-D-giXKyu.d.mts} +0 -0
  558. /package/dist/{index-Dflz2i1X.d.mts → index-DGsJdI5l.d.mts} +0 -0
  559. /package/dist/{index-DjOaHFU3.d.mts → index-DMRtRo7y.d.mts} +0 -0
  560. /package/dist/{index-DkrC-i1D.d.mts → index-DUF59i3Q2.d.mts} +0 -0
  561. /package/dist/{index-DrK1_jKY.d.mts → index-DgJfEygr.d.mts} +0 -0
  562. /package/dist/{index-Iujpc9_6.d.mts → index-Es5nKSSL.d.mts} +0 -0
  563. /package/dist/{index-e6k85DKM.d.mts → index-NKYLt_R9.d.mts} +0 -0
  564. /package/dist/{index-gpCH5158.d.mts → index-Qwqzz3XM.d.mts} +0 -0
  565. /package/dist/{index-irNqT1qQ2.d.mts → index-T2S0_qsg.d.mts} +0 -0
  566. /package/dist/{index-xmouCHX9.d.mts → index-bHnO4ZKt.d.mts} +0 -0
@@ -1,45 +1,49 @@
1
1
  import { a as styled, n as createGlobalStyle, r as css } from "./styledComponentsInterop-NxwFjeA4.mjs";
2
+ import { c as usePDSLocale, i as formatDateTime, l as usePDSStrings, u as DEFAULT_COMMON_STRINGS } from "./i18n-UiE7OC4k.mjs";
2
3
  import { TruncatedText } from "./lib/TruncatedText.mjs";
3
4
  import { semanticColor, semanticOnly, semanticTokens } from "./lib/semanticColor.mjs";
4
5
  import { paragraphMixins } from "./mixins/text.mjs";
5
- import { t as Card_default } from "./Card-Dz6jqJuJ.mjs";
6
- import { t as Spacer_default } from "./Spacer-BFOuo0sZ.mjs";
7
- import { i as Paragraph, r as Label$1 } from "./Text-BdluS7Fy.mjs";
6
+ import { t as Card_default } from "./Card-BXNxWX5C.mjs";
7
+ import { t as Spacer_default } from "./Spacer-J_HuhxX2.mjs";
8
+ import { i as Paragraph, r as Label$1 } from "./Text-CSwFifQF.mjs";
8
9
  import "./variables/transitions.mjs";
9
- import { a as Tooltip } from "./Tooltip-C0FuZS1C.mjs";
10
+ import { a as Tooltip } from "./Tooltip-B-0VRuKT.mjs";
10
11
  import { transparent, withAlpha } from "./lib/color.mjs";
11
12
  import { letPointerDownReachDocument } from "./lib/letPointerDownReachDocument.mjs";
12
13
  import { isActive, isDisabled, isFocused, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
14
+ import { moveItemByIndex } from "./lib/reorderItems.mjs";
13
15
  import { useScrollOverflow } from "./lib/useScrollOverflow.mjs";
14
16
  import { Z_INDICES } from "./lib/zindex.mjs";
15
17
  import { focusOutline, focusWithinOutline } from "./mixins/focus.mjs";
16
18
  import { semanticScrollbar } from "./mixins/scrollbar.mjs";
17
- import { n as Stack, t as HStack } from "./Stack-CEPzs4Pb.mjs";
18
- import { n as Button, t as IconButton } from "./IconButton-BHFCjvzs.mjs";
19
- import { i as TabBar, n as StyledTab, r as Tab } from "./TabBar-BSl5v5aa.mjs";
20
- import { r as InputGroup } from "./Input-BQN97Hzm.mjs";
19
+ import { n as Stack, t as HStack } from "./Stack-BkC7FCdF.mjs";
20
+ import { n as Button, t as IconButton } from "./IconButton-H5vDZOdo.mjs";
21
+ import { i as TabBar, n as StyledTab, r as Tab } from "./TabBar-DBOPWUUa.mjs";
22
+ import { r as InputGroup } from "./Input-CY14-YeD.mjs";
21
23
  import Input_default from "./components/Input/index.mjs";
22
- import { c as MenuList, s as MenuItem } from "./Menu-DjW2b3Wk.mjs";
23
- import { n as DropdownMenu_default } from "./DropdownMenu-j8NWbAvM.mjs";
24
- import { t as Combobox } from "./Combobox-CCDoNF9Y.mjs";
25
- import { s as Popover_default } from "./Popover-CbYaWrAy.mjs";
26
- import { i as Modal_default } from "./Modal-DHLPK65-.mjs";
27
- import { t as Toggle } from "./Toggle-CntyMUPJ.mjs";
28
- import { i as selectedPresetFor, n as parseDateFilterValue, r as resolveDateFilterValue, t as formatDateFilterValue } from "./date-filter-D6IfCkwp.mjs";
29
- import { t as ListBox } from "./ListBox-DOqN9DNl.mjs";
30
- import { m as FormField, o as ComboboxField } from "./FormField-DbcqNcx2.mjs";
31
- import { r as DatePicker, t as DateRangePicker } from "./DatePicker-LPIJrc0n.mjs";
24
+ import { c as MenuList, s as MenuItem } from "./Menu-Dw6Rcpk6.mjs";
25
+ import { n as DropdownMenu_default } from "./DropdownMenu-CedsmO5h.mjs";
26
+ import { t as Combobox } from "./Combobox-MCaDc7h6.mjs";
27
+ import { s as Popover_default } from "./Popover-532iYFek.mjs";
28
+ import { i as Modal_default } from "./Modal-dpBu2MKp.mjs";
29
+ import { t as Toggle } from "./Toggle-CZF6iBql.mjs";
30
+ import { i as selectedPresetFor, n as parseDateFilterValue, r as resolveDateFilterValue, t as formatDateFilterValue } from "./date-filter-CWgCXz85.mjs";
31
+ import { t as ListBox } from "./ListBox-2aYWNlO_.mjs";
32
+ import { m as FormField, o as ComboboxField } from "./FormField-CB0yCMro.mjs";
33
+ import { r as DatePicker, t as DateRangePicker } from "./DatePicker-CKk6Hnj2.mjs";
32
34
  import { BorderRadius, Color, Spacing, Typography } from "@persona/design-tokens";
33
35
  import { Fragment, createContext, createElement, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
34
36
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
35
- import { CaretDownIcon, CheckIcon, CircleInfoIcon, CirclePlusIcon, CopyIcon, FilterIcon, MoreIcon, PlusIcon, RotateCcwIcon, SaveIcon, SearchIcon, SettingsIcon, StarIcon, TrashIcon, XIcon } from "@persona/icons";
37
+ import { DateTime, Settings } from "luxon";
38
+ import { CaretDownIcon, CheckIcon, CircleInfoIcon, CirclePlusIcon, CopyIcon, EyeIcon, EyeOffIcon, FilterIcon, MoreIcon, PlusIcon, RotateCcwIcon, SaveIcon, SearchIcon, SettingsIcon, StarIcon, TrashIcon, XIcon } from "@persona/icons";
36
39
  import { CaretDownIcon as CaretDownIcon$1, CircleInfoIcon as CircleInfoIcon$1, LockedIcon as LockedIcon$1, MoreIcon as MoreIcon$1, PlusIcon as PlusIcon$1, SearchIcon as SearchIcon$1, XIcon as XIcon$1 } from "@persona/icons/12px";
37
40
  import { debounce, isEqual, noop, partition, startCase, union, uniqueId } from "lodash-es";
38
41
  import { useId } from "react-aria";
39
42
  import Fuse from "fuse.js";
40
43
  import { DragIcon as DragIcon$1 } from "@persona/icons/24px";
41
- import { DateTime, Settings } from "luxon";
42
44
  import * as PopoverPrimitive from "@radix-ui/react-popover";
45
+ import { DndContext, PointerSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
46
+ import { SortableContext, horizontalListSortingStrategy, useSortable } from "@dnd-kit/sortable";
43
47
  import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
44
48
  import { parseAbsolute, parseDate, toCalendarDate, toZoned } from "@internationalized/date";
45
49
  import { v4 } from "uuid";
@@ -96,21 +100,33 @@ const StyledInput = styled(Input_default)`
96
100
  `;
97
101
  const SearchInput = ({ className, title = "Search", handleInput, handleOnFocus = noop, onBlur = noop, id, value, placeholder, dataTest, autoFocus, useClearIcon = false, disabled = false, disabledTooltip, anchorTooltipToCursor = false, size = "md", leftIcon = size === "sm" ? /* @__PURE__ */ jsx(SearchIcon$1, {}) : /* @__PURE__ */ jsx(SearchIcon, {}), flattenDisplay = false, maxLength }) => {
98
102
  const [innerValue, setInnerValue] = useState(value);
103
+ const pendingEmissionsRef = useRef([]);
104
+ const emit = useCallback((next) => {
105
+ pendingEmissionsRef.current.push(next);
106
+ handleInput(next);
107
+ }, [handleInput]);
99
108
  const handleChange = useCallback(({ target }) => {
100
109
  setInnerValue(target.value);
101
- handleInput(target.value);
102
- }, [handleInput, setInnerValue]);
110
+ emit(target.value);
111
+ }, [emit, setInnerValue]);
103
112
  useEffect(() => {
113
+ const pending = pendingEmissionsRef.current;
114
+ const pendingIndex = pending.lastIndexOf(value);
115
+ if (pendingIndex >= 0 && pendingIndex < pending.length - 1) {
116
+ pending.splice(0, pendingIndex + 1);
117
+ return;
118
+ }
119
+ pending.length = 0;
104
120
  setInnerValue(value);
105
121
  }, [value]);
106
122
  const inputRef = useRef(null);
107
123
  const handleClear = useCallback(() => {
108
124
  setInnerValue("");
109
- handleInput("");
125
+ emit("");
110
126
  handleOnFocus();
111
127
  inputRef.current?.focus();
112
128
  }, [
113
- handleInput,
129
+ emit,
114
130
  handleOnFocus,
115
131
  inputRef,
116
132
  setInnerValue
@@ -217,6 +233,7 @@ const CompactSearchInput = styled(SearchInput)`
217
233
  * @see ControlBar.spec.tsx
218
234
  */
219
235
  const CompactBar = ({ title, searchProps, showFilters, setShowFilters, filtersId, isLoading, isFilterPanelLoading, propertiesButton, tableActions, "data-tour-target": dataTourTarget, filterPanel }) => {
236
+ const strings = usePDSStrings();
220
237
  const autoExpandSearch = !title;
221
238
  const [showSearch, setShowSearch] = useState(autoExpandSearch);
222
239
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(DataTableCompactBar, {
@@ -253,7 +270,7 @@ const CompactBar = ({ title, searchProps, showFilters, setShowFilters, filtersId
253
270
  variant: "text",
254
271
  width: "icon",
255
272
  size: "sm",
256
- "aria-label": "Show search bar",
273
+ "aria-label": strings.showSearchBar,
257
274
  onClick: () => setShowSearch(true),
258
275
  children: /* @__PURE__ */ jsx(SearchIcon, {})
259
276
  })),
@@ -261,7 +278,7 @@ const CompactBar = ({ title, searchProps, showFilters, setShowFilters, filtersId
261
278
  id: "table-controls__view-tab-filters",
262
279
  variant: "text",
263
280
  onClick: () => setShowFilters?.(!showFilters),
264
- "aria-label": showFilters ? "Hide filters" : "Show filters",
281
+ "aria-label": showFilters ? strings.hideFilters : strings.showFilters,
265
282
  "aria-expanded": showFilters,
266
283
  "aria-controls": filtersId,
267
284
  disabled: isLoading || isFilterPanelLoading,
@@ -299,7 +316,9 @@ const rectContainsRect = (parent, child) => {
299
316
  //#region components/DataTable/TableControls/ControlBar.tsx
300
317
  const TAB_ID_PREFIX = "table-controls__view-tab_";
301
318
  const OVERFLOW_TAB_ID_PREFIX = "table-controls__view-tab-overflow_";
319
+ const ADD_VIEW_BUTTON_ID = "table-controls__view-tab-new";
302
320
  const OVERFLOW_WIDTH_SHRINK_THRESHOLD = 16;
321
+ const OVERFLOW_GAP = 8;
303
322
  function enterProxiesClick(e) {
304
323
  if (e.key === "Enter") e.target.dispatchEvent(new Event("click", { bubbles: true }));
305
324
  }
@@ -313,6 +332,39 @@ const ViewNameInput = styled(Input_default)`
313
332
  const AddViewButton = styled(IconButton)`
314
333
  color: ${({ theme }) => semanticColor(theme, "FgSecondary", theme.color.text.secondary)};
315
334
  `;
335
+ const HideViewButton = styled(IconButton)`
336
+ position: absolute;
337
+ top: 50%;
338
+ right: 0;
339
+ transform: translateY(-50%);
340
+ opacity: 0;
341
+ color: ${({ theme }) => semanticColor(theme, "FgSecondary", theme.color.text.secondary)};
342
+ background-color: ${({ theme }) => semanticColor(theme, "SurfacePrimary", theme.color.white)};
343
+ box-shadow: -${Spacing[2]} 0 ${Spacing[2]}
344
+ ${({ theme }) => semanticColor(theme, "SurfacePrimary", theme.color.white)};
345
+
346
+ /* The icon's own "XIcon" title would otherwise replace the button's "Hide view" tooltip. */
347
+ svg {
348
+ pointer-events: none;
349
+ }
350
+
351
+ /* Without hover, a tap on the tab's edge must not land on the invisible button. */
352
+ @media (hover: none) {
353
+ pointer-events: none;
354
+ }
355
+ `;
356
+ const TabSlot = styled.div`
357
+ position: relative;
358
+ display: inline-flex;
359
+
360
+ &:hover,
361
+ &:has(:focus-visible) {
362
+ ${HideViewButton} {
363
+ opacity: 1;
364
+ pointer-events: auto;
365
+ }
366
+ }
367
+ `;
316
368
  const LockedTab = styled(Tab)`
317
369
  svg {
318
370
  height: 12px;
@@ -349,7 +401,9 @@ const TabOverflowContainer = styled.div`
349
401
  position: absolute;
350
402
  height: 32px;
351
403
  `;
352
- const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditViews, handleNameChange, onDuplicateView, onRequestDeleteView, onSelectView, onResetCurrentView, onSaveView, onSetDefaultView, isViewDirty, showTabContextMenu, setShowTabContextMenu, className, ...rest }) => {
404
+ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditViews, handleNameChange, onDuplicateView, onRequestDeleteView, onSelectView, onResetCurrentView, onSaveView, onSetDefaultView, onViewHiddenChange, onHideView, onKeyboardMove, isHidden = false, isViewDirty, showTabContextMenu, setShowTabContextMenu, className, ...rest }) => {
405
+ const strings = usePDSStrings();
406
+ const showMenu = selected && (canEditViews || !!onViewHiddenChange);
353
407
  const inputRef = useRef(null);
354
408
  const lastSubmittedNameRef = useRef(null);
355
409
  const submitNameChange = (newName) => {
@@ -363,12 +417,20 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
363
417
  "aria-selected": selected,
364
418
  role: "tab",
365
419
  onClick: !selected ? () => onSelectView?.(view.id) : void 0,
366
- suffixIcon: selected && canEditViews ? /* @__PURE__ */ jsx(MoreIcon, {}) : void 0,
420
+ onKeyDown: onKeyboardMove ? (e) => {
421
+ if (e.altKey && e.shiftKey && (e.key === "ArrowLeft" || e.key === "ArrowRight")) {
422
+ e.preventDefault();
423
+ e.stopPropagation();
424
+ onKeyboardMove(view.id, e.key === "ArrowLeft" ? -1 : 1);
425
+ }
426
+ } : void 0,
427
+ "aria-keyshortcuts": onKeyboardMove ? "Alt+Shift+ArrowLeft Alt+Shift+ArrowRight" : void 0,
428
+ suffixIcon: showMenu ? /* @__PURE__ */ jsx(MoreIcon, {}) : void 0,
367
429
  className,
368
430
  ...rest,
369
431
  children: view.name
370
432
  });
371
- if (canEditViews && selected) return /* @__PURE__ */ jsx(Popover_default, {
433
+ if (showMenu) return /* @__PURE__ */ jsx(Popover_default, {
372
434
  trigger: tab,
373
435
  open: showTabContextMenu,
374
436
  onOpenChange: (open) => {
@@ -382,7 +444,7 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
382
444
  },
383
445
  children: /* @__PURE__ */ jsxs(Stack, {
384
446
  spacing: Spacing[3],
385
- children: [/* @__PURE__ */ jsx(ViewNameInput, {
447
+ children: [canEditViews && /* @__PURE__ */ jsx(ViewNameInput, {
386
448
  defaultValue: view.name,
387
449
  onBlur: (e) => submitNameChange(e.currentTarget.value),
388
450
  onKeyDown: (e) => {
@@ -393,7 +455,7 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
393
455
  }), /* @__PURE__ */ jsxs(MenuList, {
394
456
  padding: Spacing[0],
395
457
  children: [
396
- onDuplicateView && /* @__PURE__ */ jsx(MenuItem, {
458
+ canEditViews && onDuplicateView && /* @__PURE__ */ jsx(MenuItem, {
397
459
  id: "table-controls__view__menu-duplicate",
398
460
  prefixIcon: /* @__PURE__ */ jsx(CopyIcon, {}),
399
461
  onClick: async () => {
@@ -407,14 +469,14 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
407
469
  }
408
470
  },
409
471
  onKeyDown: enterProxiesClick,
410
- children: "Duplicate"
472
+ children: strings.duplicateView
411
473
  }),
412
474
  canEditViews && onResetCurrentView && /* @__PURE__ */ jsx(MenuItem, {
413
475
  id: "table-controls__view__menu-reset",
414
476
  prefixIcon: /* @__PURE__ */ jsx(RotateCcwIcon, {}),
415
477
  onClick: onResetCurrentView,
416
478
  onKeyDown: enterProxiesClick,
417
- children: "Reset"
479
+ children: strings.resetView
418
480
  }),
419
481
  canEditViews && onSaveView && /* @__PURE__ */ jsx(MenuItem, {
420
482
  id: "table-controls__view__menu-save",
@@ -425,9 +487,9 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
425
487
  setShowTabContextMenu(false);
426
488
  },
427
489
  onKeyDown: enterProxiesClick,
428
- children: "Save"
490
+ children: strings.saveViewMenuItem
429
491
  }),
430
- onSetDefaultView && /* @__PURE__ */ jsx(MenuItem, {
492
+ canEditViews && onSetDefaultView && /* @__PURE__ */ jsx(MenuItem, {
431
493
  id: "table-controls__view__menu-set-default",
432
494
  prefixIcon: /* @__PURE__ */ jsx(StarIcon, {}),
433
495
  disabled: view.isDefault,
@@ -436,9 +498,20 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
436
498
  setShowTabContextMenu(false);
437
499
  },
438
500
  onKeyDown: enterProxiesClick,
439
- children: view.isDefault ? "Already the default" : "Set as default"
501
+ children: view.isDefault ? strings.alreadyDefaultView : strings.setAsDefaultView
440
502
  }),
441
- onRequestDeleteView && /* @__PURE__ */ jsx(MenuItem, {
503
+ onViewHiddenChange && /* @__PURE__ */ jsx(MenuItem, {
504
+ id: "table-controls__view__menu-toggle-hidden",
505
+ prefixIcon: isHidden ? /* @__PURE__ */ jsx(EyeIcon, {}) : /* @__PURE__ */ jsx(EyeOffIcon, {}),
506
+ onClick: () => {
507
+ setShowTabContextMenu(false);
508
+ if (isHidden) onViewHiddenChange(view.id, false);
509
+ else onHideView?.(view.id);
510
+ },
511
+ onKeyDown: enterProxiesClick,
512
+ children: isHidden ? strings.showView : strings.hideView
513
+ }),
514
+ canEditViews && onRequestDeleteView && /* @__PURE__ */ jsx(MenuItem, {
442
515
  id: "table-controls__view__menu-delete",
443
516
  prefixIcon: /* @__PURE__ */ jsx(TrashIcon, {}),
444
517
  onClick: () => {
@@ -446,7 +519,7 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
446
519
  onRequestDeleteView(view);
447
520
  },
448
521
  onKeyDown: enterProxiesClick,
449
- children: "Delete"
522
+ children: strings.delete
450
523
  })
451
524
  ]
452
525
  })]
@@ -454,6 +527,36 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
454
527
  });
455
528
  return tab;
456
529
  };
530
+ const SavedViewTabSlot = ({ slotRef, slotStyle, ...props }) => {
531
+ const { view, selected, onViewHiddenChange, onHideView } = props;
532
+ const strings = usePDSStrings();
533
+ return /* @__PURE__ */ jsxs(TabSlot, {
534
+ ref: slotRef,
535
+ "data-tab-view": true,
536
+ "data-tab-slot": true,
537
+ style: slotStyle,
538
+ children: [/* @__PURE__ */ jsx(SavedViewTab, { ...props }), !selected && onViewHiddenChange && /* @__PURE__ */ jsx(HideViewButton, {
539
+ id: `table-controls__view-tab-hide_${view.id}`,
540
+ "aria-label": strings.hideViewNamed(view.name),
541
+ title: strings.hideViewTitle,
542
+ onClick: () => onHideView?.(view.id),
543
+ children: /* @__PURE__ */ jsx(XIcon, {})
544
+ })]
545
+ });
546
+ };
547
+ const SortableSavedViewTab = (props) => {
548
+ const { setNodeRef, listeners, transform, transition, isDragging } = useSortable({ id: props.view.id });
549
+ return /* @__PURE__ */ jsx(SavedViewTabSlot, {
550
+ ...props,
551
+ ...listeners,
552
+ slotRef: setNodeRef,
553
+ slotStyle: {
554
+ transform: transform ? `translate3d(${transform.x}px, 0, 0)` : void 0,
555
+ transition,
556
+ zIndex: isDragging ? 1 : void 0
557
+ }
558
+ });
559
+ };
457
560
  /**
458
561
  * A tab that is locked and does not support editing or actions.
459
562
  */
@@ -470,37 +573,46 @@ const LockedViewTab = ({ id, selected, onClick, children, ...props }) => {
470
573
  const OverflowSavedViewTab = styled(SavedViewTab)`
471
574
  margin-left: ${Spacing[2]};
472
575
  `;
473
- const TabOverflow = forwardRef(function TabOverflow({ hiddenViews, currentView: currentViewId, handleAddView, onSelectView, canEditViews, lastVisibleViewElement, ...rest }, ref) {
576
+ const TabOverflow = forwardRef(function TabOverflow({ overflowViews, hiddenViews, currentView: currentViewId, handleAddView, onOpenView, onViewHiddenChange, canEditViews, left, ...rest }, ref) {
577
+ const strings = usePDSStrings();
474
578
  const [filter, setFilter] = useState("");
475
579
  const [openPopover, setOpenPopover] = useState(false);
476
- const currentView = useMemo(() => {
477
- return hiddenViews.find((view) => view.id === currentViewId);
478
- }, [currentViewId, hiddenViews]);
479
- const filteredViews = useMemo(() => hiddenViews.filter((view) => view.name.toLowerCase().includes(filter.toLowerCase()) && view.id !== currentView?.id), [
480
- hiddenViews,
580
+ const menuViews = useMemo(() => [...overflowViews, ...hiddenViews], [overflowViews, hiddenViews]);
581
+ const currentView = useMemo(() => menuViews.find((view) => view.id === currentViewId), [currentViewId, menuViews]);
582
+ const filteredViews = useMemo(() => menuViews.filter((view) => view.name.toLowerCase().includes(filter.toLowerCase()) && view.id !== currentView?.id), [
583
+ menuViews,
481
584
  filter,
482
585
  currentView
483
586
  ]);
587
+ const moreCount = menuViews.length - (currentView ? 1 : 0);
588
+ const renderMenuItem = (view) => /* @__PURE__ */ jsx(MenuItem, {
589
+ id: `${OVERFLOW_TAB_ID_PREFIX}${view.id}`,
590
+ onClick: () => {
591
+ onOpenView(view.id);
592
+ setOpenPopover(false);
593
+ },
594
+ onKeyDown: enterProxiesClick,
595
+ children: view.name
596
+ }, view.id);
484
597
  return /* @__PURE__ */ jsxs(TabOverflowContainer, {
485
598
  ref,
486
- style: useMemo(() => {
487
- if (!lastVisibleViewElement) return;
488
- return { left: lastVisibleViewElement.offsetLeft + lastVisibleViewElement.offsetWidth + 8 };
489
- }, [lastVisibleViewElement]),
599
+ style: left != null ? { left } : void 0,
490
600
  children: [
491
601
  currentView && /* @__PURE__ */ jsx(OverflowSavedViewTab, {
492
602
  view: currentView,
493
603
  canEditViews,
494
604
  selected: true,
495
605
  tabIdPrefix: OVERFLOW_TAB_ID_PREFIX,
606
+ onViewHiddenChange,
607
+ isHidden: hiddenViews.some((view) => view.id === currentView.id),
496
608
  ...rest
497
609
  }),
498
- hiddenViews.length === 1 && currentView && hiddenViews[0].id !== currentView.id ? null : /* @__PURE__ */ jsxs(Popover_default, {
499
- trigger: /* @__PURE__ */ jsxs(Button, {
610
+ moreCount > 0 && /* @__PURE__ */ jsxs(Popover_default, {
611
+ trigger: /* @__PURE__ */ jsx(Button, {
500
612
  variant: "basic",
501
613
  size: "sm",
502
614
  width: "auto",
503
- children: [currentView ? hiddenViews.length - 1 : hiddenViews.length, " more…"]
615
+ children: strings.moreViews(moreCount)
504
616
  }),
505
617
  contentProps: {
506
618
  align: "start",
@@ -514,27 +626,17 @@ const TabOverflow = forwardRef(function TabOverflow({ hiddenViews, currentView:
514
626
  children: [/* @__PURE__ */ jsx(Input_default, {
515
627
  value: filter,
516
628
  onChange: (e) => setFilter(e.target.value),
517
- placeholder: "Search for a view..."
629
+ placeholder: strings.searchViews
518
630
  }), /* @__PURE__ */ jsx(OverflowMenuList, {
519
631
  padding: Spacing[0],
520
- children: filteredViews.map((view) => {
521
- return /* @__PURE__ */ jsx(MenuItem, {
522
- id: `${OVERFLOW_TAB_ID_PREFIX}${view.id}`,
523
- onClick: () => {
524
- onSelectView?.(view.id);
525
- setOpenPopover(false);
526
- },
527
- onKeyDown: enterProxiesClick,
528
- children: view.name
529
- }, view.id);
530
- })
632
+ children: filteredViews.map(renderMenuItem)
531
633
  })]
532
634
  }),
533
635
  canEditViews && handleAddView && /* @__PURE__ */ jsx(AddViewButton, {
534
636
  id: `${OVERFLOW_TAB_ID_PREFIX}overflow-new`,
535
637
  onClick: handleAddView,
536
638
  size: "md",
537
- "aria-label": "Add new view",
639
+ "aria-label": strings.addNewView,
538
640
  children: /* @__PURE__ */ jsx(CirclePlusIcon, {})
539
641
  })
540
642
  ]
@@ -550,48 +652,60 @@ const ProductTourStyles = createGlobalStyle`
550
652
  }
551
653
  }
552
654
  `;
553
- const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView, onDuplicateView, onDeleteView, onViewNameChange, onSaveView, onSetDefaultView, isViewDirty, canEditViews, showFilters, setShowFilters, searchProps, filtersId, propertiesButton, tableActions, isLoading, isFilterPanelLoading, showViews, selectedRows = [], bulkActions, onResetCurrentView, onClearSelection, title, "data-tour-target": dataTourTarget, compact, onError, filterPanel }) => {
655
+ const ControlBar = ({ presetViews, currentView, onSelectView, views, hiddenViewIds, onAddView, onDuplicateView, onDeleteView, onViewNameChange, onReorderViews, onViewHiddenChange, onSaveView, onSetDefaultView, isViewDirty, canEditViews, showFilters, setShowFilters, searchProps, filtersId, propertiesButton, tableActions, isLoading, isFilterPanelLoading, showViews, selectedRows = [], bulkActions, onResetCurrentView, onClearSelection, title, "data-tour-target": dataTourTarget, compact, onError, filterPanel }) => {
656
+ const strings = usePDSStrings();
554
657
  const tabListRef = useRef(null);
555
658
  const tabOverflowRef = useRef(null);
556
- const [hiddenViews, setHiddenViews] = useState([]);
659
+ const [overflowViews, setOverflowViews] = useState([]);
557
660
  const [showTabContextMenu, setShowTabContextMenu] = useState(false);
558
661
  const [pendingDeleteView, setPendingDeleteView] = useState(null);
559
662
  const previousPendingDeleteViewRef = useRef(null);
560
663
  const [isDeletingView, setIsDeletingView] = useState(false);
561
664
  const [isAddingView, setIsAddingView] = useState(false);
562
- const [lastVisibleViewElement, setLastVisibleViewElement] = useState(null);
665
+ const [overflowLeft, setOverflowLeft] = useState(null);
563
666
  const [tabOverflowWidth, setTabOverflowWidth] = useState(null);
667
+ const [isAddViewOverflowing, setIsAddViewOverflowing] = useState(false);
564
668
  useEffect(() => {
565
669
  const previousPendingDeleteView = previousPendingDeleteViewRef.current;
566
670
  if (!pendingDeleteView && previousPendingDeleteView) (document.getElementById(`${OVERFLOW_TAB_ID_PREFIX}${previousPendingDeleteView.id}`) ?? document.getElementById(`${TAB_ID_PREFIX}${previousPendingDeleteView.id}`))?.focus();
567
671
  previousPendingDeleteViewRef.current = pendingDeleteView;
568
672
  }, [pendingDeleteView]);
673
+ const [shownViews, hiddenViews] = useMemo(() => {
674
+ const hiddenIds = new Set(hiddenViewIds);
675
+ const allViews = views ?? [];
676
+ return [allViews.filter((view) => !hiddenIds.has(view.id)), allViews.filter((view) => hiddenIds.has(view.id))];
677
+ }, [views, hiddenViewIds]);
569
678
  const onResize = useCallback(() => {
570
679
  if (!tabListRef.current) return;
571
680
  const containerRect = tabListRef.current.getBoundingClientRect();
572
681
  const tabListContainer = tabListRef.current;
573
- const tabElements = Array.from(tabListContainer.querySelectorAll("[data-tab-view]"));
574
- if (tabElements.length === 0 || rectContainsRect(containerRect, tabElements[tabElements.length - 1].getBoundingClientRect())) {
575
- setHiddenViews([]);
576
- return;
577
- }
578
- const firstHiddenIndex = tabElements.findIndex((el) => !rectContainsRect(containerRect, el.getBoundingClientRect()));
579
- if (firstHiddenIndex === -1) setLastVisibleViewElement(null);
580
- else {
581
- const lastVisibleViewElement = tabElements[firstHiddenIndex - 1];
582
- if (lastVisibleViewElement) setLastVisibleViewElement(lastVisibleViewElement);
583
- }
584
- setHiddenViews((firstHiddenIndex === -1 ? [] : views?.slice(firstHiddenIndex)) || []);
682
+ const firstOverflowIndex = Array.from(tabListContainer.querySelectorAll("[data-tab-view]")).findIndex((el) => !rectContainsRect(containerRect, el.getBoundingClientRect()));
683
+ const nextOverflowViews = firstOverflowIndex === -1 ? [] : shownViews.slice(firstOverflowIndex);
684
+ setOverflowViews((prev) => prev.length === nextOverflowViews.length && prev.every((view, index) => view === nextOverflowViews[index]) ? prev : nextOverflowViews);
685
+ const firstRowElements = Array.from(tabListContainer.children).filter((el) => el instanceof HTMLElement && el !== tabOverflowRef.current && rectContainsRect(containerRect, el.getBoundingClientRect()));
686
+ const anchor = firstRowElements[firstRowElements.length - 1];
687
+ setOverflowLeft(anchor ? anchor.offsetLeft + anchor.offsetWidth + OVERFLOW_GAP : null);
688
+ const addViewButton = tabListContainer.querySelector(`#${ADD_VIEW_BUTTON_ID}`);
689
+ setIsAddViewOverflowing(addViewButton instanceof HTMLElement && !firstRowElements.includes(addViewButton));
585
690
  const tabOverflowWidth = tabOverflowRef.current?.getBoundingClientRect().width;
586
691
  if (tabOverflowWidth) setTabOverflowWidth((prev) => prev != null && prev > tabOverflowWidth && prev - tabOverflowWidth < OVERFLOW_WIDTH_SHRINK_THRESHOLD ? prev : tabOverflowWidth);
587
- }, [setHiddenViews, views]);
692
+ }, [shownViews]);
588
693
  useLayoutEffect(() => {
589
- if (!showViews || !tabListRef.current) return;
694
+ const tabList = tabListRef.current;
695
+ if (!showViews || !tabList) return;
590
696
  const resizeObserver = new ResizeObserver(() => {
591
697
  onResize();
592
698
  });
593
- resizeObserver.observe(tabListRef.current);
699
+ const observeTabList = () => {
700
+ resizeObserver.disconnect();
701
+ resizeObserver.observe(tabList);
702
+ Array.from(tabList.children).forEach((child) => resizeObserver.observe(child));
703
+ };
704
+ const mutationObserver = new MutationObserver(observeTabList);
705
+ observeTabList();
706
+ mutationObserver.observe(tabList, { childList: true });
594
707
  return () => {
708
+ mutationObserver.disconnect();
595
709
  resizeObserver.disconnect();
596
710
  };
597
711
  }, [onResize, showViews]);
@@ -600,12 +714,78 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
600
714
  }, [
601
715
  onResize,
602
716
  showViews,
603
- views
717
+ shownViews
718
+ ]);
719
+ const isCurrentViewInOverflow = useMemo(() => !!currentView && [...overflowViews, ...hiddenViews].some((view) => view.id === currentView), [
720
+ currentView,
721
+ overflowViews,
722
+ hiddenViews
604
723
  ]);
605
- const currentViewHidden = useMemo(() => {
606
- if (currentView) return !!hiddenViews.find((view) => view.id === currentView);
607
- return false;
608
- }, [currentView, hiddenViews]);
724
+ const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }));
725
+ const dragBoundsRef = useRef(null);
726
+ const handleDragStart = () => {
727
+ const tabList = tabListRef.current;
728
+ if (!tabList) return;
729
+ const tabListRect = tabList.getBoundingClientRect();
730
+ const visibleSlotRects = Array.from(tabList.querySelectorAll("[data-tab-view]")).map((slot) => slot.getBoundingClientRect()).filter((rect) => rectContainsRect(tabListRect, rect));
731
+ dragBoundsRef.current = visibleSlotRects.length > 0 ? {
732
+ left: visibleSlotRects[0].left,
733
+ right: visibleSlotRects[visibleSlotRects.length - 1].right,
734
+ bottom: tabListRect.bottom
735
+ } : null;
736
+ };
737
+ const closestVisibleTabCenter = useCallback((args) => {
738
+ const bounds = dragBoundsRef.current;
739
+ return closestCenter({
740
+ ...args,
741
+ droppableContainers: args.droppableContainers.filter((container) => {
742
+ const rect = args.droppableRects.get(container.id);
743
+ return bounds == null || rect != null && rect.bottom <= bounds.bottom + 1;
744
+ })
745
+ });
746
+ }, []);
747
+ const restrictToVisibleSavedTabs = useCallback(({ transform, draggingNodeRect }) => {
748
+ const bounds = dragBoundsRef.current;
749
+ if (!bounds || !draggingNodeRect) return {
750
+ ...transform,
751
+ y: 0
752
+ };
753
+ const minX = bounds.left - draggingNodeRect.left;
754
+ const maxX = bounds.right - draggingNodeRect.right;
755
+ return {
756
+ ...transform,
757
+ x: Math.min(Math.max(transform.x, minX), maxX),
758
+ y: 0
759
+ };
760
+ }, []);
761
+ const moveView = (viewId, toIndex) => {
762
+ if (!views || !onReorderViews) return;
763
+ const viewIds = views.map((view) => view.id);
764
+ const reordered = moveItemByIndex(viewIds, viewIds.indexOf(viewId), toIndex);
765
+ if (reordered !== viewIds) onReorderViews(reordered);
766
+ };
767
+ const indexOfView = (viewId) => views?.findIndex((view) => view.id === viewId) ?? -1;
768
+ const openViewFromMenu = (viewId) => {
769
+ if (hiddenViews.some((view) => view.id === viewId)) onViewHiddenChange?.(viewId, false);
770
+ moveView(viewId, 0);
771
+ onSelectView?.(viewId);
772
+ };
773
+ const handleDragEnd = ({ active, over }) => {
774
+ if (over) moveView(String(active.id), indexOfView(String(over.id)));
775
+ };
776
+ const hideView = (viewId) => {
777
+ const index = shownViews.findIndex((view) => view.id === viewId);
778
+ const isCurrent = viewId === currentView;
779
+ const focusTarget = isCurrent ? void 0 : shownViews[index + 1] ?? shownViews[index - 1];
780
+ onViewHiddenChange?.(viewId, true);
781
+ if (isCurrent) onSelectView?.(null);
782
+ document.getElementById(`${TAB_ID_PREFIX}${focusTarget ? focusTarget.id : "default"}`)?.focus();
783
+ };
784
+ const moveViewWithKeyboard = (viewId, direction) => {
785
+ const neighbor = shownViews[shownViews.findIndex((view) => view.id === viewId) + direction];
786
+ if (!neighbor) return;
787
+ moveView(viewId, indexOfView(neighbor.id));
788
+ };
609
789
  const handleAddView = async () => {
610
790
  try {
611
791
  setIsAddingView(true);
@@ -677,97 +857,115 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
677
857
  children: displayLabel
678
858
  }, key);
679
859
  });
680
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [
681
- /* @__PURE__ */ jsx(ProductTourStyles, {}),
682
- (title || showViews || canEditViews && onSaveView || tableActions || bulkActions) && /* @__PURE__ */ jsx(ViewsBar, {
683
- ref: tabListRef,
684
- title,
685
- maxTabChars: 25,
686
- $isAddingView: isAddingView,
687
- "data-tour-target": dataTourTarget,
688
- actions: /* @__PURE__ */ jsxs(HStack, {
689
- spacing: Spacing[3],
690
- align: "center",
691
- style: tabOverflowWidth ? { paddingLeft: `${tabOverflowWidth + 16}px` } : void 0,
692
- children: [
693
- canEditViews && onSaveView && /* @__PURE__ */ jsx(Button, {
694
- id: "table-controls__view-tab-save",
695
- onClick: onSaveView,
696
- "aria-label": "Save current view",
697
- disabled: !isViewDirty || isLoading,
698
- size: "sm",
699
- variant: "basic",
700
- width: "auto",
701
- "data-tour-target": "saved-views-save-button",
702
- children: "Save view"
703
- }),
704
- bulkActionButtons,
705
- tableActions
706
- ]
707
- }),
708
- children: showViews && /* @__PURE__ */ jsxs(Fragment$1, { children: [
709
- /* @__PURE__ */ jsx(LockedViewTab, {
710
- id: `${TAB_ID_PREFIX}default`,
711
- selected: !currentView,
712
- onClick: () => onSelectView?.(null),
713
- "data-tour-target": "saved-views-default-view",
714
- children: "Default view"
715
- }),
716
- presetViews?.map((view) => {
717
- const selected = view.id === currentView;
718
- return /* @__PURE__ */ jsx(LockedViewTab, {
719
- id: `${TAB_ID_PREFIX}preset-${view.id}`,
720
- selected,
721
- onClick: () => onSelectView?.(view.id),
722
- children: view.name
723
- }, view.id);
724
- }),
725
- views?.map((view) => {
726
- return /* @__PURE__ */ jsx(SavedViewTab, {
727
- view,
728
- canEditViews: canEditViews ?? false,
729
- handleNameChange,
730
- onDuplicateView,
731
- onRequestDeleteView,
732
- onSelectView,
733
- onResetCurrentView,
734
- onSaveView,
735
- onSetDefaultView,
736
- isViewDirty: isViewDirty ?? false,
737
- selected: view.id === currentView,
738
- showTabContextMenu: showTabContextMenu && !currentViewHidden,
739
- setShowTabContextMenu,
740
- "data-tab-view": true
741
- }, view.id);
742
- }),
743
- canEditViews && onAddView && /* @__PURE__ */ jsx(AddViewButton, {
744
- id: "table-controls__view-tab-new",
745
- size: "md",
746
- onClick: handleAddView,
747
- "aria-label": "Add new view",
748
- "data-tour-target": "saved-views-add-button",
749
- children: /* @__PURE__ */ jsx(CirclePlusIcon, {})
860
+ const showViewsBar = title || showViews || canEditViews && onSaveView || tableActions || bulkActions;
861
+ const getSavedViewTabProps = (view) => ({
862
+ view,
863
+ onKeyboardMove: onReorderViews ? moveViewWithKeyboard : void 0,
864
+ onHideView: hideView,
865
+ canEditViews: canEditViews ?? false,
866
+ handleNameChange,
867
+ onDuplicateView,
868
+ onRequestDeleteView,
869
+ onSelectView,
870
+ onResetCurrentView,
871
+ onSaveView,
872
+ onSetDefaultView,
873
+ onViewHiddenChange,
874
+ isViewDirty: isViewDirty ?? false,
875
+ selected: view.id === currentView,
876
+ showTabContextMenu: showTabContextMenu && !isCurrentViewInOverflow,
877
+ setShowTabContextMenu
878
+ });
879
+ const viewsBar = /* @__PURE__ */ jsx(ViewsBar, {
880
+ ref: tabListRef,
881
+ title,
882
+ maxTabChars: 25,
883
+ $isAddingView: isAddingView,
884
+ "data-tour-target": dataTourTarget,
885
+ actions: /* @__PURE__ */ jsxs(HStack, {
886
+ spacing: Spacing[3],
887
+ align: "center",
888
+ style: tabOverflowWidth ? { paddingLeft: `${tabOverflowWidth + 16}px` } : void 0,
889
+ children: [
890
+ canEditViews && onSaveView && /* @__PURE__ */ jsx(Button, {
891
+ id: "table-controls__view-tab-save",
892
+ onClick: onSaveView,
893
+ "aria-label": strings.saveCurrentView,
894
+ disabled: !isViewDirty || isLoading,
895
+ size: "sm",
896
+ variant: "basic",
897
+ width: "auto",
898
+ "data-tour-target": "saved-views-save-button",
899
+ children: strings.saveView
750
900
  }),
751
- hiddenViews.length > 0 && /* @__PURE__ */ jsx(TabOverflow, {
752
- ref: tabOverflowRef,
753
- hiddenViews,
754
- currentView,
755
- onSelectView,
756
- canEditViews: canEditViews ?? false,
757
- handleAddView: onAddView ? handleAddView : null,
758
- handleNameChange,
759
- onDuplicateView,
760
- onRequestDeleteView,
761
- onResetCurrentView,
762
- onSaveView,
763
- onSetDefaultView,
764
- isViewDirty: isViewDirty ?? false,
765
- showTabContextMenu: showTabContextMenu && currentViewHidden,
766
- setShowTabContextMenu,
767
- lastVisibleViewElement
768
- })
769
- ] })
901
+ bulkActionButtons,
902
+ tableActions
903
+ ]
770
904
  }),
905
+ children: showViews && /* @__PURE__ */ jsxs(Fragment$1, { children: [
906
+ /* @__PURE__ */ jsx(LockedViewTab, {
907
+ id: `${TAB_ID_PREFIX}default`,
908
+ selected: !currentView,
909
+ onClick: () => onSelectView?.(null),
910
+ "data-tour-target": "saved-views-default-view",
911
+ children: strings.defaultView
912
+ }),
913
+ presetViews?.map((view) => {
914
+ const selected = view.id === currentView;
915
+ return /* @__PURE__ */ jsx(LockedViewTab, {
916
+ id: `${TAB_ID_PREFIX}preset-${view.id}`,
917
+ selected,
918
+ onClick: () => onSelectView?.(view.id),
919
+ children: view.name
920
+ }, view.id);
921
+ }),
922
+ onReorderViews ? /* @__PURE__ */ jsx(SortableContext, {
923
+ items: shownViews.map((view) => view.id),
924
+ strategy: horizontalListSortingStrategy,
925
+ children: shownViews.map((view) => /* @__PURE__ */ jsx(SortableSavedViewTab, { ...getSavedViewTabProps(view) }, view.id))
926
+ }) : shownViews.map((view) => /* @__PURE__ */ jsx(SavedViewTabSlot, { ...getSavedViewTabProps(view) }, view.id)),
927
+ canEditViews && onAddView && /* @__PURE__ */ jsx(AddViewButton, {
928
+ id: ADD_VIEW_BUTTON_ID,
929
+ size: "md",
930
+ onClick: handleAddView,
931
+ "aria-label": strings.addNewView,
932
+ "data-tour-target": "saved-views-add-button",
933
+ children: /* @__PURE__ */ jsx(CirclePlusIcon, {})
934
+ }),
935
+ (overflowViews.length > 0 || hiddenViews.length > 0) && /* @__PURE__ */ jsx(TabOverflow, {
936
+ ref: tabOverflowRef,
937
+ overflowViews,
938
+ hiddenViews,
939
+ currentView,
940
+ onSelectView,
941
+ onOpenView: openViewFromMenu,
942
+ canEditViews: canEditViews ?? false,
943
+ handleAddView: onAddView && isAddViewOverflowing ? handleAddView : null,
944
+ handleNameChange,
945
+ onDuplicateView,
946
+ onRequestDeleteView,
947
+ onResetCurrentView,
948
+ onSaveView,
949
+ onSetDefaultView,
950
+ onViewHiddenChange,
951
+ onHideView: hideView,
952
+ isViewDirty: isViewDirty ?? false,
953
+ showTabContextMenu: showTabContextMenu && isCurrentViewInOverflow,
954
+ setShowTabContextMenu,
955
+ left: overflowLeft
956
+ })
957
+ ] })
958
+ });
959
+ return /* @__PURE__ */ jsxs(Fragment$1, { children: [
960
+ /* @__PURE__ */ jsx(ProductTourStyles, {}),
961
+ showViewsBar && (onReorderViews ? /* @__PURE__ */ jsx(DndContext, {
962
+ sensors,
963
+ collisionDetection: closestVisibleTabCenter,
964
+ modifiers: [restrictToVisibleSavedTabs],
965
+ onDragStart: handleDragStart,
966
+ onDragEnd: handleDragEnd,
967
+ children: viewsBar
968
+ }) : viewsBar),
771
969
  /* @__PURE__ */ jsxs(HStack, {
772
970
  align: "center",
773
971
  spacing: Spacing[2],
@@ -783,7 +981,7 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
783
981
  id: "table-controls__view-tab-filters",
784
982
  variant: "basic",
785
983
  onClick: () => setShowFilters?.(!showFilters),
786
- "aria-label": showFilters ? "Hide filters" : "Show filters",
984
+ "aria-label": showFilters ? strings.hideFilters : strings.showFilters,
787
985
  "aria-expanded": showFilters,
788
986
  "aria-controls": filtersId,
789
987
  disabled: isLoading || isFilterPanelLoading,
@@ -805,32 +1003,28 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
805
1003
  },
806
1004
  isKeyboardDismissDisabled: isDeletingView,
807
1005
  contentProps: isDeletingView ? { showCloseButton: false } : void 0,
808
- title: "Delete view?",
1006
+ title: strings.deleteViewTitle,
809
1007
  footer: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
810
1008
  variant: "basic",
811
1009
  width: "auto",
812
1010
  disabled: isDeletingView,
813
1011
  onClick: () => setPendingDeleteView(null),
814
- children: "Cancel"
1012
+ children: strings.cancel
815
1013
  }), /* @__PURE__ */ jsx(Button, {
816
1014
  id: "table-controls__view__delete-confirm",
817
1015
  variant: "danger",
818
1016
  width: "auto",
819
1017
  isPending: isDeletingView,
820
1018
  onClick: confirmDeleteView,
821
- children: "Delete"
1019
+ children: strings.delete
822
1020
  })] }),
823
- children: /* @__PURE__ */ jsxs(Paragraph, { children: [
824
- "This will permanently delete “",
825
- pendingDeleteView?.name,
826
- "”. This action cannot be undone."
827
- ] })
1021
+ children: /* @__PURE__ */ jsx(Paragraph, { children: strings.deleteViewConfirmation(pendingDeleteView?.name ?? "") })
828
1022
  })
829
1023
  ] });
830
1024
  };
831
1025
  //#endregion
832
1026
  //#region components/DataTable/TableControls/TableControls.tsx
833
- const TableControls = ({ filterPanel, searchProps, defaultShowFilters, showFilters: controlledShowFilters, setShowFilters: controlledSetShowFilters, className, tableActions, propertiesButton, isLoading, isFilterPanelLoading, showViews, canEditViews, onSelectView, views, currentView, onAddView, onViewNameChange, onDuplicateView, onDeleteView, onSaveView, onSetDefaultView, isViewDirty, selectedRows, bulkActions, onClearSelection, title, presetViews, compact, columnConfigurationProps, showFiltersAlways = false, onError, "data-tour-target": dataTourTarget }) => {
1027
+ const TableControls = ({ filterPanel, searchProps, defaultShowFilters, showFilters: controlledShowFilters, setShowFilters: controlledSetShowFilters, className, tableActions, propertiesButton, isLoading, isFilterPanelLoading, showViews, canEditViews, onSelectView, views, hiddenViewIds, currentView, onAddView, onViewNameChange, onReorderViews, onViewHiddenChange, onDuplicateView, onDeleteView, onSaveView, onSetDefaultView, isViewDirty, selectedRows, bulkActions, onClearSelection, title, presetViews, compact, columnConfigurationProps, showFiltersAlways = false, onError, "data-tour-target": dataTourTarget }) => {
834
1028
  const filtersId = useId();
835
1029
  const [internalShowFilters, internalSetShowFilters] = useState(defaultShowFilters ?? false);
836
1030
  const showFilters = controlledShowFilters != null ? controlledShowFilters : internalShowFilters;
@@ -851,12 +1045,15 @@ const TableControls = ({ filterPanel, searchProps, defaultShowFilters, showFilte
851
1045
  children: /* @__PURE__ */ jsx(ControlBar, {
852
1046
  showViews: compact ? false : showViews,
853
1047
  views: compact ? void 0 : views,
1048
+ hiddenViewIds: compact ? void 0 : hiddenViewIds,
854
1049
  onSelectView: compact ? void 0 : onSelectView,
855
1050
  currentView: compact ? void 0 : currentView,
856
1051
  onAddView: compact ? void 0 : onAddView,
857
1052
  onDeleteView: compact ? void 0 : onDeleteView,
858
1053
  onDuplicateView: compact ? void 0 : onDuplicateView,
859
1054
  onViewNameChange: compact ? void 0 : onViewNameChange,
1055
+ onReorderViews: compact ? void 0 : onReorderViews,
1056
+ onViewHiddenChange: compact ? void 0 : onViewHiddenChange,
860
1057
  onSaveView: compact ? void 0 : onSaveView,
861
1058
  onSetDefaultView: compact ? void 0 : onSetDefaultView,
862
1059
  isViewDirty,
@@ -992,6 +1189,7 @@ const PopoverCard$1 = styled(Card_default)`
992
1189
  padding: ${Spacing[4]};
993
1190
  `;
994
1191
  const TriggerIconButton = forwardRef(function TriggerIconButton({ disabled, ...elemProps }, ref) {
1192
+ const strings = usePDSStrings();
995
1193
  return /* @__PURE__ */ jsx(Button, {
996
1194
  disabled,
997
1195
  width: "icon",
@@ -1000,21 +1198,22 @@ const TriggerIconButton = forwardRef(function TriggerIconButton({ disabled, ...e
1000
1198
  ...elemProps,
1001
1199
  ref,
1002
1200
  "data-tour-target": "table-properties-button",
1003
- "aria-label": "Table Properties",
1201
+ "aria-label": strings.tableProperties,
1004
1202
  children: /* @__PURE__ */ jsx(SettingsIcon, {})
1005
1203
  });
1006
1204
  });
1007
1205
  const TooltipButtonWrapper = styled("div")`
1008
1206
  display: inline-block;
1009
1207
  `;
1010
- const TableViewConfigurationDropdown = ({ disabled = false, disabledTooltipMessage = "Your role does not have permission to configure the view.", size = "md", variant = "basic", ...props }) => {
1208
+ const TableViewConfigurationDropdown = ({ disabled = false, disabledTooltipMessage, size = "md", variant = "basic", ...props }) => {
1209
+ const strings = usePDSStrings();
1011
1210
  return disabled ? /* @__PURE__ */ jsx(Tooltip, {
1012
1211
  trigger: /* @__PURE__ */ jsx(TooltipButtonWrapper, { children: /* @__PURE__ */ jsx(TriggerIconButton, {
1013
1212
  disabled: true,
1014
1213
  size,
1015
1214
  variant
1016
1215
  }) }),
1017
- children: disabledTooltipMessage
1216
+ children: disabledTooltipMessage ?? strings.configureViewPermissionDenied
1018
1217
  }) : /* @__PURE__ */ jsxs(Popover_default, { children: [/* @__PURE__ */ jsx(Popover_default.Trigger, {
1019
1218
  asChild: true,
1020
1219
  children: /* @__PURE__ */ jsx(TriggerIconButton, {
@@ -1034,6 +1233,7 @@ const TableViewConfigurationDropdown = ({ disabled = false, disabledTooltipMessa
1034
1233
  })] });
1035
1234
  };
1036
1235
  const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateColumnConfiguration, getColumnDisabled, sortByRelevance = false }) => {
1236
+ const strings = usePDSStrings();
1037
1237
  const [searchTerm, setSearchTerm] = useState("");
1038
1238
  const fuse = useMemo(() => {
1039
1239
  return new Fuse(attributeOptions, sortByRelevance ? {
@@ -1130,7 +1330,7 @@ const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateC
1130
1330
  /* @__PURE__ */ jsx(Label$1, {
1131
1331
  size: "lg",
1132
1332
  weight: "bold",
1133
- children: "Configure columns"
1333
+ children: strings.configureColumns
1134
1334
  }),
1135
1335
  /* @__PURE__ */ jsx(Spacer_default, { height: 2 }),
1136
1336
  /* @__PURE__ */ jsx(SearchContainer, { children: /* @__PURE__ */ jsx(StyledSearchInput, {
@@ -1138,12 +1338,12 @@ const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateC
1138
1338
  value: searchTerm,
1139
1339
  handleInput: setSearchTerm,
1140
1340
  size: "md",
1141
- placeholder: "Search by item...",
1341
+ placeholder: strings.searchColumns,
1142
1342
  dataTest: "checklist-item-panel-item-table__search"
1143
1343
  }) }),
1144
1344
  /* @__PURE__ */ jsx(Spacer_default, { height: 2 }),
1145
1345
  shownDndItemProps.length > 0 || hiddenDndItemProps.length > 0 ? /* @__PURE__ */ jsxs(DndSection, { children: [
1146
- shownDndItemProps.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Paragraph, { children: "Shown attributes" }), /* @__PURE__ */ jsx(DragDropContext, {
1346
+ shownDndItemProps.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Paragraph, { children: strings.shownColumns }), /* @__PURE__ */ jsx(DragDropContext, {
1147
1347
  onDragEnd: handleDragEnd,
1148
1348
  children: /* @__PURE__ */ jsx(Droppable, {
1149
1349
  droppableId: SHOWN_DROPPABLE_ID,
@@ -1179,8 +1379,8 @@ const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateC
1179
1379
  })
1180
1380
  })] }),
1181
1381
  /* @__PURE__ */ jsx(Spacer_default, { height: 2 }),
1182
- hiddenDndItemProps.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Paragraph, { children: "Hidden attributes" }), hiddenDndItemProps.map((props) => /* @__PURE__ */ jsx(AttributeDnd, { ...props }, props.column.key))] })
1183
- ] }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Paragraph, { children: "No matching attributes" }) })
1382
+ hiddenDndItemProps.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Paragraph, { children: strings.hiddenColumns }), hiddenDndItemProps.map((props) => /* @__PURE__ */ jsx(AttributeDnd, { ...props }, props.column.key))] })
1383
+ ] }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Paragraph, { children: strings.noMatchingColumns }) })
1184
1384
  ] });
1185
1385
  };
1186
1386
  const OverflowText = styled("div")`
@@ -1189,6 +1389,7 @@ const OverflowText = styled("div")`
1189
1389
  display: flex;
1190
1390
  `;
1191
1391
  const AttributeDnd = ({ column, index, isDisabled = false, isToggled, shouldDisableDrag, handleToggle }) => {
1392
+ const strings = usePDSStrings();
1192
1393
  return /* @__PURE__ */ jsxs(DndItemWrapper, { children: [
1193
1394
  /* @__PURE__ */ jsx(StyledIconDrag, {
1194
1395
  $active: true,
@@ -1203,7 +1404,7 @@ const AttributeDnd = ({ column, index, isDisabled = false, isToggled, shouldDisa
1203
1404
  value: isToggled,
1204
1405
  disabled: isDisabled,
1205
1406
  onChange: handleToggle,
1206
- "aria-label": isToggled ? `Hide ${column.label}` : `Show ${column.label}`
1407
+ "aria-label": isToggled ? strings.hideColumn(column.label) : strings.showColumn(column.label)
1207
1408
  }) })
1208
1409
  ] }, `${column.key}-${index}`);
1209
1410
  };
@@ -1382,20 +1583,21 @@ function fieldHasMultipleOperators(field) {
1382
1583
  return getOperatorsForField(field).length > 1;
1383
1584
  }
1384
1585
  /**
1385
- * Human-readable operator labels for the operator dropdown and filled pill.
1586
+ * Human-readable operator labels for the operator dropdown and filled pill, as keys into the
1587
+ * translatable `CommonStrings` table (English defaults: "is", "is not", "contains", ...).
1386
1588
  */
1387
- const OPERATOR_LABELS = {
1388
- is: "is",
1389
- is_not: "is not",
1390
- contains: "contains",
1391
- does_not_contain: "does not contain",
1392
- is_empty: "is empty",
1393
- is_not_empty: "is not empty",
1394
- is_true: "is true",
1395
- is_false: "is false",
1396
- before: "before",
1397
- after: "after",
1398
- between: "is between"
1589
+ const OPERATOR_LABEL_KEYS = {
1590
+ is: "operatorIs",
1591
+ is_not: "operatorIsNot",
1592
+ contains: "operatorContains",
1593
+ does_not_contain: "operatorDoesNotContain",
1594
+ is_empty: "operatorIsEmpty",
1595
+ is_not_empty: "operatorIsNotEmpty",
1596
+ is_true: "operatorIsTrue",
1597
+ is_false: "operatorIsFalse",
1598
+ before: "operatorBefore",
1599
+ after: "operatorAfter",
1600
+ between: "operatorBetween"
1399
1601
  };
1400
1602
  /**
1401
1603
  * Field-type-specific label overrides. The operator vocabulary itself
@@ -1403,18 +1605,18 @@ const OPERATOR_LABELS = {
1403
1605
  * labels can be more specific where the generic label is ambiguous.
1404
1606
  *
1405
1607
  * Only present for `(fieldType, operator)` pairs that diverge from the
1406
- * generic label; everything else falls through to `OPERATOR_LABELS`.
1608
+ * generic label; everything else falls through to `OPERATOR_LABEL_KEYS`.
1407
1609
  */
1408
- const OPERATOR_LABELS_BY_TYPE = { multi_choices: {
1409
- is: "is any of",
1410
- is_not: "is none of"
1610
+ const OPERATOR_LABEL_KEYS_BY_TYPE = { multi_choices: {
1611
+ is: "operatorIsAnyOf",
1612
+ is_not: "operatorIsNoneOf"
1411
1613
  } };
1412
- function getOperatorLabel(operator, fieldType) {
1413
- if (fieldType) {
1414
- const override = OPERATOR_LABELS_BY_TYPE[fieldType]?.[operator];
1415
- if (override) return override;
1416
- }
1417
- return OPERATOR_LABELS[operator];
1614
+ /**
1615
+ * The label for `operator`, specialized for `fieldType` where the generic label is ambiguous.
1616
+ * Pass `strings` from `usePDSStrings()` to translate it; English when omitted.
1617
+ */
1618
+ function getOperatorLabel(operator, fieldType, strings = DEFAULT_COMMON_STRINGS) {
1619
+ return strings[fieldType && OPERATOR_LABEL_KEYS_BY_TYPE[fieldType]?.[operator] || OPERATOR_LABEL_KEYS[operator]];
1418
1620
  }
1419
1621
  /**
1420
1622
  * Empty-but-present value seeded when a rule switches from a valueless operator
@@ -1496,10 +1698,15 @@ function resolveDateRangeRuleValue(rule, fieldType) {
1496
1698
  //#endregion
1497
1699
  //#region components/DataTable/TableControls/FiltersV2/format-date-value.ts
1498
1700
  const TIME_COMPONENT = /T\d{2}:\d{2}/;
1499
- function formatDateValueForDisplay(value) {
1701
+ /**
1702
+ * Display form of a minute-precision filter value ("Oct 5, 2011 2:48 PM"). Date-only values are
1703
+ * returned untouched. Pass the `PDSProvider` locale (`usePDSLocale()`) to follow it; omitted or
1704
+ * en-US keeps the English format.
1705
+ */
1706
+ function formatDateValueForDisplay(value, locale) {
1500
1707
  if (!TIME_COMPONENT.test(value)) return value;
1501
1708
  const dateTime = DateTime.fromISO(value).setZone(Settings.defaultZone);
1502
- return dateTime.isValid ? dateTime.toFormat("MMM d, yyyy h:mm a") : value;
1709
+ return dateTime.isValid ? formatDateTime(dateTime, { locale }) : value;
1503
1710
  }
1504
1711
  //#endregion
1505
1712
  //#region components/DataTable/TableControls/FiltersV2/relative-date-label.ts
@@ -1518,17 +1725,20 @@ function relativePresetLabel(value, relativeDate) {
1518
1725
  }
1519
1726
  //#endregion
1520
1727
  //#region components/DataTable/TableControls/FiltersV2/AdvancedFilterRulesPopover/display.ts
1521
- function valueDisplayString(value, optionLabels, relativeDate, fieldType) {
1728
+ function valueDisplayString(value, optionLabels, relativeDate, fieldType, { locale, strings = DEFAULT_COMMON_STRINGS } = {}) {
1522
1729
  if (value == null) return;
1523
1730
  const relativeLabel = relativePresetLabel(value, relativeDate);
1524
1731
  if (relativeLabel) return relativeLabel;
1525
- const display = (raw) => optionLabels?.[raw] ?? (fieldType === "date" || fieldType === "date_range" ? formatDateValueForDisplay(raw) : raw);
1732
+ const display = (raw) => optionLabels?.[raw] ?? (fieldType === "date" || fieldType === "date_range" ? formatDateValueForDisplay(raw, locale) : raw);
1526
1733
  if (Array.isArray(value)) {
1527
1734
  if (value.length === 0) return;
1528
1735
  if (value.length === 1) return display(String(value[0]));
1529
1736
  return `${display(String(value[0]))} +${value.length - 1}`;
1530
1737
  }
1531
- if (typeof value === "boolean") return value ? "true" : "false";
1738
+ if (typeof value === "boolean") {
1739
+ const label = value ? strings.booleanTrue : strings.booleanFalse;
1740
+ return label === (value ? DEFAULT_COMMON_STRINGS.booleanTrue : DEFAULT_COMMON_STRINGS.booleanFalse) ? String(value) : label;
1741
+ }
1532
1742
  if (typeof value === "number") return String(value);
1533
1743
  if (typeof value === "string") return value.length > 0 ? display(value) : void 0;
1534
1744
  if (typeof value === "object") {
@@ -1619,8 +1829,10 @@ function nodeToOptions(node) {
1619
1829
  * submenu entirely. Omit it (or pass `undefined`) to show every group.
1620
1830
  *
1621
1831
  * `excludeFieldIds`, when provided, drops those fields from the tree.
1832
+ *
1833
+ * `fieldsLabel` names the custom-field submenu; pass `usePDSStrings().fields` to translate it.
1622
1834
  */
1623
- function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds) {
1835
+ function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds, fieldsLabel = FIELDS_SUBMENU_LABEL) {
1624
1836
  const systemFields = registry.systemFieldsList();
1625
1837
  const customGroups = registry.customFieldGroups();
1626
1838
  const excluded = excludeFieldIds == null ? null : new Set(excludeFieldIds);
@@ -1640,7 +1852,7 @@ function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFie
1640
1852
  }
1641
1853
  const customOptions = nodeToOptions(customRoot);
1642
1854
  if (customOptions.length > 0) tree.push({
1643
- label: FIELDS_SUBMENU_LABEL,
1855
+ label: fieldsLabel,
1644
1856
  nested: true,
1645
1857
  options: customOptions
1646
1858
  });
@@ -1661,29 +1873,30 @@ const StatementFields = styled.div`
1661
1873
  }
1662
1874
  `;
1663
1875
  function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleIndex, rule, size, operators, operatorConfigurable, onFieldChange, onOperatorChange, onValueChange, renderValueControl }) {
1876
+ const strings = usePDSStrings();
1664
1877
  const minutePrecisionValue = field != null && isMinutePrecisionDate(field, rule.operator, dateTimesEnabled);
1665
- const fieldOptions = useMemo(() => buildFieldPickerOptions(registry), [registry]);
1878
+ const fieldOptions = useMemo(() => buildFieldPickerOptions(registry, void 0, void 0, strings.fields), [registry, strings.fields]);
1666
1879
  return /* @__PURE__ */ jsxs(StatementFields, { children: [
1667
1880
  /* @__PURE__ */ jsx(ComboboxField, {
1668
- label: "Value",
1881
+ label: strings.value,
1669
1882
  labelProps: { size },
1670
- "aria-label": `Field for rule ${ruleIndex + 1} in group ${groupIndex + 1}`,
1883
+ "aria-label": strings.fieldForRule(ruleIndex + 1, groupIndex + 1),
1671
1884
  size,
1672
1885
  options: fieldOptions,
1673
1886
  value: rule.fieldId,
1674
1887
  onChange: (next) => {
1675
1888
  if (typeof next === "string") onFieldChange(groupIndex, ruleIndex, next);
1676
1889
  },
1677
- placeholder: "Select field",
1890
+ placeholder: strings.selectField,
1678
1891
  portal: false
1679
1892
  }),
1680
1893
  operatorConfigurable ? /* @__PURE__ */ jsx(ComboboxField, {
1681
- label: "Operator",
1894
+ label: strings.operator,
1682
1895
  labelProps: { size },
1683
- "aria-label": `Operator for rule ${ruleIndex + 1} in group ${groupIndex + 1}`,
1896
+ "aria-label": strings.operatorForRule(ruleIndex + 1, groupIndex + 1),
1684
1897
  size,
1685
1898
  options: operators.map((op) => ({
1686
- label: getOperatorLabel(op, field?.type),
1899
+ label: getOperatorLabel(op, field?.type, strings),
1687
1900
  value: op
1688
1901
  })),
1689
1902
  value: rule.operator,
@@ -1692,18 +1905,18 @@ function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleI
1692
1905
  },
1693
1906
  portal: false
1694
1907
  }) : /* @__PURE__ */ jsx(FormField, {
1695
- label: "Operator",
1908
+ label: strings.operator,
1696
1909
  labelProps: { size },
1697
1910
  children: /* @__PURE__ */ jsx(Input_default, {
1698
1911
  size,
1699
- "aria-label": `Operator for rule ${ruleIndex + 1} in group ${groupIndex + 1}`,
1700
- value: getOperatorLabel(rule.operator, field?.type),
1912
+ "aria-label": strings.operatorForRule(ruleIndex + 1, groupIndex + 1),
1913
+ value: getOperatorLabel(rule.operator, field?.type, strings),
1701
1914
  disabled: true,
1702
1915
  readOnly: true
1703
1916
  })
1704
1917
  }),
1705
1918
  field && !isValuelessOperator(rule.operator) ? /* @__PURE__ */ jsx(FormField, {
1706
- label: "Value",
1919
+ label: strings.value,
1707
1920
  labelProps: { size },
1708
1921
  configField: minutePrecisionValue ? false : void 0,
1709
1922
  children: /* @__PURE__ */ jsx(Fragment$1, { children: renderValueControl(field, rule.operator, rule.value, (next, relativeDate) => onValueChange(groupIndex, ruleIndex, next, relativeDate), rule.relativeDate) })
@@ -1713,16 +1926,21 @@ function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleI
1713
1926
  //#endregion
1714
1927
  //#region components/DataTable/TableControls/FiltersV2/AdvancedFilterRulesPopover/AdvancedFilterRuleRow.tsx
1715
1928
  function AdvancedFilterRuleRow({ registry, dateTimesEnabled, groupIndex, ruleIndex, rule, size, isOpen, onClose, onDelete, onFieldChange, onOperatorChange, onValueChange, renderValueControl }) {
1929
+ const strings = usePDSStrings();
1930
+ const locale = usePDSLocale();
1716
1931
  const field = registry.get(rule.fieldId);
1717
1932
  const operators = field ? getOperatorsForField(field) : [];
1718
1933
  const operatorConfigurable = field ? fieldHasMultipleOperators(field) : true;
1719
- const condition = ruleIndex === 0 ? "If" : "And";
1934
+ const condition = ruleIndex === 0 ? strings.conditionIf : strings.conditionAnd;
1720
1935
  const rowId = `${groupIndex}-${ruleIndex}`;
1721
- const valueDisplay = isValuelessOperator(rule.operator) ? void 0 : valueDisplayString(rule.value, registry.optionLabelsFor(rule.fieldId), carriesDateRange(rule.operator, field?.type) ? rule.relativeDate : void 0, field?.type);
1936
+ const valueDisplay = isValuelessOperator(rule.operator) ? void 0 : valueDisplayString(rule.value, registry.optionLabelsFor(rule.fieldId), carriesDateRange(rule.operator, field?.type) ? rule.relativeDate : void 0, field?.type, {
1937
+ locale,
1938
+ strings
1939
+ });
1722
1940
  const textValue = [
1723
1941
  condition,
1724
1942
  field?.label ?? rule.fieldId,
1725
- getOperatorLabel(rule.operator, field?.type),
1943
+ getOperatorLabel(rule.operator, field?.type, strings),
1726
1944
  valueDisplay
1727
1945
  ].filter(Boolean).join(" ");
1728
1946
  return /* @__PURE__ */ jsx(ListBox.LogicRow, {
@@ -1730,7 +1948,7 @@ function AdvancedFilterRuleRow({ registry, dateTimesEnabled, groupIndex, ruleInd
1730
1948
  condition,
1731
1949
  hideCondition: true,
1732
1950
  attributeName: field?.label ?? rule.fieldId,
1733
- operator: getOperatorLabel(rule.operator, field?.type),
1951
+ operator: getOperatorLabel(rule.operator, field?.type, strings),
1734
1952
  matchLevelName: valueDisplay,
1735
1953
  textValue,
1736
1954
  size,
@@ -1738,7 +1956,7 @@ function AdvancedFilterRuleRow({ registry, dateTimesEnabled, groupIndex, ruleInd
1738
1956
  if (isOpen) onClose();
1739
1957
  },
1740
1958
  onDelete,
1741
- dropdownHeadingText: `Edit \u2018${condition}\u2019 statement`,
1959
+ dropdownHeadingText: strings.editStatement(condition),
1742
1960
  dropdownFormFields: /* @__PURE__ */ jsx(RuleEditorFields, {
1743
1961
  registry,
1744
1962
  dateTimesEnabled,
@@ -1969,6 +2187,7 @@ function groupsForRender(compound) {
1969
2187
  * row's dropdown popover.
1970
2188
  */
1971
2189
  const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, open, onOpenChange, renderValueControl, size, dateTimesEnabled = false }) => {
2190
+ const strings = usePDSStrings();
1972
2191
  const resolvedSize = useFilterBarSize(size);
1973
2192
  const subtleIconSize = resolvedSize === "sm" ? "xs" : "sm";
1974
2193
  const wide = useMemo(() => dateTimesEnabled && registry.all().some((field) => field.timeGranularity === "minute"), [registry, dateTimesEnabled]);
@@ -2073,7 +2292,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2073
2292
  sideOffset: 8,
2074
2293
  collisionPadding: 8,
2075
2294
  role: "dialog",
2076
- "aria-label": "Advanced filter rules",
2295
+ "aria-label": strings.advancedFilterRules,
2077
2296
  id: baseId,
2078
2297
  onPointerDownCapture: letPointerDownReachDocument,
2079
2298
  ref: popoverContentRef,
@@ -2098,25 +2317,25 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2098
2317
  children: [/* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsx(Paragraph, {
2099
2318
  size: resolvedSize,
2100
2319
  color: "secondary",
2101
- children: "Advanced filter rules"
2320
+ children: strings.advancedFilterRules
2102
2321
  }) }), /* @__PURE__ */ jsxs(Body, { children: [groupsForRender(compound).map((group, groupIndex, renderableGroups) => {
2103
- const groupTitle = groupIndex === 0 ? "If" : "Or";
2322
+ const groupTitle = groupIndex === 0 ? strings.conditionIf : strings.conditionOr;
2104
2323
  const isSynthetic = group.synthetic;
2105
2324
  const isOnlyGroup = renderableGroups.length === 1;
2106
2325
  const isEmptyGroup = group.rules.length === 0;
2107
2326
  const hideGroupMenu = isOnlyGroup && isEmptyGroup;
2108
- const deleteGroupLabel = isOnlyGroup && !isEmptyGroup ? "Clear all" : "Delete group";
2327
+ const deleteGroupLabel = isOnlyGroup && !isEmptyGroup ? strings.clearAll : strings.deleteGroup;
2109
2328
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(GroupCard, {
2110
2329
  "data-test": `advanced-filter-rules__group-${groupIndex}`,
2111
2330
  role: "group",
2112
- "aria-label": `Filter group ${groupIndex + 1}`,
2331
+ "aria-label": strings.filterGroup(groupIndex + 1),
2113
2332
  children: [/* @__PURE__ */ jsxs(GroupHeader, { children: [/* @__PURE__ */ jsx(GroupTitle, {
2114
2333
  $size: resolvedSize,
2115
2334
  children: groupTitle
2116
2335
  }), /* @__PURE__ */ jsxs(GroupHeaderActions, { children: [hideGroupMenu ? null : /* @__PURE__ */ jsx(GroupActionsMenu, {
2117
2336
  trigger: /* @__PURE__ */ jsx(IconButton, {
2118
2337
  size: subtleIconSize,
2119
- "aria-label": `More actions for filter group ${groupIndex + 1}`,
2338
+ "aria-label": strings.moreActionsForFilterGroup(groupIndex + 1),
2120
2339
  "data-test": `advanced-filter-rules__group-more-${groupIndex}`,
2121
2340
  children: /* @__PURE__ */ jsx(MoreIcon$1, {})
2122
2341
  }),
@@ -2138,16 +2357,16 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2138
2357
  }), /* @__PURE__ */ jsx(IconButton, {
2139
2358
  size: subtleIconSize,
2140
2359
  onClick: () => handleAddRuleToGroup(groupIndex),
2141
- "aria-label": `Add rule to filter group ${groupIndex + 1}`,
2360
+ "aria-label": strings.addRuleToFilterGroup(groupIndex + 1),
2142
2361
  "data-test": `advanced-filter-rules__add-rule-${groupIndex}`,
2143
2362
  children: /* @__PURE__ */ jsx(PlusIcon$1, {})
2144
2363
  })] })] }), group.rules.length === 0 ? /* @__PURE__ */ jsx(Paragraph, {
2145
2364
  size: resolvedSize,
2146
2365
  color: "secondary",
2147
2366
  style: { padding: Spacing[2] },
2148
- children: "No rules yet"
2367
+ children: strings.noRulesYet
2149
2368
  }) : /* @__PURE__ */ jsx(RulesListBox, {
2150
- "aria-label": `Rules in group ${groupIndex + 1}`,
2369
+ "aria-label": strings.rulesInGroup(groupIndex + 1),
2151
2370
  selectionMode: "single",
2152
2371
  size: resolvedSize,
2153
2372
  fullWidth: true,
@@ -2180,7 +2399,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2180
2399
  prefixIcon: /* @__PURE__ */ jsx(PlusIcon, {}),
2181
2400
  onClick: handleAddOrGroup,
2182
2401
  "data-test": "advanced-filter-rules__add-or-group",
2183
- children: "Or group"
2402
+ children: strings.orGroup
2184
2403
  }) })] })]
2185
2404
  })
2186
2405
  }) })]
@@ -2220,6 +2439,7 @@ const stringValue = (value) => {
2220
2439
  * scalar?", so we never produce an array-of-values from this control.
2221
2440
  */
2222
2441
  const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLabel, layout = "popover" }) => {
2442
+ const strings = usePDSStrings();
2223
2443
  const size = useFilterBarSize();
2224
2444
  const [localValue, setLocalValue] = useState(() => stringDisplayValue(value));
2225
2445
  useEffect(() => {
@@ -2234,7 +2454,7 @@ const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLab
2234
2454
  onCommit?.();
2235
2455
  }, [onChange, onCommit]);
2236
2456
  if (isValuelessOperator(operator)) return null;
2237
- const label = ariaLabel ?? `${field.label} value`;
2457
+ const label = ariaLabel ?? strings.fieldValue(field.label);
2238
2458
  if ((field.itemType ?? "string") === "choices") return /* @__PURE__ */ jsx(Combobox, {
2239
2459
  "aria-label": label,
2240
2460
  options: (field.options ?? []).map((opt) => ({
@@ -2243,14 +2463,14 @@ const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLab
2243
2463
  })),
2244
2464
  value: stringValue(value),
2245
2465
  onChange: handleComboboxChange,
2246
- placeholder: "Select an option",
2466
+ placeholder: strings.selectAnOptionPlaceholder,
2247
2467
  size,
2248
2468
  embedded: layout === "popover"
2249
2469
  });
2250
2470
  return /* @__PURE__ */ jsx(Input_default, {
2251
2471
  type: "text",
2252
2472
  size,
2253
- placeholder: "Enter a value",
2473
+ placeholder: strings.enterAValue,
2254
2474
  "aria-label": label,
2255
2475
  value: localValue,
2256
2476
  onChange: (e) => handleTextChange(e.target.value)
@@ -2259,10 +2479,10 @@ const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLab
2259
2479
  //#endregion
2260
2480
  //#region components/DataTable/TableControls/FiltersV2/value-controls/BooleanValueControl/BooleanValueControl.tsx
2261
2481
  const OPTIONS = [{
2262
- label: "True",
2482
+ labelKey: "booleanTrue",
2263
2483
  value: true
2264
2484
  }, {
2265
- label: "False",
2485
+ labelKey: "booleanFalse",
2266
2486
  value: false
2267
2487
  }];
2268
2488
  const Row = styled.button`
@@ -2309,11 +2529,12 @@ const Root = styled.div`
2309
2529
  * for valueless operators (`is_empty`, `is_not_empty`).
2310
2530
  */
2311
2531
  function BooleanValueControl({ operator, value, onChange, ariaLabel }) {
2532
+ const strings = usePDSStrings();
2312
2533
  if (isValuelessOperator(operator)) return null;
2313
2534
  const selected = typeof value === "boolean" ? value : null;
2314
2535
  return /* @__PURE__ */ jsx(Root, {
2315
2536
  role: "radiogroup",
2316
- "aria-label": ariaLabel ?? "Boolean value",
2537
+ "aria-label": ariaLabel ?? strings.booleanValue,
2317
2538
  children: OPTIONS.map((opt) => {
2318
2539
  const isSelected = selected === opt.value;
2319
2540
  return /* @__PURE__ */ jsxs(Row, {
@@ -2322,7 +2543,7 @@ function BooleanValueControl({ operator, value, onChange, ariaLabel }) {
2322
2543
  "aria-checked": isSelected,
2323
2544
  $selected: isSelected,
2324
2545
  onClick: () => onChange(opt.value),
2325
- children: [opt.label, isSelected ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true }) : null]
2546
+ children: [strings[opt.labelKey], isSelected ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true }) : null]
2326
2547
  }, String(opt.value));
2327
2548
  })
2328
2549
  });
@@ -2341,6 +2562,7 @@ const EMPTY_VALUES = [];
2341
2562
  * valueless (e.g. `is_empty`).
2342
2563
  */
2343
2564
  function ChoicesValueControl({ field, operator, value, onChange, onCommit, ariaLabel, trigger, layout = "popover", multiple = false }) {
2565
+ const strings = usePDSStrings();
2344
2566
  const generatedId = useMemo(() => uniqueId(multiple ? "filter_v2_multi_choices_" : "filter_v2_choices_"), [multiple]);
2345
2567
  const size = useFilterBarSize();
2346
2568
  const options = field.options ?? EMPTY_OPTIONS;
@@ -2352,8 +2574,8 @@ function ChoicesValueControl({ field, operator, value, onChange, onCommit, ariaL
2352
2574
  size,
2353
2575
  "aria-label": ariaLabel ?? field.label,
2354
2576
  placeholder: field.label,
2355
- searchPlaceholder: "Search",
2356
- emptyStateMessage: "No matches",
2577
+ searchPlaceholder: strings.searchPlaceholder,
2578
+ emptyStateMessage: strings.noMatches,
2357
2579
  options,
2358
2580
  values,
2359
2581
  trigger,
@@ -2407,16 +2629,32 @@ const useDateRange = (value, relativeDate, minuteMode) => {
2407
2629
  const parsedRelativeDate = parseDateFilterValue(relativeDate);
2408
2630
  const parsed = parsedRelativeDate?.kind === "relative" ? parsedRelativeDate : parseDateFilterValue(value);
2409
2631
  const resolved = parsed ? resolveDateFilterValue(parsed) : void 0;
2410
- return useMemo(() => ({
2411
- startDate: minuteMode ? parseIsoDateTime(resolved?.startDate, "start") : parseIsoDate$1(resolved?.startDate),
2412
- endDate: minuteMode ? parseIsoDateTime(resolved?.endDate, "end") : parseIsoDate$1(resolved?.endDate)
2413
- }), [
2632
+ const isRelative = parsed?.kind === "relative";
2633
+ const nowMinuteMillis = minuteMode && isRelative ? DateTime.now().setZone(Settings.defaultZone).set({
2634
+ second: 0,
2635
+ millisecond: 0
2636
+ }).toMillis() : void 0;
2637
+ return useMemo(() => {
2638
+ const startDate = minuteMode ? parseIsoDateTime(resolved?.startDate, "start") : parseIsoDate$1(resolved?.startDate);
2639
+ let endDate = minuteMode ? parseIsoDateTime(resolved?.endDate, "end") : parseIsoDate$1(resolved?.endDate);
2640
+ if (minuteMode && isRelative && endDate && nowMinuteMillis !== void 0) {
2641
+ const now = DateTime.fromMillis(nowMinuteMillis, { zone: Settings.defaultZone });
2642
+ if (endDate.toMillis() > now.toMillis()) endDate = now;
2643
+ }
2644
+ return {
2645
+ startDate,
2646
+ endDate
2647
+ };
2648
+ }, [
2649
+ isRelative,
2414
2650
  minuteMode,
2651
+ nowMinuteMillis,
2415
2652
  resolved?.startDate,
2416
2653
  resolved?.endDate
2417
2654
  ]);
2418
2655
  };
2419
2656
  const DateRangeValueControl = ({ field, operator, value, relativeDate, onChange, ariaLabel, hidePresets, portalContainer, visibleMonths, relativeDatesEnabled = false, dateTimesEnabled = false }) => {
2657
+ const strings = usePDSStrings();
2420
2658
  const size = useFilterBarSize();
2421
2659
  const minuteMode = dateTimesEnabled && field.timeGranularity === "minute";
2422
2660
  const dateRange = useDateRange(value, relativeDate, minuteMode);
@@ -2482,7 +2720,7 @@ const DateRangeValueControl = ({ field, operator, value, relativeDate, onChange,
2482
2720
  if (isValuelessOperator(operator)) return null;
2483
2721
  const hasCompleteRange = dateRange.startDate != null && dateRange.endDate != null;
2484
2722
  return /* @__PURE__ */ jsx(DateRangePicker, {
2485
- "aria-label": ariaLabel ?? `${field.label} value`,
2723
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2486
2724
  calendarZIndex: Z_INDICES.modalDropdown,
2487
2725
  dateRange,
2488
2726
  hidePresets,
@@ -2529,6 +2767,7 @@ const parseIsoDate = (value, field, operator, dateTimesEnabled) => {
2529
2767
  * and bar both opt in; other date values remain `YYYY-MM-DD`.
2530
2768
  */
2531
2769
  const DateValueControl = ({ field, operator, value, onChange, ariaLabel, dateTimesEnabled = false }) => {
2770
+ const strings = usePDSStrings();
2532
2771
  const size = useFilterBarSize();
2533
2772
  const minuteMode = isMinutePrecisionDate(field, operator, dateTimesEnabled);
2534
2773
  const handleChange = useCallback((nextDate) => {
@@ -2554,7 +2793,7 @@ const DateValueControl = ({ field, operator, value, onChange, ariaLabel, dateTim
2554
2793
  return /* @__PURE__ */ jsx(DatePicker, {
2555
2794
  value: parseIsoDate(value, field, operator, dateTimesEnabled),
2556
2795
  size,
2557
- "aria-label": ariaLabel ?? `${field.label} value`,
2796
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2558
2797
  onChange: handleChange,
2559
2798
  granularity: minuteMode ? "minute" : "day",
2560
2799
  useModalZIndex: true
@@ -2608,6 +2847,7 @@ function numericDisplayValue(value) {
2608
2847
  * the debounce flushes on blur and on unmount so no pending value is lost.
2609
2848
  */
2610
2849
  const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2850
+ const strings = usePDSStrings();
2611
2851
  const size = useFilterBarSize();
2612
2852
  const [localValue, setLocalValue] = useState(() => numericDisplayValue(value));
2613
2853
  const isFocusedRef = useRef(false);
@@ -2638,8 +2878,8 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2638
2878
  size,
2639
2879
  step: "any",
2640
2880
  inputMode: "decimal",
2641
- placeholder: "Enter a number",
2642
- "aria-label": ariaLabel ?? `${field.label} value`,
2881
+ placeholder: strings.enterANumber,
2882
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2643
2883
  value: localValue,
2644
2884
  onChange: (e) => handleChange(e.target.value),
2645
2885
  onFocus: () => {
@@ -2679,6 +2919,7 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2679
2919
  * the debounce flushes on blur and on unmount so no pending value is lost.
2680
2920
  */
2681
2921
  const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2922
+ const strings = usePDSStrings();
2682
2923
  const size = useFilterBarSize();
2683
2924
  const [localValue, setLocalValue] = useState(() => numericDisplayValue(value));
2684
2925
  const isFocusedRef = useRef(false);
@@ -2709,8 +2950,8 @@ const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) =>
2709
2950
  size,
2710
2951
  step: 1,
2711
2952
  inputMode: "numeric",
2712
- placeholder: "Enter a number",
2713
- "aria-label": ariaLabel ?? `${field.label} value`,
2953
+ placeholder: strings.enterANumber,
2954
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2714
2955
  value: localValue,
2715
2956
  onChange: (e) => handleChange(e.target.value),
2716
2957
  onFocus: () => {
@@ -2806,14 +3047,21 @@ const TriggerWrapper = styled.span`
2806
3047
  }
2807
3048
  `}
2808
3049
  `;
2809
- const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", compact = false, disabled = false, visibleCustomFieldParents, excludeFieldIds, size, ...rest }) => {
3050
+ const FilterPickerMenu = ({ registry, onPickField, triggerLabel, compact = false, disabled = false, visibleCustomFieldParents, excludeFieldIds, size, ...rest }) => {
2810
3051
  const resolvedSize = useFilterBarSize(size);
2811
- const unfilteredOptions = useMemo(() => buildFieldPickerOptions(registry, visibleCustomFieldParents), [registry, visibleCustomFieldParents]);
2812
- const options = useMemo(() => excludeFieldIds == null || excludeFieldIds.length === 0 ? unfilteredOptions : buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds), [
3052
+ const strings = usePDSStrings();
3053
+ const resolvedTriggerLabel = triggerLabel ?? strings.filter;
3054
+ const unfilteredOptions = useMemo(() => buildFieldPickerOptions(registry, visibleCustomFieldParents, void 0, strings.fields), [
3055
+ registry,
3056
+ visibleCustomFieldParents,
3057
+ strings.fields
3058
+ ]);
3059
+ const options = useMemo(() => excludeFieldIds == null || excludeFieldIds.length === 0 ? unfilteredOptions : buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds, strings.fields), [
2813
3060
  registry,
2814
3061
  visibleCustomFieldParents,
2815
3062
  excludeFieldIds,
2816
- unfilteredOptions
3063
+ unfilteredOptions,
3064
+ strings.fields
2817
3065
  ]);
2818
3066
  const handleChange = useCallback((value) => {
2819
3067
  if (value == null) return;
@@ -2825,7 +3073,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", comp
2825
3073
  const trigger = compact ? /* @__PURE__ */ jsx(IconButton, {
2826
3074
  size: resolvedSize,
2827
3075
  disabled,
2828
- "aria-label": triggerLabel,
3076
+ "aria-label": resolvedTriggerLabel,
2829
3077
  children: /* @__PURE__ */ jsx(CirclePlusIcon, {})
2830
3078
  }) : /* @__PURE__ */ jsx(Button, {
2831
3079
  variant: "text",
@@ -2833,7 +3081,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", comp
2833
3081
  width: "auto",
2834
3082
  prefixIcon: /* @__PURE__ */ jsx(CirclePlusIcon, {}),
2835
3083
  disabled,
2836
- children: triggerLabel
3084
+ children: resolvedTriggerLabel
2837
3085
  });
2838
3086
  return /* @__PURE__ */ jsx(TriggerWrapper, {
2839
3087
  ...rest,
@@ -2843,7 +3091,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", comp
2843
3091
  value: null,
2844
3092
  onChange: handleChange,
2845
3093
  size: resolvedSize,
2846
- "aria-label": "Filter field picker",
3094
+ "aria-label": strings.filterFieldPicker,
2847
3095
  trigger
2848
3096
  })
2849
3097
  });
@@ -3072,13 +3320,13 @@ const OverflowTooltipList = styled(Stack).attrs({
3072
3320
  * `optionLabels` lookup so the pill renders human-readable option labels
3073
3321
  * instead of raw option ids. Null / undefined collapses to an empty list.
3074
3322
  */
3075
- function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType) {
3323
+ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType, strings = DEFAULT_COMMON_STRINGS, locale) {
3076
3324
  if (value == null) return [];
3077
3325
  const relativeLabel = relativePresetLabel(value, relativeDate);
3078
3326
  if (relativeLabel) return [relativeLabel];
3079
- const lookup = (raw) => optionLabels?.[raw] ?? (fieldType === "date" || fieldType === "date_range" ? formatDateValueForDisplay(raw) : raw);
3327
+ const lookup = (raw) => optionLabels?.[raw] ?? (fieldType === "date" || fieldType === "date_range" ? formatDateValueForDisplay(raw, locale) : raw);
3080
3328
  if (Array.isArray(value)) {
3081
- if (value.length > 0 && Array.isArray(value[0])) return [`${value.length} group${value.length === 1 ? "" : "s"}`];
3329
+ if (value.length > 0 && Array.isArray(value[0])) return [strings.groupCount(value.length)];
3082
3330
  return value.map((entry) => lookup(String(entry)));
3083
3331
  }
3084
3332
  if (typeof value === "object") {
@@ -3087,7 +3335,7 @@ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType) {
3087
3335
  const single = startDate || endDate;
3088
3336
  return single ? [lookup(single)] : [];
3089
3337
  }
3090
- if (typeof value === "boolean") return [value ? "True" : "False"];
3338
+ if (typeof value === "boolean") return [value ? strings.booleanTrue : strings.booleanFalse];
3091
3339
  if (typeof value === "number") return [String(value)];
3092
3340
  return [lookup(value)];
3093
3341
  }
@@ -3097,22 +3345,26 @@ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType) {
3097
3345
  * relying on child text nodes because the chip components don't always read
3098
3346
  * cleanly when concatenated by the AT.
3099
3347
  */
3100
- function buildAccessibleName(field, rule, displayedValues) {
3348
+ function buildAccessibleName(field, rule, displayedValues, strings = DEFAULT_COMMON_STRINGS) {
3101
3349
  if (rule == null) return field.label;
3102
3350
  if (!isValuelessOperator(rule.operator) && displayedValues.length === 0) return field.label;
3103
- const operatorLabel = getOperatorLabel(rule.operator, field.type);
3351
+ const operatorLabel = getOperatorLabel(rule.operator, field.type, strings);
3104
3352
  if (isValuelessOperator(rule.operator)) return `${field.label} ${operatorLabel}`;
3105
3353
  return `${field.label} ${operatorLabel} ${displayedValues.join(", ")}`;
3106
3354
  }
3107
3355
  const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDismiss, variant = "default", optionLabels, size, ...rest }, ref) {
3108
3356
  const reactId = useMemo(() => uniqueId("filter-pill-"), []);
3109
3357
  const resolvedSize = useFilterBarSize(size);
3110
- const displayedValues = useMemo(() => rule && !isValuelessOperator(rule.operator) ? normalizeValueToDisplay(rule.value, optionLabels, carriesDateRange(rule.operator, field?.type) ? rule.relativeDate : void 0, field?.type) : [], [
3358
+ const strings = usePDSStrings();
3359
+ const locale = usePDSLocale();
3360
+ const displayedValues = useMemo(() => rule && !isValuelessOperator(rule.operator) ? normalizeValueToDisplay(rule.value, optionLabels, carriesDateRange(rule.operator, field?.type) ? rule.relativeDate : void 0, field?.type, strings, locale) : [], [
3111
3361
  rule,
3112
3362
  optionLabels,
3113
- field?.type
3363
+ field?.type,
3364
+ strings,
3365
+ locale
3114
3366
  ]);
3115
- const accessibleName = buildAccessibleName(field, rule, displayedValues);
3367
+ const accessibleName = buildAccessibleName(field, rule, displayedValues, strings);
3116
3368
  const hasRule = rule != null;
3117
3369
  const isComplete = hasRule && (isValuelessOperator(rule.operator) || displayedValues.length > 0);
3118
3370
  const firstValue = displayedValues[0];
@@ -3122,14 +3374,14 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
3122
3374
  ref,
3123
3375
  variant,
3124
3376
  size: resolvedSize,
3125
- bodyAriaLabel: `Edit filter: ${accessibleName}`,
3377
+ bodyAriaLabel: strings.editFilter(accessibleName),
3126
3378
  onBodyClick: onClick,
3127
3379
  onDismiss,
3128
- dismissAriaLabel: `Remove filter: ${accessibleName}`,
3380
+ dismissAriaLabel: strings.removeFilter(accessibleName),
3129
3381
  ...rest,
3130
3382
  children: [
3131
3383
  /* @__PURE__ */ jsx(FieldLabel, { children: /* @__PURE__ */ jsx(TruncatedText, { children: field.label }) }),
3132
- isComplete && hasRule && /* @__PURE__ */ jsx(OperatorLabel, { children: getOperatorLabel(rule.operator, field.type) }),
3384
+ isComplete && hasRule && /* @__PURE__ */ jsx(OperatorLabel, { children: getOperatorLabel(rule.operator, field.type, strings) }),
3133
3385
  isComplete && hasRule && !isValuelessOperator(rule.operator) && firstValue != null && /* @__PURE__ */ jsxs(ValueChipGroup, { children: [/* @__PURE__ */ jsx(ValueChip, {
3134
3386
  $variant: variant,
3135
3387
  $size: resolvedSize,
@@ -3145,7 +3397,7 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
3145
3397
  hideArrow: true,
3146
3398
  children: /* @__PURE__ */ jsx(OverflowTooltipList, {
3147
3399
  id: overflowTooltipId,
3148
- "aria-label": "Additional values",
3400
+ "aria-label": strings.additionalValues,
3149
3401
  children: overflowValues.map((entry, index) => /* @__PURE__ */ jsx("li", { children: entry }, `${entry}-${index}`))
3150
3402
  })
3151
3403
  })] })
@@ -3154,13 +3406,10 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
3154
3406
  });
3155
3407
  //#endregion
3156
3408
  //#region components/DataTable/TableControls/FiltersV2/FilterPopover/FilterPopover.tsx
3157
- /**
3158
- * Compact value controls fit the minimum width; wider controls can grow
3159
- * up to 320px without overflowing, or 520px when the popover is `wide`.
3160
- */
3409
+ /** Wide controls size to their content while retaining a viewport gutter. */
3161
3410
  const POPOVER_MIN_WIDTH = "196px";
3162
3411
  const POPOVER_MAX_WIDTH = "320px";
3163
- const POPOVER_WIDE_MAX_WIDTH = "520px";
3412
+ const POPOVER_WIDE_MAX_WIDTH = `calc(100vw - ${Spacing[4]} - ${Spacing[4]})`;
3164
3413
  const OperatorMenu = styled(DropdownMenu_default)`
3165
3414
  && {
3166
3415
  background-color: ${({ theme }) => semanticColor(theme, "SurfaceElevated", theme.color.background.primary)};
@@ -3168,7 +3417,7 @@ const OperatorMenu = styled(DropdownMenu_default)`
3168
3417
  `;
3169
3418
  const PopoverPanel = styled(Stack).attrs({ spacing: Spacing[0] })`
3170
3419
  min-width: ${POPOVER_MIN_WIDTH};
3171
- max-width: ${({ $wide }) => $wide ? POPOVER_WIDE_MAX_WIDTH : POPOVER_MAX_WIDTH};
3420
+ max-width: ${({ $wide }) => $wide ? "none" : POPOVER_MAX_WIDTH};
3172
3421
  /* The design-system Popover.Card already supplies bg, border, shadow,
3173
3422
  and 6px corner radius — we just constrain the inner content. */
3174
3423
  `;
@@ -3271,6 +3520,7 @@ const Footer = styled(HStack).attrs({
3271
3520
  * through Radix's controlled props.
3272
3521
  */
3273
3522
  const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, onClose, trigger, open, onOpenChange, size, wide = false }) => {
3523
+ const strings = usePDSStrings();
3274
3524
  const resolvedSize = useFilterBarSize(size);
3275
3525
  const valueless = isValuelessOperator(operator);
3276
3526
  const CaretIcon = resolvedSize === "sm" ? CaretDownIcon$1 : CaretDownIcon;
@@ -3316,8 +3566,12 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
3316
3566
  sideOffset: 4,
3317
3567
  avoidCollisions: true,
3318
3568
  zIndex: Z_INDICES.floatingBar,
3319
- "aria-label": `Edit filter for ${field.label}`,
3569
+ "aria-label": strings.editFilterFor(field.label),
3320
3570
  noPadding: true,
3571
+ style: wide ? {
3572
+ width: "max-content",
3573
+ maxWidth: POPOVER_WIDE_MAX_WIDTH
3574
+ } : void 0,
3321
3575
  children: /* @__PURE__ */ jsxs(PopoverPanel, {
3322
3576
  $wide: wide,
3323
3577
  onKeyDown: handleKeyDown,
@@ -3332,9 +3586,9 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
3332
3586
  }), showOperatorSelector ? /* @__PURE__ */ jsx(OperatorMenu, {
3333
3587
  trigger: /* @__PURE__ */ jsxs(InlineOperatorTrigger, {
3334
3588
  type: "button",
3335
- "aria-label": "Operator",
3589
+ "aria-label": strings.operator,
3336
3590
  $size: resolvedSize,
3337
- children: [getOperatorLabel(operator, field.type), /* @__PURE__ */ jsx(CaretIcon, { "aria-hidden": "true" })]
3591
+ children: [getOperatorLabel(operator, field.type, strings), /* @__PURE__ */ jsx(CaretIcon, { "aria-hidden": "true" })]
3338
3592
  }),
3339
3593
  align: "start",
3340
3594
  portal: true,
@@ -3342,9 +3596,9 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
3342
3596
  children: operatorOptions.map((op) => /* @__PURE__ */ jsx(DropdownMenu_default.Item, {
3343
3597
  size: resolvedSize,
3344
3598
  onClick: () => onChangeOperator(op),
3345
- children: getOperatorLabel(op, field.type)
3599
+ children: getOperatorLabel(op, field.type, strings)
3346
3600
  }, op))
3347
- }) : /* @__PURE__ */ jsx("span", { children: getOperatorLabel(operator, field.type) })]
3601
+ }) : /* @__PURE__ */ jsx("span", { children: getOperatorLabel(operator, field.type, strings) })]
3348
3602
  }), !valueless ? /* @__PURE__ */ jsx(ValueSlot, {
3349
3603
  ref: valueSlotRef,
3350
3604
  children: valueControlSlot
@@ -3416,11 +3670,12 @@ const CountChip = styled.span`
3416
3670
  */
3417
3671
  const RulesPill = forwardRef(function RulesPill({ compound, enabled, onClick, isOpen = false, "aria-label": ariaLabel, "data-test": dataTest, size, ...rest }, ref) {
3418
3672
  const resolvedSize = useFilterBarSize(size);
3673
+ const strings = usePDSStrings();
3419
3674
  if (!enabled) return null;
3420
3675
  const count = countRules(compound);
3421
3676
  const hasCount = count > 0;
3422
3677
  const variant = isOpen ? "active" : "default";
3423
- const accessibleName = hasCount ? `Rules ${count}` : "Rules";
3678
+ const accessibleName = hasCount ? strings.rulesWithCount(count) : strings.rules;
3424
3679
  return /* @__PURE__ */ jsxs(PillShell, {
3425
3680
  ref,
3426
3681
  variant,
@@ -3430,7 +3685,7 @@ const RulesPill = forwardRef(function RulesPill({ compound, enabled, onClick, is
3430
3685
  "data-test": dataTest ?? "rules-pill__trigger",
3431
3686
  "aria-expanded": isOpen,
3432
3687
  ...rest,
3433
- children: [/* @__PURE__ */ jsx(Label, { children: "Rules" }), hasCount && /* @__PURE__ */ jsx(CountChip, {
3688
+ children: [/* @__PURE__ */ jsx(Label, { children: strings.rules }), hasCount && /* @__PURE__ */ jsx(CountChip, {
3434
3689
  $variant: variant,
3435
3690
  $size: resolvedSize,
3436
3691
  "data-test": "rules-pill__count",
@@ -3978,6 +4233,7 @@ function useStableFieldIds(fieldIds) {
3978
4233
  return stable.current;
3979
4234
  }
3980
4235
  function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = true, relativeDatesEnabled = false, dateTimesEnabled = false, singleUseFields = false, size = "md", valueControlResolver }) {
4236
+ const strings = usePDSStrings();
3981
4237
  const filterState = useFilterStateV2({
3982
4238
  registry,
3983
4239
  initialState,
@@ -4083,7 +4339,7 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
4083
4339
  value: { size },
4084
4340
  children: /* @__PURE__ */ jsxs(Bar, {
4085
4341
  role: "toolbar",
4086
- "aria-label": "Filter bar",
4342
+ "aria-label": strings.filterBar,
4087
4343
  children: [filterState.advancedRulesEnabled ? /* @__PURE__ */ jsx(AdvancedFilterRulesPopover, {
4088
4344
  registry,
4089
4345
  dateTimesEnabled,
@@ -4498,4 +4754,4 @@ function decodeBase64(input) {
4498
4754
  //#endregion
4499
4755
  export { TableControlsProvider as A, getOperatorsForType as C, reconcileValueForOperator as D, isValuelessOperator as E, ControlBar as F, DataTableCompactBar as I, TableViewConfiguration as M, TableViewConfigurationDropdown as N, dateRuleIntent as O, TableControls as P, getOperatorsForField as S, isRangeOperator as T, FILTER_SIZE_TOKENS as _, encodeFilterStateToUrlParam as a, emptyValueForRule as b, FilterBar_default as c, isFilterStateV2 as d, pruneToRegistry as f, resolveValueControl as g, PillShell as h, decodeFilterStateFromUrl as i, useTableControls as j, TableControlsContext as k, useFilterStateV2 as l, isEmptyState as m, applyFilterStateToSearchParams as n, FieldRegistry as o, EMPTY_FILTER_STATE as p, decodeFilterStateFromString as r, buildFieldRegistry as s, FILTER_STATE_URL_PARAM as t, hasCompleteValue as u, useFilterBarSize as v, isCompleteDateRange as w, getDefaultOperatorForType as x, resolveDateRangeRuleValue as y };
4500
4756
 
4501
- //# sourceMappingURL=TableControls-CqW_nyBY.mjs.map
4757
+ //# sourceMappingURL=TableControls-B5UGCoO-.mjs.map