@persona/design-system 0.8.0 → 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 (577) hide show
  1. package/CHANGELOG.md +281 -0
  2. package/dist/Accordion.d.mts +1 -1
  3. package/dist/AccordionItem.d.mts +1 -1
  4. package/dist/{Action-B-AiHknZ.d.mts → Action-C6yvIekn.d.mts} +3 -3
  5. package/dist/Action.d.mts +1 -1
  6. package/dist/AdvancedFilterRuleRow.d.mts +4 -2
  7. package/dist/AdvancedFilterRulesPopover.d.mts +5 -3
  8. package/dist/ArrayValueControl.d.mts +1 -1
  9. package/dist/Attribute.d.mts +3 -3
  10. package/dist/{Badge-COqUjFQu.mjs → Badge-uY8l1p1R.mjs} +2 -2
  11. package/dist/{Badge-COqUjFQu.mjs.map → Badge-uY8l1p1R.mjs.map} +1 -1
  12. package/dist/BooleanValueControl.d.mts +1 -1
  13. package/dist/{Breadcrumb-DRFY46ZW.d.mts → Breadcrumb-Tjk9FyiF.d.mts} +1 -1
  14. package/dist/Breadcrumb.d.mts +1 -1
  15. package/dist/{Breadcrumbs-DUSbT1I7.d.mts → Breadcrumbs-DSCbZmAx.d.mts} +2 -2
  16. package/dist/{Breadcrumbs-DXS7rU7_.mjs → Breadcrumbs-EQm5iiRA.mjs} +8 -8
  17. package/dist/{Breadcrumbs-DXS7rU7_.mjs.map → Breadcrumbs-EQm5iiRA.mjs.map} +1 -1
  18. package/dist/Breadcrumbs.d.mts +1 -1
  19. package/dist/{Button-xZ6DC5XC.d.mts → Button-22DkIpYp.d.mts} +4 -4
  20. package/dist/Button.d.mts +1 -1
  21. package/dist/{Calendar-dPmo2dkj.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-CUeM8Lh8.d.mts → Card-DQE1J3gk.d.mts} +3 -3
  27. package/dist/Card.d.mts +1 -1
  28. package/dist/{CardV2-D9p7D7jX.mjs → CardV2-Ds6e577k.mjs} +9 -9
  29. package/dist/{CardV2-D9p7D7jX.mjs.map → CardV2-Ds6e577k.mjs.map} +1 -1
  30. package/dist/{Checkbox-DQynkc_I.mjs → Checkbox-BQC_SmBt.mjs} +4 -4
  31. package/dist/{Checkbox-DQynkc_I.mjs.map → Checkbox-BQC_SmBt.mjs.map} +1 -1
  32. package/dist/{Checkbox-DoJpxPEz.d.mts → Checkbox-CsJlWz-r.d.mts} +1 -1
  33. package/dist/Checkbox.d.mts +1 -1
  34. package/dist/CheckboxGroupField-DjKp63Dr.d.mts +25 -0
  35. package/dist/CheckboxGroupField.d.mts +2 -25
  36. package/dist/ChoicesValueControl.d.mts +1 -1
  37. package/dist/{Combobox-D7hyf-jA.d.mts → Combobox-D1iXiYGV.d.mts} +3 -3
  38. package/dist/{Combobox-C_kCY3P3.mjs → Combobox-MCaDc7h6.mjs} +10 -10
  39. package/dist/{Combobox-C_kCY3P3.mjs.map → Combobox-MCaDc7h6.mjs.map} +1 -1
  40. package/dist/Combobox.d.mts +2 -2
  41. package/dist/{ComboboxBase-BMCY6O7Y.d.mts → ComboboxBase-DXhu2YSh.d.mts} +6 -6
  42. package/dist/ComboboxBase.d.mts +1 -1
  43. package/dist/{ComboboxMultiSelect-L0KYMkmm.d.mts → ComboboxMultiSelect-BSyJc46m.d.mts} +2 -2
  44. package/dist/ComboboxMultiSelect.d.mts +1 -1
  45. package/dist/{ComboboxSingleSelect-v5oNrJ7M.d.mts → ComboboxSingleSelect-Dg_6h4iB.d.mts} +4 -4
  46. package/dist/ComboboxSingleSelect.d.mts +1 -1
  47. package/dist/{CompactBar-DjFaUAsN.d.mts → CompactBar-CVGNq7Zu.d.mts} +3 -3
  48. package/dist/CompactBar.d.mts +1 -1
  49. package/dist/{ConfigFormGroup-DLOZOuLf.mjs → ConfigFormGroup-CidT_cE9.mjs} +2 -2
  50. package/dist/{ConfigFormGroup-DLOZOuLf.mjs.map → ConfigFormGroup-CidT_cE9.mjs.map} +1 -1
  51. package/dist/{ControlBar-Cegjxa6-.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-Dk5ykLdr.d.mts → DateField-DY3xCygL.d.mts} +2 -2
  55. package/dist/DateField.d.mts +1 -1
  56. package/dist/{DatePicker-Dtvv0V45.d.mts → DatePicker-C56kJLiX.d.mts} +2 -2
  57. package/dist/{DatePicker-C7z1yodK.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-HPYsa4wC.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-CQrFHOIW.mjs → DropdownButton-B-cYK2oi.mjs} +3 -3
  65. package/dist/{DropdownButton-CQrFHOIW.mjs.map → DropdownButton-B-cYK2oi.mjs.map} +1 -1
  66. package/dist/DropdownButton.d.mts +2 -2
  67. package/dist/{DropdownMenu-D1qvgGTZ.d.mts → DropdownMenu-BwPtzVWg.d.mts} +2 -2
  68. package/dist/{DropdownMenu-rm9Nnxn7.mjs → DropdownMenu-CedsmO5h.mjs} +2 -2
  69. package/dist/{DropdownMenu-rm9Nnxn7.mjs.map → DropdownMenu-CedsmO5h.mjs.map} +1 -1
  70. package/dist/DropdownMenu.d.mts +1 -1
  71. package/dist/{ErrorProps-B8-Mqf1W.d.mts → ErrorProps-C-sfKFxK.d.mts} +1 -1
  72. package/dist/ErrorProps.d.mts +1 -1
  73. package/dist/{FieldRegistry-0LmSQ-jc.d.mts → FieldRegistry-C2eIbP1X.d.mts} +2 -2
  74. package/dist/FieldRegistry.d.mts +1 -1
  75. package/dist/{FilterBar-BMM4Swbt.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 +8 -2
  80. package/dist/FloatValueControl.d.mts +1 -1
  81. package/dist/{FormControl-DXrxoJLl.mjs → FormControl-C4CiA0H-.mjs} +4 -4
  82. package/dist/{FormControl-DXrxoJLl.mjs.map → FormControl-C4CiA0H-.mjs.map} +1 -1
  83. package/dist/{FormControl-Dg8doZq2.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-Crp3F-hv.mjs → FormField-CB0yCMro.mjs} +16 -16
  87. package/dist/{FormField-Crp3F-hv.mjs.map → FormField-CB0yCMro.mjs.map} +1 -1
  88. package/dist/{FormField-BeLigf9j.d.mts → FormField-D97xQCxF.d.mts} +2 -2
  89. package/dist/FormField.d.mts +1 -1
  90. package/dist/{Grid-eMLuyRzV.mjs → Grid-D0mlxk8_.mjs} +1 -1
  91. package/dist/{Grid-eMLuyRzV.mjs.map → Grid-D0mlxk8_.mjs.map} +1 -1
  92. package/dist/{Header-DxJ6TfPw.d.mts → Header-Ca554S1F.d.mts} +1 -1
  93. package/dist/Header.d.mts +1 -1
  94. package/dist/{HelperTooltip-DcyrpEZI.d.mts → HelperTooltip-Dk2eqeC_.d.mts} +2 -2
  95. package/dist/HelperTooltip.d.mts +1 -1
  96. package/dist/HighlightedText.d.mts +61 -0
  97. package/dist/{HoverCopyableField-12bBuG-d.mjs → HoverCopyableField-CewUtxZl.mjs} +6 -6
  98. package/dist/{HoverCopyableField-12bBuG-d.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-CCLMYWVN.mjs → IconButton-H5vDZOdo.mjs} +3 -3
  102. package/dist/{IconButton-CCLMYWVN.mjs.map → IconButton-H5vDZOdo.mjs.map} +1 -1
  103. package/dist/{IconButton-BUMMN-gH.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-2N2e5JCf.d.mts → Input-BRe0qyUe.d.mts} +3 -3
  109. package/dist/{Input-Cl4o41k4.mjs → Input-CY14-YeD.mjs} +4 -4
  110. package/dist/{Input-Cl4o41k4.mjs.map → Input-CY14-YeD.mjs.map} +1 -1
  111. package/dist/Input.d.mts +1 -1
  112. package/dist/{InputProps-TWzig3QO.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-I9Bklen-.mjs → Link-BSuXrvTu.mjs} +2 -2
  116. package/dist/{Link-I9Bklen-.mjs.map → Link-BSuXrvTu.mjs.map} +1 -1
  117. package/dist/Link.d.mts +1 -1
  118. package/dist/{ListBox-sqeLBiKS.mjs → ListBox-2aYWNlO_.mjs} +13 -10
  119. package/dist/{ListBox-sqeLBiKS.mjs.map → ListBox-2aYWNlO_.mjs.map} +1 -1
  120. package/dist/{ListBox-BcoXOt73.d.mts → ListBox-DzZY7IFz.d.mts} +7 -7
  121. package/dist/ListBox.d.mts +1 -1
  122. package/dist/ListBoxField-DT_-4_Ct.d.mts +51 -0
  123. package/dist/ListBoxField.d.mts +2 -51
  124. package/dist/{LoadingShimmer-dRSkdlqD.mjs → LoadingShimmer-Bqjdut7i.mjs} +1 -1
  125. package/dist/{LoadingShimmer-dRSkdlqD.mjs.map → LoadingShimmer-Bqjdut7i.mjs.map} +1 -1
  126. package/dist/LoadingShimmer.d.mts +1 -1
  127. package/dist/{LogicRow-DXywXdYt.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-BekLwm8w.d.mts → Menu-DQXbnpDB.d.mts} +3 -3
  131. package/dist/{Menu-CwlI7BMN.mjs → Menu-Dw6Rcpk6.mjs} +2 -2
  132. package/dist/{Menu-CwlI7BMN.mjs.map → Menu-Dw6Rcpk6.mjs.map} +1 -1
  133. package/dist/Menu.d.mts +1 -1
  134. package/dist/{MiddleTruncatedText-CO58jrNF.mjs → MiddleTruncatedText-DoTyfMem.mjs} +2 -2
  135. package/dist/{MiddleTruncatedText-CO58jrNF.mjs.map → MiddleTruncatedText-DoTyfMem.mjs.map} +1 -1
  136. package/dist/{Modal-ymxlGYKt.d.mts → Modal-Bz5Rer1b.d.mts} +2 -2
  137. package/dist/{Modal-CMiFcXC9.mjs → Modal-dpBu2MKp.mjs} +6 -6
  138. package/dist/{Modal-CMiFcXC9.mjs.map → Modal-dpBu2MKp.mjs.map} +1 -1
  139. package/dist/Modal.d.mts +1 -1
  140. package/dist/{PageHeader-D_0p7UK_.mjs → PageHeader-CLO8SMXV.mjs} +3 -3
  141. package/dist/{PageHeader-D_0p7UK_.mjs.map → PageHeader-CLO8SMXV.mjs.map} +1 -1
  142. package/dist/PageHeader.d.mts +1 -1
  143. package/dist/{PageSelector-Bxulu6vU.d.mts → PageSelector--kFA7Xt6.d.mts} +3 -3
  144. package/dist/PageSelector.d.mts +1 -1
  145. package/dist/{Pagination-Co9CfyFQ.mjs → Pagination-BEddsarh.mjs} +40 -49
  146. package/dist/Pagination-BEddsarh.mjs.map +1 -0
  147. package/dist/{Pagination-Dg-4O7F7.d.mts → Pagination-CglxJr3f.d.mts} +2 -2
  148. package/dist/Pagination.d.mts +1 -1
  149. package/dist/{Pii-JGV9gP95.mjs → Pii-Ct7yDY7d.mjs} +2 -2
  150. package/dist/{Pii-JGV9gP95.mjs.map → Pii-Ct7yDY7d.mjs.map} +1 -1
  151. package/dist/{PillShell-BA7KK1zS.d.mts → PillShell-CvJzkRFh.d.mts} +2 -2
  152. package/dist/PillShell.d.mts +1 -1
  153. package/dist/{Popover-ZAj03lws.mjs → Popover-532iYFek.mjs} +3 -3
  154. package/dist/{Popover-ZAj03lws.mjs.map → Popover-532iYFek.mjs.map} +1 -1
  155. package/dist/{ProgressIndicator-D85HQGSx.d.mts → ProgressIndicator-Cleq0Tfb.d.mts} +1 -1
  156. package/dist/{ProgressIndicator-CQg08vuA.mjs → ProgressIndicator-STyTM0Hq.mjs} +1 -1
  157. package/dist/{ProgressIndicator-CQg08vuA.mjs.map → ProgressIndicator-STyTM0Hq.mjs.map} +1 -1
  158. package/dist/ProgressIndicator.d.mts +1 -1
  159. package/dist/{PseudoClassProps-BHs8TX_3.d.mts → PseudoClassProps-B2R2dyr3.d.mts} +1 -1
  160. package/dist/PseudoClassProps.d.mts +1 -1
  161. package/dist/{Radio-CYV290JI.mjs → Radio-BtomkCkL.mjs} +2 -2
  162. package/dist/{Radio-CYV290JI.mjs.map → Radio-BtomkCkL.mjs.map} +1 -1
  163. package/dist/{RadioGroup-Cq3KV1TN.d.mts → RadioGroup-B3B4PCz6.d.mts} +1 -1
  164. package/dist/{RadioGroup-lWMMtu9V.mjs → RadioGroup-B6UaoJRd.mjs} +2 -2
  165. package/dist/{RadioGroup-lWMMtu9V.mjs.map → RadioGroup-B6UaoJRd.mjs.map} +1 -1
  166. package/dist/RadioGroup.d.mts +1 -1
  167. package/dist/{RangeCalendar-Mh7h74Tp.d.mts → RangeCalendar-C24q-nvR.d.mts} +2 -2
  168. package/dist/RangeCalendar.d.mts +1 -1
  169. package/dist/RangeCalendarPresets.d.mts +1 -1
  170. package/dist/{RouterContext-B3IU1jb0.d.mts → RouterContext-BhPPG7d3.d.mts} +2 -2
  171. package/dist/{RouterContext-CsPnkNdI.mjs → RouterContext-nPSb55p9.mjs} +1 -1
  172. package/dist/{RouterContext-CsPnkNdI.mjs.map → RouterContext-nPSb55p9.mjs.map} +1 -1
  173. package/dist/RouterContext.d.mts +1 -1
  174. package/dist/{RouterLink-CwAqTLC2.d.mts → RouterLink-IDO10cDE.d.mts} +2 -2
  175. package/dist/RouterLink.d.mts +1 -1
  176. package/dist/RuleEditorFields.d.mts +4 -2
  177. package/dist/RulesPill.d.mts +1 -1
  178. package/dist/{SearchInput-BGyUUcoz.d.mts → SearchInput-7pBMxhuN.d.mts} +2 -2
  179. package/dist/SearchInput.d.mts +1 -1
  180. package/dist/SectionHeading.d.mts +1 -1
  181. package/dist/{SegmentedControl-DgDabSgr.d.mts → SegmentedControl-B9yo9yMy.d.mts} +1 -1
  182. package/dist/{SegmentedControl-BEbIcV3g.mjs → SegmentedControl-BNVwf7nL.mjs} +2 -2
  183. package/dist/{SegmentedControl-BEbIcV3g.mjs.map → SegmentedControl-BNVwf7nL.mjs.map} +1 -1
  184. package/dist/SegmentedControl.d.mts +1 -1
  185. package/dist/{Select-wqTtGyga.d.mts → Select-D7_npfZr.d.mts} +3 -3
  186. package/dist/{Select-yC2t_gZb.mjs → Select-DD7mFvR8.mjs} +7 -7
  187. package/dist/{Select-yC2t_gZb.mjs.map → Select-DD7mFvR8.mjs.map} +1 -1
  188. package/dist/Select.d.mts +1 -1
  189. package/dist/SmartTextInput.d.mts +107 -0
  190. package/dist/SmartTextInputCodeDialog.d.mts +18 -0
  191. package/dist/SmartTextInputField.d.mts +25 -0
  192. package/dist/SmartTextInputFunctionDialog.d.mts +37 -0
  193. package/dist/SmartTextInputListbox.d.mts +26 -0
  194. package/dist/SmartTextInputPopover.d.mts +45 -0
  195. package/dist/{Spacer-BFOuo0sZ.mjs → Spacer-J_HuhxX2.mjs} +1 -1
  196. package/dist/{Spacer-BFOuo0sZ.mjs.map → Spacer-J_HuhxX2.mjs.map} +1 -1
  197. package/dist/{Spinner-BlAg8_OX.mjs → Spinner-uVZyOh1T.mjs} +1 -1
  198. package/dist/{Spinner-BlAg8_OX.mjs.map → Spinner-uVZyOh1T.mjs.map} +1 -1
  199. package/dist/{Stack-Bkn0TUDe.mjs → Stack-BkC7FCdF.mjs} +1 -1
  200. package/dist/{Stack-Bkn0TUDe.mjs.map → Stack-BkC7FCdF.mjs.map} +1 -1
  201. package/dist/{Stack-CYqjBXe8.d.mts → Stack-opuYfQvc.d.mts} +1 -1
  202. package/dist/Stack.d.mts +1 -1
  203. package/dist/{StatusIndicator-DT2zNbkp.mjs → StatusIndicator-akDwBiBW.mjs} +1 -1
  204. package/dist/{StatusIndicator-DT2zNbkp.mjs.map → StatusIndicator-akDwBiBW.mjs.map} +1 -1
  205. package/dist/{Sticker-BLbgJxcH.mjs → Sticker-DdhSpTcV.mjs} +3 -3
  206. package/dist/{Sticker-BLbgJxcH.mjs.map → Sticker-DdhSpTcV.mjs.map} +1 -1
  207. package/dist/{Sticker-BmyKaxwx.d.mts → Sticker-rxBNVYlX.d.mts} +4 -4
  208. package/dist/Sticker.d.mts +1 -1
  209. package/dist/StringValueControl.d.mts +1 -1
  210. package/dist/Tab.d.mts +1 -1
  211. package/dist/{TabBar-Bj84q1Mr.mjs → TabBar-DBOPWUUa.mjs} +6 -9
  212. package/dist/TabBar-DBOPWUUa.mjs.map +1 -0
  213. package/dist/{Table-WqNfjasd.mjs → Table--o4ZLRbb.mjs} +4 -4
  214. package/dist/{Table-WqNfjasd.mjs.map → Table--o4ZLRbb.mjs.map} +1 -1
  215. package/dist/{Table-DhdHUQ8V.d.mts → Table-Bt7zAlgQ.d.mts} +1 -1
  216. package/dist/Table.d.mts +1 -1
  217. package/dist/{TableBody-qoSvQDds.d.mts → TableBody-9AYpXi2y.d.mts} +1 -1
  218. package/dist/TableBody.d.mts +1 -1
  219. package/dist/{TableBox-obl64W5Y.mjs → TableBox-BGabyY7E.mjs} +10 -10
  220. package/dist/{TableBox-obl64W5Y.mjs.map → TableBox-BGabyY7E.mjs.map} +1 -1
  221. package/dist/TableBox.d.mts +2 -2
  222. package/dist/{TableBoxCell-DzYMx4Ju.d.mts → TableBoxCell-6ovTrboM.d.mts} +6 -6
  223. package/dist/TableBoxCell.d.mts +1 -1
  224. package/dist/TableBoxField-mGTYb-Bz.d.mts +103 -0
  225. package/dist/TableBoxField.d.mts +2 -103
  226. package/dist/{TableBoxRow-B4rFCvWK.d.mts → TableBoxRow-56QatuNm.d.mts} +3 -3
  227. package/dist/TableBoxRow.d.mts +1 -1
  228. package/dist/{TableBoxRowActions-qMKcVuTL.d.mts → TableBoxRowActions-9rR-k_4H.d.mts} +2 -2
  229. package/dist/TableBoxRowActions.d.mts +1 -1
  230. package/dist/{TableCell-CGPQRc5g.d.mts → TableCell-WD0ultKh.d.mts} +2 -2
  231. package/dist/TableCell.d.mts +1 -1
  232. package/dist/{TableControls-RS_ozBsI.mjs → TableControls-B5UGCoO-.mjs} +629 -306
  233. package/dist/TableControls-B5UGCoO-.mjs.map +1 -0
  234. package/dist/{TableControls-WP78qtET.d.mts → TableControls-DVO-obFo.d.mts} +6 -3
  235. package/dist/TableControls.d.mts +1 -1
  236. package/dist/{TableControlsContext-DZIZSyfX.d.mts → TableControlsContext-BDl9k4o4.d.mts} +2 -2
  237. package/dist/TableControlsContext.d.mts +1 -1
  238. package/dist/{TableHead-36j-_oyn.d.mts → TableHead-DqcFsWpz.d.mts} +1 -1
  239. package/dist/TableHead.d.mts +1 -1
  240. package/dist/{TableHeaderCell-C7gp9j1X.d.mts → TableHeaderCell-C1PJHhXZ.d.mts} +1 -1
  241. package/dist/TableHeaderCell.d.mts +1 -1
  242. package/dist/{TableLayout-CQqIV0vj.d.mts → TableLayout-B4qzMWXH.d.mts} +1 -1
  243. package/dist/TableLayout.d.mts +1 -1
  244. package/dist/{TableRow-BJZM8I8i.d.mts → TableRow-B1yeAiVf.d.mts} +2 -2
  245. package/dist/TableRow.d.mts +1 -1
  246. package/dist/TableTH.d.mts +1 -1
  247. package/dist/{TableViewConfigurationDropdown-Dwy_9FBz.d.mts → TableViewConfigurationDropdown-DBdUHK__.d.mts} +2 -2
  248. package/dist/TableViewConfigurationDropdown.d.mts +1 -1
  249. package/dist/{TechnicalSticker-CL0zkOAj.mjs → TechnicalSticker-CALVwnrT.mjs} +4 -4
  250. package/dist/{TechnicalSticker-CL0zkOAj.mjs.map → TechnicalSticker-CALVwnrT.mjs.map} +1 -1
  251. package/dist/{Text-BdluS7Fy.mjs → Text-CSwFifQF.mjs} +1 -1
  252. package/dist/{Text-BdluS7Fy.mjs.map → Text-CSwFifQF.mjs.map} +1 -1
  253. package/dist/{Text-DbtTa83E.d.mts → Text-D4GzsXFA.d.mts} +3 -3
  254. package/dist/Text.d.mts +1 -1
  255. package/dist/{TextArea-CbxF6u7z.d.mts → TextArea-BL8BTgwk.d.mts} +2 -2
  256. package/dist/{TextArea-CfZr5Sk4.mjs → TextArea-kOkhZxNR.mjs} +2 -2
  257. package/dist/{TextArea-CfZr5Sk4.mjs.map → TextArea-kOkhZxNR.mjs.map} +1 -1
  258. package/dist/TextArea.d.mts +1 -1
  259. package/dist/{TextUnderlineTooltip-BgLQuK38.d.mts → TextUnderlineTooltip-Sdxqsr6y.d.mts} +2 -2
  260. package/dist/TextUnderlineTooltip.d.mts +1 -1
  261. package/dist/Tile.d.mts +1 -1
  262. package/dist/Toast.d.mts +1 -1
  263. package/dist/{Toggle-D4ZaUcVt.mjs → Toggle-CZF6iBql.mjs} +4 -4
  264. package/dist/{Toggle-D4ZaUcVt.mjs.map → Toggle-CZF6iBql.mjs.map} +1 -1
  265. package/dist/{Toggle-BYMLrPXk.d.mts → Toggle-cUtrUIIO.d.mts} +1 -1
  266. package/dist/Toggle.d.mts +1 -1
  267. package/dist/{Tooltip-C0FuZS1C.mjs → Tooltip-B-0VRuKT.mjs} +2 -2
  268. package/dist/{Tooltip-C0FuZS1C.mjs.map → Tooltip-B-0VRuKT.mjs.map} +1 -1
  269. package/dist/{Tooltip-4pshzB_i.d.mts → Tooltip-CSM977L6.d.mts} +2 -2
  270. package/dist/Tooltip.d.mts +1 -1
  271. package/dist/{TruncatedText-O7hE3w0O.d.mts → TruncatedText-CCUrvW2a.d.mts} +1 -1
  272. package/dist/VersionHistory.d.mts +1 -1
  273. package/dist/{VersionHistoryItem-CIcEgl0K.d.mts → VersionHistoryItem-DBjL9S5_.d.mts} +1 -1
  274. package/dist/VersionHistoryItem.d.mts +1 -1
  275. package/dist/WizardModal.d.mts +3 -3
  276. package/dist/{accordionTitleTypography-CNB1w3kn.d.mts → accordionTitleTypography--GAczLo7.d.mts} +2 -2
  277. package/dist/accordionTitleTypography.d.mts +1 -1
  278. package/dist/chainTypes-dY6jc22J.d.mts +17 -0
  279. package/dist/{codec-BXVBsB8Y.d.mts → codec-D2uE0_oJ.d.mts} +2 -2
  280. package/dist/codec.d.mts +1 -1
  281. package/dist/{color-3UO63ocQ.d.mts → color-DuKiTH5t.d.mts} +2 -2
  282. package/dist/components/Accordion/index.d.mts +1 -1
  283. package/dist/components/Accordion/index.mjs +2 -2
  284. package/dist/components/Attribute/index.mjs +4 -4
  285. package/dist/components/Badge/index.mjs +1 -1
  286. package/dist/components/Banner/index.mjs +1 -1
  287. package/dist/components/BottomPanel/index.mjs +3 -3
  288. package/dist/components/Breadcrumbs/index.d.mts +1 -1
  289. package/dist/components/Breadcrumbs/index.mjs +1 -1
  290. package/dist/components/Button/index.d.mts +2 -2
  291. package/dist/components/Button/index.mjs +1 -1
  292. package/dist/components/ButtonGroup/index.mjs +2 -2
  293. package/dist/components/Card/index.d.mts +2 -2
  294. package/dist/components/Card/index.mjs +1 -1
  295. package/dist/components/CardV2/index.d.mts +1 -1
  296. package/dist/components/CardV2/index.mjs +1 -1
  297. package/dist/components/Checkbox/index.d.mts +1 -1
  298. package/dist/components/Checkbox/index.mjs +1 -1
  299. package/dist/components/CodeHighlight/index.mjs +2 -2
  300. package/dist/components/Combobox/index.d.mts +2 -2
  301. package/dist/components/Combobox/index.mjs +1 -1
  302. package/dist/components/ConfigFormGroup/index.mjs +2 -2
  303. package/dist/components/DataTable/TableControls/index.d.mts +19 -19
  304. package/dist/components/DataTable/TableControls/index.mjs +1 -1
  305. package/dist/components/DataTable/index.d.mts +2 -2
  306. package/dist/components/DataTable/index.mjs +83 -60
  307. package/dist/components/DataTable/index.mjs.map +1 -1
  308. package/dist/components/DataTable/types.d.mts +9 -2
  309. package/dist/components/DatePicker/index.d.mts +5 -5
  310. package/dist/components/DatePicker/index.mjs +1 -1
  311. package/dist/components/DropdownButton/index.mjs +1 -1
  312. package/dist/components/DropdownMenu/index.d.mts +1 -1
  313. package/dist/components/DropdownMenu/index.mjs +1 -1
  314. package/dist/components/FloatingPanel/index.mjs +3 -3
  315. package/dist/components/FormControl/index.d.mts +2 -2
  316. package/dist/components/FormControl/index.mjs +2 -2
  317. package/dist/components/FormField/index.d.mts +6 -6
  318. package/dist/components/FormField/index.mjs +1 -1
  319. package/dist/components/Grid/index.mjs +1 -1
  320. package/dist/components/HoverCopyableField/index.mjs +1 -1
  321. package/dist/components/ImageTile/index.mjs +7 -7
  322. package/dist/components/Input/index.d.mts +1 -1
  323. package/dist/components/Input/index.mjs +1 -1
  324. package/dist/components/Link/index.mjs +1 -1
  325. package/dist/components/ListBox/index.d.mts +3 -3
  326. package/dist/components/ListBox/index.mjs +1 -1
  327. package/dist/components/LoadingShimmer/index.mjs +1 -1
  328. package/dist/components/MaskedInput/index.mjs +1 -1
  329. package/dist/components/Menu/index.d.mts +1 -1
  330. package/dist/components/Menu/index.mjs +1 -1
  331. package/dist/components/Modal/index.d.mts +1 -1
  332. package/dist/components/Modal/index.mjs +1 -1
  333. package/dist/components/PageHeader/index.mjs +1 -1
  334. package/dist/components/Pagination/index.d.mts +3 -3
  335. package/dist/components/Pagination/index.mjs +1 -1
  336. package/dist/components/Pii/index.mjs +1 -1
  337. package/dist/components/Popover/index.mjs +1 -1
  338. package/dist/components/ProgressBar/index.mjs +1 -1
  339. package/dist/components/ProgressIndicator/index.d.mts +1 -1
  340. package/dist/components/ProgressIndicator/index.mjs +1 -1
  341. package/dist/components/Radio/index.mjs +1 -1
  342. package/dist/components/RadioGroup/index.d.mts +1 -1
  343. package/dist/components/RadioGroup/index.mjs +1 -1
  344. package/dist/components/RightPanel/index.mjs +4 -4
  345. package/dist/components/SegmentedControl/index.d.mts +1 -1
  346. package/dist/components/SegmentedControl/index.mjs +1 -1
  347. package/dist/components/Select/index.d.mts +1 -1
  348. package/dist/components/Select/index.mjs +1 -1
  349. package/dist/components/Slider/index.mjs +1 -1
  350. package/dist/components/SmartTextInput/index.d.mts +5 -0
  351. package/dist/components/SmartTextInput/index.mjs +2035 -0
  352. package/dist/components/SmartTextInput/index.mjs.map +1 -0
  353. package/dist/components/SmartTextInput/parser/method-chain/parser.mjs +1 -1
  354. package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
  355. package/dist/components/SmartTextInput/parser/smart-text/parser.mjs +1 -1
  356. package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +3 -72
  357. package/dist/components/Spacer/index.mjs +1 -1
  358. package/dist/components/Spinner/index.mjs +1 -1
  359. package/dist/components/Stack/index.d.mts +1 -1
  360. package/dist/components/Stack/index.mjs +1 -1
  361. package/dist/components/StatusIndicator/index.mjs +1 -1
  362. package/dist/components/Sticker/index.d.mts +1 -1
  363. package/dist/components/Sticker/index.mjs +1 -1
  364. package/dist/components/TabBar/index.mjs +1 -1
  365. package/dist/components/Table/index.d.mts +8 -8
  366. package/dist/components/Table/index.mjs +1 -1
  367. package/dist/components/TableBox/index.d.mts +2 -2
  368. package/dist/components/TableBox/index.mjs +1 -1
  369. package/dist/components/TechnicalSticker/index.mjs +1 -1
  370. package/dist/components/Text/index.d.mts +1 -1
  371. package/dist/components/Text/index.mjs +1 -1
  372. package/dist/components/TextArea/index.d.mts +1 -1
  373. package/dist/components/TextArea/index.mjs +1 -1
  374. package/dist/components/Tile/index.mjs +4 -4
  375. package/dist/components/Toast/index.mjs +1 -1
  376. package/dist/components/Toggle/index.d.mts +1 -1
  377. package/dist/components/Toggle/index.mjs +1 -1
  378. package/dist/components/Tooltip/index.d.mts +3 -3
  379. package/dist/components/Tooltip/index.mjs +1 -1
  380. package/dist/components/VersionHistory/index.d.mts +1 -1
  381. package/dist/components/VersionHistory/index.mjs +8 -8
  382. package/dist/compound-expression.d.mts +1 -1
  383. package/dist/{constants-BOxzLX-O.d.mts → constants-BiOvZGO5.d.mts} +1 -1
  384. package/dist/constants.d.mts +1 -1
  385. package/dist/{createPath-OeTC9kvS.d.mts → createPath-B8EZDtSz.d.mts} +2 -2
  386. package/dist/createPath.d.mts +1 -1
  387. package/dist/{date-filter-BnzR6NxT.mjs → date-filter-CWgCXz85.mjs} +1 -1
  388. package/dist/{date-filter-BnzR6NxT.mjs.map → date-filter-CWgCXz85.mjs.map} +1 -1
  389. package/dist/{date-range-rule-value-BRp5Bi7R.d.mts → date-range-rule-value-DObVM8xO.d.mts} +2 -2
  390. package/dist/date-range-rule-value.d.mts +1 -1
  391. package/dist/{date-rule-intent-CDBtV0ET.d.mts → date-rule-intent-DhMMe_wq.d.mts} +3 -3
  392. package/dist/date-rule-intent.d.mts +1 -1
  393. package/dist/display.d.mts +12 -4
  394. package/dist/fieldPickerOptions.d.mts +5 -3
  395. package/dist/{filter-size-context-CqvQ190x.d.mts → filter-size-context-DaBdvJHf.d.mts} +2 -2
  396. package/dist/filter-size-context.d.mts +1 -1
  397. package/dist/format-date-value.d.mts +6 -1
  398. package/dist/formatDateTime-mPH4DsDC.d.mts +30 -0
  399. package/dist/formatDateTime.d.mts +2 -0
  400. package/dist/helpers.d.mts +24 -10
  401. package/dist/i18n-UiE7OC4k.mjs +203 -0
  402. package/dist/i18n-UiE7OC4k.mjs.map +1 -0
  403. package/dist/{index-BXSe73Xn.d.mts → index-Blo6W_k0.d.mts} +2 -2
  404. package/dist/{index-wKK9f9La.d.mts → index-CTcM_LlP.d.mts} +4 -4
  405. package/dist/{index-CyAok7As.d.mts → index-CeUb5INA.d.mts} +2 -2
  406. package/dist/index-bHnO4ZKt.d.mts +1 -0
  407. package/dist/index-kxcPLmUx2.d.mts +1 -0
  408. package/dist/index.d.mts +1 -1
  409. package/dist/index2.d.mts +1 -1
  410. package/dist/index3.d.mts +3 -3
  411. package/dist/index4.d.mts +1 -1
  412. package/dist/index5.d.mts +14 -14
  413. package/dist/{input-C6cyiqm2.d.mts → input-D9rsMlzl.d.mts} +3 -3
  414. package/dist/inputFields-CXelxYhd.d.mts +71 -0
  415. package/dist/inputFields.d.mts +2 -71
  416. package/dist/{intersperse-Df9zw7Bk.mjs → intersperse-ObkRVOag.mjs} +1 -1
  417. package/dist/{intersperse-Df9zw7Bk.mjs.map → intersperse-ObkRVOag.mjs.map} +1 -1
  418. package/dist/{jsonSchema-CfGi1bzI.d.mts → jsonSchema-BMPLdT4p.d.mts} +1 -1
  419. package/dist/lib/MiddleTruncatedText.mjs +1 -1
  420. package/dist/lib/PDSProvider.d.mts +14 -2
  421. package/dist/lib/PDSProvider.mjs +15 -8
  422. package/dist/lib/PDSProvider.mjs.map +1 -1
  423. package/dist/lib/TruncatedText.d.mts +1 -1
  424. package/dist/lib/TruncatedText.mjs +1 -1
  425. package/dist/lib/TruncatedText.mjs.map +1 -1
  426. package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
  427. package/dist/lib/TruncatedTextWithTooltip.mjs +2 -2
  428. package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -1
  429. package/dist/lib/chainTypes.d.mts +2 -17
  430. package/dist/lib/color.d.mts +1 -1
  431. package/dist/lib/customFunctionSchema.d.mts +1 -1
  432. package/dist/lib/date-filter/index.d.mts +2 -2
  433. package/dist/lib/date-filter/index.mjs +1 -1
  434. package/dist/lib/i18n/index.d.mts +4 -0
  435. package/dist/lib/i18n/index.mjs +2 -0
  436. package/dist/lib/jsonSchema.d.mts +1 -1
  437. package/dist/lib/jsonSchemaType.d.mts +1 -1
  438. package/dist/lib/message.d.mts +1 -1
  439. package/dist/lib/methodChain.d.mts +2 -2
  440. package/dist/lib/methodChain.mjs +1 -2
  441. package/dist/lib/methodChainNormalize.d.mts +2 -2
  442. package/dist/lib/methodChainTypes.d.mts +1 -1
  443. package/dist/lib/objectSchemaTypes.d.mts +1 -1
  444. package/dist/lib/platformObject.d.mts +1 -1
  445. package/dist/lib/pseudoClass.d.mts +1 -1
  446. package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
  447. package/dist/lib/router/adapters/reactRouter.mjs +1 -1
  448. package/dist/lib/router/adapters/tanstack.d.mts +1 -1
  449. package/dist/lib/router/adapters/tanstack.mjs +1 -1
  450. package/dist/lib/router/index.d.mts +5 -5
  451. package/dist/lib/router/index.mjs +2 -2
  452. package/dist/lib/schemaOptions.d.mts +2 -173
  453. package/dist/lib/schemaOptions.mjs +1 -1
  454. package/dist/lib/semanticColor.d.mts +1 -1
  455. package/dist/lib/useChain.d.mts +2 -0
  456. package/dist/lib/useChain.mjs +2 -0
  457. package/dist/listbox-options-BFaMbK-g.d.mts +38 -0
  458. package/dist/listbox-options.d.mts +2 -0
  459. package/dist/{message-CblP0EjG.d.mts → message-BOzjC5yA.d.mts} +1 -1
  460. package/dist/{methodChain-Pk1C3i_E.d.mts → methodChain-CGTIWafl.d.mts} +4 -4
  461. package/dist/{methodChain-DAQxLgxt.mjs → methodChain-xZ1_vhbz.mjs} +2 -2
  462. package/dist/{methodChain-DAQxLgxt.mjs.map → methodChain-xZ1_vhbz.mjs.map} +1 -1
  463. package/dist/{methodChainTypes-CqWzfx0M.d.mts → methodChainTypes-BtSMV5OZ.d.mts} +2 -2
  464. package/dist/mixins/focus.d.mts +1 -1
  465. package/dist/mixins/hoverable.d.mts +2 -2
  466. package/dist/mixins/input.d.mts +1 -1
  467. package/dist/mixins/menuItem.d.mts +2 -2
  468. package/dist/mixins/scrollbar.d.mts +1 -1
  469. package/dist/mixins/text.d.mts +1 -1
  470. package/dist/{operators-CoXL5Hv6.d.mts → operators-DfvW8Kmr.d.mts} +16 -5
  471. package/dist/operators.d.mts +2 -2
  472. package/dist/{palette-CxXUs1Fu.d.mts → palette-CBOBcVu3.d.mts} +3 -3
  473. package/dist/palette.d.mts +1 -1
  474. package/dist/{parser-Kxos6siN.mjs → parser-BeTiVjRs.mjs} +3 -2
  475. package/dist/{parser-Kxos6siN.mjs.map → parser-BeTiVjRs.mjs.map} +1 -1
  476. package/dist/patterns/LayoutLoadingShimmer/index.mjs +5 -5
  477. package/dist/patterns/PageLayout/index.mjs +2 -2
  478. package/dist/{components → patterns}/WizardModal/index.mjs +5 -5
  479. package/dist/patterns/WizardModal/index.mjs.map +1 -0
  480. package/dist/reactRouterFallback.d.mts +1 -1
  481. package/dist/relative-date-label.d.mts +1 -1
  482. package/dist/{router-7FYDW80v.mjs → router-COrZcVkf.mjs} +2 -2
  483. package/dist/{router-7FYDW80v.mjs.map → router-COrZcVkf.mjs.map} +1 -1
  484. package/dist/safe-parse.d.mts +23 -0
  485. package/dist/schemaOptions-DTeNBwir.d.mts +173 -0
  486. package/dist/{semantic-CFMBsuiJ.d.mts → semantic-CfiNA4Yy.d.mts} +1 -1
  487. package/dist/{semanticColor-DuJCmDrH.d.mts → semanticColor-BCPOKF9L.d.mts} +3 -3
  488. package/dist/strings-BaQZhOjo.d.mts +143 -0
  489. package/dist/strings.d.mts +2 -0
  490. package/dist/{text-D8HPjiEX.d.mts → text-ucZmPNyH.d.mts} +1 -1
  491. package/dist/{theme-BcaR-Au5.d.mts → theme-CAPmp1it.d.mts} +3 -3
  492. package/dist/theme.d.mts +1 -1
  493. package/dist/tone.d.mts +3 -3
  494. package/dist/tree.d.mts +9 -0
  495. package/dist/{types-DgyGecdM.d.mts → types-B1KzKgBp.d.mts} +1 -1
  496. package/dist/types-BB5WwerD.d.mts +72 -0
  497. package/dist/{types-CoVZwrMW.d.mts → types-BfrEduGv.d.mts} +2 -2
  498. package/dist/{types-BCiq4hGv.d.mts → types-CBfgdnuB.d.mts} +1 -1
  499. package/dist/{types-CkpixGWr.d.mts → types-ClbV4wNp.d.mts} +1 -1
  500. package/dist/{types-Cl-w8tYc.d.mts → types-CoTzVfFl.d.mts} +1 -1
  501. package/dist/types-CptsgFbu.d.mts +83 -0
  502. package/dist/{types-C4WUSW3e.d.mts → types-Rj-C3LGL.d.mts} +2 -2
  503. package/dist/{types-BGMmkUpy.d.mts → types-l-arEBLb.d.mts} +1 -1
  504. package/dist/types.d.mts +1 -1
  505. package/dist/types2.d.mts +1 -1
  506. package/dist/types3.d.mts +1 -1
  507. package/dist/types4.d.mts +1 -1
  508. package/dist/types5.d.mts +1 -1
  509. package/dist/types6.d.mts +1 -1
  510. package/dist/types7.d.mts +2 -0
  511. package/dist/{url-state-8j_ef8Uf.d.mts → url-state-CrnZ3Ocy.d.mts} +2 -2
  512. package/dist/url-state.d.mts +1 -1
  513. package/dist/useChain-Cu4KDfFk.mjs +4589 -0
  514. package/dist/useChain-Cu4KDfFk.mjs.map +1 -0
  515. package/dist/useChain-DQq1UsGZ.d.mts +77 -0
  516. package/dist/useChainAtCursor.d.mts +87 -0
  517. package/dist/useCodeChainFunctionPanel.d.mts +26 -0
  518. package/dist/useComboboxFooterAction.d.mts +1 -1
  519. package/dist/{useFilterStateV2-CW6eght1.d.mts → useFilterStateV2-CGGABOcq.d.mts} +3 -3
  520. package/dist/useFilterStateV2.d.mts +1 -1
  521. package/dist/{useFormField-CLRZkUZt.d.mts → useFormField-4w9TNFgD.d.mts} +2 -2
  522. package/dist/{useFormField-XezSxho_.mjs → useFormField-CbNYbDdp.mjs} +2 -2
  523. package/dist/{useFormField-XezSxho_.mjs.map → useFormField-CbNYbDdp.mjs.map} +1 -1
  524. package/dist/useFormField.d.mts +1 -1
  525. package/dist/{useFormGroup-C7Cax8zO.mjs → useFormGroup-CsKC93Pt.mjs} +1 -1
  526. package/dist/{useFormGroup-C7Cax8zO.mjs.map → useFormGroup-CsKC93Pt.mjs.map} +1 -1
  527. package/dist/{useLocationPathname-DH5Tdq5X.d.mts → useLocationPathname-CZwH8h5n.d.mts} +1 -1
  528. package/dist/useLocationPathname.d.mts +1 -1
  529. package/dist/{useTableBoxDragAndDrop-Da4TiYBT.d.mts → useTableBoxDragAndDrop-Bw93rNFH.d.mts} +1 -1
  530. package/dist/useTableBoxDragAndDrop.d.mts +1 -1
  531. package/dist/{useToggle-DUHQjohK.mjs → useToggle-DRzCDqrc.mjs} +1 -1
  532. package/dist/{useToggle-DUHQjohK.mjs.map → useToggle-DRzCDqrc.mjs.map} +1 -1
  533. package/dist/useTruncation.d.mts +1 -1
  534. package/dist/{utilities-DcsbI71T.d.mts → utilities-B8PzMOza.d.mts} +1 -1
  535. package/dist/utilities.d.mts +1 -1
  536. package/dist/utils/storybook.mjs +1 -1
  537. package/dist/utils/testing.d.mts +1 -1
  538. package/dist/utils.d.mts +1 -1
  539. package/dist/utils4.d.mts +111 -0
  540. package/dist/{validation-BgwNghi2.d.mts → validation-DP8f6tgh.d.mts} +3 -3
  541. package/dist/validation.d.mts +1 -1
  542. package/dist/validation2.d.mts +64 -0
  543. package/dist/{value-control-resolver-B0HDRxRN.d.mts → value-control-resolver-CwjOaVAn.d.mts} +2 -2
  544. package/dist/value-control-resolver.d.mts +1 -1
  545. package/dist/variables/effect.d.mts +1 -1
  546. package/dist/variables/semantic.d.mts +1 -1
  547. package/llms.txt +2 -2
  548. package/package.json +12 -3
  549. package/skills/ui-authoring/COMPONENTS.md +1 -1
  550. package/skills/ui-authoring/PATTERNS.md +1 -0
  551. package/skills/ui-authoring/SKILL.md +23 -0
  552. package/dist/DatePicker-C7z1yodK.mjs.map +0 -1
  553. package/dist/Pagination-Co9CfyFQ.mjs.map +0 -1
  554. package/dist/TabBar-Bj84q1Mr.mjs.map +0 -1
  555. package/dist/TableControls-RS_ozBsI.mjs.map +0 -1
  556. package/dist/components/WizardModal/index.mjs.map +0 -1
  557. /package/dist/{index-B24gUwOx.d.mts → index-1-AkepUA.d.mts} +0 -0
  558. /package/dist/{index-BFnNtGdX.d.mts → index-B-Y-ZG2x.d.mts} +0 -0
  559. /package/dist/{index-BNRXMhlr.d.mts → index-BO_854F2.d.mts} +0 -0
  560. /package/dist/{index-BPiqSRRl.d.mts → index-BSVhZrWN.d.mts} +0 -0
  561. /package/dist/{index-BYd3Btr1.d.mts → index-BYARwRq7.d.mts} +0 -0
  562. /package/dist/{index-C6HcjJiY.d.mts → index-BbPybiOV.d.mts} +0 -0
  563. /package/dist/{index-CEqOS-7M.d.mts → index-BcsXXrHq.d.mts} +0 -0
  564. /package/dist/{index-CjDodOH2.d.mts → index-C9achTF6.d.mts} +0 -0
  565. /package/dist/{index-CoUVmp_Q.d.mts → index-CCt0lwyI.d.mts} +0 -0
  566. /package/dist/{index-DB7t8whN.d.mts → index-CFuHCx9T.d.mts} +0 -0
  567. /package/dist/{index-DBGd4WeR.d.mts → index-CliqZ9rj.d.mts} +0 -0
  568. /package/dist/{index-DWfPppPU.d.mts → index-CryTAIZM.d.mts} +0 -0
  569. /package/dist/{index-DeVKzGce.d.mts → index-CzItj62a.d.mts} +0 -0
  570. /package/dist/{index-DedbSZMv.d.mts → index-CzUpNo0e.d.mts} +0 -0
  571. /package/dist/{index-Deol7ZWO.d.mts → index-D-giXKyu.d.mts} +0 -0
  572. /package/dist/{index-Jh0C5PIG.d.mts → index-DMRtRo7y.d.mts} +0 -0
  573. /package/dist/{index-VWno75SQ.d.mts → index-DUF59i3Q2.d.mts} +0 -0
  574. /package/dist/{index-fxXoW-qc.d.mts → index-DgJfEygr.d.mts} +0 -0
  575. /package/dist/{index-gVcIuWLd.d.mts → index-Es5nKSSL.d.mts} +0 -0
  576. /package/dist/{index-zeAhjge4.d.mts → index-T2S0_qsg.d.mts} +0 -0
  577. /package/dist/{components → patterns}/WizardModal/index.d.mts +0 -0
@@ -1,44 +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-Bkn0TUDe.mjs";
18
- import { n as Button, t as IconButton } from "./IconButton-CCLMYWVN.mjs";
19
- import { i as TabBar, n as StyledTab, r as Tab } from "./TabBar-Bj84q1Mr.mjs";
20
- import { r as InputGroup } from "./Input-Cl4o41k4.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-CwlI7BMN.mjs";
23
- import { n as DropdownMenu_default } from "./DropdownMenu-rm9Nnxn7.mjs";
24
- import { t as Combobox } from "./Combobox-C_kCY3P3.mjs";
25
- import { s as Popover_default } from "./Popover-ZAj03lws.mjs";
26
- import { t as Toggle } from "./Toggle-D4ZaUcVt.mjs";
27
- import { i as selectedPresetFor, n as parseDateFilterValue, r as resolveDateFilterValue, t as formatDateFilterValue } from "./date-filter-BnzR6NxT.mjs";
28
- import { t as ListBox } from "./ListBox-sqeLBiKS.mjs";
29
- import { m as FormField, o as ComboboxField } from "./FormField-Crp3F-hv.mjs";
30
- import { r as DatePicker, t as DateRangePicker } from "./DatePicker-C7z1yodK.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";
31
34
  import { BorderRadius, Color, Spacing, Typography } from "@persona/design-tokens";
32
35
  import { Fragment, createContext, createElement, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
33
36
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
34
- 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";
35
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";
36
40
  import { debounce, isEqual, noop, partition, startCase, union, uniqueId } from "lodash-es";
37
41
  import { useId } from "react-aria";
38
42
  import Fuse from "fuse.js";
39
43
  import { DragIcon as DragIcon$1 } from "@persona/icons/24px";
40
- import { DateTime, Settings } from "luxon";
41
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";
42
47
  import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
43
48
  import { parseAbsolute, parseDate, toCalendarDate, toZoned } from "@internationalized/date";
44
49
  import { v4 } from "uuid";
@@ -95,21 +100,33 @@ const StyledInput = styled(Input_default)`
95
100
  `;
96
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 }) => {
97
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]);
98
108
  const handleChange = useCallback(({ target }) => {
99
109
  setInnerValue(target.value);
100
- handleInput(target.value);
101
- }, [handleInput, setInnerValue]);
110
+ emit(target.value);
111
+ }, [emit, setInnerValue]);
102
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;
103
120
  setInnerValue(value);
104
121
  }, [value]);
105
122
  const inputRef = useRef(null);
106
123
  const handleClear = useCallback(() => {
107
124
  setInnerValue("");
108
- handleInput("");
125
+ emit("");
109
126
  handleOnFocus();
110
127
  inputRef.current?.focus();
111
128
  }, [
112
- handleInput,
129
+ emit,
113
130
  handleOnFocus,
114
131
  inputRef,
115
132
  setInnerValue
@@ -216,6 +233,7 @@ const CompactSearchInput = styled(SearchInput)`
216
233
  * @see ControlBar.spec.tsx
217
234
  */
218
235
  const CompactBar = ({ title, searchProps, showFilters, setShowFilters, filtersId, isLoading, isFilterPanelLoading, propertiesButton, tableActions, "data-tour-target": dataTourTarget, filterPanel }) => {
236
+ const strings = usePDSStrings();
219
237
  const autoExpandSearch = !title;
220
238
  const [showSearch, setShowSearch] = useState(autoExpandSearch);
221
239
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsxs(DataTableCompactBar, {
@@ -252,7 +270,7 @@ const CompactBar = ({ title, searchProps, showFilters, setShowFilters, filtersId
252
270
  variant: "text",
253
271
  width: "icon",
254
272
  size: "sm",
255
- "aria-label": "Show search bar",
273
+ "aria-label": strings.showSearchBar,
256
274
  onClick: () => setShowSearch(true),
257
275
  children: /* @__PURE__ */ jsx(SearchIcon, {})
258
276
  })),
@@ -260,7 +278,7 @@ const CompactBar = ({ title, searchProps, showFilters, setShowFilters, filtersId
260
278
  id: "table-controls__view-tab-filters",
261
279
  variant: "text",
262
280
  onClick: () => setShowFilters?.(!showFilters),
263
- "aria-label": showFilters ? "Hide filters" : "Show filters",
281
+ "aria-label": showFilters ? strings.hideFilters : strings.showFilters,
264
282
  "aria-expanded": showFilters,
265
283
  "aria-controls": filtersId,
266
284
  disabled: isLoading || isFilterPanelLoading,
@@ -298,7 +316,9 @@ const rectContainsRect = (parent, child) => {
298
316
  //#region components/DataTable/TableControls/ControlBar.tsx
299
317
  const TAB_ID_PREFIX = "table-controls__view-tab_";
300
318
  const OVERFLOW_TAB_ID_PREFIX = "table-controls__view-tab-overflow_";
319
+ const ADD_VIEW_BUTTON_ID = "table-controls__view-tab-new";
301
320
  const OVERFLOW_WIDTH_SHRINK_THRESHOLD = 16;
321
+ const OVERFLOW_GAP = 8;
302
322
  function enterProxiesClick(e) {
303
323
  if (e.key === "Enter") e.target.dispatchEvent(new Event("click", { bubbles: true }));
304
324
  }
@@ -312,6 +332,39 @@ const ViewNameInput = styled(Input_default)`
312
332
  const AddViewButton = styled(IconButton)`
313
333
  color: ${({ theme }) => semanticColor(theme, "FgSecondary", theme.color.text.secondary)};
314
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
+ `;
315
368
  const LockedTab = styled(Tab)`
316
369
  svg {
317
370
  height: 12px;
@@ -348,7 +401,9 @@ const TabOverflowContainer = styled.div`
348
401
  position: absolute;
349
402
  height: 32px;
350
403
  `;
351
- const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditViews, handleNameChange, onDuplicateView, onDeleteView, 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);
352
407
  const inputRef = useRef(null);
353
408
  const lastSubmittedNameRef = useRef(null);
354
409
  const submitNameChange = (newName) => {
@@ -362,12 +417,20 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
362
417
  "aria-selected": selected,
363
418
  role: "tab",
364
419
  onClick: !selected ? () => onSelectView?.(view.id) : void 0,
365
- 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,
366
429
  className,
367
430
  ...rest,
368
431
  children: view.name
369
432
  });
370
- if (canEditViews && selected) return /* @__PURE__ */ jsx(Popover_default, {
433
+ if (showMenu) return /* @__PURE__ */ jsx(Popover_default, {
371
434
  trigger: tab,
372
435
  open: showTabContextMenu,
373
436
  onOpenChange: (open) => {
@@ -381,7 +444,7 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
381
444
  },
382
445
  children: /* @__PURE__ */ jsxs(Stack, {
383
446
  spacing: Spacing[3],
384
- children: [/* @__PURE__ */ jsx(ViewNameInput, {
447
+ children: [canEditViews && /* @__PURE__ */ jsx(ViewNameInput, {
385
448
  defaultValue: view.name,
386
449
  onBlur: (e) => submitNameChange(e.currentTarget.value),
387
450
  onKeyDown: (e) => {
@@ -392,7 +455,7 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
392
455
  }), /* @__PURE__ */ jsxs(MenuList, {
393
456
  padding: Spacing[0],
394
457
  children: [
395
- onDuplicateView && /* @__PURE__ */ jsx(MenuItem, {
458
+ canEditViews && onDuplicateView && /* @__PURE__ */ jsx(MenuItem, {
396
459
  id: "table-controls__view__menu-duplicate",
397
460
  prefixIcon: /* @__PURE__ */ jsx(CopyIcon, {}),
398
461
  onClick: async () => {
@@ -406,14 +469,14 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
406
469
  }
407
470
  },
408
471
  onKeyDown: enterProxiesClick,
409
- children: "Duplicate"
472
+ children: strings.duplicateView
410
473
  }),
411
474
  canEditViews && onResetCurrentView && /* @__PURE__ */ jsx(MenuItem, {
412
475
  id: "table-controls__view__menu-reset",
413
476
  prefixIcon: /* @__PURE__ */ jsx(RotateCcwIcon, {}),
414
477
  onClick: onResetCurrentView,
415
478
  onKeyDown: enterProxiesClick,
416
- children: "Reset"
479
+ children: strings.resetView
417
480
  }),
418
481
  canEditViews && onSaveView && /* @__PURE__ */ jsx(MenuItem, {
419
482
  id: "table-controls__view__menu-save",
@@ -424,9 +487,9 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
424
487
  setShowTabContextMenu(false);
425
488
  },
426
489
  onKeyDown: enterProxiesClick,
427
- children: "Save"
490
+ children: strings.saveViewMenuItem
428
491
  }),
429
- onSetDefaultView && /* @__PURE__ */ jsx(MenuItem, {
492
+ canEditViews && onSetDefaultView && /* @__PURE__ */ jsx(MenuItem, {
430
493
  id: "table-controls__view__menu-set-default",
431
494
  prefixIcon: /* @__PURE__ */ jsx(StarIcon, {}),
432
495
  disabled: view.isDefault,
@@ -435,17 +498,28 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
435
498
  setShowTabContextMenu(false);
436
499
  },
437
500
  onKeyDown: enterProxiesClick,
438
- children: view.isDefault ? "Already the default" : "Set as default"
501
+ children: view.isDefault ? strings.alreadyDefaultView : strings.setAsDefaultView
502
+ }),
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
439
513
  }),
440
- onDeleteView && /* @__PURE__ */ jsx(MenuItem, {
514
+ canEditViews && onRequestDeleteView && /* @__PURE__ */ jsx(MenuItem, {
441
515
  id: "table-controls__view__menu-delete",
442
516
  prefixIcon: /* @__PURE__ */ jsx(TrashIcon, {}),
443
- onClick: async () => {
444
- await onDeleteView(view.id);
517
+ onClick: () => {
445
518
  setShowTabContextMenu(false);
519
+ onRequestDeleteView(view);
446
520
  },
447
521
  onKeyDown: enterProxiesClick,
448
- children: "Delete"
522
+ children: strings.delete
449
523
  })
450
524
  ]
451
525
  })]
@@ -453,6 +527,36 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
453
527
  });
454
528
  return tab;
455
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
+ };
456
560
  /**
457
561
  * A tab that is locked and does not support editing or actions.
458
562
  */
@@ -469,37 +573,46 @@ const LockedViewTab = ({ id, selected, onClick, children, ...props }) => {
469
573
  const OverflowSavedViewTab = styled(SavedViewTab)`
470
574
  margin-left: ${Spacing[2]};
471
575
  `;
472
- 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();
473
578
  const [filter, setFilter] = useState("");
474
579
  const [openPopover, setOpenPopover] = useState(false);
475
- const currentView = useMemo(() => {
476
- return hiddenViews.find((view) => view.id === currentViewId);
477
- }, [currentViewId, hiddenViews]);
478
- const filteredViews = useMemo(() => hiddenViews.filter((view) => view.name.toLowerCase().includes(filter.toLowerCase()) && view.id !== currentView?.id), [
479
- 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,
480
584
  filter,
481
585
  currentView
482
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);
483
597
  return /* @__PURE__ */ jsxs(TabOverflowContainer, {
484
598
  ref,
485
- style: useMemo(() => {
486
- if (!lastVisibleViewElement) return;
487
- return { left: lastVisibleViewElement.offsetLeft + lastVisibleViewElement.offsetWidth + 8 };
488
- }, [lastVisibleViewElement]),
599
+ style: left != null ? { left } : void 0,
489
600
  children: [
490
601
  currentView && /* @__PURE__ */ jsx(OverflowSavedViewTab, {
491
602
  view: currentView,
492
603
  canEditViews,
493
604
  selected: true,
494
605
  tabIdPrefix: OVERFLOW_TAB_ID_PREFIX,
606
+ onViewHiddenChange,
607
+ isHidden: hiddenViews.some((view) => view.id === currentView.id),
495
608
  ...rest
496
609
  }),
497
- hiddenViews.length === 1 && currentView && hiddenViews[0].id !== currentView.id ? null : /* @__PURE__ */ jsxs(Popover_default, {
498
- trigger: /* @__PURE__ */ jsxs(Button, {
610
+ moreCount > 0 && /* @__PURE__ */ jsxs(Popover_default, {
611
+ trigger: /* @__PURE__ */ jsx(Button, {
499
612
  variant: "basic",
500
613
  size: "sm",
501
614
  width: "auto",
502
- children: [currentView ? hiddenViews.length - 1 : hiddenViews.length, " more…"]
615
+ children: strings.moreViews(moreCount)
503
616
  }),
504
617
  contentProps: {
505
618
  align: "start",
@@ -513,27 +626,17 @@ const TabOverflow = forwardRef(function TabOverflow({ hiddenViews, currentView:
513
626
  children: [/* @__PURE__ */ jsx(Input_default, {
514
627
  value: filter,
515
628
  onChange: (e) => setFilter(e.target.value),
516
- placeholder: "Search for a view..."
629
+ placeholder: strings.searchViews
517
630
  }), /* @__PURE__ */ jsx(OverflowMenuList, {
518
631
  padding: Spacing[0],
519
- children: filteredViews.map((view) => {
520
- return /* @__PURE__ */ jsx(MenuItem, {
521
- id: `${OVERFLOW_TAB_ID_PREFIX}${view.id}`,
522
- onClick: () => {
523
- onSelectView?.(view.id);
524
- setOpenPopover(false);
525
- },
526
- onKeyDown: enterProxiesClick,
527
- children: view.name
528
- }, view.id);
529
- })
632
+ children: filteredViews.map(renderMenuItem)
530
633
  })]
531
634
  }),
532
635
  canEditViews && handleAddView && /* @__PURE__ */ jsx(AddViewButton, {
533
636
  id: `${OVERFLOW_TAB_ID_PREFIX}overflow-new`,
534
637
  onClick: handleAddView,
535
638
  size: "md",
536
- "aria-label": "Add new view",
639
+ "aria-label": strings.addNewView,
537
640
  children: /* @__PURE__ */ jsx(CirclePlusIcon, {})
538
641
  })
539
642
  ]
@@ -549,40 +652,60 @@ const ProductTourStyles = createGlobalStyle`
549
652
  }
550
653
  }
551
654
  `;
552
- 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();
553
657
  const tabListRef = useRef(null);
554
658
  const tabOverflowRef = useRef(null);
555
- const [hiddenViews, setHiddenViews] = useState([]);
659
+ const [overflowViews, setOverflowViews] = useState([]);
556
660
  const [showTabContextMenu, setShowTabContextMenu] = useState(false);
661
+ const [pendingDeleteView, setPendingDeleteView] = useState(null);
662
+ const previousPendingDeleteViewRef = useRef(null);
663
+ const [isDeletingView, setIsDeletingView] = useState(false);
557
664
  const [isAddingView, setIsAddingView] = useState(false);
558
- const [lastVisibleViewElement, setLastVisibleViewElement] = useState(null);
665
+ const [overflowLeft, setOverflowLeft] = useState(null);
559
666
  const [tabOverflowWidth, setTabOverflowWidth] = useState(null);
667
+ const [isAddViewOverflowing, setIsAddViewOverflowing] = useState(false);
668
+ useEffect(() => {
669
+ const previousPendingDeleteView = previousPendingDeleteViewRef.current;
670
+ if (!pendingDeleteView && previousPendingDeleteView) (document.getElementById(`${OVERFLOW_TAB_ID_PREFIX}${previousPendingDeleteView.id}`) ?? document.getElementById(`${TAB_ID_PREFIX}${previousPendingDeleteView.id}`))?.focus();
671
+ previousPendingDeleteViewRef.current = pendingDeleteView;
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]);
560
678
  const onResize = useCallback(() => {
561
679
  if (!tabListRef.current) return;
562
680
  const containerRect = tabListRef.current.getBoundingClientRect();
563
681
  const tabListContainer = tabListRef.current;
564
- const tabElements = Array.from(tabListContainer.querySelectorAll("[data-tab-view]"));
565
- if (tabElements.length === 0 || rectContainsRect(containerRect, tabElements[tabElements.length - 1].getBoundingClientRect())) {
566
- setHiddenViews([]);
567
- return;
568
- }
569
- const firstHiddenIndex = tabElements.findIndex((el) => !rectContainsRect(containerRect, el.getBoundingClientRect()));
570
- if (firstHiddenIndex === -1) setLastVisibleViewElement(null);
571
- else {
572
- const lastVisibleViewElement = tabElements[firstHiddenIndex - 1];
573
- if (lastVisibleViewElement) setLastVisibleViewElement(lastVisibleViewElement);
574
- }
575
- 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));
576
690
  const tabOverflowWidth = tabOverflowRef.current?.getBoundingClientRect().width;
577
691
  if (tabOverflowWidth) setTabOverflowWidth((prev) => prev != null && prev > tabOverflowWidth && prev - tabOverflowWidth < OVERFLOW_WIDTH_SHRINK_THRESHOLD ? prev : tabOverflowWidth);
578
- }, [setHiddenViews, views]);
692
+ }, [shownViews]);
579
693
  useLayoutEffect(() => {
580
- if (!showViews || !tabListRef.current) return;
694
+ const tabList = tabListRef.current;
695
+ if (!showViews || !tabList) return;
581
696
  const resizeObserver = new ResizeObserver(() => {
582
697
  onResize();
583
698
  });
584
- 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 });
585
707
  return () => {
708
+ mutationObserver.disconnect();
586
709
  resizeObserver.disconnect();
587
710
  };
588
711
  }, [onResize, showViews]);
@@ -591,12 +714,78 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
591
714
  }, [
592
715
  onResize,
593
716
  showViews,
594
- views
717
+ shownViews
595
718
  ]);
596
- const currentViewHidden = useMemo(() => {
597
- if (currentView) return !!hiddenViews.find((view) => view.id === currentView);
598
- return false;
599
- }, [currentView, hiddenViews]);
719
+ const isCurrentViewInOverflow = useMemo(() => !!currentView && [...overflowViews, ...hiddenViews].some((view) => view.id === currentView), [
720
+ currentView,
721
+ overflowViews,
722
+ hiddenViews
723
+ ]);
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
+ };
600
789
  const handleAddView = async () => {
601
790
  try {
602
791
  setIsAddingView(true);
@@ -615,6 +804,17 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
615
804
  const handleNameChange = (view, newName) => {
616
805
  if (canEditViews && view.name !== newName) onViewNameChange?.(view.id, newName);
617
806
  };
807
+ const onRequestDeleteView = onDeleteView ? (view) => setPendingDeleteView(view) : void 0;
808
+ const confirmDeleteView = async () => {
809
+ if (!pendingDeleteView || !onDeleteView) return;
810
+ setIsDeletingView(true);
811
+ try {
812
+ await onDeleteView(pendingDeleteView.id);
813
+ setPendingDeleteView(null);
814
+ } catch {} finally {
815
+ setIsDeletingView(false);
816
+ }
817
+ };
618
818
  if (compact) return /* @__PURE__ */ jsx(CompactBar, {
619
819
  "data-tour-target": dataTourTarget,
620
820
  title,
@@ -657,97 +857,115 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
657
857
  children: displayLabel
658
858
  }, key);
659
859
  });
660
- return /* @__PURE__ */ jsxs(Fragment$1, { children: [
661
- /* @__PURE__ */ jsx(ProductTourStyles, {}),
662
- (title || showViews || canEditViews && onSaveView || tableActions || bulkActions) && /* @__PURE__ */ jsx(ViewsBar, {
663
- ref: tabListRef,
664
- title,
665
- maxTabChars: 25,
666
- $isAddingView: isAddingView,
667
- "data-tour-target": dataTourTarget,
668
- actions: /* @__PURE__ */ jsxs(HStack, {
669
- spacing: Spacing[3],
670
- align: "center",
671
- style: tabOverflowWidth ? { paddingLeft: `${tabOverflowWidth + 16}px` } : void 0,
672
- children: [
673
- canEditViews && onSaveView && /* @__PURE__ */ jsx(Button, {
674
- id: "table-controls__view-tab-save",
675
- onClick: onSaveView,
676
- "aria-label": "Save current view",
677
- disabled: !isViewDirty || isLoading,
678
- size: "sm",
679
- variant: "basic",
680
- width: "auto",
681
- "data-tour-target": "saved-views-save-button",
682
- children: "Save view"
683
- }),
684
- bulkActionButtons,
685
- tableActions
686
- ]
687
- }),
688
- children: showViews && /* @__PURE__ */ jsxs(Fragment$1, { children: [
689
- /* @__PURE__ */ jsx(LockedViewTab, {
690
- id: `${TAB_ID_PREFIX}default`,
691
- selected: !currentView,
692
- onClick: () => onSelectView?.(null),
693
- "data-tour-target": "saved-views-default-view",
694
- children: "Default view"
695
- }),
696
- presetViews?.map((view) => {
697
- const selected = view.id === currentView;
698
- return /* @__PURE__ */ jsx(LockedViewTab, {
699
- id: `${TAB_ID_PREFIX}preset-${view.id}`,
700
- selected,
701
- onClick: () => onSelectView?.(view.id),
702
- children: view.name
703
- }, view.id);
704
- }),
705
- views?.map((view) => {
706
- return /* @__PURE__ */ jsx(SavedViewTab, {
707
- view,
708
- canEditViews: canEditViews ?? false,
709
- handleNameChange,
710
- onDuplicateView,
711
- onDeleteView,
712
- onSelectView,
713
- onResetCurrentView,
714
- onSaveView,
715
- onSetDefaultView,
716
- isViewDirty: isViewDirty ?? false,
717
- selected: view.id === currentView,
718
- showTabContextMenu: showTabContextMenu && !currentViewHidden,
719
- setShowTabContextMenu,
720
- "data-tab-view": true
721
- }, view.id);
722
- }),
723
- canEditViews && onAddView && /* @__PURE__ */ jsx(AddViewButton, {
724
- id: "table-controls__view-tab-new",
725
- size: "md",
726
- onClick: handleAddView,
727
- "aria-label": "Add new view",
728
- "data-tour-target": "saved-views-add-button",
729
- 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
730
900
  }),
731
- hiddenViews.length > 0 && /* @__PURE__ */ jsx(TabOverflow, {
732
- ref: tabOverflowRef,
733
- hiddenViews,
734
- currentView,
735
- onSelectView,
736
- canEditViews: canEditViews ?? false,
737
- handleAddView: onAddView ? handleAddView : null,
738
- handleNameChange,
739
- onDuplicateView,
740
- onDeleteView,
741
- onResetCurrentView,
742
- onSaveView,
743
- onSetDefaultView,
744
- isViewDirty: isViewDirty ?? false,
745
- showTabContextMenu: showTabContextMenu && currentViewHidden,
746
- setShowTabContextMenu,
747
- lastVisibleViewElement
748
- })
749
- ] })
901
+ bulkActionButtons,
902
+ tableActions
903
+ ]
750
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),
751
969
  /* @__PURE__ */ jsxs(HStack, {
752
970
  align: "center",
753
971
  spacing: Spacing[2],
@@ -763,7 +981,7 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
763
981
  id: "table-controls__view-tab-filters",
764
982
  variant: "basic",
765
983
  onClick: () => setShowFilters?.(!showFilters),
766
- "aria-label": showFilters ? "Hide filters" : "Show filters",
984
+ "aria-label": showFilters ? strings.hideFilters : strings.showFilters,
767
985
  "aria-expanded": showFilters,
768
986
  "aria-controls": filtersId,
769
987
  disabled: isLoading || isFilterPanelLoading,
@@ -777,12 +995,36 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, onAddView,
777
995
  propertiesButton
778
996
  ]
779
997
  }),
780
- showFilters && filterPanel
998
+ showFilters && filterPanel,
999
+ /* @__PURE__ */ jsx(Modal_default, {
1000
+ open: pendingDeleteView != null,
1001
+ onOpenChange: (open) => {
1002
+ if (!open && !isDeletingView) setPendingDeleteView(null);
1003
+ },
1004
+ isKeyboardDismissDisabled: isDeletingView,
1005
+ contentProps: isDeletingView ? { showCloseButton: false } : void 0,
1006
+ title: strings.deleteViewTitle,
1007
+ footer: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
1008
+ variant: "basic",
1009
+ width: "auto",
1010
+ disabled: isDeletingView,
1011
+ onClick: () => setPendingDeleteView(null),
1012
+ children: strings.cancel
1013
+ }), /* @__PURE__ */ jsx(Button, {
1014
+ id: "table-controls__view__delete-confirm",
1015
+ variant: "danger",
1016
+ width: "auto",
1017
+ isPending: isDeletingView,
1018
+ onClick: confirmDeleteView,
1019
+ children: strings.delete
1020
+ })] }),
1021
+ children: /* @__PURE__ */ jsx(Paragraph, { children: strings.deleteViewConfirmation(pendingDeleteView?.name ?? "") })
1022
+ })
781
1023
  ] });
782
1024
  };
783
1025
  //#endregion
784
1026
  //#region components/DataTable/TableControls/TableControls.tsx
785
- 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 }) => {
786
1028
  const filtersId = useId();
787
1029
  const [internalShowFilters, internalSetShowFilters] = useState(defaultShowFilters ?? false);
788
1030
  const showFilters = controlledShowFilters != null ? controlledShowFilters : internalShowFilters;
@@ -803,12 +1045,15 @@ const TableControls = ({ filterPanel, searchProps, defaultShowFilters, showFilte
803
1045
  children: /* @__PURE__ */ jsx(ControlBar, {
804
1046
  showViews: compact ? false : showViews,
805
1047
  views: compact ? void 0 : views,
1048
+ hiddenViewIds: compact ? void 0 : hiddenViewIds,
806
1049
  onSelectView: compact ? void 0 : onSelectView,
807
1050
  currentView: compact ? void 0 : currentView,
808
1051
  onAddView: compact ? void 0 : onAddView,
809
1052
  onDeleteView: compact ? void 0 : onDeleteView,
810
1053
  onDuplicateView: compact ? void 0 : onDuplicateView,
811
1054
  onViewNameChange: compact ? void 0 : onViewNameChange,
1055
+ onReorderViews: compact ? void 0 : onReorderViews,
1056
+ onViewHiddenChange: compact ? void 0 : onViewHiddenChange,
812
1057
  onSaveView: compact ? void 0 : onSaveView,
813
1058
  onSetDefaultView: compact ? void 0 : onSetDefaultView,
814
1059
  isViewDirty,
@@ -944,6 +1189,7 @@ const PopoverCard$1 = styled(Card_default)`
944
1189
  padding: ${Spacing[4]};
945
1190
  `;
946
1191
  const TriggerIconButton = forwardRef(function TriggerIconButton({ disabled, ...elemProps }, ref) {
1192
+ const strings = usePDSStrings();
947
1193
  return /* @__PURE__ */ jsx(Button, {
948
1194
  disabled,
949
1195
  width: "icon",
@@ -952,21 +1198,22 @@ const TriggerIconButton = forwardRef(function TriggerIconButton({ disabled, ...e
952
1198
  ...elemProps,
953
1199
  ref,
954
1200
  "data-tour-target": "table-properties-button",
955
- "aria-label": "Table Properties",
1201
+ "aria-label": strings.tableProperties,
956
1202
  children: /* @__PURE__ */ jsx(SettingsIcon, {})
957
1203
  });
958
1204
  });
959
1205
  const TooltipButtonWrapper = styled("div")`
960
1206
  display: inline-block;
961
1207
  `;
962
- 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();
963
1210
  return disabled ? /* @__PURE__ */ jsx(Tooltip, {
964
1211
  trigger: /* @__PURE__ */ jsx(TooltipButtonWrapper, { children: /* @__PURE__ */ jsx(TriggerIconButton, {
965
1212
  disabled: true,
966
1213
  size,
967
1214
  variant
968
1215
  }) }),
969
- children: disabledTooltipMessage
1216
+ children: disabledTooltipMessage ?? strings.configureViewPermissionDenied
970
1217
  }) : /* @__PURE__ */ jsxs(Popover_default, { children: [/* @__PURE__ */ jsx(Popover_default.Trigger, {
971
1218
  asChild: true,
972
1219
  children: /* @__PURE__ */ jsx(TriggerIconButton, {
@@ -986,6 +1233,7 @@ const TableViewConfigurationDropdown = ({ disabled = false, disabledTooltipMessa
986
1233
  })] });
987
1234
  };
988
1235
  const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateColumnConfiguration, getColumnDisabled, sortByRelevance = false }) => {
1236
+ const strings = usePDSStrings();
989
1237
  const [searchTerm, setSearchTerm] = useState("");
990
1238
  const fuse = useMemo(() => {
991
1239
  return new Fuse(attributeOptions, sortByRelevance ? {
@@ -1082,7 +1330,7 @@ const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateC
1082
1330
  /* @__PURE__ */ jsx(Label$1, {
1083
1331
  size: "lg",
1084
1332
  weight: "bold",
1085
- children: "Configure columns"
1333
+ children: strings.configureColumns
1086
1334
  }),
1087
1335
  /* @__PURE__ */ jsx(Spacer_default, { height: 2 }),
1088
1336
  /* @__PURE__ */ jsx(SearchContainer, { children: /* @__PURE__ */ jsx(StyledSearchInput, {
@@ -1090,12 +1338,12 @@ const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateC
1090
1338
  value: searchTerm,
1091
1339
  handleInput: setSearchTerm,
1092
1340
  size: "md",
1093
- placeholder: "Search by item...",
1341
+ placeholder: strings.searchColumns,
1094
1342
  dataTest: "checklist-item-panel-item-table__search"
1095
1343
  }) }),
1096
1344
  /* @__PURE__ */ jsx(Spacer_default, { height: 2 }),
1097
1345
  shownDndItemProps.length > 0 || hiddenDndItemProps.length > 0 ? /* @__PURE__ */ jsxs(DndSection, { children: [
1098
- 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, {
1099
1347
  onDragEnd: handleDragEnd,
1100
1348
  children: /* @__PURE__ */ jsx(Droppable, {
1101
1349
  droppableId: SHOWN_DROPPABLE_ID,
@@ -1131,8 +1379,8 @@ const TableViewConfiguration = ({ columnConfiguration, attributeOptions, updateC
1131
1379
  })
1132
1380
  })] }),
1133
1381
  /* @__PURE__ */ jsx(Spacer_default, { height: 2 }),
1134
- hiddenDndItemProps.length > 0 && /* @__PURE__ */ jsxs("div", { children: [/* @__PURE__ */ jsx(Paragraph, { children: "Hidden attributes" }), hiddenDndItemProps.map((props) => /* @__PURE__ */ jsx(AttributeDnd, { ...props }, props.column.key))] })
1135
- ] }) : /* @__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 }) })
1136
1384
  ] });
1137
1385
  };
1138
1386
  const OverflowText = styled("div")`
@@ -1141,6 +1389,7 @@ const OverflowText = styled("div")`
1141
1389
  display: flex;
1142
1390
  `;
1143
1391
  const AttributeDnd = ({ column, index, isDisabled = false, isToggled, shouldDisableDrag, handleToggle }) => {
1392
+ const strings = usePDSStrings();
1144
1393
  return /* @__PURE__ */ jsxs(DndItemWrapper, { children: [
1145
1394
  /* @__PURE__ */ jsx(StyledIconDrag, {
1146
1395
  $active: true,
@@ -1155,7 +1404,7 @@ const AttributeDnd = ({ column, index, isDisabled = false, isToggled, shouldDisa
1155
1404
  value: isToggled,
1156
1405
  disabled: isDisabled,
1157
1406
  onChange: handleToggle,
1158
- "aria-label": isToggled ? `Hide ${column.label}` : `Show ${column.label}`
1407
+ "aria-label": isToggled ? strings.hideColumn(column.label) : strings.showColumn(column.label)
1159
1408
  }) })
1160
1409
  ] }, `${column.key}-${index}`);
1161
1410
  };
@@ -1304,6 +1553,14 @@ function isValuelessOperator(operator) {
1304
1553
  function carriesDateRange(operator, fieldType) {
1305
1554
  return isRangeOperator(operator) || fieldType === "date_range";
1306
1555
  }
1556
+ /**
1557
+ * Whether a rule's value control edits minute-precision date-times: the bar
1558
+ * and field both opt in, and the value is a range or a before/after instant
1559
+ * (`date` + `is` stays a whole calendar day).
1560
+ */
1561
+ function isMinutePrecisionDate(field, operator, dateTimesEnabled) {
1562
+ return dateTimesEnabled && field.timeGranularity === "minute" && (field.type === "date_range" || field.type === "date" && operator !== "is");
1563
+ }
1307
1564
  function isRangeOperator(operator) {
1308
1565
  return RANGE_OPERATORS.has(operator);
1309
1566
  }
@@ -1326,20 +1583,21 @@ function fieldHasMultipleOperators(field) {
1326
1583
  return getOperatorsForField(field).length > 1;
1327
1584
  }
1328
1585
  /**
1329
- * 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", ...).
1330
1588
  */
1331
- const OPERATOR_LABELS = {
1332
- is: "is",
1333
- is_not: "is not",
1334
- contains: "contains",
1335
- does_not_contain: "does not contain",
1336
- is_empty: "is empty",
1337
- is_not_empty: "is not empty",
1338
- is_true: "is true",
1339
- is_false: "is false",
1340
- before: "before",
1341
- after: "after",
1342
- 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"
1343
1601
  };
1344
1602
  /**
1345
1603
  * Field-type-specific label overrides. The operator vocabulary itself
@@ -1347,18 +1605,18 @@ const OPERATOR_LABELS = {
1347
1605
  * labels can be more specific where the generic label is ambiguous.
1348
1606
  *
1349
1607
  * Only present for `(fieldType, operator)` pairs that diverge from the
1350
- * generic label; everything else falls through to `OPERATOR_LABELS`.
1608
+ * generic label; everything else falls through to `OPERATOR_LABEL_KEYS`.
1351
1609
  */
1352
- const OPERATOR_LABELS_BY_TYPE = { multi_choices: {
1353
- is: "is any of",
1354
- is_not: "is none of"
1610
+ const OPERATOR_LABEL_KEYS_BY_TYPE = { multi_choices: {
1611
+ is: "operatorIsAnyOf",
1612
+ is_not: "operatorIsNoneOf"
1355
1613
  } };
1356
- function getOperatorLabel(operator, fieldType) {
1357
- if (fieldType) {
1358
- const override = OPERATOR_LABELS_BY_TYPE[fieldType]?.[operator];
1359
- if (override) return override;
1360
- }
1361
- 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]];
1362
1620
  }
1363
1621
  /**
1364
1622
  * Empty-but-present value seeded when a rule switches from a valueless operator
@@ -1440,10 +1698,15 @@ function resolveDateRangeRuleValue(rule, fieldType) {
1440
1698
  //#endregion
1441
1699
  //#region components/DataTable/TableControls/FiltersV2/format-date-value.ts
1442
1700
  const TIME_COMPONENT = /T\d{2}:\d{2}/;
1443
- 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) {
1444
1707
  if (!TIME_COMPONENT.test(value)) return value;
1445
1708
  const dateTime = DateTime.fromISO(value).setZone(Settings.defaultZone);
1446
- return dateTime.isValid ? dateTime.toFormat("MMM d, yyyy h:mm a") : value;
1709
+ return dateTime.isValid ? formatDateTime(dateTime, { locale }) : value;
1447
1710
  }
1448
1711
  //#endregion
1449
1712
  //#region components/DataTable/TableControls/FiltersV2/relative-date-label.ts
@@ -1462,17 +1725,20 @@ function relativePresetLabel(value, relativeDate) {
1462
1725
  }
1463
1726
  //#endregion
1464
1727
  //#region components/DataTable/TableControls/FiltersV2/AdvancedFilterRulesPopover/display.ts
1465
- function valueDisplayString(value, optionLabels, relativeDate, fieldType) {
1728
+ function valueDisplayString(value, optionLabels, relativeDate, fieldType, { locale, strings = DEFAULT_COMMON_STRINGS } = {}) {
1466
1729
  if (value == null) return;
1467
1730
  const relativeLabel = relativePresetLabel(value, relativeDate);
1468
1731
  if (relativeLabel) return relativeLabel;
1469
- 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);
1470
1733
  if (Array.isArray(value)) {
1471
1734
  if (value.length === 0) return;
1472
1735
  if (value.length === 1) return display(String(value[0]));
1473
1736
  return `${display(String(value[0]))} +${value.length - 1}`;
1474
1737
  }
1475
- 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
+ }
1476
1742
  if (typeof value === "number") return String(value);
1477
1743
  if (typeof value === "string") return value.length > 0 ? display(value) : void 0;
1478
1744
  if (typeof value === "object") {
@@ -1563,8 +1829,10 @@ function nodeToOptions(node) {
1563
1829
  * submenu entirely. Omit it (or pass `undefined`) to show every group.
1564
1830
  *
1565
1831
  * `excludeFieldIds`, when provided, drops those fields from the tree.
1832
+ *
1833
+ * `fieldsLabel` names the custom-field submenu; pass `usePDSStrings().fields` to translate it.
1566
1834
  */
1567
- function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds) {
1835
+ function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds, fieldsLabel = FIELDS_SUBMENU_LABEL) {
1568
1836
  const systemFields = registry.systemFieldsList();
1569
1837
  const customGroups = registry.customFieldGroups();
1570
1838
  const excluded = excludeFieldIds == null ? null : new Set(excludeFieldIds);
@@ -1584,7 +1852,7 @@ function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFie
1584
1852
  }
1585
1853
  const customOptions = nodeToOptions(customRoot);
1586
1854
  if (customOptions.length > 0) tree.push({
1587
- label: FIELDS_SUBMENU_LABEL,
1855
+ label: fieldsLabel,
1588
1856
  nested: true,
1589
1857
  options: customOptions
1590
1858
  });
@@ -1604,29 +1872,31 @@ const StatementFields = styled.div`
1604
1872
  background: transparent;
1605
1873
  }
1606
1874
  `;
1607
- function RuleEditorFields({ registry, field, groupIndex, ruleIndex, rule, size, operators, operatorConfigurable, onFieldChange, onOperatorChange, onValueChange, renderValueControl }) {
1608
- const fieldOptions = useMemo(() => buildFieldPickerOptions(registry), [registry]);
1875
+ function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleIndex, rule, size, operators, operatorConfigurable, onFieldChange, onOperatorChange, onValueChange, renderValueControl }) {
1876
+ const strings = usePDSStrings();
1877
+ const minutePrecisionValue = field != null && isMinutePrecisionDate(field, rule.operator, dateTimesEnabled);
1878
+ const fieldOptions = useMemo(() => buildFieldPickerOptions(registry, void 0, void 0, strings.fields), [registry, strings.fields]);
1609
1879
  return /* @__PURE__ */ jsxs(StatementFields, { children: [
1610
1880
  /* @__PURE__ */ jsx(ComboboxField, {
1611
- label: "Value",
1881
+ label: strings.value,
1612
1882
  labelProps: { size },
1613
- "aria-label": `Field for rule ${ruleIndex + 1} in group ${groupIndex + 1}`,
1883
+ "aria-label": strings.fieldForRule(ruleIndex + 1, groupIndex + 1),
1614
1884
  size,
1615
1885
  options: fieldOptions,
1616
1886
  value: rule.fieldId,
1617
1887
  onChange: (next) => {
1618
1888
  if (typeof next === "string") onFieldChange(groupIndex, ruleIndex, next);
1619
1889
  },
1620
- placeholder: "Select field",
1890
+ placeholder: strings.selectField,
1621
1891
  portal: false
1622
1892
  }),
1623
1893
  operatorConfigurable ? /* @__PURE__ */ jsx(ComboboxField, {
1624
- label: "Operator",
1894
+ label: strings.operator,
1625
1895
  labelProps: { size },
1626
- "aria-label": `Operator for rule ${ruleIndex + 1} in group ${groupIndex + 1}`,
1896
+ "aria-label": strings.operatorForRule(ruleIndex + 1, groupIndex + 1),
1627
1897
  size,
1628
1898
  options: operators.map((op) => ({
1629
- label: getOperatorLabel(op, field?.type),
1899
+ label: getOperatorLabel(op, field?.type, strings),
1630
1900
  value: op
1631
1901
  })),
1632
1902
  value: rule.operator,
@@ -1635,36 +1905,42 @@ function RuleEditorFields({ registry, field, groupIndex, ruleIndex, rule, size,
1635
1905
  },
1636
1906
  portal: false
1637
1907
  }) : /* @__PURE__ */ jsx(FormField, {
1638
- label: "Operator",
1908
+ label: strings.operator,
1639
1909
  labelProps: { size },
1640
1910
  children: /* @__PURE__ */ jsx(Input_default, {
1641
1911
  size,
1642
- "aria-label": `Operator for rule ${ruleIndex + 1} in group ${groupIndex + 1}`,
1643
- value: getOperatorLabel(rule.operator, field?.type),
1912
+ "aria-label": strings.operatorForRule(ruleIndex + 1, groupIndex + 1),
1913
+ value: getOperatorLabel(rule.operator, field?.type, strings),
1644
1914
  disabled: true,
1645
1915
  readOnly: true
1646
1916
  })
1647
1917
  }),
1648
1918
  field && !isValuelessOperator(rule.operator) ? /* @__PURE__ */ jsx(FormField, {
1649
- label: "Value",
1919
+ label: strings.value,
1650
1920
  labelProps: { size },
1921
+ configField: minutePrecisionValue ? false : void 0,
1651
1922
  children: /* @__PURE__ */ jsx(Fragment$1, { children: renderValueControl(field, rule.operator, rule.value, (next, relativeDate) => onValueChange(groupIndex, ruleIndex, next, relativeDate), rule.relativeDate) })
1652
1923
  }) : null
1653
1924
  ] });
1654
1925
  }
1655
1926
  //#endregion
1656
1927
  //#region components/DataTable/TableControls/FiltersV2/AdvancedFilterRulesPopover/AdvancedFilterRuleRow.tsx
1657
- function AdvancedFilterRuleRow({ registry, groupIndex, ruleIndex, rule, size, isOpen, onClose, onDelete, onFieldChange, onOperatorChange, onValueChange, renderValueControl }) {
1928
+ function AdvancedFilterRuleRow({ registry, dateTimesEnabled, groupIndex, ruleIndex, rule, size, isOpen, onClose, onDelete, onFieldChange, onOperatorChange, onValueChange, renderValueControl }) {
1929
+ const strings = usePDSStrings();
1930
+ const locale = usePDSLocale();
1658
1931
  const field = registry.get(rule.fieldId);
1659
1932
  const operators = field ? getOperatorsForField(field) : [];
1660
1933
  const operatorConfigurable = field ? fieldHasMultipleOperators(field) : true;
1661
- const condition = ruleIndex === 0 ? "If" : "And";
1934
+ const condition = ruleIndex === 0 ? strings.conditionIf : strings.conditionAnd;
1662
1935
  const rowId = `${groupIndex}-${ruleIndex}`;
1663
- 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
+ });
1664
1940
  const textValue = [
1665
1941
  condition,
1666
1942
  field?.label ?? rule.fieldId,
1667
- getOperatorLabel(rule.operator, field?.type),
1943
+ getOperatorLabel(rule.operator, field?.type, strings),
1668
1944
  valueDisplay
1669
1945
  ].filter(Boolean).join(" ");
1670
1946
  return /* @__PURE__ */ jsx(ListBox.LogicRow, {
@@ -1672,7 +1948,7 @@ function AdvancedFilterRuleRow({ registry, groupIndex, ruleIndex, rule, size, is
1672
1948
  condition,
1673
1949
  hideCondition: true,
1674
1950
  attributeName: field?.label ?? rule.fieldId,
1675
- operator: getOperatorLabel(rule.operator, field?.type),
1951
+ operator: getOperatorLabel(rule.operator, field?.type, strings),
1676
1952
  matchLevelName: valueDisplay,
1677
1953
  textValue,
1678
1954
  size,
@@ -1680,9 +1956,10 @@ function AdvancedFilterRuleRow({ registry, groupIndex, ruleIndex, rule, size, is
1680
1956
  if (isOpen) onClose();
1681
1957
  },
1682
1958
  onDelete,
1683
- dropdownHeadingText: `Edit \u2018${condition}\u2019 statement`,
1959
+ dropdownHeadingText: strings.editStatement(condition),
1684
1960
  dropdownFormFields: /* @__PURE__ */ jsx(RuleEditorFields, {
1685
1961
  registry,
1962
+ dateTimesEnabled,
1686
1963
  field,
1687
1964
  groupIndex,
1688
1965
  ruleIndex,
@@ -1803,7 +2080,7 @@ const PopoverContent = styled(PopoverPrimitive.Content)`
1803
2080
  z-index: ${Z_INDICES.modalDropdown};
1804
2081
  `;
1805
2082
  const PopoverCard = styled(Card_default)`
1806
- width: 384px;
2083
+ width: ${({ $wide }) => $wide ? "520px" : "384px"};
1807
2084
  max-width: calc(100vw - ${Spacing[4]});
1808
2085
  margin-bottom: 0;
1809
2086
 
@@ -1909,9 +2186,11 @@ function groupsForRender(compound) {
1909
2186
  * inline; clicking a row reveals the field/operator/value editor inside the
1910
2187
  * row's dropdown popover.
1911
2188
  */
1912
- const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, open, onOpenChange, renderValueControl, size }) => {
2189
+ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, open, onOpenChange, renderValueControl, size, dateTimesEnabled = false }) => {
2190
+ const strings = usePDSStrings();
1913
2191
  const resolvedSize = useFilterBarSize(size);
1914
2192
  const subtleIconSize = resolvedSize === "sm" ? "xs" : "sm";
2193
+ const wide = useMemo(() => dateTimesEnabled && registry.all().some((field) => field.timeGranularity === "minute"), [registry, dateTimesEnabled]);
1915
2194
  const [internalOpen, setInternalOpen] = useState(false);
1916
2195
  const isControlled = open != null;
1917
2196
  const isOpen = isControlled ? open : internalOpen;
@@ -2013,7 +2292,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2013
2292
  sideOffset: 8,
2014
2293
  collisionPadding: 8,
2015
2294
  role: "dialog",
2016
- "aria-label": "Advanced filter rules",
2295
+ "aria-label": strings.advancedFilterRules,
2017
2296
  id: baseId,
2018
2297
  onPointerDownCapture: letPointerDownReachDocument,
2019
2298
  ref: popoverContentRef,
@@ -2034,28 +2313,29 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2034
2313
  },
2035
2314
  children: /* @__PURE__ */ jsxs(PopoverCard, {
2036
2315
  elevated: true,
2316
+ $wide: wide,
2037
2317
  children: [/* @__PURE__ */ jsx(Header, { children: /* @__PURE__ */ jsx(Paragraph, {
2038
2318
  size: resolvedSize,
2039
2319
  color: "secondary",
2040
- children: "Advanced filter rules"
2320
+ children: strings.advancedFilterRules
2041
2321
  }) }), /* @__PURE__ */ jsxs(Body, { children: [groupsForRender(compound).map((group, groupIndex, renderableGroups) => {
2042
- const groupTitle = groupIndex === 0 ? "If" : "Or";
2322
+ const groupTitle = groupIndex === 0 ? strings.conditionIf : strings.conditionOr;
2043
2323
  const isSynthetic = group.synthetic;
2044
2324
  const isOnlyGroup = renderableGroups.length === 1;
2045
2325
  const isEmptyGroup = group.rules.length === 0;
2046
2326
  const hideGroupMenu = isOnlyGroup && isEmptyGroup;
2047
- const deleteGroupLabel = isOnlyGroup && !isEmptyGroup ? "Clear all" : "Delete group";
2327
+ const deleteGroupLabel = isOnlyGroup && !isEmptyGroup ? strings.clearAll : strings.deleteGroup;
2048
2328
  return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs(GroupCard, {
2049
2329
  "data-test": `advanced-filter-rules__group-${groupIndex}`,
2050
2330
  role: "group",
2051
- "aria-label": `Filter group ${groupIndex + 1}`,
2331
+ "aria-label": strings.filterGroup(groupIndex + 1),
2052
2332
  children: [/* @__PURE__ */ jsxs(GroupHeader, { children: [/* @__PURE__ */ jsx(GroupTitle, {
2053
2333
  $size: resolvedSize,
2054
2334
  children: groupTitle
2055
2335
  }), /* @__PURE__ */ jsxs(GroupHeaderActions, { children: [hideGroupMenu ? null : /* @__PURE__ */ jsx(GroupActionsMenu, {
2056
2336
  trigger: /* @__PURE__ */ jsx(IconButton, {
2057
2337
  size: subtleIconSize,
2058
- "aria-label": `More actions for filter group ${groupIndex + 1}`,
2338
+ "aria-label": strings.moreActionsForFilterGroup(groupIndex + 1),
2059
2339
  "data-test": `advanced-filter-rules__group-more-${groupIndex}`,
2060
2340
  children: /* @__PURE__ */ jsx(MoreIcon$1, {})
2061
2341
  }),
@@ -2077,16 +2357,16 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2077
2357
  }), /* @__PURE__ */ jsx(IconButton, {
2078
2358
  size: subtleIconSize,
2079
2359
  onClick: () => handleAddRuleToGroup(groupIndex),
2080
- "aria-label": `Add rule to filter group ${groupIndex + 1}`,
2360
+ "aria-label": strings.addRuleToFilterGroup(groupIndex + 1),
2081
2361
  "data-test": `advanced-filter-rules__add-rule-${groupIndex}`,
2082
2362
  children: /* @__PURE__ */ jsx(PlusIcon$1, {})
2083
2363
  })] })] }), group.rules.length === 0 ? /* @__PURE__ */ jsx(Paragraph, {
2084
2364
  size: resolvedSize,
2085
2365
  color: "secondary",
2086
2366
  style: { padding: Spacing[2] },
2087
- children: "No rules yet"
2367
+ children: strings.noRulesYet
2088
2368
  }) : /* @__PURE__ */ jsx(RulesListBox, {
2089
- "aria-label": `Rules in group ${groupIndex + 1}`,
2369
+ "aria-label": strings.rulesInGroup(groupIndex + 1),
2090
2370
  selectionMode: "single",
2091
2371
  size: resolvedSize,
2092
2372
  fullWidth: true,
@@ -2096,6 +2376,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2096
2376
  const rowId = `${groupIndex}-${ruleIndex}`;
2097
2377
  return /* @__PURE__ */ jsx(AdvancedFilterRuleRow, {
2098
2378
  registry,
2379
+ dateTimesEnabled,
2099
2380
  groupIndex,
2100
2381
  ruleIndex,
2101
2382
  rule,
@@ -2118,7 +2399,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
2118
2399
  prefixIcon: /* @__PURE__ */ jsx(PlusIcon, {}),
2119
2400
  onClick: handleAddOrGroup,
2120
2401
  "data-test": "advanced-filter-rules__add-or-group",
2121
- children: "Or group"
2402
+ children: strings.orGroup
2122
2403
  }) })] })]
2123
2404
  })
2124
2405
  }) })]
@@ -2158,6 +2439,7 @@ const stringValue = (value) => {
2158
2439
  * scalar?", so we never produce an array-of-values from this control.
2159
2440
  */
2160
2441
  const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLabel, layout = "popover" }) => {
2442
+ const strings = usePDSStrings();
2161
2443
  const size = useFilterBarSize();
2162
2444
  const [localValue, setLocalValue] = useState(() => stringDisplayValue(value));
2163
2445
  useEffect(() => {
@@ -2172,7 +2454,7 @@ const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLab
2172
2454
  onCommit?.();
2173
2455
  }, [onChange, onCommit]);
2174
2456
  if (isValuelessOperator(operator)) return null;
2175
- const label = ariaLabel ?? `${field.label} value`;
2457
+ const label = ariaLabel ?? strings.fieldValue(field.label);
2176
2458
  if ((field.itemType ?? "string") === "choices") return /* @__PURE__ */ jsx(Combobox, {
2177
2459
  "aria-label": label,
2178
2460
  options: (field.options ?? []).map((opt) => ({
@@ -2181,14 +2463,14 @@ const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLab
2181
2463
  })),
2182
2464
  value: stringValue(value),
2183
2465
  onChange: handleComboboxChange,
2184
- placeholder: "Select an option",
2466
+ placeholder: strings.selectAnOptionPlaceholder,
2185
2467
  size,
2186
2468
  embedded: layout === "popover"
2187
2469
  });
2188
2470
  return /* @__PURE__ */ jsx(Input_default, {
2189
2471
  type: "text",
2190
2472
  size,
2191
- placeholder: "Enter a value",
2473
+ placeholder: strings.enterAValue,
2192
2474
  "aria-label": label,
2193
2475
  value: localValue,
2194
2476
  onChange: (e) => handleTextChange(e.target.value)
@@ -2197,10 +2479,10 @@ const ArrayValueControl = ({ field, operator, value, onChange, onCommit, ariaLab
2197
2479
  //#endregion
2198
2480
  //#region components/DataTable/TableControls/FiltersV2/value-controls/BooleanValueControl/BooleanValueControl.tsx
2199
2481
  const OPTIONS = [{
2200
- label: "True",
2482
+ labelKey: "booleanTrue",
2201
2483
  value: true
2202
2484
  }, {
2203
- label: "False",
2485
+ labelKey: "booleanFalse",
2204
2486
  value: false
2205
2487
  }];
2206
2488
  const Row = styled.button`
@@ -2247,11 +2529,12 @@ const Root = styled.div`
2247
2529
  * for valueless operators (`is_empty`, `is_not_empty`).
2248
2530
  */
2249
2531
  function BooleanValueControl({ operator, value, onChange, ariaLabel }) {
2532
+ const strings = usePDSStrings();
2250
2533
  if (isValuelessOperator(operator)) return null;
2251
2534
  const selected = typeof value === "boolean" ? value : null;
2252
2535
  return /* @__PURE__ */ jsx(Root, {
2253
2536
  role: "radiogroup",
2254
- "aria-label": ariaLabel ?? "Boolean value",
2537
+ "aria-label": ariaLabel ?? strings.booleanValue,
2255
2538
  children: OPTIONS.map((opt) => {
2256
2539
  const isSelected = selected === opt.value;
2257
2540
  return /* @__PURE__ */ jsxs(Row, {
@@ -2260,7 +2543,7 @@ function BooleanValueControl({ operator, value, onChange, ariaLabel }) {
2260
2543
  "aria-checked": isSelected,
2261
2544
  $selected: isSelected,
2262
2545
  onClick: () => onChange(opt.value),
2263
- children: [opt.label, isSelected ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true }) : null]
2546
+ children: [strings[opt.labelKey], isSelected ? /* @__PURE__ */ jsx(CheckIcon, { "aria-hidden": true }) : null]
2264
2547
  }, String(opt.value));
2265
2548
  })
2266
2549
  });
@@ -2279,6 +2562,7 @@ const EMPTY_VALUES = [];
2279
2562
  * valueless (e.g. `is_empty`).
2280
2563
  */
2281
2564
  function ChoicesValueControl({ field, operator, value, onChange, onCommit, ariaLabel, trigger, layout = "popover", multiple = false }) {
2565
+ const strings = usePDSStrings();
2282
2566
  const generatedId = useMemo(() => uniqueId(multiple ? "filter_v2_multi_choices_" : "filter_v2_choices_"), [multiple]);
2283
2567
  const size = useFilterBarSize();
2284
2568
  const options = field.options ?? EMPTY_OPTIONS;
@@ -2290,8 +2574,8 @@ function ChoicesValueControl({ field, operator, value, onChange, onCommit, ariaL
2290
2574
  size,
2291
2575
  "aria-label": ariaLabel ?? field.label,
2292
2576
  placeholder: field.label,
2293
- searchPlaceholder: "Search",
2294
- emptyStateMessage: "No matches",
2577
+ searchPlaceholder: strings.searchPlaceholder,
2578
+ emptyStateMessage: strings.noMatches,
2295
2579
  options,
2296
2580
  values,
2297
2581
  trigger,
@@ -2345,16 +2629,32 @@ const useDateRange = (value, relativeDate, minuteMode) => {
2345
2629
  const parsedRelativeDate = parseDateFilterValue(relativeDate);
2346
2630
  const parsed = parsedRelativeDate?.kind === "relative" ? parsedRelativeDate : parseDateFilterValue(value);
2347
2631
  const resolved = parsed ? resolveDateFilterValue(parsed) : void 0;
2348
- return useMemo(() => ({
2349
- startDate: minuteMode ? parseIsoDateTime(resolved?.startDate, "start") : parseIsoDate$1(resolved?.startDate),
2350
- endDate: minuteMode ? parseIsoDateTime(resolved?.endDate, "end") : parseIsoDate$1(resolved?.endDate)
2351
- }), [
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,
2352
2650
  minuteMode,
2651
+ nowMinuteMillis,
2353
2652
  resolved?.startDate,
2354
2653
  resolved?.endDate
2355
2654
  ]);
2356
2655
  };
2357
2656
  const DateRangeValueControl = ({ field, operator, value, relativeDate, onChange, ariaLabel, hidePresets, portalContainer, visibleMonths, relativeDatesEnabled = false, dateTimesEnabled = false }) => {
2657
+ const strings = usePDSStrings();
2358
2658
  const size = useFilterBarSize();
2359
2659
  const minuteMode = dateTimesEnabled && field.timeGranularity === "minute";
2360
2660
  const dateRange = useDateRange(value, relativeDate, minuteMode);
@@ -2420,7 +2720,7 @@ const DateRangeValueControl = ({ field, operator, value, relativeDate, onChange,
2420
2720
  if (isValuelessOperator(operator)) return null;
2421
2721
  const hasCompleteRange = dateRange.startDate != null && dateRange.endDate != null;
2422
2722
  return /* @__PURE__ */ jsx(DateRangePicker, {
2423
- "aria-label": ariaLabel ?? `${field.label} value`,
2723
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2424
2724
  calendarZIndex: Z_INDICES.modalDropdown,
2425
2725
  dateRange,
2426
2726
  hidePresets,
@@ -2432,7 +2732,8 @@ const DateRangeValueControl = ({ field, operator, value, relativeDate, onChange,
2432
2732
  showClear: false,
2433
2733
  size,
2434
2734
  visibleMonths,
2435
- granularity: minuteMode ? "minute" : "day"
2735
+ granularity: minuteMode ? "minute" : "day",
2736
+ hideTimeZone: !minuteMode
2436
2737
  }, hasCompleteRange ? "range" : "empty");
2437
2738
  };
2438
2739
  //#endregion
@@ -2441,7 +2742,7 @@ const DATE_ONLY = /^\d{4}-\d{2}-\d{2}$/;
2441
2742
  const parseIsoDate = (value, field, operator, dateTimesEnabled) => {
2442
2743
  if (typeof value !== "string") return null;
2443
2744
  try {
2444
- if (dateTimesEnabled && field.timeGranularity === "minute" && operator !== "is") {
2745
+ if (isMinutePrecisionDate(field, operator, dateTimesEnabled)) {
2445
2746
  if (DATE_ONLY.test(value)) {
2446
2747
  const dateTime = DateTime.fromISO(value, { zone: Settings.defaultZone });
2447
2748
  const iso = (operator === "after" ? dateTime.startOf("day") : dateTime.endOf("day")).toISO();
@@ -2466,8 +2767,9 @@ const parseIsoDate = (value, field, operator, dateTimesEnabled) => {
2466
2767
  * and bar both opt in; other date values remain `YYYY-MM-DD`.
2467
2768
  */
2468
2769
  const DateValueControl = ({ field, operator, value, onChange, ariaLabel, dateTimesEnabled = false }) => {
2770
+ const strings = usePDSStrings();
2469
2771
  const size = useFilterBarSize();
2470
- const minuteMode = dateTimesEnabled && field.timeGranularity === "minute" && operator !== "is";
2772
+ const minuteMode = isMinutePrecisionDate(field, operator, dateTimesEnabled);
2471
2773
  const handleChange = useCallback((nextDate) => {
2472
2774
  if (!nextDate || !minuteMode) {
2473
2775
  onChange(nextDate ? nextDate.toString() : null);
@@ -2491,7 +2793,7 @@ const DateValueControl = ({ field, operator, value, onChange, ariaLabel, dateTim
2491
2793
  return /* @__PURE__ */ jsx(DatePicker, {
2492
2794
  value: parseIsoDate(value, field, operator, dateTimesEnabled),
2493
2795
  size,
2494
- "aria-label": ariaLabel ?? `${field.label} value`,
2796
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2495
2797
  onChange: handleChange,
2496
2798
  granularity: minuteMode ? "minute" : "day",
2497
2799
  useModalZIndex: true
@@ -2545,6 +2847,7 @@ function numericDisplayValue(value) {
2545
2847
  * the debounce flushes on blur and on unmount so no pending value is lost.
2546
2848
  */
2547
2849
  const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2850
+ const strings = usePDSStrings();
2548
2851
  const size = useFilterBarSize();
2549
2852
  const [localValue, setLocalValue] = useState(() => numericDisplayValue(value));
2550
2853
  const isFocusedRef = useRef(false);
@@ -2575,8 +2878,8 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2575
2878
  size,
2576
2879
  step: "any",
2577
2880
  inputMode: "decimal",
2578
- placeholder: "Enter a number",
2579
- "aria-label": ariaLabel ?? `${field.label} value`,
2881
+ placeholder: strings.enterANumber,
2882
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2580
2883
  value: localValue,
2581
2884
  onChange: (e) => handleChange(e.target.value),
2582
2885
  onFocus: () => {
@@ -2616,6 +2919,7 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2616
2919
  * the debounce flushes on blur and on unmount so no pending value is lost.
2617
2920
  */
2618
2921
  const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
2922
+ const strings = usePDSStrings();
2619
2923
  const size = useFilterBarSize();
2620
2924
  const [localValue, setLocalValue] = useState(() => numericDisplayValue(value));
2621
2925
  const isFocusedRef = useRef(false);
@@ -2646,8 +2950,8 @@ const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) =>
2646
2950
  size,
2647
2951
  step: 1,
2648
2952
  inputMode: "numeric",
2649
- placeholder: "Enter a number",
2650
- "aria-label": ariaLabel ?? `${field.label} value`,
2953
+ placeholder: strings.enterANumber,
2954
+ "aria-label": ariaLabel ?? strings.fieldValue(field.label),
2651
2955
  value: localValue,
2652
2956
  onChange: (e) => handleChange(e.target.value),
2653
2957
  onFocus: () => {
@@ -2743,14 +3047,21 @@ const TriggerWrapper = styled.span`
2743
3047
  }
2744
3048
  `}
2745
3049
  `;
2746
- 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 }) => {
2747
3051
  const resolvedSize = useFilterBarSize(size);
2748
- const unfilteredOptions = useMemo(() => buildFieldPickerOptions(registry, visibleCustomFieldParents), [registry, visibleCustomFieldParents]);
2749
- 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), [
2750
3060
  registry,
2751
3061
  visibleCustomFieldParents,
2752
3062
  excludeFieldIds,
2753
- unfilteredOptions
3063
+ unfilteredOptions,
3064
+ strings.fields
2754
3065
  ]);
2755
3066
  const handleChange = useCallback((value) => {
2756
3067
  if (value == null) return;
@@ -2762,7 +3073,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", comp
2762
3073
  const trigger = compact ? /* @__PURE__ */ jsx(IconButton, {
2763
3074
  size: resolvedSize,
2764
3075
  disabled,
2765
- "aria-label": triggerLabel,
3076
+ "aria-label": resolvedTriggerLabel,
2766
3077
  children: /* @__PURE__ */ jsx(CirclePlusIcon, {})
2767
3078
  }) : /* @__PURE__ */ jsx(Button, {
2768
3079
  variant: "text",
@@ -2770,7 +3081,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", comp
2770
3081
  width: "auto",
2771
3082
  prefixIcon: /* @__PURE__ */ jsx(CirclePlusIcon, {}),
2772
3083
  disabled,
2773
- children: triggerLabel
3084
+ children: resolvedTriggerLabel
2774
3085
  });
2775
3086
  return /* @__PURE__ */ jsx(TriggerWrapper, {
2776
3087
  ...rest,
@@ -2780,7 +3091,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel = "Filter", comp
2780
3091
  value: null,
2781
3092
  onChange: handleChange,
2782
3093
  size: resolvedSize,
2783
- "aria-label": "Filter field picker",
3094
+ "aria-label": strings.filterFieldPicker,
2784
3095
  trigger
2785
3096
  })
2786
3097
  });
@@ -3009,13 +3320,13 @@ const OverflowTooltipList = styled(Stack).attrs({
3009
3320
  * `optionLabels` lookup so the pill renders human-readable option labels
3010
3321
  * instead of raw option ids. Null / undefined collapses to an empty list.
3011
3322
  */
3012
- function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType) {
3323
+ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType, strings = DEFAULT_COMMON_STRINGS, locale) {
3013
3324
  if (value == null) return [];
3014
3325
  const relativeLabel = relativePresetLabel(value, relativeDate);
3015
3326
  if (relativeLabel) return [relativeLabel];
3016
- 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);
3017
3328
  if (Array.isArray(value)) {
3018
- 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)];
3019
3330
  return value.map((entry) => lookup(String(entry)));
3020
3331
  }
3021
3332
  if (typeof value === "object") {
@@ -3024,7 +3335,7 @@ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType) {
3024
3335
  const single = startDate || endDate;
3025
3336
  return single ? [lookup(single)] : [];
3026
3337
  }
3027
- if (typeof value === "boolean") return [value ? "True" : "False"];
3338
+ if (typeof value === "boolean") return [value ? strings.booleanTrue : strings.booleanFalse];
3028
3339
  if (typeof value === "number") return [String(value)];
3029
3340
  return [lookup(value)];
3030
3341
  }
@@ -3034,22 +3345,26 @@ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType) {
3034
3345
  * relying on child text nodes because the chip components don't always read
3035
3346
  * cleanly when concatenated by the AT.
3036
3347
  */
3037
- function buildAccessibleName(field, rule, displayedValues) {
3348
+ function buildAccessibleName(field, rule, displayedValues, strings = DEFAULT_COMMON_STRINGS) {
3038
3349
  if (rule == null) return field.label;
3039
3350
  if (!isValuelessOperator(rule.operator) && displayedValues.length === 0) return field.label;
3040
- const operatorLabel = getOperatorLabel(rule.operator, field.type);
3351
+ const operatorLabel = getOperatorLabel(rule.operator, field.type, strings);
3041
3352
  if (isValuelessOperator(rule.operator)) return `${field.label} ${operatorLabel}`;
3042
3353
  return `${field.label} ${operatorLabel} ${displayedValues.join(", ")}`;
3043
3354
  }
3044
3355
  const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDismiss, variant = "default", optionLabels, size, ...rest }, ref) {
3045
3356
  const reactId = useMemo(() => uniqueId("filter-pill-"), []);
3046
3357
  const resolvedSize = useFilterBarSize(size);
3047
- 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) : [], [
3048
3361
  rule,
3049
3362
  optionLabels,
3050
- field?.type
3363
+ field?.type,
3364
+ strings,
3365
+ locale
3051
3366
  ]);
3052
- const accessibleName = buildAccessibleName(field, rule, displayedValues);
3367
+ const accessibleName = buildAccessibleName(field, rule, displayedValues, strings);
3053
3368
  const hasRule = rule != null;
3054
3369
  const isComplete = hasRule && (isValuelessOperator(rule.operator) || displayedValues.length > 0);
3055
3370
  const firstValue = displayedValues[0];
@@ -3059,14 +3374,14 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
3059
3374
  ref,
3060
3375
  variant,
3061
3376
  size: resolvedSize,
3062
- bodyAriaLabel: `Edit filter: ${accessibleName}`,
3377
+ bodyAriaLabel: strings.editFilter(accessibleName),
3063
3378
  onBodyClick: onClick,
3064
3379
  onDismiss,
3065
- dismissAriaLabel: `Remove filter: ${accessibleName}`,
3380
+ dismissAriaLabel: strings.removeFilter(accessibleName),
3066
3381
  ...rest,
3067
3382
  children: [
3068
3383
  /* @__PURE__ */ jsx(FieldLabel, { children: /* @__PURE__ */ jsx(TruncatedText, { children: field.label }) }),
3069
- isComplete && hasRule && /* @__PURE__ */ jsx(OperatorLabel, { children: getOperatorLabel(rule.operator, field.type) }),
3384
+ isComplete && hasRule && /* @__PURE__ */ jsx(OperatorLabel, { children: getOperatorLabel(rule.operator, field.type, strings) }),
3070
3385
  isComplete && hasRule && !isValuelessOperator(rule.operator) && firstValue != null && /* @__PURE__ */ jsxs(ValueChipGroup, { children: [/* @__PURE__ */ jsx(ValueChip, {
3071
3386
  $variant: variant,
3072
3387
  $size: resolvedSize,
@@ -3082,7 +3397,7 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
3082
3397
  hideArrow: true,
3083
3398
  children: /* @__PURE__ */ jsx(OverflowTooltipList, {
3084
3399
  id: overflowTooltipId,
3085
- "aria-label": "Additional values",
3400
+ "aria-label": strings.additionalValues,
3086
3401
  children: overflowValues.map((entry, index) => /* @__PURE__ */ jsx("li", { children: entry }, `${entry}-${index}`))
3087
3402
  })
3088
3403
  })] })
@@ -3091,12 +3406,10 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
3091
3406
  });
3092
3407
  //#endregion
3093
3408
  //#region components/DataTable/TableControls/FiltersV2/FilterPopover/FilterPopover.tsx
3094
- /**
3095
- * Compact value controls fit the minimum width; wider controls can grow
3096
- * up to 320px without overflowing.
3097
- */
3409
+ /** Wide controls size to their content while retaining a viewport gutter. */
3098
3410
  const POPOVER_MIN_WIDTH = "196px";
3099
3411
  const POPOVER_MAX_WIDTH = "320px";
3412
+ const POPOVER_WIDE_MAX_WIDTH = `calc(100vw - ${Spacing[4]} - ${Spacing[4]})`;
3100
3413
  const OperatorMenu = styled(DropdownMenu_default)`
3101
3414
  && {
3102
3415
  background-color: ${({ theme }) => semanticColor(theme, "SurfaceElevated", theme.color.background.primary)};
@@ -3104,7 +3417,7 @@ const OperatorMenu = styled(DropdownMenu_default)`
3104
3417
  `;
3105
3418
  const PopoverPanel = styled(Stack).attrs({ spacing: Spacing[0] })`
3106
3419
  min-width: ${POPOVER_MIN_WIDTH};
3107
- max-width: ${POPOVER_MAX_WIDTH};
3420
+ max-width: ${({ $wide }) => $wide ? "none" : POPOVER_MAX_WIDTH};
3108
3421
  /* The design-system Popover.Card already supplies bg, border, shadow,
3109
3422
  and 6px corner radius — we just constrain the inner content. */
3110
3423
  `;
@@ -3206,7 +3519,8 @@ const Footer = styled(HStack).attrs({
3206
3519
  * back through `onChangeOperator` and forwards open/close transitions
3207
3520
  * through Radix's controlled props.
3208
3521
  */
3209
- const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, onClose, trigger, open, onOpenChange, size }) => {
3522
+ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, onClose, trigger, open, onOpenChange, size, wide = false }) => {
3523
+ const strings = usePDSStrings();
3210
3524
  const resolvedSize = useFilterBarSize(size);
3211
3525
  const valueless = isValuelessOperator(operator);
3212
3526
  const CaretIcon = resolvedSize === "sm" ? CaretDownIcon$1 : CaretDownIcon;
@@ -3252,9 +3566,14 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
3252
3566
  sideOffset: 4,
3253
3567
  avoidCollisions: true,
3254
3568
  zIndex: Z_INDICES.floatingBar,
3255
- "aria-label": `Edit filter for ${field.label}`,
3569
+ "aria-label": strings.editFilterFor(field.label),
3256
3570
  noPadding: true,
3571
+ style: wide ? {
3572
+ width: "max-content",
3573
+ maxWidth: POPOVER_WIDE_MAX_WIDTH
3574
+ } : void 0,
3257
3575
  children: /* @__PURE__ */ jsxs(PopoverPanel, {
3576
+ $wide: wide,
3258
3577
  onKeyDown: handleKeyDown,
3259
3578
  children: [/* @__PURE__ */ jsxs(Main, {
3260
3579
  $valueless: valueless,
@@ -3267,9 +3586,9 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
3267
3586
  }), showOperatorSelector ? /* @__PURE__ */ jsx(OperatorMenu, {
3268
3587
  trigger: /* @__PURE__ */ jsxs(InlineOperatorTrigger, {
3269
3588
  type: "button",
3270
- "aria-label": "Operator",
3589
+ "aria-label": strings.operator,
3271
3590
  $size: resolvedSize,
3272
- children: [getOperatorLabel(operator, field.type), /* @__PURE__ */ jsx(CaretIcon, { "aria-hidden": "true" })]
3591
+ children: [getOperatorLabel(operator, field.type, strings), /* @__PURE__ */ jsx(CaretIcon, { "aria-hidden": "true" })]
3273
3592
  }),
3274
3593
  align: "start",
3275
3594
  portal: true,
@@ -3277,9 +3596,9 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
3277
3596
  children: operatorOptions.map((op) => /* @__PURE__ */ jsx(DropdownMenu_default.Item, {
3278
3597
  size: resolvedSize,
3279
3598
  onClick: () => onChangeOperator(op),
3280
- children: getOperatorLabel(op, field.type)
3599
+ children: getOperatorLabel(op, field.type, strings)
3281
3600
  }, op))
3282
- }) : /* @__PURE__ */ jsx("span", { children: getOperatorLabel(operator, field.type) })]
3601
+ }) : /* @__PURE__ */ jsx("span", { children: getOperatorLabel(operator, field.type, strings) })]
3283
3602
  }), !valueless ? /* @__PURE__ */ jsx(ValueSlot, {
3284
3603
  ref: valueSlotRef,
3285
3604
  children: valueControlSlot
@@ -3351,11 +3670,12 @@ const CountChip = styled.span`
3351
3670
  */
3352
3671
  const RulesPill = forwardRef(function RulesPill({ compound, enabled, onClick, isOpen = false, "aria-label": ariaLabel, "data-test": dataTest, size, ...rest }, ref) {
3353
3672
  const resolvedSize = useFilterBarSize(size);
3673
+ const strings = usePDSStrings();
3354
3674
  if (!enabled) return null;
3355
3675
  const count = countRules(compound);
3356
3676
  const hasCount = count > 0;
3357
3677
  const variant = isOpen ? "active" : "default";
3358
- const accessibleName = hasCount ? `Rules ${count}` : "Rules";
3678
+ const accessibleName = hasCount ? strings.rulesWithCount(count) : strings.rules;
3359
3679
  return /* @__PURE__ */ jsxs(PillShell, {
3360
3680
  ref,
3361
3681
  variant,
@@ -3365,7 +3685,7 @@ const RulesPill = forwardRef(function RulesPill({ compound, enabled, onClick, is
3365
3685
  "data-test": dataTest ?? "rules-pill__trigger",
3366
3686
  "aria-expanded": isOpen,
3367
3687
  ...rest,
3368
- children: [/* @__PURE__ */ jsx(Label, { children: "Rules" }), hasCount && /* @__PURE__ */ jsx(CountChip, {
3688
+ children: [/* @__PURE__ */ jsx(Label, { children: strings.rules }), hasCount && /* @__PURE__ */ jsx(CountChip, {
3369
3689
  $variant: variant,
3370
3690
  $size: resolvedSize,
3371
3691
  "data-test": "rules-pill__count",
@@ -3913,6 +4233,7 @@ function useStableFieldIds(fieldIds) {
3913
4233
  return stable.current;
3914
4234
  }
3915
4235
  function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = true, relativeDatesEnabled = false, dateTimesEnabled = false, singleUseFields = false, size = "md", valueControlResolver }) {
4236
+ const strings = usePDSStrings();
3916
4237
  const filterState = useFilterStateV2({
3917
4238
  registry,
3918
4239
  initialState,
@@ -4018,9 +4339,10 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
4018
4339
  value: { size },
4019
4340
  children: /* @__PURE__ */ jsxs(Bar, {
4020
4341
  role: "toolbar",
4021
- "aria-label": "Filter bar",
4342
+ "aria-label": strings.filterBar,
4022
4343
  children: [filterState.advancedRulesEnabled ? /* @__PURE__ */ jsx(AdvancedFilterRulesPopover, {
4023
4344
  registry,
4345
+ dateTimesEnabled,
4024
4346
  compound: filterState.state.compound,
4025
4347
  open: rulesPopoverOpen,
4026
4348
  onOpenChange: setRulesPopoverOpen,
@@ -4060,6 +4382,7 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
4060
4382
  return /* @__PURE__ */ jsx(FilterPopover, {
4061
4383
  field,
4062
4384
  operator: rule.operator,
4385
+ wide: isMinutePrecisionDate(field, rule.operator, dateTimesEnabled) && carriesDateRange(rule.operator, field.type),
4063
4386
  onChangeOperator: (op) => {
4064
4387
  const { relativeDate: _staleRelativeDate, ...rest } = rule;
4065
4388
  filterState.updateTopLevelRule(rule.id, {
@@ -4431,4 +4754,4 @@ function decodeBase64(input) {
4431
4754
  //#endregion
4432
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 };
4433
4756
 
4434
- //# sourceMappingURL=TableControls-RS_ozBsI.mjs.map
4757
+ //# sourceMappingURL=TableControls-B5UGCoO-.mjs.map