@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.
- package/CHANGELOG.md +281 -0
- package/dist/Accordion.d.mts +1 -1
- package/dist/AccordionItem.d.mts +1 -1
- package/dist/{Action-B-AiHknZ.d.mts → Action-C6yvIekn.d.mts} +3 -3
- package/dist/Action.d.mts +1 -1
- package/dist/AdvancedFilterRuleRow.d.mts +4 -2
- package/dist/AdvancedFilterRulesPopover.d.mts +5 -3
- package/dist/ArrayValueControl.d.mts +1 -1
- package/dist/Attribute.d.mts +3 -3
- package/dist/{Badge-COqUjFQu.mjs → Badge-uY8l1p1R.mjs} +2 -2
- package/dist/{Badge-COqUjFQu.mjs.map → Badge-uY8l1p1R.mjs.map} +1 -1
- package/dist/BooleanValueControl.d.mts +1 -1
- package/dist/{Breadcrumb-DRFY46ZW.d.mts → Breadcrumb-Tjk9FyiF.d.mts} +1 -1
- package/dist/Breadcrumb.d.mts +1 -1
- package/dist/{Breadcrumbs-DUSbT1I7.d.mts → Breadcrumbs-DSCbZmAx.d.mts} +2 -2
- package/dist/{Breadcrumbs-DXS7rU7_.mjs → Breadcrumbs-EQm5iiRA.mjs} +8 -8
- package/dist/{Breadcrumbs-DXS7rU7_.mjs.map → Breadcrumbs-EQm5iiRA.mjs.map} +1 -1
- package/dist/Breadcrumbs.d.mts +1 -1
- package/dist/{Button-xZ6DC5XC.d.mts → Button-22DkIpYp.d.mts} +4 -4
- package/dist/Button.d.mts +1 -1
- package/dist/{Calendar-dPmo2dkj.d.mts → Calendar-DANGQNlH.d.mts} +1 -1
- package/dist/Calendar.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/{Card-Dz6jqJuJ.mjs → Card-BXNxWX5C.mjs} +4 -4
- package/dist/{Card-Dz6jqJuJ.mjs.map → Card-BXNxWX5C.mjs.map} +1 -1
- package/dist/{Card-CUeM8Lh8.d.mts → Card-DQE1J3gk.d.mts} +3 -3
- package/dist/Card.d.mts +1 -1
- package/dist/{CardV2-D9p7D7jX.mjs → CardV2-Ds6e577k.mjs} +9 -9
- package/dist/{CardV2-D9p7D7jX.mjs.map → CardV2-Ds6e577k.mjs.map} +1 -1
- package/dist/{Checkbox-DQynkc_I.mjs → Checkbox-BQC_SmBt.mjs} +4 -4
- package/dist/{Checkbox-DQynkc_I.mjs.map → Checkbox-BQC_SmBt.mjs.map} +1 -1
- package/dist/{Checkbox-DoJpxPEz.d.mts → Checkbox-CsJlWz-r.d.mts} +1 -1
- package/dist/Checkbox.d.mts +1 -1
- package/dist/CheckboxGroupField-DjKp63Dr.d.mts +25 -0
- package/dist/CheckboxGroupField.d.mts +2 -25
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/{Combobox-D7hyf-jA.d.mts → Combobox-D1iXiYGV.d.mts} +3 -3
- package/dist/{Combobox-C_kCY3P3.mjs → Combobox-MCaDc7h6.mjs} +10 -10
- package/dist/{Combobox-C_kCY3P3.mjs.map → Combobox-MCaDc7h6.mjs.map} +1 -1
- package/dist/Combobox.d.mts +2 -2
- package/dist/{ComboboxBase-BMCY6O7Y.d.mts → ComboboxBase-DXhu2YSh.d.mts} +6 -6
- package/dist/ComboboxBase.d.mts +1 -1
- package/dist/{ComboboxMultiSelect-L0KYMkmm.d.mts → ComboboxMultiSelect-BSyJc46m.d.mts} +2 -2
- package/dist/ComboboxMultiSelect.d.mts +1 -1
- package/dist/{ComboboxSingleSelect-v5oNrJ7M.d.mts → ComboboxSingleSelect-Dg_6h4iB.d.mts} +4 -4
- package/dist/ComboboxSingleSelect.d.mts +1 -1
- package/dist/{CompactBar-DjFaUAsN.d.mts → CompactBar-CVGNq7Zu.d.mts} +3 -3
- package/dist/CompactBar.d.mts +1 -1
- package/dist/{ConfigFormGroup-DLOZOuLf.mjs → ConfigFormGroup-CidT_cE9.mjs} +2 -2
- package/dist/{ConfigFormGroup-DLOZOuLf.mjs.map → ConfigFormGroup-CidT_cE9.mjs.map} +1 -1
- package/dist/{ControlBar-Cegjxa6-.d.mts → ControlBar-K43YI-LU.d.mts} +17 -2
- package/dist/ControlBar.d.mts +1 -1
- package/dist/DataTable.d.mts +6 -3
- package/dist/{DateField-Dk5ykLdr.d.mts → DateField-DY3xCygL.d.mts} +2 -2
- package/dist/DateField.d.mts +1 -1
- package/dist/{DatePicker-Dtvv0V45.d.mts → DatePicker-C56kJLiX.d.mts} +2 -2
- package/dist/{DatePicker-C7z1yodK.mjs → DatePicker-CKk6Hnj2.mjs} +40 -8
- package/dist/DatePicker-CKk6Hnj2.mjs.map +1 -0
- package/dist/DatePicker.d.mts +1 -1
- package/dist/{DateRangePicker-HPYsa4wC.d.mts → DateRangePicker-C96NKOon.d.mts} +3 -3
- package/dist/DateRangePicker.d.mts +1 -1
- package/dist/DateRangeValueControl.d.mts +2 -2
- package/dist/DateValueControl.d.mts +1 -1
- package/dist/{DropdownButton-CQrFHOIW.mjs → DropdownButton-B-cYK2oi.mjs} +3 -3
- package/dist/{DropdownButton-CQrFHOIW.mjs.map → DropdownButton-B-cYK2oi.mjs.map} +1 -1
- package/dist/DropdownButton.d.mts +2 -2
- package/dist/{DropdownMenu-D1qvgGTZ.d.mts → DropdownMenu-BwPtzVWg.d.mts} +2 -2
- package/dist/{DropdownMenu-rm9Nnxn7.mjs → DropdownMenu-CedsmO5h.mjs} +2 -2
- package/dist/{DropdownMenu-rm9Nnxn7.mjs.map → DropdownMenu-CedsmO5h.mjs.map} +1 -1
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{ErrorProps-B8-Mqf1W.d.mts → ErrorProps-C-sfKFxK.d.mts} +1 -1
- package/dist/ErrorProps.d.mts +1 -1
- package/dist/{FieldRegistry-0LmSQ-jc.d.mts → FieldRegistry-C2eIbP1X.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-BMM4Swbt.d.mts → FilterBar-BNbMjWDC.d.mts} +4 -4
- package/dist/FilterBar.d.mts +1 -1
- package/dist/FilterPickerMenu.d.mts +3 -3
- package/dist/FilterPill.d.mts +1 -1
- package/dist/FilterPopover.d.mts +8 -2
- package/dist/FloatValueControl.d.mts +1 -1
- package/dist/{FormControl-DXrxoJLl.mjs → FormControl-C4CiA0H-.mjs} +4 -4
- package/dist/{FormControl-DXrxoJLl.mjs.map → FormControl-C4CiA0H-.mjs.map} +1 -1
- package/dist/{FormControl-Dg8doZq2.d.mts → FormControl-DICrNHcc.d.mts} +2 -2
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControlLabel.d.mts +1 -1
- package/dist/{FormField-Crp3F-hv.mjs → FormField-CB0yCMro.mjs} +16 -16
- package/dist/{FormField-Crp3F-hv.mjs.map → FormField-CB0yCMro.mjs.map} +1 -1
- package/dist/{FormField-BeLigf9j.d.mts → FormField-D97xQCxF.d.mts} +2 -2
- package/dist/FormField.d.mts +1 -1
- package/dist/{Grid-eMLuyRzV.mjs → Grid-D0mlxk8_.mjs} +1 -1
- package/dist/{Grid-eMLuyRzV.mjs.map → Grid-D0mlxk8_.mjs.map} +1 -1
- package/dist/{Header-DxJ6TfPw.d.mts → Header-Ca554S1F.d.mts} +1 -1
- package/dist/Header.d.mts +1 -1
- package/dist/{HelperTooltip-DcyrpEZI.d.mts → HelperTooltip-Dk2eqeC_.d.mts} +2 -2
- package/dist/HelperTooltip.d.mts +1 -1
- package/dist/HighlightedText.d.mts +61 -0
- package/dist/{HoverCopyableField-12bBuG-d.mjs → HoverCopyableField-CewUtxZl.mjs} +6 -6
- package/dist/{HoverCopyableField-12bBuG-d.mjs.map → HoverCopyableField-CewUtxZl.mjs.map} +1 -1
- package/dist/I18nContext-DXcImEuM.d.mts +22 -0
- package/dist/I18nContext.d.mts +2 -0
- package/dist/{IconButton-CCLMYWVN.mjs → IconButton-H5vDZOdo.mjs} +3 -3
- package/dist/{IconButton-CCLMYWVN.mjs.map → IconButton-H5vDZOdo.mjs.map} +1 -1
- package/dist/{IconButton-BUMMN-gH.d.mts → IconButton-Vq0MUaNj.d.mts} +2 -2
- package/dist/IconButton.d.mts +1 -1
- package/dist/ImageTile.d.mts +1 -1
- package/dist/InlineCombobox.d.mts +1 -1
- package/dist/InlineInput.d.mts +1 -1
- package/dist/{Input-2N2e5JCf.d.mts → Input-BRe0qyUe.d.mts} +3 -3
- package/dist/{Input-Cl4o41k4.mjs → Input-CY14-YeD.mjs} +4 -4
- package/dist/{Input-Cl4o41k4.mjs.map → Input-CY14-YeD.mjs.map} +1 -1
- package/dist/Input.d.mts +1 -1
- package/dist/{InputProps-TWzig3QO.d.mts → InputProps-B2ngFfvF.d.mts} +2 -2
- package/dist/InputProps.d.mts +1 -1
- package/dist/IntegerValueControl.d.mts +1 -1
- package/dist/{Link-I9Bklen-.mjs → Link-BSuXrvTu.mjs} +2 -2
- package/dist/{Link-I9Bklen-.mjs.map → Link-BSuXrvTu.mjs.map} +1 -1
- package/dist/Link.d.mts +1 -1
- package/dist/{ListBox-sqeLBiKS.mjs → ListBox-2aYWNlO_.mjs} +13 -10
- package/dist/{ListBox-sqeLBiKS.mjs.map → ListBox-2aYWNlO_.mjs.map} +1 -1
- package/dist/{ListBox-BcoXOt73.d.mts → ListBox-DzZY7IFz.d.mts} +7 -7
- package/dist/ListBox.d.mts +1 -1
- package/dist/ListBoxField-DT_-4_Ct.d.mts +51 -0
- package/dist/ListBoxField.d.mts +2 -51
- package/dist/{LoadingShimmer-dRSkdlqD.mjs → LoadingShimmer-Bqjdut7i.mjs} +1 -1
- package/dist/{LoadingShimmer-dRSkdlqD.mjs.map → LoadingShimmer-Bqjdut7i.mjs.map} +1 -1
- package/dist/LoadingShimmer.d.mts +1 -1
- package/dist/{LogicRow-DXywXdYt.d.mts → LogicRow-l66qss7_.d.mts} +3 -3
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +2 -2
- package/dist/{Menu-BekLwm8w.d.mts → Menu-DQXbnpDB.d.mts} +3 -3
- package/dist/{Menu-CwlI7BMN.mjs → Menu-Dw6Rcpk6.mjs} +2 -2
- package/dist/{Menu-CwlI7BMN.mjs.map → Menu-Dw6Rcpk6.mjs.map} +1 -1
- package/dist/Menu.d.mts +1 -1
- package/dist/{MiddleTruncatedText-CO58jrNF.mjs → MiddleTruncatedText-DoTyfMem.mjs} +2 -2
- package/dist/{MiddleTruncatedText-CO58jrNF.mjs.map → MiddleTruncatedText-DoTyfMem.mjs.map} +1 -1
- package/dist/{Modal-ymxlGYKt.d.mts → Modal-Bz5Rer1b.d.mts} +2 -2
- package/dist/{Modal-CMiFcXC9.mjs → Modal-dpBu2MKp.mjs} +6 -6
- package/dist/{Modal-CMiFcXC9.mjs.map → Modal-dpBu2MKp.mjs.map} +1 -1
- package/dist/Modal.d.mts +1 -1
- package/dist/{PageHeader-D_0p7UK_.mjs → PageHeader-CLO8SMXV.mjs} +3 -3
- package/dist/{PageHeader-D_0p7UK_.mjs.map → PageHeader-CLO8SMXV.mjs.map} +1 -1
- package/dist/PageHeader.d.mts +1 -1
- package/dist/{PageSelector-Bxulu6vU.d.mts → PageSelector--kFA7Xt6.d.mts} +3 -3
- package/dist/PageSelector.d.mts +1 -1
- package/dist/{Pagination-Co9CfyFQ.mjs → Pagination-BEddsarh.mjs} +40 -49
- package/dist/Pagination-BEddsarh.mjs.map +1 -0
- package/dist/{Pagination-Dg-4O7F7.d.mts → Pagination-CglxJr3f.d.mts} +2 -2
- package/dist/Pagination.d.mts +1 -1
- package/dist/{Pii-JGV9gP95.mjs → Pii-Ct7yDY7d.mjs} +2 -2
- package/dist/{Pii-JGV9gP95.mjs.map → Pii-Ct7yDY7d.mjs.map} +1 -1
- package/dist/{PillShell-BA7KK1zS.d.mts → PillShell-CvJzkRFh.d.mts} +2 -2
- package/dist/PillShell.d.mts +1 -1
- package/dist/{Popover-ZAj03lws.mjs → Popover-532iYFek.mjs} +3 -3
- package/dist/{Popover-ZAj03lws.mjs.map → Popover-532iYFek.mjs.map} +1 -1
- package/dist/{ProgressIndicator-D85HQGSx.d.mts → ProgressIndicator-Cleq0Tfb.d.mts} +1 -1
- package/dist/{ProgressIndicator-CQg08vuA.mjs → ProgressIndicator-STyTM0Hq.mjs} +1 -1
- package/dist/{ProgressIndicator-CQg08vuA.mjs.map → ProgressIndicator-STyTM0Hq.mjs.map} +1 -1
- package/dist/ProgressIndicator.d.mts +1 -1
- package/dist/{PseudoClassProps-BHs8TX_3.d.mts → PseudoClassProps-B2R2dyr3.d.mts} +1 -1
- package/dist/PseudoClassProps.d.mts +1 -1
- package/dist/{Radio-CYV290JI.mjs → Radio-BtomkCkL.mjs} +2 -2
- package/dist/{Radio-CYV290JI.mjs.map → Radio-BtomkCkL.mjs.map} +1 -1
- package/dist/{RadioGroup-Cq3KV1TN.d.mts → RadioGroup-B3B4PCz6.d.mts} +1 -1
- package/dist/{RadioGroup-lWMMtu9V.mjs → RadioGroup-B6UaoJRd.mjs} +2 -2
- package/dist/{RadioGroup-lWMMtu9V.mjs.map → RadioGroup-B6UaoJRd.mjs.map} +1 -1
- package/dist/RadioGroup.d.mts +1 -1
- package/dist/{RangeCalendar-Mh7h74Tp.d.mts → RangeCalendar-C24q-nvR.d.mts} +2 -2
- package/dist/RangeCalendar.d.mts +1 -1
- package/dist/RangeCalendarPresets.d.mts +1 -1
- package/dist/{RouterContext-B3IU1jb0.d.mts → RouterContext-BhPPG7d3.d.mts} +2 -2
- package/dist/{RouterContext-CsPnkNdI.mjs → RouterContext-nPSb55p9.mjs} +1 -1
- package/dist/{RouterContext-CsPnkNdI.mjs.map → RouterContext-nPSb55p9.mjs.map} +1 -1
- package/dist/RouterContext.d.mts +1 -1
- package/dist/{RouterLink-CwAqTLC2.d.mts → RouterLink-IDO10cDE.d.mts} +2 -2
- package/dist/RouterLink.d.mts +1 -1
- package/dist/RuleEditorFields.d.mts +4 -2
- package/dist/RulesPill.d.mts +1 -1
- package/dist/{SearchInput-BGyUUcoz.d.mts → SearchInput-7pBMxhuN.d.mts} +2 -2
- package/dist/SearchInput.d.mts +1 -1
- package/dist/SectionHeading.d.mts +1 -1
- package/dist/{SegmentedControl-DgDabSgr.d.mts → SegmentedControl-B9yo9yMy.d.mts} +1 -1
- package/dist/{SegmentedControl-BEbIcV3g.mjs → SegmentedControl-BNVwf7nL.mjs} +2 -2
- package/dist/{SegmentedControl-BEbIcV3g.mjs.map → SegmentedControl-BNVwf7nL.mjs.map} +1 -1
- package/dist/SegmentedControl.d.mts +1 -1
- package/dist/{Select-wqTtGyga.d.mts → Select-D7_npfZr.d.mts} +3 -3
- package/dist/{Select-yC2t_gZb.mjs → Select-DD7mFvR8.mjs} +7 -7
- package/dist/{Select-yC2t_gZb.mjs.map → Select-DD7mFvR8.mjs.map} +1 -1
- package/dist/Select.d.mts +1 -1
- package/dist/SmartTextInput.d.mts +107 -0
- package/dist/SmartTextInputCodeDialog.d.mts +18 -0
- package/dist/SmartTextInputField.d.mts +25 -0
- package/dist/SmartTextInputFunctionDialog.d.mts +37 -0
- package/dist/SmartTextInputListbox.d.mts +26 -0
- package/dist/SmartTextInputPopover.d.mts +45 -0
- package/dist/{Spacer-BFOuo0sZ.mjs → Spacer-J_HuhxX2.mjs} +1 -1
- package/dist/{Spacer-BFOuo0sZ.mjs.map → Spacer-J_HuhxX2.mjs.map} +1 -1
- package/dist/{Spinner-BlAg8_OX.mjs → Spinner-uVZyOh1T.mjs} +1 -1
- package/dist/{Spinner-BlAg8_OX.mjs.map → Spinner-uVZyOh1T.mjs.map} +1 -1
- package/dist/{Stack-Bkn0TUDe.mjs → Stack-BkC7FCdF.mjs} +1 -1
- package/dist/{Stack-Bkn0TUDe.mjs.map → Stack-BkC7FCdF.mjs.map} +1 -1
- package/dist/{Stack-CYqjBXe8.d.mts → Stack-opuYfQvc.d.mts} +1 -1
- package/dist/Stack.d.mts +1 -1
- package/dist/{StatusIndicator-DT2zNbkp.mjs → StatusIndicator-akDwBiBW.mjs} +1 -1
- package/dist/{StatusIndicator-DT2zNbkp.mjs.map → StatusIndicator-akDwBiBW.mjs.map} +1 -1
- package/dist/{Sticker-BLbgJxcH.mjs → Sticker-DdhSpTcV.mjs} +3 -3
- package/dist/{Sticker-BLbgJxcH.mjs.map → Sticker-DdhSpTcV.mjs.map} +1 -1
- package/dist/{Sticker-BmyKaxwx.d.mts → Sticker-rxBNVYlX.d.mts} +4 -4
- package/dist/Sticker.d.mts +1 -1
- package/dist/StringValueControl.d.mts +1 -1
- package/dist/Tab.d.mts +1 -1
- package/dist/{TabBar-Bj84q1Mr.mjs → TabBar-DBOPWUUa.mjs} +6 -9
- package/dist/TabBar-DBOPWUUa.mjs.map +1 -0
- package/dist/{Table-WqNfjasd.mjs → Table--o4ZLRbb.mjs} +4 -4
- package/dist/{Table-WqNfjasd.mjs.map → Table--o4ZLRbb.mjs.map} +1 -1
- package/dist/{Table-DhdHUQ8V.d.mts → Table-Bt7zAlgQ.d.mts} +1 -1
- package/dist/Table.d.mts +1 -1
- package/dist/{TableBody-qoSvQDds.d.mts → TableBody-9AYpXi2y.d.mts} +1 -1
- package/dist/TableBody.d.mts +1 -1
- package/dist/{TableBox-obl64W5Y.mjs → TableBox-BGabyY7E.mjs} +10 -10
- package/dist/{TableBox-obl64W5Y.mjs.map → TableBox-BGabyY7E.mjs.map} +1 -1
- package/dist/TableBox.d.mts +2 -2
- package/dist/{TableBoxCell-DzYMx4Ju.d.mts → TableBoxCell-6ovTrboM.d.mts} +6 -6
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/TableBoxField-mGTYb-Bz.d.mts +103 -0
- package/dist/TableBoxField.d.mts +2 -103
- package/dist/{TableBoxRow-B4rFCvWK.d.mts → TableBoxRow-56QatuNm.d.mts} +3 -3
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-qMKcVuTL.d.mts → TableBoxRowActions-9rR-k_4H.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableCell-CGPQRc5g.d.mts → TableCell-WD0ultKh.d.mts} +2 -2
- package/dist/TableCell.d.mts +1 -1
- package/dist/{TableControls-RS_ozBsI.mjs → TableControls-B5UGCoO-.mjs} +629 -306
- package/dist/TableControls-B5UGCoO-.mjs.map +1 -0
- package/dist/{TableControls-WP78qtET.d.mts → TableControls-DVO-obFo.d.mts} +6 -3
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-DZIZSyfX.d.mts → TableControlsContext-BDl9k4o4.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableHead-36j-_oyn.d.mts → TableHead-DqcFsWpz.d.mts} +1 -1
- package/dist/TableHead.d.mts +1 -1
- package/dist/{TableHeaderCell-C7gp9j1X.d.mts → TableHeaderCell-C1PJHhXZ.d.mts} +1 -1
- package/dist/TableHeaderCell.d.mts +1 -1
- package/dist/{TableLayout-CQqIV0vj.d.mts → TableLayout-B4qzMWXH.d.mts} +1 -1
- package/dist/TableLayout.d.mts +1 -1
- package/dist/{TableRow-BJZM8I8i.d.mts → TableRow-B1yeAiVf.d.mts} +2 -2
- package/dist/TableRow.d.mts +1 -1
- package/dist/TableTH.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-Dwy_9FBz.d.mts → TableViewConfigurationDropdown-DBdUHK__.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/{TechnicalSticker-CL0zkOAj.mjs → TechnicalSticker-CALVwnrT.mjs} +4 -4
- package/dist/{TechnicalSticker-CL0zkOAj.mjs.map → TechnicalSticker-CALVwnrT.mjs.map} +1 -1
- package/dist/{Text-BdluS7Fy.mjs → Text-CSwFifQF.mjs} +1 -1
- package/dist/{Text-BdluS7Fy.mjs.map → Text-CSwFifQF.mjs.map} +1 -1
- package/dist/{Text-DbtTa83E.d.mts → Text-D4GzsXFA.d.mts} +3 -3
- package/dist/Text.d.mts +1 -1
- package/dist/{TextArea-CbxF6u7z.d.mts → TextArea-BL8BTgwk.d.mts} +2 -2
- package/dist/{TextArea-CfZr5Sk4.mjs → TextArea-kOkhZxNR.mjs} +2 -2
- package/dist/{TextArea-CfZr5Sk4.mjs.map → TextArea-kOkhZxNR.mjs.map} +1 -1
- package/dist/TextArea.d.mts +1 -1
- package/dist/{TextUnderlineTooltip-BgLQuK38.d.mts → TextUnderlineTooltip-Sdxqsr6y.d.mts} +2 -2
- package/dist/TextUnderlineTooltip.d.mts +1 -1
- package/dist/Tile.d.mts +1 -1
- package/dist/Toast.d.mts +1 -1
- package/dist/{Toggle-D4ZaUcVt.mjs → Toggle-CZF6iBql.mjs} +4 -4
- package/dist/{Toggle-D4ZaUcVt.mjs.map → Toggle-CZF6iBql.mjs.map} +1 -1
- package/dist/{Toggle-BYMLrPXk.d.mts → Toggle-cUtrUIIO.d.mts} +1 -1
- package/dist/Toggle.d.mts +1 -1
- package/dist/{Tooltip-C0FuZS1C.mjs → Tooltip-B-0VRuKT.mjs} +2 -2
- package/dist/{Tooltip-C0FuZS1C.mjs.map → Tooltip-B-0VRuKT.mjs.map} +1 -1
- package/dist/{Tooltip-4pshzB_i.d.mts → Tooltip-CSM977L6.d.mts} +2 -2
- package/dist/Tooltip.d.mts +1 -1
- package/dist/{TruncatedText-O7hE3w0O.d.mts → TruncatedText-CCUrvW2a.d.mts} +1 -1
- package/dist/VersionHistory.d.mts +1 -1
- package/dist/{VersionHistoryItem-CIcEgl0K.d.mts → VersionHistoryItem-DBjL9S5_.d.mts} +1 -1
- package/dist/VersionHistoryItem.d.mts +1 -1
- package/dist/WizardModal.d.mts +3 -3
- package/dist/{accordionTitleTypography-CNB1w3kn.d.mts → accordionTitleTypography--GAczLo7.d.mts} +2 -2
- package/dist/accordionTitleTypography.d.mts +1 -1
- package/dist/chainTypes-dY6jc22J.d.mts +17 -0
- package/dist/{codec-BXVBsB8Y.d.mts → codec-D2uE0_oJ.d.mts} +2 -2
- package/dist/codec.d.mts +1 -1
- package/dist/{color-3UO63ocQ.d.mts → color-DuKiTH5t.d.mts} +2 -2
- package/dist/components/Accordion/index.d.mts +1 -1
- package/dist/components/Accordion/index.mjs +2 -2
- package/dist/components/Attribute/index.mjs +4 -4
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Banner/index.mjs +1 -1
- package/dist/components/BottomPanel/index.mjs +3 -3
- package/dist/components/Breadcrumbs/index.d.mts +1 -1
- package/dist/components/Breadcrumbs/index.mjs +1 -1
- package/dist/components/Button/index.d.mts +2 -2
- package/dist/components/Button/index.mjs +1 -1
- package/dist/components/ButtonGroup/index.mjs +2 -2
- package/dist/components/Card/index.d.mts +2 -2
- package/dist/components/Card/index.mjs +1 -1
- package/dist/components/CardV2/index.d.mts +1 -1
- package/dist/components/CardV2/index.mjs +1 -1
- package/dist/components/Checkbox/index.d.mts +1 -1
- package/dist/components/Checkbox/index.mjs +1 -1
- package/dist/components/CodeHighlight/index.mjs +2 -2
- package/dist/components/Combobox/index.d.mts +2 -2
- package/dist/components/Combobox/index.mjs +1 -1
- package/dist/components/ConfigFormGroup/index.mjs +2 -2
- package/dist/components/DataTable/TableControls/index.d.mts +19 -19
- package/dist/components/DataTable/TableControls/index.mjs +1 -1
- package/dist/components/DataTable/index.d.mts +2 -2
- package/dist/components/DataTable/index.mjs +83 -60
- package/dist/components/DataTable/index.mjs.map +1 -1
- package/dist/components/DataTable/types.d.mts +9 -2
- package/dist/components/DatePicker/index.d.mts +5 -5
- package/dist/components/DatePicker/index.mjs +1 -1
- package/dist/components/DropdownButton/index.mjs +1 -1
- package/dist/components/DropdownMenu/index.d.mts +1 -1
- package/dist/components/DropdownMenu/index.mjs +1 -1
- package/dist/components/FloatingPanel/index.mjs +3 -3
- package/dist/components/FormControl/index.d.mts +2 -2
- package/dist/components/FormControl/index.mjs +2 -2
- package/dist/components/FormField/index.d.mts +6 -6
- package/dist/components/FormField/index.mjs +1 -1
- package/dist/components/Grid/index.mjs +1 -1
- package/dist/components/HoverCopyableField/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs +7 -7
- package/dist/components/Input/index.d.mts +1 -1
- package/dist/components/Input/index.mjs +1 -1
- package/dist/components/Link/index.mjs +1 -1
- package/dist/components/ListBox/index.d.mts +3 -3
- package/dist/components/ListBox/index.mjs +1 -1
- package/dist/components/LoadingShimmer/index.mjs +1 -1
- package/dist/components/MaskedInput/index.mjs +1 -1
- package/dist/components/Menu/index.d.mts +1 -1
- package/dist/components/Menu/index.mjs +1 -1
- package/dist/components/Modal/index.d.mts +1 -1
- package/dist/components/Modal/index.mjs +1 -1
- package/dist/components/PageHeader/index.mjs +1 -1
- package/dist/components/Pagination/index.d.mts +3 -3
- package/dist/components/Pagination/index.mjs +1 -1
- package/dist/components/Pii/index.mjs +1 -1
- package/dist/components/Popover/index.mjs +1 -1
- package/dist/components/ProgressBar/index.mjs +1 -1
- package/dist/components/ProgressIndicator/index.d.mts +1 -1
- package/dist/components/ProgressIndicator/index.mjs +1 -1
- package/dist/components/Radio/index.mjs +1 -1
- package/dist/components/RadioGroup/index.d.mts +1 -1
- package/dist/components/RadioGroup/index.mjs +1 -1
- package/dist/components/RightPanel/index.mjs +4 -4
- package/dist/components/SegmentedControl/index.d.mts +1 -1
- package/dist/components/SegmentedControl/index.mjs +1 -1
- package/dist/components/Select/index.d.mts +1 -1
- package/dist/components/Select/index.mjs +1 -1
- package/dist/components/Slider/index.mjs +1 -1
- package/dist/components/SmartTextInput/index.d.mts +5 -0
- package/dist/components/SmartTextInput/index.mjs +2035 -0
- package/dist/components/SmartTextInput/index.mjs.map +1 -0
- package/dist/components/SmartTextInput/parser/method-chain/parser.mjs +1 -1
- package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
- package/dist/components/SmartTextInput/parser/smart-text/parser.mjs +1 -1
- package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +3 -72
- package/dist/components/Spacer/index.mjs +1 -1
- package/dist/components/Spinner/index.mjs +1 -1
- package/dist/components/Stack/index.d.mts +1 -1
- package/dist/components/Stack/index.mjs +1 -1
- package/dist/components/StatusIndicator/index.mjs +1 -1
- package/dist/components/Sticker/index.d.mts +1 -1
- package/dist/components/Sticker/index.mjs +1 -1
- package/dist/components/TabBar/index.mjs +1 -1
- package/dist/components/Table/index.d.mts +8 -8
- package/dist/components/Table/index.mjs +1 -1
- package/dist/components/TableBox/index.d.mts +2 -2
- package/dist/components/TableBox/index.mjs +1 -1
- package/dist/components/TechnicalSticker/index.mjs +1 -1
- package/dist/components/Text/index.d.mts +1 -1
- package/dist/components/Text/index.mjs +1 -1
- package/dist/components/TextArea/index.d.mts +1 -1
- package/dist/components/TextArea/index.mjs +1 -1
- package/dist/components/Tile/index.mjs +4 -4
- package/dist/components/Toast/index.mjs +1 -1
- package/dist/components/Toggle/index.d.mts +1 -1
- package/dist/components/Toggle/index.mjs +1 -1
- package/dist/components/Tooltip/index.d.mts +3 -3
- package/dist/components/Tooltip/index.mjs +1 -1
- package/dist/components/VersionHistory/index.d.mts +1 -1
- package/dist/components/VersionHistory/index.mjs +8 -8
- package/dist/compound-expression.d.mts +1 -1
- package/dist/{constants-BOxzLX-O.d.mts → constants-BiOvZGO5.d.mts} +1 -1
- package/dist/constants.d.mts +1 -1
- package/dist/{createPath-OeTC9kvS.d.mts → createPath-B8EZDtSz.d.mts} +2 -2
- package/dist/createPath.d.mts +1 -1
- package/dist/{date-filter-BnzR6NxT.mjs → date-filter-CWgCXz85.mjs} +1 -1
- package/dist/{date-filter-BnzR6NxT.mjs.map → date-filter-CWgCXz85.mjs.map} +1 -1
- package/dist/{date-range-rule-value-BRp5Bi7R.d.mts → date-range-rule-value-DObVM8xO.d.mts} +2 -2
- package/dist/date-range-rule-value.d.mts +1 -1
- package/dist/{date-rule-intent-CDBtV0ET.d.mts → date-rule-intent-DhMMe_wq.d.mts} +3 -3
- package/dist/date-rule-intent.d.mts +1 -1
- package/dist/display.d.mts +12 -4
- package/dist/fieldPickerOptions.d.mts +5 -3
- package/dist/{filter-size-context-CqvQ190x.d.mts → filter-size-context-DaBdvJHf.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/format-date-value.d.mts +6 -1
- package/dist/formatDateTime-mPH4DsDC.d.mts +30 -0
- package/dist/formatDateTime.d.mts +2 -0
- package/dist/helpers.d.mts +24 -10
- package/dist/i18n-UiE7OC4k.mjs +203 -0
- package/dist/i18n-UiE7OC4k.mjs.map +1 -0
- package/dist/{index-BXSe73Xn.d.mts → index-Blo6W_k0.d.mts} +2 -2
- package/dist/{index-wKK9f9La.d.mts → index-CTcM_LlP.d.mts} +4 -4
- package/dist/{index-CyAok7As.d.mts → index-CeUb5INA.d.mts} +2 -2
- package/dist/index-bHnO4ZKt.d.mts +1 -0
- package/dist/index-kxcPLmUx2.d.mts +1 -0
- package/dist/index.d.mts +1 -1
- package/dist/index2.d.mts +1 -1
- package/dist/index3.d.mts +3 -3
- package/dist/index4.d.mts +1 -1
- package/dist/index5.d.mts +14 -14
- package/dist/{input-C6cyiqm2.d.mts → input-D9rsMlzl.d.mts} +3 -3
- package/dist/inputFields-CXelxYhd.d.mts +71 -0
- package/dist/inputFields.d.mts +2 -71
- package/dist/{intersperse-Df9zw7Bk.mjs → intersperse-ObkRVOag.mjs} +1 -1
- package/dist/{intersperse-Df9zw7Bk.mjs.map → intersperse-ObkRVOag.mjs.map} +1 -1
- package/dist/{jsonSchema-CfGi1bzI.d.mts → jsonSchema-BMPLdT4p.d.mts} +1 -1
- package/dist/lib/MiddleTruncatedText.mjs +1 -1
- package/dist/lib/PDSProvider.d.mts +14 -2
- package/dist/lib/PDSProvider.mjs +15 -8
- package/dist/lib/PDSProvider.mjs.map +1 -1
- package/dist/lib/TruncatedText.d.mts +1 -1
- package/dist/lib/TruncatedText.mjs +1 -1
- package/dist/lib/TruncatedText.mjs.map +1 -1
- package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.mjs +2 -2
- package/dist/lib/TruncatedTextWithTooltip.mjs.map +1 -1
- package/dist/lib/chainTypes.d.mts +2 -17
- package/dist/lib/color.d.mts +1 -1
- package/dist/lib/customFunctionSchema.d.mts +1 -1
- package/dist/lib/date-filter/index.d.mts +2 -2
- package/dist/lib/date-filter/index.mjs +1 -1
- package/dist/lib/i18n/index.d.mts +4 -0
- package/dist/lib/i18n/index.mjs +2 -0
- package/dist/lib/jsonSchema.d.mts +1 -1
- package/dist/lib/jsonSchemaType.d.mts +1 -1
- package/dist/lib/message.d.mts +1 -1
- package/dist/lib/methodChain.d.mts +2 -2
- package/dist/lib/methodChain.mjs +1 -2
- package/dist/lib/methodChainNormalize.d.mts +2 -2
- package/dist/lib/methodChainTypes.d.mts +1 -1
- package/dist/lib/objectSchemaTypes.d.mts +1 -1
- package/dist/lib/platformObject.d.mts +1 -1
- package/dist/lib/pseudoClass.d.mts +1 -1
- package/dist/lib/router/adapters/reactRouter.d.mts +1 -1
- package/dist/lib/router/adapters/reactRouter.mjs +1 -1
- package/dist/lib/router/adapters/tanstack.d.mts +1 -1
- package/dist/lib/router/adapters/tanstack.mjs +1 -1
- package/dist/lib/router/index.d.mts +5 -5
- package/dist/lib/router/index.mjs +2 -2
- package/dist/lib/schemaOptions.d.mts +2 -173
- package/dist/lib/schemaOptions.mjs +1 -1
- package/dist/lib/semanticColor.d.mts +1 -1
- package/dist/lib/useChain.d.mts +2 -0
- package/dist/lib/useChain.mjs +2 -0
- package/dist/listbox-options-BFaMbK-g.d.mts +38 -0
- package/dist/listbox-options.d.mts +2 -0
- package/dist/{message-CblP0EjG.d.mts → message-BOzjC5yA.d.mts} +1 -1
- package/dist/{methodChain-Pk1C3i_E.d.mts → methodChain-CGTIWafl.d.mts} +4 -4
- package/dist/{methodChain-DAQxLgxt.mjs → methodChain-xZ1_vhbz.mjs} +2 -2
- package/dist/{methodChain-DAQxLgxt.mjs.map → methodChain-xZ1_vhbz.mjs.map} +1 -1
- package/dist/{methodChainTypes-CqWzfx0M.d.mts → methodChainTypes-BtSMV5OZ.d.mts} +2 -2
- package/dist/mixins/focus.d.mts +1 -1
- package/dist/mixins/hoverable.d.mts +2 -2
- package/dist/mixins/input.d.mts +1 -1
- package/dist/mixins/menuItem.d.mts +2 -2
- package/dist/mixins/scrollbar.d.mts +1 -1
- package/dist/mixins/text.d.mts +1 -1
- package/dist/{operators-CoXL5Hv6.d.mts → operators-DfvW8Kmr.d.mts} +16 -5
- package/dist/operators.d.mts +2 -2
- package/dist/{palette-CxXUs1Fu.d.mts → palette-CBOBcVu3.d.mts} +3 -3
- package/dist/palette.d.mts +1 -1
- package/dist/{parser-Kxos6siN.mjs → parser-BeTiVjRs.mjs} +3 -2
- package/dist/{parser-Kxos6siN.mjs.map → parser-BeTiVjRs.mjs.map} +1 -1
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +5 -5
- package/dist/patterns/PageLayout/index.mjs +2 -2
- package/dist/{components → patterns}/WizardModal/index.mjs +5 -5
- package/dist/patterns/WizardModal/index.mjs.map +1 -0
- package/dist/reactRouterFallback.d.mts +1 -1
- package/dist/relative-date-label.d.mts +1 -1
- package/dist/{router-7FYDW80v.mjs → router-COrZcVkf.mjs} +2 -2
- package/dist/{router-7FYDW80v.mjs.map → router-COrZcVkf.mjs.map} +1 -1
- package/dist/safe-parse.d.mts +23 -0
- package/dist/schemaOptions-DTeNBwir.d.mts +173 -0
- package/dist/{semantic-CFMBsuiJ.d.mts → semantic-CfiNA4Yy.d.mts} +1 -1
- package/dist/{semanticColor-DuJCmDrH.d.mts → semanticColor-BCPOKF9L.d.mts} +3 -3
- package/dist/strings-BaQZhOjo.d.mts +143 -0
- package/dist/strings.d.mts +2 -0
- package/dist/{text-D8HPjiEX.d.mts → text-ucZmPNyH.d.mts} +1 -1
- package/dist/{theme-BcaR-Au5.d.mts → theme-CAPmp1it.d.mts} +3 -3
- package/dist/theme.d.mts +1 -1
- package/dist/tone.d.mts +3 -3
- package/dist/tree.d.mts +9 -0
- package/dist/{types-DgyGecdM.d.mts → types-B1KzKgBp.d.mts} +1 -1
- package/dist/types-BB5WwerD.d.mts +72 -0
- package/dist/{types-CoVZwrMW.d.mts → types-BfrEduGv.d.mts} +2 -2
- package/dist/{types-BCiq4hGv.d.mts → types-CBfgdnuB.d.mts} +1 -1
- package/dist/{types-CkpixGWr.d.mts → types-ClbV4wNp.d.mts} +1 -1
- package/dist/{types-Cl-w8tYc.d.mts → types-CoTzVfFl.d.mts} +1 -1
- package/dist/types-CptsgFbu.d.mts +83 -0
- package/dist/{types-C4WUSW3e.d.mts → types-Rj-C3LGL.d.mts} +2 -2
- package/dist/{types-BGMmkUpy.d.mts → types-l-arEBLb.d.mts} +1 -1
- package/dist/types.d.mts +1 -1
- package/dist/types2.d.mts +1 -1
- package/dist/types3.d.mts +1 -1
- package/dist/types4.d.mts +1 -1
- package/dist/types5.d.mts +1 -1
- package/dist/types6.d.mts +1 -1
- package/dist/types7.d.mts +2 -0
- package/dist/{url-state-8j_ef8Uf.d.mts → url-state-CrnZ3Ocy.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/useChain-Cu4KDfFk.mjs +4589 -0
- package/dist/useChain-Cu4KDfFk.mjs.map +1 -0
- package/dist/useChain-DQq1UsGZ.d.mts +77 -0
- package/dist/useChainAtCursor.d.mts +87 -0
- package/dist/useCodeChainFunctionPanel.d.mts +26 -0
- package/dist/useComboboxFooterAction.d.mts +1 -1
- package/dist/{useFilterStateV2-CW6eght1.d.mts → useFilterStateV2-CGGABOcq.d.mts} +3 -3
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useFormField-CLRZkUZt.d.mts → useFormField-4w9TNFgD.d.mts} +2 -2
- package/dist/{useFormField-XezSxho_.mjs → useFormField-CbNYbDdp.mjs} +2 -2
- package/dist/{useFormField-XezSxho_.mjs.map → useFormField-CbNYbDdp.mjs.map} +1 -1
- package/dist/useFormField.d.mts +1 -1
- package/dist/{useFormGroup-C7Cax8zO.mjs → useFormGroup-CsKC93Pt.mjs} +1 -1
- package/dist/{useFormGroup-C7Cax8zO.mjs.map → useFormGroup-CsKC93Pt.mjs.map} +1 -1
- package/dist/{useLocationPathname-DH5Tdq5X.d.mts → useLocationPathname-CZwH8h5n.d.mts} +1 -1
- package/dist/useLocationPathname.d.mts +1 -1
- package/dist/{useTableBoxDragAndDrop-Da4TiYBT.d.mts → useTableBoxDragAndDrop-Bw93rNFH.d.mts} +1 -1
- package/dist/useTableBoxDragAndDrop.d.mts +1 -1
- package/dist/{useToggle-DUHQjohK.mjs → useToggle-DRzCDqrc.mjs} +1 -1
- package/dist/{useToggle-DUHQjohK.mjs.map → useToggle-DRzCDqrc.mjs.map} +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/dist/{utilities-DcsbI71T.d.mts → utilities-B8PzMOza.d.mts} +1 -1
- package/dist/utilities.d.mts +1 -1
- package/dist/utils/storybook.mjs +1 -1
- package/dist/utils/testing.d.mts +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/utils4.d.mts +111 -0
- package/dist/{validation-BgwNghi2.d.mts → validation-DP8f6tgh.d.mts} +3 -3
- package/dist/validation.d.mts +1 -1
- package/dist/validation2.d.mts +64 -0
- package/dist/{value-control-resolver-B0HDRxRN.d.mts → value-control-resolver-CwjOaVAn.d.mts} +2 -2
- package/dist/value-control-resolver.d.mts +1 -1
- package/dist/variables/effect.d.mts +1 -1
- package/dist/variables/semantic.d.mts +1 -1
- package/llms.txt +2 -2
- package/package.json +12 -3
- package/skills/ui-authoring/COMPONENTS.md +1 -1
- package/skills/ui-authoring/PATTERNS.md +1 -0
- package/skills/ui-authoring/SKILL.md +23 -0
- package/dist/DatePicker-C7z1yodK.mjs.map +0 -1
- package/dist/Pagination-Co9CfyFQ.mjs.map +0 -1
- package/dist/TabBar-Bj84q1Mr.mjs.map +0 -1
- package/dist/TableControls-RS_ozBsI.mjs.map +0 -1
- package/dist/components/WizardModal/index.mjs.map +0 -1
- /package/dist/{index-B24gUwOx.d.mts → index-1-AkepUA.d.mts} +0 -0
- /package/dist/{index-BFnNtGdX.d.mts → index-B-Y-ZG2x.d.mts} +0 -0
- /package/dist/{index-BNRXMhlr.d.mts → index-BO_854F2.d.mts} +0 -0
- /package/dist/{index-BPiqSRRl.d.mts → index-BSVhZrWN.d.mts} +0 -0
- /package/dist/{index-BYd3Btr1.d.mts → index-BYARwRq7.d.mts} +0 -0
- /package/dist/{index-C6HcjJiY.d.mts → index-BbPybiOV.d.mts} +0 -0
- /package/dist/{index-CEqOS-7M.d.mts → index-BcsXXrHq.d.mts} +0 -0
- /package/dist/{index-CjDodOH2.d.mts → index-C9achTF6.d.mts} +0 -0
- /package/dist/{index-CoUVmp_Q.d.mts → index-CCt0lwyI.d.mts} +0 -0
- /package/dist/{index-DB7t8whN.d.mts → index-CFuHCx9T.d.mts} +0 -0
- /package/dist/{index-DBGd4WeR.d.mts → index-CliqZ9rj.d.mts} +0 -0
- /package/dist/{index-DWfPppPU.d.mts → index-CryTAIZM.d.mts} +0 -0
- /package/dist/{index-DeVKzGce.d.mts → index-CzItj62a.d.mts} +0 -0
- /package/dist/{index-DedbSZMv.d.mts → index-CzUpNo0e.d.mts} +0 -0
- /package/dist/{index-Deol7ZWO.d.mts → index-D-giXKyu.d.mts} +0 -0
- /package/dist/{index-Jh0C5PIG.d.mts → index-DMRtRo7y.d.mts} +0 -0
- /package/dist/{index-VWno75SQ.d.mts → index-DUF59i3Q2.d.mts} +0 -0
- /package/dist/{index-fxXoW-qc.d.mts → index-DgJfEygr.d.mts} +0 -0
- /package/dist/{index-gVcIuWLd.d.mts → index-Es5nKSSL.d.mts} +0 -0
- /package/dist/{index-zeAhjge4.d.mts → index-T2S0_qsg.d.mts} +0 -0
- /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-
|
|
6
|
-
import { t as Spacer_default } from "./Spacer-
|
|
7
|
-
import { i as Paragraph, r as Label$1 } from "./Text-
|
|
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-
|
|
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-
|
|
18
|
-
import { n as Button, t as IconButton } from "./IconButton-
|
|
19
|
-
import { i as TabBar, n as StyledTab, r as Tab } from "./TabBar-
|
|
20
|
-
import { r as InputGroup } from "./Input-
|
|
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-
|
|
23
|
-
import { n as DropdownMenu_default } from "./DropdownMenu-
|
|
24
|
-
import { t as Combobox } from "./Combobox-
|
|
25
|
-
import { s as Popover_default } from "./Popover-
|
|
26
|
-
import {
|
|
27
|
-
import {
|
|
28
|
-
import { t as
|
|
29
|
-
import {
|
|
30
|
-
import {
|
|
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 {
|
|
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
|
-
|
|
101
|
-
}, [
|
|
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
|
-
|
|
125
|
+
emit("");
|
|
109
126
|
handleOnFocus();
|
|
110
127
|
inputRef.current?.focus();
|
|
111
128
|
}, [
|
|
112
|
-
|
|
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":
|
|
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 ?
|
|
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,
|
|
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
|
-
|
|
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 (
|
|
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:
|
|
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:
|
|
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:
|
|
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 ?
|
|
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
|
-
|
|
514
|
+
canEditViews && onRequestDeleteView && /* @__PURE__ */ jsx(MenuItem, {
|
|
441
515
|
id: "table-controls__view__menu-delete",
|
|
442
516
|
prefixIcon: /* @__PURE__ */ jsx(TrashIcon, {}),
|
|
443
|
-
onClick:
|
|
444
|
-
await onDeleteView(view.id);
|
|
517
|
+
onClick: () => {
|
|
445
518
|
setShowTabContextMenu(false);
|
|
519
|
+
onRequestDeleteView(view);
|
|
446
520
|
},
|
|
447
521
|
onKeyDown: enterProxiesClick,
|
|
448
|
-
children:
|
|
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,
|
|
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
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
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:
|
|
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
|
-
|
|
498
|
-
trigger: /* @__PURE__ */
|
|
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:
|
|
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:
|
|
629
|
+
placeholder: strings.searchViews
|
|
517
630
|
}), /* @__PURE__ */ jsx(OverflowMenuList, {
|
|
518
631
|
padding: Spacing[0],
|
|
519
|
-
children: filteredViews.map(
|
|
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":
|
|
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 [
|
|
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 [
|
|
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
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
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
|
-
}, [
|
|
692
|
+
}, [shownViews]);
|
|
579
693
|
useLayoutEffect(() => {
|
|
580
|
-
|
|
694
|
+
const tabList = tabListRef.current;
|
|
695
|
+
if (!showViews || !tabList) return;
|
|
581
696
|
const resizeObserver = new ResizeObserver(() => {
|
|
582
697
|
onResize();
|
|
583
698
|
});
|
|
584
|
-
|
|
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
|
-
|
|
717
|
+
shownViews
|
|
595
718
|
]);
|
|
596
|
-
const
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
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
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
onClick:
|
|
693
|
-
"
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
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
|
-
|
|
732
|
-
|
|
733
|
-
|
|
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 ?
|
|
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":
|
|
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
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
1135
|
-
] }) : /* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(Paragraph, { children:
|
|
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 ?
|
|
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
|
|
1332
|
-
is: "
|
|
1333
|
-
is_not: "
|
|
1334
|
-
contains: "
|
|
1335
|
-
does_not_contain: "
|
|
1336
|
-
is_empty: "
|
|
1337
|
-
is_not_empty: "
|
|
1338
|
-
is_true: "
|
|
1339
|
-
is_false: "
|
|
1340
|
-
before: "
|
|
1341
|
-
after: "
|
|
1342
|
-
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 `
|
|
1608
|
+
* generic label; everything else falls through to `OPERATOR_LABEL_KEYS`.
|
|
1351
1609
|
*/
|
|
1352
|
-
const
|
|
1353
|
-
is: "
|
|
1354
|
-
is_not: "
|
|
1610
|
+
const OPERATOR_LABEL_KEYS_BY_TYPE = { multi_choices: {
|
|
1611
|
+
is: "operatorIsAnyOf",
|
|
1612
|
+
is_not: "operatorIsNoneOf"
|
|
1355
1613
|
} };
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
return
|
|
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
|
-
|
|
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
|
|
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")
|
|
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:
|
|
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
|
|
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:
|
|
1881
|
+
label: strings.value,
|
|
1612
1882
|
labelProps: { size },
|
|
1613
|
-
"aria-label":
|
|
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:
|
|
1890
|
+
placeholder: strings.selectField,
|
|
1621
1891
|
portal: false
|
|
1622
1892
|
}),
|
|
1623
1893
|
operatorConfigurable ? /* @__PURE__ */ jsx(ComboboxField, {
|
|
1624
|
-
label:
|
|
1894
|
+
label: strings.operator,
|
|
1625
1895
|
labelProps: { size },
|
|
1626
|
-
"aria-label":
|
|
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:
|
|
1908
|
+
label: strings.operator,
|
|
1639
1909
|
labelProps: { size },
|
|
1640
1910
|
children: /* @__PURE__ */ jsx(Input_default, {
|
|
1641
1911
|
size,
|
|
1642
|
-
"aria-label":
|
|
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:
|
|
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 ?
|
|
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:
|
|
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":
|
|
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:
|
|
2320
|
+
children: strings.advancedFilterRules
|
|
2041
2321
|
}) }), /* @__PURE__ */ jsxs(Body, { children: [groupsForRender(compound).map((group, groupIndex, renderableGroups) => {
|
|
2042
|
-
const groupTitle = groupIndex === 0 ?
|
|
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 ?
|
|
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":
|
|
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":
|
|
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":
|
|
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:
|
|
2367
|
+
children: strings.noRulesYet
|
|
2088
2368
|
}) : /* @__PURE__ */ jsx(RulesListBox, {
|
|
2089
|
-
"aria-label":
|
|
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:
|
|
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 ??
|
|
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:
|
|
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:
|
|
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
|
-
|
|
2482
|
+
labelKey: "booleanTrue",
|
|
2201
2483
|
value: true
|
|
2202
2484
|
}, {
|
|
2203
|
-
|
|
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 ??
|
|
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.
|
|
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:
|
|
2294
|
-
emptyStateMessage:
|
|
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
|
-
|
|
2349
|
-
|
|
2350
|
-
|
|
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 ??
|
|
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 (
|
|
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 =
|
|
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 ??
|
|
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:
|
|
2579
|
-
"aria-label": ariaLabel ??
|
|
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:
|
|
2650
|
-
"aria-label": ariaLabel ??
|
|
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
|
|
3050
|
+
const FilterPickerMenu = ({ registry, onPickField, triggerLabel, compact = false, disabled = false, visibleCustomFieldParents, excludeFieldIds, size, ...rest }) => {
|
|
2747
3051
|
const resolvedSize = useFilterBarSize(size);
|
|
2748
|
-
const
|
|
2749
|
-
const
|
|
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":
|
|
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:
|
|
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":
|
|
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 [
|
|
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 ?
|
|
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
|
|
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:
|
|
3377
|
+
bodyAriaLabel: strings.editFilter(accessibleName),
|
|
3063
3378
|
onBodyClick: onClick,
|
|
3064
3379
|
onDismiss,
|
|
3065
|
-
dismissAriaLabel:
|
|
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":
|
|
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":
|
|
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":
|
|
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 ?
|
|
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:
|
|
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":
|
|
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-
|
|
4757
|
+
//# sourceMappingURL=TableControls-B5UGCoO-.mjs.map
|