@persona/design-system 0.8.2 → 0.9.1
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 +38 -0
- package/dist/Accordion.d.mts +1 -1
- package/dist/AccordionItem.d.mts +1 -1
- package/dist/{Action-C6yvIekn.d.mts → Action-BleGvmsy.d.mts} +3 -3
- package/dist/Action.d.mts +1 -1
- package/dist/AdvancedFilterRuleRow.d.mts +2 -2
- package/dist/AdvancedFilterRulesPopover.d.mts +2 -2
- package/dist/ArrayValueControl.d.mts +1 -1
- package/dist/Attribute.d.mts +4 -4
- package/dist/{Badge-uY8l1p1R.mjs → Badge-BYa-iqNE.mjs} +2 -2
- package/dist/{Badge-uY8l1p1R.mjs.map → Badge-BYa-iqNE.mjs.map} +1 -1
- package/dist/BooleanValueControl.d.mts +1 -1
- package/dist/{Breadcrumb-Tjk9FyiF.d.mts → Breadcrumb-CEHEUe8l.d.mts} +1 -1
- package/dist/Breadcrumb.d.mts +1 -1
- package/dist/{Breadcrumbs-DSCbZmAx.d.mts → Breadcrumbs-BQ-Gj6UV.d.mts} +2 -2
- package/dist/{Breadcrumbs-EQm5iiRA.mjs → Breadcrumbs-BmlndU4V.mjs} +8 -8
- package/dist/{Breadcrumbs-EQm5iiRA.mjs.map → Breadcrumbs-BmlndU4V.mjs.map} +1 -1
- package/dist/Breadcrumbs.d.mts +1 -1
- package/dist/{Button-22DkIpYp.d.mts → Button-Dx7mHjWC.d.mts} +5 -5
- package/dist/Button.d.mts +1 -1
- package/dist/{Calendar-DANGQNlH.d.mts → Calendar-BvsTQ3e1.d.mts} +1 -1
- package/dist/Calendar.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/{Card-DQE1J3gk.d.mts → Card-BPY0OU7e.d.mts} +4 -4
- package/dist/Card.d.mts +1 -1
- package/dist/Card2.d.mts +1 -1
- package/dist/CardGrouping.d.mts +38 -0
- package/dist/{CardV2-Ds6e577k.mjs → CardV2-Cq4QODeE.mjs} +11 -11
- package/dist/{CardV2-Ds6e577k.mjs.map → CardV2-Cq4QODeE.mjs.map} +1 -1
- package/dist/{Checkbox-CsJlWz-r.d.mts → Checkbox-CVa8WOf2.d.mts} +1 -1
- package/dist/{Checkbox-BQC_SmBt.mjs → Checkbox-Cttn1t8T.mjs} +10 -6
- package/dist/{Checkbox-BQC_SmBt.mjs.map → Checkbox-Cttn1t8T.mjs.map} +1 -1
- package/dist/Checkbox.d.mts +1 -1
- package/dist/{CheckboxGroupField-DjKp63Dr.d.mts → CheckboxGroupField-BpHN_2QP.d.mts} +3 -3
- package/dist/CheckboxGroupField.d.mts +1 -1
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/{Combobox-D1iXiYGV.d.mts → Combobox-C4C2P8lF.d.mts} +3 -3
- package/dist/{Combobox-MCaDc7h6.mjs → Combobox-CsXnJKvB.mjs} +73 -29
- package/dist/Combobox-CsXnJKvB.mjs.map +1 -0
- package/dist/Combobox.d.mts +2 -2
- package/dist/{ComboboxBase-DXhu2YSh.d.mts → ComboboxBase-2nVpt8oj.d.mts} +7 -7
- package/dist/ComboboxBase.d.mts +1 -1
- package/dist/{ComboboxMultiSelect-BSyJc46m.d.mts → ComboboxMultiSelect-BvJ--m6z.d.mts} +2 -2
- package/dist/ComboboxMultiSelect.d.mts +1 -1
- package/dist/{ComboboxSingleSelect-Dg_6h4iB.d.mts → ComboboxSingleSelect-BWrnRA2x.d.mts} +5 -4
- package/dist/ComboboxSingleSelect.d.mts +1 -1
- package/dist/{CompactBar-CVGNq7Zu.d.mts → CompactBar-CmTT9iuT.d.mts} +3 -3
- package/dist/CompactBar.d.mts +1 -1
- package/dist/{ConfigFormGroup-CidT_cE9.mjs → ConfigFormGroup-C0orlWwb.mjs} +2 -2
- package/dist/{ConfigFormGroup-CidT_cE9.mjs.map → ConfigFormGroup-C0orlWwb.mjs.map} +1 -1
- package/dist/{ControlBar-K43YI-LU.d.mts → ControlBar-Cg36sjz3.d.mts} +2 -2
- package/dist/ControlBar.d.mts +1 -1
- package/dist/DataTable.d.mts +4 -4
- package/dist/{DateField-DY3xCygL.d.mts → DateField-BXUuqbnb.d.mts} +2 -2
- package/dist/DateField.d.mts +1 -1
- package/dist/{DatePicker-C56kJLiX.d.mts → DatePicker-Cmn1vViU.d.mts} +2 -2
- package/dist/{DatePicker-CKk6Hnj2.mjs → DatePicker-DQHVCGnP.mjs} +10 -10
- package/dist/{DatePicker-CKk6Hnj2.mjs.map → DatePicker-DQHVCGnP.mjs.map} +1 -1
- package/dist/DatePicker.d.mts +1 -1
- package/dist/{DateRangePicker-C96NKOon.d.mts → DateRangePicker-CKhp9Obv.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-B-cYK2oi.mjs → DropdownButton-C9wWnB5w.mjs} +3 -3
- package/dist/{DropdownButton-B-cYK2oi.mjs.map → DropdownButton-C9wWnB5w.mjs.map} +1 -1
- package/dist/DropdownButton.d.mts +2 -2
- package/dist/{DropdownMenu-BwPtzVWg.d.mts → DropdownMenu-BZ62b8Cv.d.mts} +3 -3
- package/dist/{DropdownMenu-CedsmO5h.mjs → DropdownMenu-CPE8Q56k.mjs} +2 -2
- package/dist/{DropdownMenu-CedsmO5h.mjs.map → DropdownMenu-CPE8Q56k.mjs.map} +1 -1
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{ErrorProps-C-sfKFxK.d.mts → ErrorProps-oCHtJzEB.d.mts} +1 -1
- package/dist/ErrorProps.d.mts +1 -1
- package/dist/{FieldRegistry-C2eIbP1X.d.mts → FieldRegistry-DAk_3PhH.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-BNbMjWDC.d.mts → FilterBar-C7ch6kYM.d.mts} +4 -4
- package/dist/FilterBar.d.mts +1 -1
- package/dist/FilterPickerMenu.d.mts +2 -2
- package/dist/FilterPill.d.mts +1 -1
- package/dist/FilterPopover.d.mts +3 -1
- package/dist/FloatValueControl.d.mts +6 -5
- package/dist/{FormControl-C4CiA0H-.mjs → FormControl-CD_FdAXA.mjs} +4 -4
- package/dist/{FormControl-C4CiA0H-.mjs.map → FormControl-CD_FdAXA.mjs.map} +1 -1
- package/dist/{FormControl-DICrNHcc.d.mts → FormControl-DX4vtUp6.d.mts} +3 -3
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControlLabel.d.mts +2 -2
- package/dist/{FormField-D97xQCxF.d.mts → FormField-C80kGAIV.d.mts} +2 -2
- package/dist/{FormField-CB0yCMro.mjs → FormField-DjysBTKn.mjs} +15 -15
- package/dist/{FormField-CB0yCMro.mjs.map → FormField-DjysBTKn.mjs.map} +1 -1
- package/dist/FormField.d.mts +1 -1
- package/dist/{Header-Ca554S1F.d.mts → Header-C-a5fL3k.d.mts} +2 -2
- package/dist/Header.d.mts +1 -1
- package/dist/{HelperTooltip-Dk2eqeC_.d.mts → HelperTooltip-hhMFkKmn.d.mts} +2 -2
- package/dist/HelperTooltip.d.mts +1 -1
- package/dist/HighlightedText.d.mts +3 -3
- package/dist/{HoverCopyableField-CewUtxZl.mjs → HoverCopyableField-Cgu3W31s.mjs} +4 -4
- package/dist/{HoverCopyableField-CewUtxZl.mjs.map → HoverCopyableField-Cgu3W31s.mjs.map} +1 -1
- package/dist/{I18nContext-DXcImEuM.d.mts → I18nContext-ioYM_vqG.d.mts} +2 -2
- package/dist/I18nContext.d.mts +1 -1
- package/dist/{IconButton-H5vDZOdo.mjs → IconButton-D4awF770.mjs} +7 -7
- package/dist/{IconButton-H5vDZOdo.mjs.map → IconButton-D4awF770.mjs.map} +1 -1
- package/dist/{IconButton-Vq0MUaNj.d.mts → IconButton-DJ3L_ZqN.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-BRe0qyUe.d.mts → Input-D3lXfJHq.d.mts} +4 -4
- package/dist/{Input-CY14-YeD.mjs → Input-DD4jzJhK.mjs} +5 -5
- package/dist/{Input-CY14-YeD.mjs.map → Input-DD4jzJhK.mjs.map} +1 -1
- package/dist/Input.d.mts +1 -1
- package/dist/{InputProps-B2ngFfvF.d.mts → InputProps-BU9iiBBz.d.mts} +2 -2
- package/dist/InputProps.d.mts +1 -1
- package/dist/IntegerValueControl.d.mts +6 -5
- package/dist/{Link-BSuXrvTu.mjs → Link-DGZu4J0x.mjs} +4 -4
- package/dist/{Link-BSuXrvTu.mjs.map → Link-DGZu4J0x.mjs.map} +1 -1
- package/dist/Link.d.mts +1 -1
- package/dist/{ListBox-2aYWNlO_.mjs → ListBox-BhWLad_L.mjs} +12 -12
- package/dist/{ListBox-2aYWNlO_.mjs.map → ListBox-BhWLad_L.mjs.map} +1 -1
- package/dist/{ListBox-DzZY7IFz.d.mts → ListBox-CjGb0mMY.d.mts} +3 -3
- package/dist/ListBox.d.mts +1 -1
- package/dist/{ListBoxField-DT_-4_Ct.d.mts → ListBoxField-BUkPeLiB.d.mts} +4 -4
- package/dist/ListBoxField.d.mts +1 -1
- package/dist/LoadingShimmer.d.mts +2 -2
- package/dist/{LogicRow-l66qss7_.d.mts → LogicRow-Bt6NPLOd.d.mts} +3 -3
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +2 -2
- package/dist/MatchHighlight.d.mts +1 -1
- package/dist/{Menu-DQXbnpDB.d.mts → Menu-BMrsN-Jz.d.mts} +4 -4
- package/dist/{Menu-Dw6Rcpk6.mjs → Menu-DlN0A5Nb.mjs} +4 -4
- package/dist/{Menu-Dw6Rcpk6.mjs.map → Menu-DlN0A5Nb.mjs.map} +1 -1
- package/dist/Menu.d.mts +1 -1
- package/dist/{Modal-Bz5Rer1b.d.mts → Modal-BoeGuR-h.d.mts} +3 -3
- package/dist/{Modal-dpBu2MKp.mjs → Modal-Cs5cZpEr.mjs} +4 -4
- package/dist/{Modal-dpBu2MKp.mjs.map → Modal-Cs5cZpEr.mjs.map} +1 -1
- package/dist/Modal.d.mts +1 -1
- package/dist/{PageHeader-CLO8SMXV.mjs → PageHeader-CCoAJUwJ.mjs} +2 -2
- package/dist/{PageHeader-CLO8SMXV.mjs.map → PageHeader-CCoAJUwJ.mjs.map} +1 -1
- package/dist/PageHeader.d.mts +2 -2
- package/dist/PageLayout-BlCo4hN4.d.mts +16 -0
- package/dist/PageLayout-C7ZC7GBA.mjs +132 -0
- package/dist/PageLayout-C7ZC7GBA.mjs.map +1 -0
- package/dist/PageLayout.d.mts +2 -16
- package/dist/PageLayoutFrame--HlvI4Pp.d.mts +28 -0
- package/dist/PageLayoutFrame.d.mts +2 -28
- package/dist/{PageSelector--kFA7Xt6.d.mts → PageSelector-BmevrorJ.d.mts} +3 -3
- package/dist/PageSelector.d.mts +1 -1
- package/dist/{Pagination-CglxJr3f.d.mts → Pagination-C67fsrxl.d.mts} +2 -2
- package/dist/{Pagination-BEddsarh.mjs → Pagination-Du2CPW2l.mjs} +5 -5
- package/dist/{Pagination-BEddsarh.mjs.map → Pagination-Du2CPW2l.mjs.map} +1 -1
- package/dist/Pagination.d.mts +1 -1
- package/dist/{Pii-Ct7yDY7d.mjs → Pii-CFVWZ_Yx.mjs} +2 -2
- package/dist/{Pii-Ct7yDY7d.mjs.map → Pii-CFVWZ_Yx.mjs.map} +1 -1
- package/dist/{PillShell-CvJzkRFh.d.mts → PillShell-jr6OyAd3.d.mts} +2 -2
- package/dist/PillShell.d.mts +1 -1
- package/dist/{Popover-532iYFek.mjs → Popover-DewrGOJB.mjs} +2 -2
- package/dist/{Popover-532iYFek.mjs.map → Popover-DewrGOJB.mjs.map} +1 -1
- package/dist/{ProgressIndicator-Cleq0Tfb.d.mts → ProgressIndicator-CdhC2LVI.d.mts} +1 -1
- package/dist/{ProgressIndicator-STyTM0Hq.mjs → ProgressIndicator-xV5Cl2Bw.mjs} +3 -3
- package/dist/{ProgressIndicator-STyTM0Hq.mjs.map → ProgressIndicator-xV5Cl2Bw.mjs.map} +1 -1
- package/dist/ProgressIndicator.d.mts +1 -1
- package/dist/{PseudoClassProps-B2R2dyr3.d.mts → PseudoClassProps-CverE9Ni.d.mts} +1 -1
- package/dist/PseudoClassProps.d.mts +1 -1
- package/dist/{Radio-BtomkCkL.mjs → Radio-i7AEQZHb.mjs} +4 -4
- package/dist/{Radio-BtomkCkL.mjs.map → Radio-i7AEQZHb.mjs.map} +1 -1
- package/dist/{RadioGroup-B6UaoJRd.mjs → RadioGroup-B0KcQpS7.mjs} +2 -2
- package/dist/{RadioGroup-B6UaoJRd.mjs.map → RadioGroup-B0KcQpS7.mjs.map} +1 -1
- package/dist/{RadioGroup-B3B4PCz6.d.mts → RadioGroup-CDEfCg-b.d.mts} +1 -1
- package/dist/RadioGroup.d.mts +1 -1
- package/dist/{RangeCalendar-C24q-nvR.d.mts → RangeCalendar-BOt59kTG.d.mts} +2 -2
- package/dist/RangeCalendar.d.mts +1 -1
- package/dist/RangeCalendarPresets.d.mts +1 -1
- package/dist/{RouterContext-BhPPG7d3.d.mts → RouterContext-D7HBESqO.d.mts} +2 -2
- package/dist/RouterContext.d.mts +1 -1
- package/dist/{RouterLink-IDO10cDE.d.mts → RouterLink-dppNWLgP.d.mts} +2 -2
- package/dist/RouterLink.d.mts +1 -1
- package/dist/RuleEditorFields.d.mts +2 -2
- package/dist/RulesPill.d.mts +1 -1
- package/dist/{SearchInput-7pBMxhuN.d.mts → SearchInput-B7JYHJZI.d.mts} +2 -2
- package/dist/SearchInput.d.mts +1 -1
- package/dist/SectionHeading.d.mts +1 -1
- package/dist/{SegmentedControl-BNVwf7nL.mjs → SegmentedControl-B2_bS806.mjs} +2 -2
- package/dist/{SegmentedControl-BNVwf7nL.mjs.map → SegmentedControl-B2_bS806.mjs.map} +1 -1
- package/dist/{SegmentedControl-B9yo9yMy.d.mts → SegmentedControl-C_7mTcuL.d.mts} +1 -1
- package/dist/SegmentedControl.d.mts +1 -1
- package/dist/{Select-D7_npfZr.d.mts → Select-BpAA5ETS.d.mts} +3 -3
- package/dist/{Select-DD7mFvR8.mjs → Select-oVJ0uLa7.mjs} +8 -8
- package/dist/{Select-DD7mFvR8.mjs.map → Select-oVJ0uLa7.mjs.map} +1 -1
- package/dist/Select.d.mts +1 -1
- package/dist/SingleColumnLayout-ByWxiD7d.d.mts +16 -0
- package/dist/SingleColumnLayout.d.mts +2 -16
- package/dist/SmartTextInput.d.mts +6 -6
- package/dist/SmartTextInputField.d.mts +2 -2
- package/dist/SmartTextInputFunctionDialog.d.mts +4 -4
- package/dist/SmartTextInputListbox.d.mts +2 -2
- package/dist/SmartTextInputPopover.d.mts +2 -2
- package/dist/{Spinner-uVZyOh1T.mjs → Spinner-0Vqw_68r.mjs} +2 -2
- package/dist/{Spinner-uVZyOh1T.mjs.map → Spinner-0Vqw_68r.mjs.map} +1 -1
- package/dist/SplitColumnLayout-DYyJabQ3.d.mts +19 -0
- package/dist/SplitColumnLayout.d.mts +2 -19
- package/dist/{Stack-opuYfQvc.d.mts → Stack-DpWl6orU.d.mts} +2 -2
- package/dist/Stack.d.mts +1 -1
- package/dist/{StatusIndicator-akDwBiBW.mjs → StatusIndicator-QsVgjRrt.mjs} +3 -3
- package/dist/{StatusIndicator-akDwBiBW.mjs.map → StatusIndicator-QsVgjRrt.mjs.map} +1 -1
- package/dist/{Sticker-rxBNVYlX.d.mts → Sticker-C260e6kl.d.mts} +5 -5
- package/dist/{Sticker-DdhSpTcV.mjs → Sticker-CUqHa9Mo.mjs} +5 -5
- package/dist/{Sticker-DdhSpTcV.mjs.map → Sticker-CUqHa9Mo.mjs.map} +1 -1
- package/dist/Sticker.d.mts +1 -1
- package/dist/StringValueControl.d.mts +1 -1
- package/dist/Tab.d.mts +2 -2
- package/dist/{TabBar-DBOPWUUa.mjs → TabBar-w_gxXSwA.mjs} +5 -5
- package/dist/{TabBar-DBOPWUUa.mjs.map → TabBar-w_gxXSwA.mjs.map} +1 -1
- package/dist/{Table-Bt7zAlgQ.d.mts → Table-BtNYI6QX.d.mts} +1 -1
- package/dist/{Table--o4ZLRbb.mjs → Table-PbYGf3PG.mjs} +8 -8
- package/dist/{Table--o4ZLRbb.mjs.map → Table-PbYGf3PG.mjs.map} +1 -1
- package/dist/Table.d.mts +1 -1
- package/dist/{TableBody-9AYpXi2y.d.mts → TableBody-DQ7pivxP.d.mts} +1 -1
- package/dist/TableBody.d.mts +1 -1
- package/dist/{TableBox-BGabyY7E.mjs → TableBox-DMYLTIpr.mjs} +13 -13
- package/dist/{TableBox-BGabyY7E.mjs.map → TableBox-DMYLTIpr.mjs.map} +1 -1
- package/dist/TableBox.d.mts +2 -2
- package/dist/{TableBoxCell-6ovTrboM.d.mts → TableBoxCell-DwAOA-oO.d.mts} +7 -7
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/{TableBoxField-mGTYb-Bz.d.mts → TableBoxField-Bdj_nY7j.d.mts} +5 -5
- package/dist/TableBoxField.d.mts +1 -1
- package/dist/{TableBoxRow-56QatuNm.d.mts → TableBoxRow-5WBwyAyn.d.mts} +3 -3
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-9rR-k_4H.d.mts → TableBoxRowActions-Dq_Z2ted.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableCell-WD0ultKh.d.mts → TableCell-DXBHZ52E.d.mts} +3 -3
- package/dist/TableCell.d.mts +1 -1
- package/dist/{TableControls-B5UGCoO-.mjs → TableControls-C1MF2JvY.mjs} +390 -144
- package/dist/TableControls-C1MF2JvY.mjs.map +1 -0
- package/dist/{TableControls-DVO-obFo.d.mts → TableControls-Cw7LDHWj.d.mts} +3 -3
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-BDl9k4o4.d.mts → TableControlsContext-DgoZhMpQ.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableHead-DqcFsWpz.d.mts → TableHead-BGUg_aXc.d.mts} +1 -1
- package/dist/TableHead.d.mts +1 -1
- package/dist/{TableHeaderCell-C1PJHhXZ.d.mts → TableHeaderCell-DcZcMQyR.d.mts} +1 -1
- package/dist/TableHeaderCell.d.mts +1 -1
- package/dist/{TableLayout-B4qzMWXH.d.mts → TableLayout-CwYQaZlA.d.mts} +1 -1
- package/dist/TableLayout.d.mts +1 -1
- package/dist/{TableRow-B1yeAiVf.d.mts → TableRow-Dad6_CoD.d.mts} +2 -2
- package/dist/TableRow.d.mts +1 -1
- package/dist/TableTH.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-DBdUHK__.d.mts → TableViewConfigurationDropdown-BGuWAarQ.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/{TechnicalSticker-CALVwnrT.mjs → TechnicalSticker-RQ-4_Tdr.mjs} +5 -5
- package/dist/{TechnicalSticker-CALVwnrT.mjs.map → TechnicalSticker-RQ-4_Tdr.mjs.map} +1 -1
- package/dist/{Text-D4GzsXFA.d.mts → Text-BBMau410.d.mts} +4 -4
- package/dist/Text.d.mts +1 -1
- package/dist/{TextArea-kOkhZxNR.mjs → TextArea-BaA8H7s7.mjs} +2 -2
- package/dist/{TextArea-kOkhZxNR.mjs.map → TextArea-BaA8H7s7.mjs.map} +1 -1
- package/dist/{TextArea-BL8BTgwk.d.mts → TextArea-Djd1uT3B.d.mts} +2 -2
- package/dist/TextArea.d.mts +1 -1
- package/dist/{TextUnderlineTooltip-Sdxqsr6y.d.mts → TextUnderlineTooltip-C4N0bqbh.d.mts} +3 -3
- package/dist/TextUnderlineTooltip.d.mts +1 -1
- package/dist/Tile.d.mts +1 -1
- package/dist/Toast.d.mts +1 -1
- package/dist/{Toggle-CZF6iBql.mjs → Toggle-C9cZnajR.mjs} +6 -6
- package/dist/{Toggle-CZF6iBql.mjs.map → Toggle-C9cZnajR.mjs.map} +1 -1
- package/dist/{Toggle-cUtrUIIO.d.mts → Toggle-EYpW34LO.d.mts} +1 -1
- package/dist/Toggle.d.mts +1 -1
- package/dist/{Tooltip-CSM977L6.d.mts → Tooltip-Dj-DtGKz.d.mts} +3 -3
- package/dist/{Tooltip-B-0VRuKT.mjs → Tooltip-DogEteGl.mjs} +2 -2
- package/dist/{Tooltip-B-0VRuKT.mjs.map → Tooltip-DogEteGl.mjs.map} +1 -1
- package/dist/Tooltip.d.mts +1 -1
- package/dist/{TruncatedText-CCUrvW2a.d.mts → TruncatedText-BDNFUuhG.d.mts} +2 -2
- package/dist/VersionHistory.d.mts +1 -1
- package/dist/{VersionHistoryItem-DBjL9S5_.d.mts → VersionHistoryItem-iUabmk_y.d.mts} +1 -1
- package/dist/VersionHistoryItem.d.mts +1 -1
- package/dist/WizardModal.d.mts +2 -2
- package/dist/{accordionTitleTypography--GAczLo7.d.mts → accordionTitleTypography-C7VVJvlx.d.mts} +2 -2
- package/dist/accordionTitleTypography.d.mts +1 -1
- package/dist/{chainTypes-dY6jc22J.d.mts → chainTypes-DT-9j_sG.d.mts} +4 -4
- package/dist/{codec-D2uE0_oJ.d.mts → codec-CGj8cwcj.d.mts} +2 -2
- package/dist/codec.d.mts +1 -1
- package/dist/{color-DuKiTH5t.d.mts → color-BOm5A1Si.d.mts} +2 -2
- package/dist/components/Accordion/index.d.mts +1 -1
- package/dist/components/Accordion/index.mjs +4 -4
- package/dist/components/Attribute/index.mjs +4 -4
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Banner/index.mjs +3 -3
- package/dist/components/BottomPanel/index.mjs +4 -4
- 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/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 +3 -3
- 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 +20 -20
- package/dist/components/DataTable/TableControls/index.mjs +2 -2
- package/dist/components/DataTable/index.mjs +18 -18
- package/dist/components/DataTable/index.mjs.map +1 -1
- package/dist/components/DataTable/types.d.mts +2 -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 +5 -5
- package/dist/components/FormControl/index.d.mts +2 -2
- package/dist/components/FormControl/index.mjs +2 -2
- package/dist/components/FormField/index.d.mts +5 -5
- package/dist/components/FormField/index.mjs +1 -1
- package/dist/components/HoverCopyableField/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs +6 -6
- 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/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 +2 -2
- 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 +2 -2
- package/dist/components/SmartTextInput/index.d.mts +2 -2
- package/dist/components/SmartTextInput/index.mjs +9 -8
- package/dist/components/SmartTextInput/index.mjs.map +1 -1
- package/dist/components/SmartTextInput/parser/method-chain/types.d.mts +1 -1
- package/dist/components/SmartTextInput/parser/smart-text/types.d.mts +2 -2
- package/dist/components/Spinner/index.mjs +1 -1
- package/dist/components/Stack/index.d.mts +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/TextArea/index.d.mts +1 -1
- package/dist/components/TextArea/index.mjs +1 -1
- package/dist/components/Tile/index.mjs +2 -2
- package/dist/components/Toast/index.mjs +4 -4
- 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 +7 -7
- package/dist/compound-expression.d.mts +1 -1
- package/dist/{constants-BiOvZGO5.d.mts → constants-CwzbyAdc.d.mts} +1 -1
- package/dist/constants.d.mts +1 -1
- package/dist/{createPath-B8EZDtSz.d.mts → createPath-C4jIHe68.d.mts} +2 -2
- package/dist/createPath.d.mts +1 -1
- package/dist/{date-range-rule-value-DObVM8xO.d.mts → date-range-rule-value-BkbGpLNH.d.mts} +2 -2
- package/dist/date-range-rule-value.d.mts +1 -1
- package/dist/{date-rule-intent-DhMMe_wq.d.mts → date-rule-intent-zdKP-tW_.d.mts} +3 -3
- package/dist/date-rule-intent.d.mts +1 -1
- package/dist/display.d.mts +2 -2
- package/dist/fieldPickerOptions.d.mts +2 -2
- package/dist/{filter-size-context-DaBdvJHf.d.mts → filter-size-context-CW1guBfI.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/{formatDateTime-mPH4DsDC.d.mts → formatDateTime-zyRMjfH8.d.mts} +1 -1
- package/dist/formatDateTime.d.mts +1 -1
- package/dist/helpers.d.mts +2 -2
- package/dist/{i18n-UiE7OC4k.mjs → i18n-CeRarJIa.mjs} +11 -2
- package/dist/i18n-CeRarJIa.mjs.map +1 -0
- package/dist/{index-Blo6W_k0.d.mts → index-B7KIL3U6.d.mts} +2 -2
- package/dist/{index-CeUb5INA.d.mts → index-C7hEdRqK.d.mts} +2 -2
- package/dist/{index-CTcM_LlP.d.mts → index-DxFh2ArY.d.mts} +3 -3
- package/dist/index-xAZnxq0d2.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 +15 -15
- package/dist/{input-D9rsMlzl.d.mts → input-DMPo8gRT.d.mts} +3 -3
- package/dist/{inputFields-CXelxYhd.d.mts → inputFields-BCNC1FWx.d.mts} +11 -11
- package/dist/inputFields.d.mts +1 -1
- package/dist/{intersperse-ObkRVOag.mjs → intersperse-B8s6clcc.mjs} +1 -1
- package/dist/{intersperse-ObkRVOag.mjs.map → intersperse-B8s6clcc.mjs.map} +1 -1
- package/dist/{jsonSchema-BMPLdT4p.d.mts → jsonSchema-6mcLrVG3.d.mts} +1 -1
- package/dist/lib/PDSProvider.d.mts +3 -3
- package/dist/lib/PDSProvider.mjs +1 -1
- package/dist/lib/TruncatedText.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.d.mts +1 -1
- package/dist/lib/TruncatedTextWithTooltip.mjs +1 -1
- package/dist/lib/chainTypes.d.mts +1 -1
- 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/i18n/index.d.mts +3 -3
- package/dist/lib/i18n/index.mjs +1 -1
- 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/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/tanstack.d.mts +1 -1
- package/dist/lib/router/index.d.mts +5 -5
- package/dist/lib/schemaOptions.d.mts +1 -1
- package/dist/lib/semanticColor.d.mts +1 -1
- package/dist/lib/useChain.d.mts +1 -1
- package/dist/{listbox-options-BFaMbK-g.d.mts → listbox-options-yLjqZp4H.d.mts} +3 -3
- package/dist/listbox-options.d.mts +1 -1
- package/dist/{message-BOzjC5yA.d.mts → message-C5n7wFiN.d.mts} +1 -1
- package/dist/{methodChain-CGTIWafl.d.mts → methodChain-BNDytoaD.d.mts} +4 -4
- package/dist/{methodChainTypes-BtSMV5OZ.d.mts → methodChainTypes-BuwpPC73.d.mts} +2 -2
- package/dist/mixins/focus.d.mts +1 -1
- package/dist/mixins/focus.mjs +1 -1
- package/dist/mixins/hoverable.d.mts +2 -2
- package/dist/mixins/hoverable.mjs +1 -1
- package/dist/mixins/input.d.mts +1 -1
- package/dist/mixins/input.mjs +2 -2
- 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-DfvW8Kmr.d.mts → operators-C34nhBuK.d.mts} +42 -12
- package/dist/operators.d.mts +2 -2
- package/dist/{palette-CBOBcVu3.d.mts → palette-BCszfY7I.d.mts} +3 -3
- package/dist/palette.d.mts +1 -1
- package/dist/patterns/CardGrouping/index.d.mts +2 -0
- package/dist/patterns/CardGrouping/index.mjs +280 -0
- package/dist/patterns/CardGrouping/index.mjs.map +1 -0
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +3 -3
- package/dist/patterns/PageLayout/index.d.mts +5 -5
- package/dist/patterns/PageLayout/index.mjs +1 -131
- package/dist/patterns/WizardModal/index.mjs +3 -3
- package/dist/reactRouterFallback.d.mts +1 -1
- package/dist/relative-date-label.d.mts +1 -1
- package/dist/safe-parse.d.mts +1 -1
- package/dist/{schemaOptions-DTeNBwir.d.mts → schemaOptions-DBOUChxi.d.mts} +3 -3
- package/dist/{semantic-CfiNA4Yy.d.mts → semantic-Duoh2Pxp.d.mts} +1 -1
- package/dist/{semanticColor-BCPOKF9L.d.mts → semanticColor-BuG977_M.d.mts} +3 -3
- package/dist/{strings-BaQZhOjo.d.mts → strings-CUZrwL-Q.d.mts} +11 -1
- package/dist/strings.d.mts +1 -1
- package/dist/{text-ucZmPNyH.d.mts → text-B7hx6G99.d.mts} +1 -1
- package/dist/{theme-CAPmp1it.d.mts → theme-BKg55Zk1.d.mts} +3 -3
- package/dist/theme.d.mts +1 -1
- package/dist/tone.d.mts +3 -3
- package/dist/tree.d.mts +1 -1
- package/dist/{types-l-arEBLb.d.mts → types-4wnr5R9P.d.mts} +1 -1
- package/dist/{types-CBfgdnuB.d.mts → types-6QeQmbFm.d.mts} +1 -1
- package/dist/{types-CoTzVfFl.d.mts → types-BjMJFNYH.d.mts} +1 -1
- package/dist/{types-CptsgFbu.d.mts → types-CEQWndtF.d.mts} +4 -4
- package/dist/{types-BfrEduGv.d.mts → types-C_ZEgHNa.d.mts} +2 -2
- package/dist/{types-ClbV4wNp.d.mts → types-CgKSEQyB.d.mts} +1 -1
- package/dist/{types-B1KzKgBp.d.mts → types-CwzwClJx.d.mts} +1 -1
- package/dist/{types-Rj-C3LGL.d.mts → types-DEzlAdZW.d.mts} +35 -9
- package/dist/{types-BB5WwerD.d.mts → types-VgGkS4JB.d.mts} +2 -2
- 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 +2 -2
- package/dist/types5.d.mts +1 -1
- package/dist/types6.d.mts +1 -1
- package/dist/types7.d.mts +1 -1
- package/dist/{url-state-CrnZ3Ocy.d.mts → url-state-B_gTQ9uu.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/{useChain-DQq1UsGZ.d.mts → useChain-DPRVMwX8.d.mts} +6 -6
- package/dist/useChainAtCursor.d.mts +6 -6
- package/dist/useCodeChainFunctionPanel.d.mts +1 -1
- package/dist/useComboboxFooterAction.d.mts +5 -2
- package/dist/{useFilterStateV2-CGGABOcq.d.mts → useFilterStateV2-BQZppUR0.d.mts} +5 -4
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useFormField-CbNYbDdp.mjs → useFormField-BAmkdxtA.mjs} +2 -2
- package/dist/{useFormField-CbNYbDdp.mjs.map → useFormField-BAmkdxtA.mjs.map} +1 -1
- package/dist/{useFormField-4w9TNFgD.d.mts → useFormField-DAwApAKK.d.mts} +2 -2
- package/dist/useFormField.d.mts +1 -1
- package/dist/{useFormGroup-CsKC93Pt.mjs → useFormGroup-BZayb9fZ.mjs} +1 -1
- package/dist/{useFormGroup-CsKC93Pt.mjs.map → useFormGroup-BZayb9fZ.mjs.map} +1 -1
- package/dist/{useLocationPathname-CZwH8h5n.d.mts → useLocationPathname-BHL0pgiu.d.mts} +1 -1
- package/dist/useLocationPathname.d.mts +1 -1
- package/dist/{useTableBoxDragAndDrop-Bw93rNFH.d.mts → useTableBoxDragAndDrop-Dq30b6yY.d.mts} +1 -1
- package/dist/useTableBoxDragAndDrop.d.mts +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/dist/{utilities-B8PzMOza.d.mts → utilities-B2ry7_20.d.mts} +1 -1
- package/dist/utilities.d.mts +1 -1
- package/dist/utils/testing.d.mts +1 -1
- package/dist/utils.d.mts +1 -1
- package/dist/utils4.d.mts +5 -5
- package/dist/{validation-DP8f6tgh.d.mts → validation-BODkbEvr.d.mts} +3 -3
- package/dist/validation.d.mts +1 -1
- package/dist/validation2.d.mts +4 -4
- package/dist/{value-control-resolver-CwjOaVAn.d.mts → value-control-resolver-BcZiReQ7.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 +1 -0
- package/package.json +5 -3
- package/skills/ui-authoring/COMPONENTS.md +1 -0
- package/skills/ui-authoring/PATTERNS.md +7 -2
- package/dist/Combobox-MCaDc7h6.mjs.map +0 -1
- package/dist/TableControls-B5UGCoO-.mjs.map +0 -1
- package/dist/i18n-UiE7OC4k.mjs.map +0 -1
- package/dist/patterns/PageLayout/index.mjs.map +0 -1
- /package/dist/{index-1-AkepUA.d.mts → index-7in8TPrM.d.mts} +0 -0
- /package/dist/{index-B-Y-ZG2x.d.mts → index-8SLBz2NH.d.mts} +0 -0
- /package/dist/{index-BO_854F2.d.mts → index-B24gUwOx.d.mts} +0 -0
- /package/dist/{index-BSVhZrWN.d.mts → index-B8M0Grl_2.d.mts} +0 -0
- /package/dist/{index-BYARwRq7.d.mts → index-BFnNtGdX.d.mts} +0 -0
- /package/dist/{index-B_BBnMou.d.mts → index-BTviwbFV.d.mts} +0 -0
- /package/dist/{index-BbPybiOV.d.mts → index-BjgW3E7y.d.mts} +0 -0
- /package/dist/{index-BcsXXrHq.d.mts → index-BwFl_eS0.d.mts} +0 -0
- /package/dist/{index-Bt4QNofW.d.mts → index-C3kE54DD.d.mts} +0 -0
- /package/dist/{index-C9achTF6.d.mts → index-C3usUse7.d.mts} +0 -0
- /package/dist/{index-CCt0lwyI.d.mts → index-C6HcjJiY.d.mts} +0 -0
- /package/dist/{index-CFuHCx9T.d.mts → index-CP2eJYlK.d.mts} +0 -0
- /package/dist/{index-CIABef8t.d.mts → index-CSf15oCd.d.mts} +0 -0
- /package/dist/{index-CTHojwxd.d.mts → index-CX869wwk.d.mts} +0 -0
- /package/dist/{index-CliqZ9rj.d.mts → index-CXaDbCtw.d.mts} +0 -0
- /package/dist/{index-Cm-1i165.d.mts → index-D4DUvwPf.d.mts} +0 -0
- /package/dist/{index-CryTAIZM.d.mts → index-DB7t8whN.d.mts} +0 -0
- /package/dist/{index-CzItj62a.d.mts → index-Deol7ZWO.d.mts} +0 -0
- /package/dist/{index-CzUpNo0e.d.mts → index-DhiymMxa.d.mts} +0 -0
- /package/dist/{index-D-giXKyu.d.mts → index-DjOaHFU3.d.mts} +0 -0
- /package/dist/{index-DGsJdI5l.d.mts → index-DkrC-i1D.d.mts} +0 -0
- /package/dist/{index-DMRtRo7y.d.mts → index-DvwPIy8X.d.mts} +0 -0
- /package/dist/{index-DUF59i3Q2.d.mts → index-Oio5ygqN.d.mts} +0 -0
- /package/dist/{index-DgJfEygr.d.mts → index-Wc1llEvP.d.mts} +0 -0
- /package/dist/{index-Es5nKSSL.d.mts → index-dzI_9J-Z.d.mts} +0 -0
- /package/dist/{index-NKYLt_R9.d.mts → index-gpCH5158.d.mts} +0 -0
- /package/dist/{index-Qwqzz3XM.d.mts → index-lIMqGGJz.d.mts} +0 -0
- /package/dist/{index-T2S0_qsg.d.mts → index-luywJTzJ.d.mts} +0 -0
- /package/dist/{index-kxcPLmUx2.d.mts → index-sViox9YW.d.mts} +0 -0
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
import { a as styled, n as createGlobalStyle, r as css } from "./styledComponentsInterop-NxwFjeA4.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { TruncatedText } from "./lib/TruncatedText.mjs";
|
|
2
|
+
import { isActive, isDisabled, isFocused, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
|
|
4
3
|
import { semanticColor, semanticOnly, semanticTokens } from "./lib/semanticColor.mjs";
|
|
4
|
+
import { focusOutline, focusWithinOutline } from "./mixins/focus.mjs";
|
|
5
|
+
import "./variables/transitions.mjs";
|
|
6
|
+
import { transparent, withAlpha } from "./lib/color.mjs";
|
|
7
|
+
import { semanticScrollbar } from "./mixins/scrollbar.mjs";
|
|
5
8
|
import { paragraphMixins } from "./mixins/text.mjs";
|
|
9
|
+
import { c as usePDSLocale, i as formatDateTime, l as usePDSStrings, u as DEFAULT_COMMON_STRINGS } from "./i18n-CeRarJIa.mjs";
|
|
10
|
+
import { TruncatedText } from "./lib/TruncatedText.mjs";
|
|
6
11
|
import { t as Card_default } from "./Card-BXNxWX5C.mjs";
|
|
7
12
|
import { t as Spacer_default } from "./Spacer-J_HuhxX2.mjs";
|
|
8
13
|
import { i as Paragraph, r as Label$1 } from "./Text-CSwFifQF.mjs";
|
|
9
|
-
import "./
|
|
10
|
-
import { a as Tooltip } from "./Tooltip-B-0VRuKT.mjs";
|
|
11
|
-
import { transparent, withAlpha } from "./lib/color.mjs";
|
|
14
|
+
import { a as Tooltip } from "./Tooltip-DogEteGl.mjs";
|
|
12
15
|
import { letPointerDownReachDocument } from "./lib/letPointerDownReachDocument.mjs";
|
|
13
|
-
import { isActive, isDisabled, isFocused, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
|
|
14
16
|
import { moveItemByIndex } from "./lib/reorderItems.mjs";
|
|
15
17
|
import { useScrollOverflow } from "./lib/useScrollOverflow.mjs";
|
|
16
18
|
import { Z_INDICES } from "./lib/zindex.mjs";
|
|
17
|
-
import { focusOutline, focusWithinOutline } from "./mixins/focus.mjs";
|
|
18
|
-
import { semanticScrollbar } from "./mixins/scrollbar.mjs";
|
|
19
19
|
import { n as Stack, t as HStack } from "./Stack-BkC7FCdF.mjs";
|
|
20
|
-
import { n as Button, t as IconButton } from "./IconButton-
|
|
21
|
-
import { i as TabBar, n as StyledTab, r as Tab } from "./TabBar-
|
|
22
|
-
import { r as InputGroup } from "./Input-
|
|
20
|
+
import { n as Button, t as IconButton } from "./IconButton-D4awF770.mjs";
|
|
21
|
+
import { i as TabBar, n as StyledTab, r as Tab } from "./TabBar-w_gxXSwA.mjs";
|
|
22
|
+
import { r as InputGroup } from "./Input-DD4jzJhK.mjs";
|
|
23
23
|
import Input_default from "./components/Input/index.mjs";
|
|
24
|
-
import { c as MenuList, s as MenuItem } from "./Menu-
|
|
25
|
-
import { n as DropdownMenu_default } from "./DropdownMenu-
|
|
26
|
-
import { t as Combobox } from "./Combobox-
|
|
27
|
-
import { s as Popover_default } from "./Popover-
|
|
28
|
-
import { i as Modal_default } from "./Modal-
|
|
29
|
-
import { t as Toggle } from "./Toggle-
|
|
24
|
+
import { c as MenuList, s as MenuItem } from "./Menu-DlN0A5Nb.mjs";
|
|
25
|
+
import { n as DropdownMenu_default } from "./DropdownMenu-CPE8Q56k.mjs";
|
|
26
|
+
import { t as Combobox } from "./Combobox-CsXnJKvB.mjs";
|
|
27
|
+
import { s as Popover_default } from "./Popover-DewrGOJB.mjs";
|
|
28
|
+
import { i as Modal_default } from "./Modal-Cs5cZpEr.mjs";
|
|
29
|
+
import { t as Toggle } from "./Toggle-C9cZnajR.mjs";
|
|
30
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-
|
|
32
|
-
import { m as FormField, o as ComboboxField } from "./FormField-
|
|
33
|
-
import { r as DatePicker, t as DateRangePicker } from "./DatePicker-
|
|
31
|
+
import { t as ListBox } from "./ListBox-BhWLad_L.mjs";
|
|
32
|
+
import { m as FormField, o as ComboboxField } from "./FormField-DjysBTKn.mjs";
|
|
33
|
+
import { r as DatePicker, t as DateRangePicker } from "./DatePicker-DQHVCGnP.mjs";
|
|
34
34
|
import { BorderRadius, Color, Spacing, Typography } from "@persona/design-tokens";
|
|
35
35
|
import { Fragment, createContext, createElement, forwardRef, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
36
36
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -39,10 +39,11 @@ import { CaretDownIcon, CheckIcon, CircleInfoIcon, CirclePlusIcon, CopyIcon, Eye
|
|
|
39
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";
|
|
40
40
|
import { debounce, isEqual, noop, partition, startCase, union, uniqueId } from "lodash-es";
|
|
41
41
|
import { useId } from "react-aria";
|
|
42
|
+
import { mergeRefs } from "@react-aria/utils";
|
|
42
43
|
import Fuse from "fuse.js";
|
|
43
44
|
import { DragIcon as DragIcon$1 } from "@persona/icons/24px";
|
|
44
45
|
import * as PopoverPrimitive from "@radix-ui/react-popover";
|
|
45
|
-
import { DndContext, PointerSensor, closestCenter, useSensor, useSensors } from "@dnd-kit/core";
|
|
46
|
+
import { DndContext, PointerSensor, closestCenter, pointerWithin, useSensor, useSensors } from "@dnd-kit/core";
|
|
46
47
|
import { SortableContext, horizontalListSortingStrategy, useSortable } from "@dnd-kit/sortable";
|
|
47
48
|
import { DragDropContext, Draggable, Droppable } from "@hello-pangea/dnd";
|
|
48
49
|
import { parseAbsolute, parseDate, toCalendarDate, toZoned } from "@internationalized/date";
|
|
@@ -332,6 +333,7 @@ const ViewNameInput = styled(Input_default)`
|
|
|
332
333
|
const AddViewButton = styled(IconButton)`
|
|
333
334
|
color: ${({ theme }) => semanticColor(theme, "FgSecondary", theme.color.text.secondary)};
|
|
334
335
|
`;
|
|
336
|
+
const MIN_TAB_WIDTH_FOR_HIDE_BUTTON = 32;
|
|
335
337
|
const HideViewButton = styled(IconButton)`
|
|
336
338
|
position: absolute;
|
|
337
339
|
top: 50%;
|
|
@@ -527,15 +529,28 @@ const SavedViewTab = ({ view, selected, tabIdPrefix = TAB_ID_PREFIX, canEditView
|
|
|
527
529
|
});
|
|
528
530
|
return tab;
|
|
529
531
|
};
|
|
530
|
-
const SavedViewTabSlot = ({ slotRef, slotStyle, ...props }) => {
|
|
532
|
+
const SavedViewTabSlot = ({ slotRef, slotStyle, slotListeners, ...props }) => {
|
|
531
533
|
const { view, selected, onViewHiddenChange, onHideView } = props;
|
|
532
534
|
const strings = usePDSStrings();
|
|
535
|
+
const [slotElement, setSlotElement] = useState(null);
|
|
536
|
+
const mergedSlotRef = useMemo(() => mergeRefs(slotRef, setSlotElement), [slotRef]);
|
|
537
|
+
const [isTooNarrowForHideButton, setIsTooNarrowForHideButton] = useState(false);
|
|
538
|
+
useLayoutEffect(() => {
|
|
539
|
+
const tab = slotElement?.querySelector("[role=\"tab\"]");
|
|
540
|
+
if (!tab) return;
|
|
541
|
+
const measure = () => setIsTooNarrowForHideButton(tab.offsetWidth > 0 && tab.offsetWidth < MIN_TAB_WIDTH_FOR_HIDE_BUTTON);
|
|
542
|
+
measure();
|
|
543
|
+
const resizeObserver = new ResizeObserver(measure);
|
|
544
|
+
resizeObserver.observe(tab);
|
|
545
|
+
return () => resizeObserver.disconnect();
|
|
546
|
+
}, [slotElement, selected]);
|
|
533
547
|
return /* @__PURE__ */ jsxs(TabSlot, {
|
|
534
|
-
ref:
|
|
548
|
+
ref: mergedSlotRef,
|
|
535
549
|
"data-tab-view": true,
|
|
536
550
|
"data-tab-slot": true,
|
|
537
551
|
style: slotStyle,
|
|
538
|
-
|
|
552
|
+
...slotListeners,
|
|
553
|
+
children: [/* @__PURE__ */ jsx(SavedViewTab, { ...props }), !selected && onViewHiddenChange && !isTooNarrowForHideButton && /* @__PURE__ */ jsx(HideViewButton, {
|
|
539
554
|
id: `table-controls__view-tab-hide_${view.id}`,
|
|
540
555
|
"aria-label": strings.hideViewNamed(view.name),
|
|
541
556
|
title: strings.hideViewTitle,
|
|
@@ -546,9 +561,12 @@ const SavedViewTabSlot = ({ slotRef, slotStyle, ...props }) => {
|
|
|
546
561
|
};
|
|
547
562
|
const SortableSavedViewTab = (props) => {
|
|
548
563
|
const { setNodeRef, listeners, transform, transition, isDragging } = useSortable({ id: props.view.id });
|
|
564
|
+
const slotListeners = useMemo(() => listeners && Object.fromEntries(Object.entries(listeners).map(([eventName, handler]) => [eventName, (event) => {
|
|
565
|
+
if (event.currentTarget.contains(event.target)) handler(event);
|
|
566
|
+
}])), [listeners]);
|
|
549
567
|
return /* @__PURE__ */ jsx(SavedViewTabSlot, {
|
|
550
568
|
...props,
|
|
551
|
-
|
|
569
|
+
slotListeners,
|
|
552
570
|
slotRef: setNodeRef,
|
|
553
571
|
slotStyle: {
|
|
554
572
|
transform: transform ? `translate3d(${transform.x}px, 0, 0)` : void 0,
|
|
@@ -667,7 +685,7 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, hiddenViewI
|
|
|
667
685
|
const [isAddViewOverflowing, setIsAddViewOverflowing] = useState(false);
|
|
668
686
|
useEffect(() => {
|
|
669
687
|
const previousPendingDeleteView = previousPendingDeleteViewRef.current;
|
|
670
|
-
if (!pendingDeleteView && previousPendingDeleteView) (document.getElementById(`${OVERFLOW_TAB_ID_PREFIX}${previousPendingDeleteView.id}`) ?? document.getElementById(`${TAB_ID_PREFIX}${previousPendingDeleteView.id}`))?.focus();
|
|
688
|
+
if (!pendingDeleteView && previousPendingDeleteView) (document.getElementById(`${OVERFLOW_TAB_ID_PREFIX}${previousPendingDeleteView.id}`) ?? document.getElementById(`${TAB_ID_PREFIX}${previousPendingDeleteView.id}`))?.focus({ preventScroll: true });
|
|
671
689
|
previousPendingDeleteViewRef.current = pendingDeleteView;
|
|
672
690
|
}, [pendingDeleteView]);
|
|
673
691
|
const [shownViews, hiddenViews] = useMemo(() => {
|
|
@@ -734,15 +752,17 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, hiddenViewI
|
|
|
734
752
|
bottom: tabListRect.bottom
|
|
735
753
|
} : null;
|
|
736
754
|
};
|
|
737
|
-
const
|
|
755
|
+
const visibleTabCollision = useCallback((args) => {
|
|
738
756
|
const bounds = dragBoundsRef.current;
|
|
739
|
-
|
|
757
|
+
const visibleArgs = {
|
|
740
758
|
...args,
|
|
741
759
|
droppableContainers: args.droppableContainers.filter((container) => {
|
|
742
760
|
const rect = args.droppableRects.get(container.id);
|
|
743
761
|
return bounds == null || rect != null && rect.bottom <= bounds.bottom + 1;
|
|
744
762
|
})
|
|
745
|
-
}
|
|
763
|
+
};
|
|
764
|
+
const pointerCollisions = pointerWithin(visibleArgs);
|
|
765
|
+
return pointerCollisions.length > 0 ? pointerCollisions : closestCenter(visibleArgs);
|
|
746
766
|
}, []);
|
|
747
767
|
const restrictToVisibleSavedTabs = useCallback(({ transform, draggingNodeRect }) => {
|
|
748
768
|
const bounds = dragBoundsRef.current;
|
|
@@ -774,12 +794,14 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, hiddenViewI
|
|
|
774
794
|
if (over) moveView(String(active.id), indexOfView(String(over.id)));
|
|
775
795
|
};
|
|
776
796
|
const hideView = (viewId) => {
|
|
777
|
-
const
|
|
797
|
+
const overflowIds = new Set(overflowViews.map((view) => view.id));
|
|
798
|
+
const visibleViews = shownViews.filter((view) => !overflowIds.has(view.id));
|
|
799
|
+
const index = visibleViews.findIndex((view) => view.id === viewId);
|
|
778
800
|
const isCurrent = viewId === currentView;
|
|
779
|
-
const focusTarget = isCurrent ? void 0 :
|
|
801
|
+
const focusTarget = isCurrent || index === -1 ? void 0 : visibleViews[index + 1] ?? visibleViews[index - 1];
|
|
780
802
|
onViewHiddenChange?.(viewId, true);
|
|
781
803
|
if (isCurrent) onSelectView?.(null);
|
|
782
|
-
document.getElementById(`${TAB_ID_PREFIX}${focusTarget ? focusTarget.id : "default"}`)?.focus();
|
|
804
|
+
document.getElementById(`${TAB_ID_PREFIX}${focusTarget ? focusTarget.id : "default"}`)?.focus({ preventScroll: true });
|
|
783
805
|
};
|
|
784
806
|
const moveViewWithKeyboard = (viewId, direction) => {
|
|
785
807
|
const neighbor = shownViews[shownViews.findIndex((view) => view.id === viewId) + direction];
|
|
@@ -960,7 +982,7 @@ const ControlBar = ({ presetViews, currentView, onSelectView, views, hiddenViewI
|
|
|
960
982
|
/* @__PURE__ */ jsx(ProductTourStyles, {}),
|
|
961
983
|
showViewsBar && (onReorderViews ? /* @__PURE__ */ jsx(DndContext, {
|
|
962
984
|
sensors,
|
|
963
|
-
collisionDetection:
|
|
985
|
+
collisionDetection: visibleTabCollision,
|
|
964
986
|
modifiers: [restrictToVisibleSavedTabs],
|
|
965
987
|
onDragStart: handleDragStart,
|
|
966
988
|
onDragEnd: handleDragEnd,
|
|
@@ -1506,6 +1528,55 @@ const OPERATORS_BY_TYPE = {
|
|
|
1506
1528
|
signals: ["is"],
|
|
1507
1529
|
date_range: ["is"]
|
|
1508
1530
|
};
|
|
1531
|
+
/**
|
|
1532
|
+
* Numeric comparison operators. Together with `is` (is equal to) they give
|
|
1533
|
+
* `integer` and `float` fields greater-than / less-than / equal-to filtering.
|
|
1534
|
+
* Inclusive bounds are deliberately not offered: "at least 5" is
|
|
1535
|
+
* `gt 5` OR `is 5`, built with the Rules editor.
|
|
1536
|
+
*
|
|
1537
|
+
* They are opt-in rather than part of the default numeric vocabulary above:
|
|
1538
|
+
* a host whose backend serializes them lists them in the field's
|
|
1539
|
+
* `allowedOperators` (e.g. `['is', ...NUMERIC_COMPARISON_OPERATORS]`).
|
|
1540
|
+
* Adding them to the default vocabulary would surface operators in every
|
|
1541
|
+
* existing numeric field whose host can't serialize them.
|
|
1542
|
+
*/
|
|
1543
|
+
const NUMERIC_COMPARISON_OPERATORS = ["gt", "lt"];
|
|
1544
|
+
const NUMERIC_COMPARISON_OPERATOR_SET = new Set(NUMERIC_COMPARISON_OPERATORS);
|
|
1545
|
+
const NUMERIC_FIELD_TYPES = new Set(["integer", "float"]);
|
|
1546
|
+
function isNumericComparisonOperator(operator) {
|
|
1547
|
+
return NUMERIC_COMPARISON_OPERATOR_SET.has(operator);
|
|
1548
|
+
}
|
|
1549
|
+
/**
|
|
1550
|
+
* Whether a comparison value is complete for a numeric field: a finite
|
|
1551
|
+
* number, and a safe integer when the field is an `integer`. Strings are
|
|
1552
|
+
* rejected — the numeric value controls always emit numbers, so a string
|
|
1553
|
+
* here is a corrupted or hand-crafted rule the backend can't compare.
|
|
1554
|
+
*/
|
|
1555
|
+
function isCompleteNumericComparisonValue(value, fieldType) {
|
|
1556
|
+
if (typeof value !== "number" || !Number.isFinite(value)) return false;
|
|
1557
|
+
return fieldType === "integer" ? Number.isSafeInteger(value) : true;
|
|
1558
|
+
}
|
|
1559
|
+
/**
|
|
1560
|
+
* Carry `value` into a numeric comparison. Equality rules on numeric fields
|
|
1561
|
+
* tolerate strings (v1 URLs hydrate `'5'`), but a comparison is only complete
|
|
1562
|
+
* with a number, so a numeric string is converted — truncated on `integer`
|
|
1563
|
+
* fields, matching what `IntegerValueControl` emits — and anything else
|
|
1564
|
+
* becomes an empty draft rather than a committed rule validation rejects.
|
|
1565
|
+
*/
|
|
1566
|
+
function numericComparisonValue(value, fieldType) {
|
|
1567
|
+
const parsed = typeof value === "number" ? value : typeof value === "string" && value.trim() !== "" ? Number(value) : NaN;
|
|
1568
|
+
if (!Number.isFinite(parsed)) return "";
|
|
1569
|
+
const normalized = fieldType === "integer" ? Math.trunc(parsed) : parsed;
|
|
1570
|
+
return isCompleteNumericComparisonValue(normalized, fieldType) ? normalized : "";
|
|
1571
|
+
}
|
|
1572
|
+
/**
|
|
1573
|
+
* Whether `(fieldType, operator)` is a built-in numeric comparison — the
|
|
1574
|
+
* case validators and labels specialize. Comparisons on non-numeric types
|
|
1575
|
+
* (only reachable through `condition`) are not.
|
|
1576
|
+
*/
|
|
1577
|
+
function isNumericComparison(operator, fieldType) {
|
|
1578
|
+
return fieldType != null && NUMERIC_FIELD_TYPES.has(fieldType) && isNumericComparisonOperator(operator);
|
|
1579
|
+
}
|
|
1509
1580
|
/** Operators that have no value control (the operator itself is the predicate). */
|
|
1510
1581
|
const VALUELESS_OPERATORS = new Set(["is_empty", "is_not_empty"]);
|
|
1511
1582
|
/**
|
|
@@ -1532,6 +1603,7 @@ function getOperatorsForType(type) {
|
|
|
1532
1603
|
* field can never surface an operator the host application can't serialize.
|
|
1533
1604
|
*/
|
|
1534
1605
|
function getOperatorsForField(field) {
|
|
1606
|
+
if (field.condition != null) return field.condition.operators.map(({ operator }) => operator);
|
|
1535
1607
|
const { allowedOperators } = field;
|
|
1536
1608
|
if (allowedOperators == null || allowedOperators.length === 0) return getOperatorsForType(field.type);
|
|
1537
1609
|
return allowedOperators;
|
|
@@ -1541,8 +1613,26 @@ function getDefaultOperatorForType(type) {
|
|
|
1541
1613
|
if (list.length === 0) throw new Error(`No operators defined for field type "${type}"`);
|
|
1542
1614
|
return list[0];
|
|
1543
1615
|
}
|
|
1544
|
-
function
|
|
1545
|
-
return
|
|
1616
|
+
function getConditionOperator(field, operator) {
|
|
1617
|
+
return field?.condition?.operators.find((config) => config.operator === operator);
|
|
1618
|
+
}
|
|
1619
|
+
function isValuelessOperator(operator, field) {
|
|
1620
|
+
const config = getConditionOperator(field, operator);
|
|
1621
|
+
return config != null ? config.valueType === "none" : VALUELESS_OPERATORS.has(operator);
|
|
1622
|
+
}
|
|
1623
|
+
function hasCompleteConditionValue(rule, field) {
|
|
1624
|
+
const config = getConditionOperator(field, rule.operator);
|
|
1625
|
+
if (config == null) return false;
|
|
1626
|
+
const { value } = rule;
|
|
1627
|
+
if (config.isComplete != null && !config.isComplete(value)) return false;
|
|
1628
|
+
switch (config.valueType) {
|
|
1629
|
+
case "none": return value === null;
|
|
1630
|
+
case "boolean": return typeof value === "boolean";
|
|
1631
|
+
case "number": return typeof value === "number" && Number.isFinite(value);
|
|
1632
|
+
case "integer": return typeof value === "number" && Number.isSafeInteger(value);
|
|
1633
|
+
case "string": return typeof value === "string" && value.length > 0;
|
|
1634
|
+
case "string_array": return Array.isArray(value) && value.length > 0 && value.every((entry) => typeof entry === "string");
|
|
1635
|
+
}
|
|
1546
1636
|
}
|
|
1547
1637
|
/**
|
|
1548
1638
|
* Whether a rule's value is a date range: a range operator, or a field that is
|
|
@@ -1587,6 +1677,10 @@ function fieldHasMultipleOperators(field) {
|
|
|
1587
1677
|
* translatable `CommonStrings` table (English defaults: "is", "is not", "contains", ...).
|
|
1588
1678
|
*/
|
|
1589
1679
|
const OPERATOR_LABEL_KEYS = {
|
|
1680
|
+
gt: "operatorGreaterThan",
|
|
1681
|
+
gte: "operatorGreaterThanOrEqual",
|
|
1682
|
+
lt: "operatorLessThan",
|
|
1683
|
+
lte: "operatorLessThanOrEqual",
|
|
1590
1684
|
is: "operatorIs",
|
|
1591
1685
|
is_not: "operatorIsNot",
|
|
1592
1686
|
contains: "operatorContains",
|
|
@@ -1607,16 +1701,33 @@ const OPERATOR_LABEL_KEYS = {
|
|
|
1607
1701
|
* Only present for `(fieldType, operator)` pairs that diverge from the
|
|
1608
1702
|
* generic label; everything else falls through to `OPERATOR_LABEL_KEYS`.
|
|
1609
1703
|
*/
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1704
|
+
/**
|
|
1705
|
+
* Numeric fields read as a sentence ("Members is equal to 5", "Members is greater
|
|
1706
|
+
* than 5") rather than the generic "is" / bare `>` labels. `is_not` keeps the
|
|
1707
|
+
* generic "is not".
|
|
1708
|
+
*/
|
|
1709
|
+
const NUMERIC_LABEL_KEYS = {
|
|
1710
|
+
is: "operatorIsEqualTo",
|
|
1711
|
+
gt: "operatorIsGreaterThan",
|
|
1712
|
+
lt: "operatorIsLessThan"
|
|
1713
|
+
};
|
|
1714
|
+
const OPERATOR_LABEL_KEYS_BY_TYPE = {
|
|
1715
|
+
multi_choices: {
|
|
1716
|
+
is: "operatorIsAnyOf",
|
|
1717
|
+
is_not: "operatorIsNoneOf"
|
|
1718
|
+
},
|
|
1719
|
+
integer: NUMERIC_LABEL_KEYS,
|
|
1720
|
+
float: NUMERIC_LABEL_KEYS
|
|
1721
|
+
};
|
|
1614
1722
|
/**
|
|
1615
1723
|
* The label for `operator`, specialized for `fieldType` where the generic label is ambiguous.
|
|
1616
1724
|
* Pass `strings` from `usePDSStrings()` to translate it; English when omitted.
|
|
1617
1725
|
*/
|
|
1618
|
-
function getOperatorLabel(operator, fieldType, strings = DEFAULT_COMMON_STRINGS) {
|
|
1619
|
-
|
|
1726
|
+
function getOperatorLabel(operator, fieldType, strings = DEFAULT_COMMON_STRINGS, field) {
|
|
1727
|
+
const config = getConditionOperator(field, operator);
|
|
1728
|
+
if (config != null) return config.label;
|
|
1729
|
+
const key = fieldType && OPERATOR_LABEL_KEYS_BY_TYPE[fieldType]?.[operator] || OPERATOR_LABEL_KEYS[operator];
|
|
1730
|
+
return key != null ? strings[key] : operator;
|
|
1620
1731
|
}
|
|
1621
1732
|
/**
|
|
1622
1733
|
* Empty-but-present value seeded when a rule switches from a valueless operator
|
|
@@ -1650,7 +1761,16 @@ function emptyDateRange() {
|
|
|
1650
1761
|
* `between`.
|
|
1651
1762
|
*/
|
|
1652
1763
|
function emptyValueForRule(field, operator) {
|
|
1653
|
-
if (isValuelessOperator(operator)) return null;
|
|
1764
|
+
if (isValuelessOperator(operator, field)) return null;
|
|
1765
|
+
const config = getConditionOperator(field, operator);
|
|
1766
|
+
if (config != null) {
|
|
1767
|
+
if (config.defaultValue != null) return config.defaultValue;
|
|
1768
|
+
switch (config.valueType) {
|
|
1769
|
+
case "string_array": return [];
|
|
1770
|
+
case "boolean": return true;
|
|
1771
|
+
default: return "";
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1654
1774
|
if (isRangeOperator(operator) || field.type === "date_range") return emptyDateRange();
|
|
1655
1775
|
return emptyValueForFieldType(field.type);
|
|
1656
1776
|
}
|
|
@@ -1661,8 +1781,10 @@ function emptyValueForRule(field, operator) {
|
|
|
1661
1781
|
* the range control can't read it and the wire format would reject it.
|
|
1662
1782
|
*/
|
|
1663
1783
|
function reconcileValueForOperator(field, nextOperator, previousOperator, value) {
|
|
1664
|
-
if (isValuelessOperator(nextOperator)) return null;
|
|
1784
|
+
if (isValuelessOperator(nextOperator, field)) return null;
|
|
1785
|
+
if (field.condition != null) return getConditionOperator(field, nextOperator)?.valueType === getConditionOperator(field, previousOperator)?.valueType ? value ?? emptyValueForRule(field, nextOperator) : emptyValueForRule(field, nextOperator);
|
|
1665
1786
|
if (isRangeOperator(nextOperator) !== isRangeOperator(previousOperator)) return emptyValueForRule(field, nextOperator);
|
|
1787
|
+
if (isNumericComparison(nextOperator, field.type)) return numericComparisonValue(value, field.type);
|
|
1666
1788
|
if (field.type === "date" && nextOperator === "is" && typeof value === "string" && TIME_COMPONENT$1.test(value)) return DateTime.fromISO(value).setZone(Settings.defaultZone).toISODate();
|
|
1667
1789
|
if (field.type === "date" && (previousOperator === "before" || previousOperator === "after") && (nextOperator === "before" || nextOperator === "after") && previousOperator !== nextOperator && typeof value === "string" && TIME_COMPONENT$1.test(value)) {
|
|
1668
1790
|
const dateTime = DateTime.fromISO(value, { setZone: true });
|
|
@@ -1748,6 +1870,7 @@ function valueDisplayString(value, optionLabels, relativeDate, fieldType, { loca
|
|
|
1748
1870
|
}
|
|
1749
1871
|
}
|
|
1750
1872
|
function draftValueFor(field, operator) {
|
|
1873
|
+
if (field.condition != null) return emptyValueForRule(field, operator);
|
|
1751
1874
|
if (isValuelessOperator(operator)) return null;
|
|
1752
1875
|
if (field.type === "boolean") return true;
|
|
1753
1876
|
if (isRangeOperator(operator)) return emptyValueForRule(field, operator);
|
|
@@ -1833,29 +1956,50 @@ function nodeToOptions(node) {
|
|
|
1833
1956
|
* `fieldsLabel` names the custom-field submenu; pass `usePDSStrings().fields` to translate it.
|
|
1834
1957
|
*/
|
|
1835
1958
|
function buildFieldPickerOptions(registry, visibleCustomFieldParents, excludeFieldIds, fieldsLabel = FIELDS_SUBMENU_LABEL) {
|
|
1836
|
-
const systemFields = registry.
|
|
1959
|
+
const systemFields = registry.all().filter((field) => field.source === "system" || field.pickerGroup != null);
|
|
1837
1960
|
const customGroups = registry.customFieldGroups();
|
|
1838
1961
|
const excluded = excludeFieldIds == null ? null : new Set(excludeFieldIds);
|
|
1839
|
-
const tree =
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1962
|
+
const tree = [];
|
|
1963
|
+
const pickerGroups = /* @__PURE__ */ new Map();
|
|
1964
|
+
for (const field of systemFields) {
|
|
1965
|
+
if (excluded?.has(field.id)) continue;
|
|
1966
|
+
const option = {
|
|
1967
|
+
label: field.label,
|
|
1968
|
+
value: field.id
|
|
1969
|
+
};
|
|
1970
|
+
if (field.pickerGroup == null) {
|
|
1971
|
+
tree.push(option);
|
|
1972
|
+
continue;
|
|
1973
|
+
}
|
|
1974
|
+
const options = pickerGroups.get(field.pickerGroup) ?? [];
|
|
1975
|
+
options.push(option);
|
|
1976
|
+
pickerGroups.set(field.pickerGroup, options);
|
|
1977
|
+
}
|
|
1978
|
+
for (const [label, options] of pickerGroups) tree.push({
|
|
1979
|
+
label,
|
|
1980
|
+
nested: true,
|
|
1981
|
+
options
|
|
1982
|
+
});
|
|
1843
1983
|
const allowedParents = visibleCustomFieldParents == null ? null : new Set(visibleCustomFieldParents);
|
|
1844
1984
|
const customRoot = newNode();
|
|
1845
1985
|
for (const group of customGroups) {
|
|
1846
1986
|
if (allowedParents != null && !allowedParents.has(group.parent)) continue;
|
|
1847
1987
|
const description = group.parent !== "" ? group.parent : void 0;
|
|
1848
1988
|
for (const field of group.fields) {
|
|
1849
|
-
if (
|
|
1989
|
+
if (field.pickerGroup != null || excluded?.has(field.id)) continue;
|
|
1850
1990
|
insertField(customRoot, field, description);
|
|
1851
1991
|
}
|
|
1852
1992
|
}
|
|
1853
1993
|
const customOptions = nodeToOptions(customRoot);
|
|
1854
|
-
if (customOptions.length > 0)
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1994
|
+
if (customOptions.length > 0) {
|
|
1995
|
+
const existingGroup = pickerGroups.get(fieldsLabel);
|
|
1996
|
+
if (existingGroup != null) existingGroup.push(...customOptions);
|
|
1997
|
+
else tree.push({
|
|
1998
|
+
label: fieldsLabel,
|
|
1999
|
+
nested: true,
|
|
2000
|
+
options: customOptions
|
|
2001
|
+
});
|
|
2002
|
+
}
|
|
1859
2003
|
return tree;
|
|
1860
2004
|
}
|
|
1861
2005
|
//#endregion
|
|
@@ -1876,17 +2020,45 @@ function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleI
|
|
|
1876
2020
|
const strings = usePDSStrings();
|
|
1877
2021
|
const minutePrecisionValue = field != null && isMinutePrecisionDate(field, rule.operator, dateTimesEnabled);
|
|
1878
2022
|
const fieldOptions = useMemo(() => buildFieldPickerOptions(registry, void 0, void 0, strings.fields), [registry, strings.fields]);
|
|
2023
|
+
const optionDisabledReason = useCallback((option) => registry.get(option.value)?.disabledReason, [registry]);
|
|
2024
|
+
const operatorOptions = useMemo(() => operators.map((operator) => ({
|
|
2025
|
+
label: getOperatorLabel(operator, field?.type, strings, field),
|
|
2026
|
+
value: operator
|
|
2027
|
+
})), [
|
|
2028
|
+
operators,
|
|
2029
|
+
field,
|
|
2030
|
+
strings
|
|
2031
|
+
]);
|
|
2032
|
+
const handleFieldChange = useCallback((next) => {
|
|
2033
|
+
if (next != null && registry.get(next)?.disabledReason == null) onFieldChange(groupIndex, ruleIndex, next);
|
|
2034
|
+
}, [
|
|
2035
|
+
registry,
|
|
2036
|
+
onFieldChange,
|
|
2037
|
+
groupIndex,
|
|
2038
|
+
ruleIndex
|
|
2039
|
+
]);
|
|
2040
|
+
const handleOperatorChange = useCallback((next) => {
|
|
2041
|
+
if (next != null) onOperatorChange(groupIndex, ruleIndex, next);
|
|
2042
|
+
}, [
|
|
2043
|
+
onOperatorChange,
|
|
2044
|
+
groupIndex,
|
|
2045
|
+
ruleIndex
|
|
2046
|
+
]);
|
|
2047
|
+
const handleValueChange = useCallback((next, relativeDate) => onValueChange(groupIndex, ruleIndex, next, relativeDate), [
|
|
2048
|
+
onValueChange,
|
|
2049
|
+
groupIndex,
|
|
2050
|
+
ruleIndex
|
|
2051
|
+
]);
|
|
1879
2052
|
return /* @__PURE__ */ jsxs(StatementFields, { children: [
|
|
1880
2053
|
/* @__PURE__ */ jsx(ComboboxField, {
|
|
1881
|
-
label: strings.
|
|
2054
|
+
label: strings.field,
|
|
1882
2055
|
labelProps: { size },
|
|
1883
2056
|
"aria-label": strings.fieldForRule(ruleIndex + 1, groupIndex + 1),
|
|
1884
2057
|
size,
|
|
1885
2058
|
options: fieldOptions,
|
|
2059
|
+
optionDisabledReason,
|
|
1886
2060
|
value: rule.fieldId,
|
|
1887
|
-
onChange:
|
|
1888
|
-
if (typeof next === "string") onFieldChange(groupIndex, ruleIndex, next);
|
|
1889
|
-
},
|
|
2061
|
+
onChange: handleFieldChange,
|
|
1890
2062
|
placeholder: strings.selectField,
|
|
1891
2063
|
portal: false
|
|
1892
2064
|
}),
|
|
@@ -1895,14 +2067,9 @@ function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleI
|
|
|
1895
2067
|
labelProps: { size },
|
|
1896
2068
|
"aria-label": strings.operatorForRule(ruleIndex + 1, groupIndex + 1),
|
|
1897
2069
|
size,
|
|
1898
|
-
options:
|
|
1899
|
-
label: getOperatorLabel(op, field?.type, strings),
|
|
1900
|
-
value: op
|
|
1901
|
-
})),
|
|
2070
|
+
options: operatorOptions,
|
|
1902
2071
|
value: rule.operator,
|
|
1903
|
-
onChange:
|
|
1904
|
-
if (typeof next === "string") onOperatorChange(groupIndex, ruleIndex, next);
|
|
1905
|
-
},
|
|
2072
|
+
onChange: handleOperatorChange,
|
|
1906
2073
|
portal: false
|
|
1907
2074
|
}) : /* @__PURE__ */ jsx(FormField, {
|
|
1908
2075
|
label: strings.operator,
|
|
@@ -1910,16 +2077,16 @@ function RuleEditorFields({ registry, dateTimesEnabled, field, groupIndex, ruleI
|
|
|
1910
2077
|
children: /* @__PURE__ */ jsx(Input_default, {
|
|
1911
2078
|
size,
|
|
1912
2079
|
"aria-label": strings.operatorForRule(ruleIndex + 1, groupIndex + 1),
|
|
1913
|
-
value: getOperatorLabel(rule.operator, field?.type, strings),
|
|
2080
|
+
value: getOperatorLabel(rule.operator, field?.type, strings, field),
|
|
1914
2081
|
disabled: true,
|
|
1915
2082
|
readOnly: true
|
|
1916
2083
|
})
|
|
1917
2084
|
}),
|
|
1918
|
-
field && !isValuelessOperator(rule.operator) ? /* @__PURE__ */ jsx(FormField, {
|
|
2085
|
+
field && !isValuelessOperator(rule.operator, field) ? /* @__PURE__ */ jsx(FormField, {
|
|
1919
2086
|
label: strings.value,
|
|
1920
2087
|
labelProps: { size },
|
|
1921
2088
|
configField: minutePrecisionValue ? false : void 0,
|
|
1922
|
-
children: /* @__PURE__ */ jsx(Fragment$1, { children: renderValueControl(field, rule.operator, rule.value,
|
|
2089
|
+
children: /* @__PURE__ */ jsx(Fragment$1, { children: renderValueControl(field, rule.operator, rule.value, handleValueChange, rule.relativeDate) })
|
|
1923
2090
|
}) : null
|
|
1924
2091
|
] });
|
|
1925
2092
|
}
|
|
@@ -1933,14 +2100,14 @@ function AdvancedFilterRuleRow({ registry, dateTimesEnabled, groupIndex, ruleInd
|
|
|
1933
2100
|
const operatorConfigurable = field ? fieldHasMultipleOperators(field) : true;
|
|
1934
2101
|
const condition = ruleIndex === 0 ? strings.conditionIf : strings.conditionAnd;
|
|
1935
2102
|
const rowId = `${groupIndex}-${ruleIndex}`;
|
|
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, {
|
|
2103
|
+
const valueDisplay = isValuelessOperator(rule.operator, field) ? void 0 : valueDisplayString(rule.value, registry.optionLabelsFor(rule.fieldId), carriesDateRange(rule.operator, field?.type) ? rule.relativeDate : void 0, field?.type, {
|
|
1937
2104
|
locale,
|
|
1938
2105
|
strings
|
|
1939
2106
|
});
|
|
1940
2107
|
const textValue = [
|
|
1941
2108
|
condition,
|
|
1942
2109
|
field?.label ?? rule.fieldId,
|
|
1943
|
-
getOperatorLabel(rule.operator, field?.type, strings),
|
|
2110
|
+
getOperatorLabel(rule.operator, field?.type, strings, field),
|
|
1944
2111
|
valueDisplay
|
|
1945
2112
|
].filter(Boolean).join(" ");
|
|
1946
2113
|
return /* @__PURE__ */ jsx(ListBox.LogicRow, {
|
|
@@ -1948,7 +2115,7 @@ function AdvancedFilterRuleRow({ registry, dateTimesEnabled, groupIndex, ruleInd
|
|
|
1948
2115
|
condition,
|
|
1949
2116
|
hideCondition: true,
|
|
1950
2117
|
attributeName: field?.label ?? rule.fieldId,
|
|
1951
|
-
operator: getOperatorLabel(rule.operator, field?.type, strings),
|
|
2118
|
+
operator: getOperatorLabel(rule.operator, field?.type, strings, field),
|
|
1952
2119
|
matchLevelName: valueDisplay,
|
|
1953
2120
|
textValue,
|
|
1954
2121
|
size,
|
|
@@ -2200,11 +2367,11 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
|
|
|
2200
2367
|
onOpenChange?.(next);
|
|
2201
2368
|
}, [isControlled, onOpenChange]);
|
|
2202
2369
|
const baseId = useMemo(() => uniqueId("advanced-filter-rules__"), []);
|
|
2203
|
-
const fields = registry.all();
|
|
2370
|
+
const fields = useMemo(() => registry.all().filter((field) => field.disabledReason == null), [registry]);
|
|
2204
2371
|
const handleAddOrGroup = useCallback(() => {
|
|
2205
2372
|
const firstField = fields[0];
|
|
2206
2373
|
if (!firstField) return;
|
|
2207
|
-
const operator = registry.reconcileOperator(firstField.id, "is");
|
|
2374
|
+
const operator = firstField.condition != null ? registry.defaultOperatorFor(firstField.id) : registry.reconcileOperator(firstField.id, "is");
|
|
2208
2375
|
const groupIndex = compound.groups.length;
|
|
2209
2376
|
onChange(addRuleToGroup(compound, groupIndex, {
|
|
2210
2377
|
fieldId: firstField.id,
|
|
@@ -2221,7 +2388,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
|
|
|
2221
2388
|
const handleAddRuleToGroup = useCallback((groupIndex) => {
|
|
2222
2389
|
const firstField = fields[0];
|
|
2223
2390
|
if (!firstField) return;
|
|
2224
|
-
const operator = registry.reconcileOperator(firstField.id, "is");
|
|
2391
|
+
const operator = firstField.condition != null ? registry.defaultOperatorFor(firstField.id) : registry.reconcileOperator(firstField.id, "is");
|
|
2225
2392
|
const newRowId = `${groupIndex}-${compound.groups[groupIndex]?.rules.length ?? 0}`;
|
|
2226
2393
|
onChange(addRuleToGroup(compound, groupIndex, {
|
|
2227
2394
|
fieldId: firstField.id,
|
|
@@ -2243,7 +2410,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
|
|
|
2243
2410
|
}, [compound, applyCompoundChange]);
|
|
2244
2411
|
const handleFieldChange = useCallback((groupIndex, ruleIndex, nextFieldId) => {
|
|
2245
2412
|
const field = registry.get(nextFieldId);
|
|
2246
|
-
if (!field) return;
|
|
2413
|
+
if (!field || field.disabledReason != null) return;
|
|
2247
2414
|
const prev = compound.groups[groupIndex]?.rules[ruleIndex];
|
|
2248
2415
|
if (!prev) return;
|
|
2249
2416
|
const operator = registry.reconcileOperator(field.id, prev.operator);
|
|
@@ -2301,9 +2468,11 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
|
|
|
2301
2468
|
if (event.key !== "Enter") return;
|
|
2302
2469
|
if (selectedRowKey != null) {
|
|
2303
2470
|
event.preventDefault();
|
|
2304
|
-
closeSelectedRow();
|
|
2305
2471
|
requestAnimationFrame(() => {
|
|
2306
|
-
|
|
2472
|
+
closeSelectedRow();
|
|
2473
|
+
requestAnimationFrame(() => {
|
|
2474
|
+
popoverContentRef.current?.focus();
|
|
2475
|
+
});
|
|
2307
2476
|
});
|
|
2308
2477
|
return;
|
|
2309
2478
|
}
|
|
@@ -2356,6 +2525,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
|
|
|
2356
2525
|
})
|
|
2357
2526
|
}), /* @__PURE__ */ jsx(IconButton, {
|
|
2358
2527
|
size: subtleIconSize,
|
|
2528
|
+
disabled: fields.length === 0,
|
|
2359
2529
|
onClick: () => handleAddRuleToGroup(groupIndex),
|
|
2360
2530
|
"aria-label": strings.addRuleToFilterGroup(groupIndex + 1),
|
|
2361
2531
|
"data-test": `advanced-filter-rules__add-rule-${groupIndex}`,
|
|
@@ -2398,6 +2568,7 @@ const AdvancedFilterRulesPopover = ({ registry, compound, onChange, trigger, ope
|
|
|
2398
2568
|
width: "auto",
|
|
2399
2569
|
prefixIcon: /* @__PURE__ */ jsx(PlusIcon, {}),
|
|
2400
2570
|
onClick: handleAddOrGroup,
|
|
2571
|
+
disabled: fields.length === 0,
|
|
2401
2572
|
"data-test": "advanced-filter-rules__add-or-group",
|
|
2402
2573
|
children: strings.orGroup
|
|
2403
2574
|
}) })] })]
|
|
@@ -2824,10 +2995,11 @@ function numericDisplayValue(value) {
|
|
|
2824
2995
|
/**
|
|
2825
2996
|
* Float-typed value control for the Filter UI v2 popover.
|
|
2826
2997
|
*
|
|
2827
|
-
* Used for `float` fields with operators `is` / `is_not
|
|
2998
|
+
* Used for `float` fields with operators `is` / `is_not`, and with the
|
|
2999
|
+
* opt-in comparisons `gt` / `lt` when the field's
|
|
3000
|
+
* `allowedOperators` lists them — all carry a single number. The popover
|
|
2828
3001
|
* renders nothing when the operator is valueless (`is_empty` /
|
|
2829
|
-
* `is_not_empty`). Range operators are not part of the
|
|
2830
|
-
* field vocabulary.
|
|
3002
|
+
* `is_not_empty`). Range operators are not part of the numeric vocabulary.
|
|
2831
3003
|
*
|
|
2832
3004
|
* The control accepts decimal input and emits a `number` via `onChange`.
|
|
2833
3005
|
* We keep local display state as a string so partial input like `"3."` is
|
|
@@ -2844,7 +3016,7 @@ function numericDisplayValue(value) {
|
|
|
2844
3016
|
* rule actually carries when focus leaves.
|
|
2845
3017
|
*
|
|
2846
3018
|
* `onChange` is debounced (300ms) to avoid committing on every keystroke;
|
|
2847
|
-
* the debounce flushes on blur and on unmount
|
|
3019
|
+
* the debounce flushes on blur or Enter and cancels on unmount.
|
|
2848
3020
|
*/
|
|
2849
3021
|
const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
|
|
2850
3022
|
const strings = usePDSStrings();
|
|
@@ -2872,6 +3044,9 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
|
|
|
2872
3044
|
if (!Number.isFinite(parsed)) return;
|
|
2873
3045
|
debouncedOnChange(parsed);
|
|
2874
3046
|
}, [debouncedOnChange]);
|
|
3047
|
+
const handleKeyDown = useCallback((event) => {
|
|
3048
|
+
if (event.key === "Enter" && !event.defaultPrevented && !event.nativeEvent.isComposing) debouncedOnChange.flush();
|
|
3049
|
+
}, [debouncedOnChange]);
|
|
2875
3050
|
if (isValuelessOperator(operator)) return null;
|
|
2876
3051
|
return /* @__PURE__ */ jsx(Input_default, {
|
|
2877
3052
|
type: "number",
|
|
@@ -2882,6 +3057,7 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
|
|
|
2882
3057
|
"aria-label": ariaLabel ?? strings.fieldValue(field.label),
|
|
2883
3058
|
value: localValue,
|
|
2884
3059
|
onChange: (e) => handleChange(e.target.value),
|
|
3060
|
+
onKeyDown: handleKeyDown,
|
|
2885
3061
|
onFocus: () => {
|
|
2886
3062
|
isFocusedRef.current = true;
|
|
2887
3063
|
},
|
|
@@ -2897,10 +3073,11 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
|
|
|
2897
3073
|
/**
|
|
2898
3074
|
* Integer-typed value control for the Filter UI v2 popover.
|
|
2899
3075
|
*
|
|
2900
|
-
* Used for `integer` fields with operators `is` / `is_not
|
|
3076
|
+
* Used for `integer` fields with operators `is` / `is_not`, and with the
|
|
3077
|
+
* opt-in comparisons `gt` / `lt` when the field's
|
|
3078
|
+
* `allowedOperators` lists them — all carry a single number. The popover
|
|
2901
3079
|
* renders nothing when the operator is valueless (`is_empty` /
|
|
2902
|
-
* `is_not_empty`). Range operators are not part of the
|
|
2903
|
-
* field vocabulary.
|
|
3080
|
+
* `is_not_empty`). Range operators are not part of the numeric vocabulary.
|
|
2904
3081
|
*
|
|
2905
3082
|
* The control accepts any numeric input but always emits an integer via
|
|
2906
3083
|
* `onChange`. We truncate (rather than round) so that typing `3` -> `3.` -> `3.7`
|
|
@@ -2916,7 +3093,7 @@ const FloatValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
|
|
|
2916
3093
|
* the user's next keystroke.
|
|
2917
3094
|
*
|
|
2918
3095
|
* `onChange` is debounced (300ms) to avoid committing on every keystroke;
|
|
2919
|
-
* the debounce flushes on blur and on unmount
|
|
3096
|
+
* the debounce flushes on blur or Enter and cancels on unmount.
|
|
2920
3097
|
*/
|
|
2921
3098
|
const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) => {
|
|
2922
3099
|
const strings = usePDSStrings();
|
|
@@ -2944,6 +3121,9 @@ const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) =>
|
|
|
2944
3121
|
if (!Number.isFinite(parsed)) return;
|
|
2945
3122
|
debouncedOnChange(Math.trunc(parsed));
|
|
2946
3123
|
}, [debouncedOnChange]);
|
|
3124
|
+
const handleKeyDown = useCallback((event) => {
|
|
3125
|
+
if (event.key === "Enter" && !event.defaultPrevented && !event.nativeEvent.isComposing) debouncedOnChange.flush();
|
|
3126
|
+
}, [debouncedOnChange]);
|
|
2947
3127
|
if (isValuelessOperator(operator)) return null;
|
|
2948
3128
|
return /* @__PURE__ */ jsx(Input_default, {
|
|
2949
3129
|
type: "number",
|
|
@@ -2954,6 +3134,7 @@ const IntegerValueControl = ({ field, operator, value, onChange, ariaLabel }) =>
|
|
|
2954
3134
|
"aria-label": ariaLabel ?? strings.fieldValue(field.label),
|
|
2955
3135
|
value: localValue,
|
|
2956
3136
|
onChange: (e) => handleChange(e.target.value),
|
|
3137
|
+
onKeyDown: handleKeyDown,
|
|
2957
3138
|
onFocus: () => {
|
|
2958
3139
|
isFocusedRef.current = true;
|
|
2959
3140
|
},
|
|
@@ -2996,7 +3177,7 @@ function StringValueControl({ field, operator, value, onChange, ariaLabel, input
|
|
|
2996
3177
|
debouncedOnChange.flush();
|
|
2997
3178
|
},
|
|
2998
3179
|
onKeyDown: (event) => {
|
|
2999
|
-
if (event.key === "Enter") debouncedOnChange.flush();
|
|
3180
|
+
if (event.key === "Enter" && !event.defaultPrevented && !event.nativeEvent.isComposing) debouncedOnChange.flush();
|
|
3000
3181
|
}
|
|
3001
3182
|
});
|
|
3002
3183
|
}
|
|
@@ -3018,8 +3199,27 @@ const RESOLVERS = {
|
|
|
3018
3199
|
array: (opts) => /* @__PURE__ */ jsx(ArrayValueControl, { ...opts })
|
|
3019
3200
|
};
|
|
3020
3201
|
function resolveValueControl(opts, hostResolver) {
|
|
3202
|
+
if (opts.field.condition != null && isValuelessOperator(opts.operator, opts.field)) return null;
|
|
3021
3203
|
const hostControl = hostResolver?.(opts);
|
|
3022
3204
|
if (hostControl != null) return hostControl;
|
|
3205
|
+
const config = getConditionOperator(opts.field, opts.operator);
|
|
3206
|
+
if (config != null) {
|
|
3207
|
+
if (config.valueType === "string_array") return opts.field.options != null ? /* @__PURE__ */ jsx(ChoicesValueControl, {
|
|
3208
|
+
multiple: true,
|
|
3209
|
+
...opts,
|
|
3210
|
+
operator: "is"
|
|
3211
|
+
}) : null;
|
|
3212
|
+
const type = config.valueType === "number" ? "float" : config.valueType;
|
|
3213
|
+
if (type === "none") return null;
|
|
3214
|
+
return RESOLVERS[type]?.({
|
|
3215
|
+
...opts,
|
|
3216
|
+
operator: "is",
|
|
3217
|
+
field: {
|
|
3218
|
+
...opts.field,
|
|
3219
|
+
type
|
|
3220
|
+
}
|
|
3221
|
+
}) ?? null;
|
|
3222
|
+
}
|
|
3023
3223
|
const renderer = RESOLVERS[opts.field.type];
|
|
3024
3224
|
if (!renderer) return null;
|
|
3025
3225
|
return renderer(opts);
|
|
@@ -3063,10 +3263,11 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel, compact = false
|
|
|
3063
3263
|
unfilteredOptions,
|
|
3064
3264
|
strings.fields
|
|
3065
3265
|
]);
|
|
3266
|
+
const optionDisabledReason = useCallback((option) => registry.get(option.value)?.disabledReason, [registry]);
|
|
3066
3267
|
const handleChange = useCallback((value) => {
|
|
3067
3268
|
if (value == null) return;
|
|
3068
3269
|
const field = registry.get(value);
|
|
3069
|
-
if (!field) return;
|
|
3270
|
+
if (!field || field.disabledReason != null) return;
|
|
3070
3271
|
onPickField(field);
|
|
3071
3272
|
}, [registry, onPickField]);
|
|
3072
3273
|
if (options.length === 0 && unfilteredOptions.length > 0) return null;
|
|
@@ -3088,6 +3289,7 @@ const FilterPickerMenu = ({ registry, onPickField, triggerLabel, compact = false
|
|
|
3088
3289
|
$isOpen: false,
|
|
3089
3290
|
children: /* @__PURE__ */ jsx(Combobox, {
|
|
3090
3291
|
options,
|
|
3292
|
+
optionDisabledReason,
|
|
3091
3293
|
value: null,
|
|
3092
3294
|
onChange: handleChange,
|
|
3093
3295
|
size: resolvedSize,
|
|
@@ -3347,9 +3549,10 @@ function normalizeValueToDisplay(value, optionLabels, relativeDate, fieldType, s
|
|
|
3347
3549
|
*/
|
|
3348
3550
|
function buildAccessibleName(field, rule, displayedValues, strings = DEFAULT_COMMON_STRINGS) {
|
|
3349
3551
|
if (rule == null) return field.label;
|
|
3350
|
-
if (
|
|
3351
|
-
|
|
3352
|
-
|
|
3552
|
+
if (field.condition != null && !hasCompleteConditionValue(rule, field)) return field.label;
|
|
3553
|
+
if (!isValuelessOperator(rule.operator, field) && displayedValues.length === 0) return field.label;
|
|
3554
|
+
const operatorLabel = getOperatorLabel(rule.operator, field.type, strings, field);
|
|
3555
|
+
if (isValuelessOperator(rule.operator, field)) return `${field.label} ${operatorLabel}`;
|
|
3353
3556
|
return `${field.label} ${operatorLabel} ${displayedValues.join(", ")}`;
|
|
3354
3557
|
}
|
|
3355
3558
|
const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDismiss, variant = "default", optionLabels, size, ...rest }, ref) {
|
|
@@ -3357,16 +3560,16 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
|
|
|
3357
3560
|
const resolvedSize = useFilterBarSize(size);
|
|
3358
3561
|
const strings = usePDSStrings();
|
|
3359
3562
|
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) : [], [
|
|
3563
|
+
const displayedValues = useMemo(() => rule && !isValuelessOperator(rule.operator, field) ? normalizeValueToDisplay(rule.value, optionLabels, carriesDateRange(rule.operator, field?.type) ? rule.relativeDate : void 0, field?.type, strings, locale) : [], [
|
|
3361
3564
|
rule,
|
|
3362
3565
|
optionLabels,
|
|
3363
|
-
field
|
|
3566
|
+
field,
|
|
3364
3567
|
strings,
|
|
3365
3568
|
locale
|
|
3366
3569
|
]);
|
|
3367
3570
|
const accessibleName = buildAccessibleName(field, rule, displayedValues, strings);
|
|
3368
3571
|
const hasRule = rule != null;
|
|
3369
|
-
const isComplete = hasRule && (isValuelessOperator(rule.operator) || displayedValues.length > 0);
|
|
3572
|
+
const isComplete = hasRule && (field.condition != null ? hasCompleteConditionValue(rule, field) : isValuelessOperator(rule.operator, field) || displayedValues.length > 0);
|
|
3370
3573
|
const firstValue = displayedValues[0];
|
|
3371
3574
|
const overflowValues = displayedValues.slice(1);
|
|
3372
3575
|
const overflowTooltipId = `${reactId}-overflow`;
|
|
@@ -3381,8 +3584,8 @@ const FilterPill = forwardRef(function FilterPill({ field, rule, onClick, onDism
|
|
|
3381
3584
|
...rest,
|
|
3382
3585
|
children: [
|
|
3383
3586
|
/* @__PURE__ */ jsx(FieldLabel, { children: /* @__PURE__ */ jsx(TruncatedText, { children: field.label }) }),
|
|
3384
|
-
isComplete && hasRule && /* @__PURE__ */ jsx(OperatorLabel, { children: getOperatorLabel(rule.operator, field.type, strings) }),
|
|
3385
|
-
isComplete && hasRule && !isValuelessOperator(rule.operator) && firstValue != null && /* @__PURE__ */ jsxs(ValueChipGroup, { children: [/* @__PURE__ */ jsx(ValueChip, {
|
|
3587
|
+
isComplete && hasRule && /* @__PURE__ */ jsx(OperatorLabel, { children: getOperatorLabel(rule.operator, field.type, strings, field) }),
|
|
3588
|
+
isComplete && hasRule && !isValuelessOperator(rule.operator, field) && firstValue != null && /* @__PURE__ */ jsxs(ValueChipGroup, { children: [/* @__PURE__ */ jsx(ValueChip, {
|
|
3386
3589
|
$variant: variant,
|
|
3387
3590
|
$size: resolvedSize,
|
|
3388
3591
|
children: /* @__PURE__ */ jsx(TruncatedText, { children: firstValue })
|
|
@@ -3519,10 +3722,10 @@ const Footer = styled(HStack).attrs({
|
|
|
3519
3722
|
* back through `onChangeOperator` and forwards open/close transitions
|
|
3520
3723
|
* through Radix's controlled props.
|
|
3521
3724
|
*/
|
|
3522
|
-
const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, onClose, trigger, open, onOpenChange, size, wide = false }) => {
|
|
3725
|
+
const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, onClose, onApply, trigger, open, onOpenChange, size, wide = false }) => {
|
|
3523
3726
|
const strings = usePDSStrings();
|
|
3524
3727
|
const resolvedSize = useFilterBarSize(size);
|
|
3525
|
-
const valueless = isValuelessOperator(operator);
|
|
3728
|
+
const valueless = isValuelessOperator(operator, field);
|
|
3526
3729
|
const CaretIcon = resolvedSize === "sm" ? CaretDownIcon$1 : CaretDownIcon;
|
|
3527
3730
|
const InfoIcon = resolvedSize === "sm" ? CircleInfoIcon$1 : CircleInfoIcon;
|
|
3528
3731
|
const showOperatorSelector = fieldHasMultipleOperators(field);
|
|
@@ -3532,6 +3735,7 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
|
|
|
3532
3735
|
if (!next) onClose();
|
|
3533
3736
|
}, [onOpenChange, onClose]);
|
|
3534
3737
|
const valueSlotRef = useRef(null);
|
|
3738
|
+
const applyButtonRef = useRef(null);
|
|
3535
3739
|
useEffect(() => {
|
|
3536
3740
|
if (open !== true || valueless) return;
|
|
3537
3741
|
const handle = requestAnimationFrame(() => {
|
|
@@ -3545,16 +3749,19 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
|
|
|
3545
3749
|
field.id,
|
|
3546
3750
|
valueless
|
|
3547
3751
|
]);
|
|
3548
|
-
const handleKeyDown = (event) => {
|
|
3549
|
-
if (event.key !== "Enter") return;
|
|
3752
|
+
const handleKeyDown = useCallback((event) => {
|
|
3753
|
+
if (event.key !== "Enter" || event.defaultPrevented || event.nativeEvent.isComposing) return;
|
|
3550
3754
|
const target = event.target;
|
|
3551
3755
|
if (!target || target.tagName !== "INPUT") return;
|
|
3552
3756
|
const input = target;
|
|
3553
|
-
if (input.type === "checkbox" || input.type === "radio") return;
|
|
3554
|
-
if (input.getAttribute("role") === "combobox") return;
|
|
3757
|
+
if (input.type === "checkbox" || input.type === "radio" || input.getAttribute("role") === "combobox") return;
|
|
3555
3758
|
event.preventDefault();
|
|
3759
|
+
if (applyButtonRef.current != null) {
|
|
3760
|
+
applyButtonRef.current.click();
|
|
3761
|
+
return;
|
|
3762
|
+
}
|
|
3556
3763
|
handleOpenChange(false);
|
|
3557
|
-
};
|
|
3764
|
+
}, [handleOpenChange]);
|
|
3558
3765
|
return /* @__PURE__ */ jsxs(Popover_default, {
|
|
3559
3766
|
open,
|
|
3560
3767
|
onOpenChange: handleOpenChange,
|
|
@@ -3578,31 +3785,43 @@ const FilterPopover = ({ field, operator, onChangeOperator, valueControlSlot, on
|
|
|
3578
3785
|
children: [/* @__PURE__ */ jsxs(Main, {
|
|
3579
3786
|
$valueless: valueless,
|
|
3580
3787
|
"data-test": "filter-popover__main",
|
|
3581
|
-
children: [
|
|
3582
|
-
|
|
3583
|
-
children: [/* @__PURE__ */ jsx(FieldTypeLabel, {
|
|
3788
|
+
children: [
|
|
3789
|
+
/* @__PURE__ */ jsxs(HeaderRow, {
|
|
3584
3790
|
$size: resolvedSize,
|
|
3585
|
-
children: /* @__PURE__ */ jsx(
|
|
3586
|
-
}), showOperatorSelector ? /* @__PURE__ */ jsx(OperatorMenu, {
|
|
3587
|
-
trigger: /* @__PURE__ */ jsxs(InlineOperatorTrigger, {
|
|
3588
|
-
type: "button",
|
|
3589
|
-
"aria-label": strings.operator,
|
|
3791
|
+
children: [/* @__PURE__ */ jsx(FieldTypeLabel, {
|
|
3590
3792
|
$size: resolvedSize,
|
|
3591
|
-
children:
|
|
3592
|
-
}),
|
|
3593
|
-
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3793
|
+
children: /* @__PURE__ */ jsx(TruncatedText, { children: field.label })
|
|
3794
|
+
}), showOperatorSelector ? /* @__PURE__ */ jsx(OperatorMenu, {
|
|
3795
|
+
trigger: /* @__PURE__ */ jsxs(InlineOperatorTrigger, {
|
|
3796
|
+
type: "button",
|
|
3797
|
+
"aria-label": strings.operator,
|
|
3798
|
+
$size: resolvedSize,
|
|
3799
|
+
children: [getOperatorLabel(operator, field.type, strings, field), /* @__PURE__ */ jsx(CaretIcon, { "aria-hidden": "true" })]
|
|
3800
|
+
}),
|
|
3801
|
+
align: "start",
|
|
3802
|
+
portal: true,
|
|
3803
|
+
zIndex: Z_INDICES.layeredDropdown,
|
|
3804
|
+
children: operatorOptions.map((op) => /* @__PURE__ */ jsx(DropdownMenu_default.Item, {
|
|
3805
|
+
size: resolvedSize,
|
|
3806
|
+
onClick: () => onChangeOperator(op),
|
|
3807
|
+
children: getOperatorLabel(op, field.type, strings, field)
|
|
3808
|
+
}, op))
|
|
3809
|
+
}) : /* @__PURE__ */ jsx("span", { children: getOperatorLabel(operator, field.type, strings, field) })]
|
|
3810
|
+
}),
|
|
3811
|
+
!valueless ? /* @__PURE__ */ jsx(ValueSlot, {
|
|
3812
|
+
ref: valueSlotRef,
|
|
3813
|
+
children: valueControlSlot
|
|
3814
|
+
}) : null,
|
|
3815
|
+
onApply != null && /* @__PURE__ */ jsx(PopoverPrimitive.Close, {
|
|
3816
|
+
asChild: true,
|
|
3817
|
+
children: /* @__PURE__ */ jsx(Button, {
|
|
3818
|
+
ref: applyButtonRef,
|
|
3597
3819
|
size: resolvedSize,
|
|
3598
|
-
onClick:
|
|
3599
|
-
children:
|
|
3600
|
-
}
|
|
3601
|
-
})
|
|
3602
|
-
|
|
3603
|
-
ref: valueSlotRef,
|
|
3604
|
-
children: valueControlSlot
|
|
3605
|
-
}) : null]
|
|
3820
|
+
onClick: onApply,
|
|
3821
|
+
children: strings.applyFilter
|
|
3822
|
+
})
|
|
3823
|
+
})
|
|
3824
|
+
]
|
|
3606
3825
|
}), field.source === "custom" && field.parentRecordType != null && /* @__PURE__ */ jsxs(Footer, { children: [/* @__PURE__ */ jsx(InfoIcon, { "aria-hidden": "true" }), /* @__PURE__ */ jsxs(TruncatedText, { children: [
|
|
3607
3826
|
field.label,
|
|
3608
3827
|
" is a field on ",
|
|
@@ -3720,6 +3939,10 @@ function isEmptyState(state) {
|
|
|
3720
3939
|
const OPERATOR_SET = new Set([
|
|
3721
3940
|
"is",
|
|
3722
3941
|
"is_not",
|
|
3942
|
+
"gt",
|
|
3943
|
+
"gte",
|
|
3944
|
+
"lt",
|
|
3945
|
+
"lte",
|
|
3723
3946
|
"contains",
|
|
3724
3947
|
"does_not_contain",
|
|
3725
3948
|
"is_empty",
|
|
@@ -3758,7 +3981,7 @@ function isFilterRule(value) {
|
|
|
3758
3981
|
if (typeof value !== "object" || value == null) return false;
|
|
3759
3982
|
const v = value;
|
|
3760
3983
|
if (typeof v.fieldId !== "string" || v.fieldId.length === 0) return false;
|
|
3761
|
-
if (typeof v.operator !== "string" || !OPERATOR_SET.has(v.operator)) return false;
|
|
3984
|
+
if (typeof v.operator !== "string" || !OPERATOR_SET.has(v.operator) && !/^custom:.+/.test(v.operator)) return false;
|
|
3762
3985
|
if (!isFilterRuleValue(v.value)) return false;
|
|
3763
3986
|
return true;
|
|
3764
3987
|
}
|
|
@@ -3834,7 +4057,7 @@ function pruneToRegistry(state, registry) {
|
|
|
3834
4057
|
*/
|
|
3835
4058
|
function coerceBooleanRule(rule, registry) {
|
|
3836
4059
|
const field = registry.get(rule.fieldId);
|
|
3837
|
-
if (!field || field.type !== "boolean") return rule;
|
|
4060
|
+
if (!field || field.condition != null || field.type !== "boolean") return rule;
|
|
3838
4061
|
if (rule.operator === "is_true") return {
|
|
3839
4062
|
...rule,
|
|
3840
4063
|
operator: "is",
|
|
@@ -3864,9 +4087,16 @@ function coerceBooleanRules(state, registry) {
|
|
|
3864
4087
|
};
|
|
3865
4088
|
}
|
|
3866
4089
|
function isDraftRuleValue(rule, registry) {
|
|
3867
|
-
if (isValuelessOperator(rule.operator)) return false;
|
|
3868
4090
|
const field = registry.get(rule.fieldId);
|
|
3869
4091
|
if (!field) return false;
|
|
4092
|
+
const config = getConditionOperator(field, rule.operator);
|
|
4093
|
+
if (config != null) switch (config.valueType) {
|
|
4094
|
+
case "none":
|
|
4095
|
+
case "boolean": return false;
|
|
4096
|
+
case "string_array": return Array.isArray(rule.value) && rule.value.length === 0;
|
|
4097
|
+
default: return rule.value === "" || rule.value == null;
|
|
4098
|
+
}
|
|
4099
|
+
if (isValuelessOperator(rule.operator)) return false;
|
|
3870
4100
|
if (isRangeOperator(rule.operator)) return !isCompleteDateRange(rule.value);
|
|
3871
4101
|
switch (field.type) {
|
|
3872
4102
|
case "multi_choices":
|
|
@@ -3879,11 +4109,14 @@ function isDraftRuleValue(rule, registry) {
|
|
|
3879
4109
|
}
|
|
3880
4110
|
}
|
|
3881
4111
|
function isRuleAllowed(rule, registry, options = { allowDraftValues: false }) {
|
|
3882
|
-
|
|
4112
|
+
const field = registry.get(rule.fieldId);
|
|
4113
|
+
if (field == null) return false;
|
|
3883
4114
|
if (!registry.operatorsFor(rule.fieldId).includes(rule.operator)) return false;
|
|
4115
|
+
if (field.condition != null) return hasCompleteConditionValue(rule, field) || options.allowDraftValues && isDraftRuleValue(rule, registry);
|
|
3884
4116
|
if (isValuelessOperator(rule.operator)) return rule.value == null;
|
|
3885
4117
|
if (options.allowDraftValues && isDraftRuleValue(rule, registry)) return true;
|
|
3886
4118
|
if (isRangeOperator(rule.operator)) return isCompleteDateRange(rule.value);
|
|
4119
|
+
if (isNumericComparison(rule.operator, field.type)) return isCompleteNumericComparisonValue(rule.value, field.type);
|
|
3887
4120
|
if (registry.get(rule.fieldId)?.type === "boolean") return typeof rule.value === "boolean";
|
|
3888
4121
|
if (registry.get(rule.fieldId)?.type === "date") return typeof rule.value === "string" && rule.value.length > 0;
|
|
3889
4122
|
if (registry.get(rule.fieldId)?.type === "multi_choices") {
|
|
@@ -3907,10 +4140,13 @@ function isRuleAllowed(rule, registry, options = { allowDraftValues: false }) {
|
|
|
3907
4140
|
* does not gate operator vocabulary or registry membership.
|
|
3908
4141
|
*/
|
|
3909
4142
|
function hasCompleteValue(rule, registry) {
|
|
4143
|
+
const field = registry.get(rule.fieldId);
|
|
4144
|
+
if (field?.condition != null) return hasCompleteConditionValue(rule, field);
|
|
3910
4145
|
if (isValuelessOperator(rule.operator)) return rule.value == null;
|
|
3911
4146
|
const { value } = rule;
|
|
3912
4147
|
if (value == null) return false;
|
|
3913
4148
|
if (isRangeOperator(rule.operator)) return isCompleteDateRange(value);
|
|
4149
|
+
if (field != null && isNumericComparison(rule.operator, field.type)) return isCompleteNumericComparisonValue(value, field.type);
|
|
3914
4150
|
switch (registry.get(rule.fieldId)?.type) {
|
|
3915
4151
|
case "boolean": return typeof value === "boolean";
|
|
3916
4152
|
case "date": return typeof value === "string" && value.length > 0;
|
|
@@ -4010,20 +4246,22 @@ function useFilterStateV2(options) {
|
|
|
4010
4246
|
...prev.all,
|
|
4011
4247
|
topLevelRules: [...prev.all.topLevelRules, added]
|
|
4012
4248
|
},
|
|
4013
|
-
heldIds: isHeldRule(added) ? withId(prev.heldIds, id) : prev.heldIds
|
|
4249
|
+
heldIds: registry.get(rule.fieldId)?.condition != null || isHeldRule(added, registry) ? withId(prev.heldIds, id) : prev.heldIds
|
|
4014
4250
|
}));
|
|
4015
4251
|
return id;
|
|
4016
|
-
}, []),
|
|
4017
|
-
updateTopLevelRule: useCallback((id,
|
|
4252
|
+
}, [registry]),
|
|
4253
|
+
updateTopLevelRule: useCallback((id, update) => {
|
|
4018
4254
|
setInternal((prev) => {
|
|
4019
4255
|
const idx = prev.all.topLevelRules.findIndex((r) => r.id === id);
|
|
4020
|
-
|
|
4256
|
+
const currentRule = prev.all.topLevelRules[idx];
|
|
4257
|
+
if (currentRule == null) return prev;
|
|
4258
|
+
const rule = typeof update === "function" ? update(currentRule) : update;
|
|
4021
4259
|
const topLevelRules = [...prev.all.topLevelRules];
|
|
4022
4260
|
topLevelRules[idx] = {
|
|
4023
4261
|
...rule,
|
|
4024
4262
|
id
|
|
4025
4263
|
};
|
|
4026
|
-
const heldIds = isHeldRule(rule) ? withId(prev.heldIds, id) : withoutId(prev.heldIds, id);
|
|
4264
|
+
const heldIds = isHeldRule(rule, registry) ? withId(prev.heldIds, id) : withoutId(prev.heldIds, id);
|
|
4027
4265
|
return {
|
|
4028
4266
|
all: {
|
|
4029
4267
|
...prev.all,
|
|
@@ -4032,7 +4270,7 @@ function useFilterStateV2(options) {
|
|
|
4032
4270
|
heldIds
|
|
4033
4271
|
};
|
|
4034
4272
|
});
|
|
4035
|
-
}, []),
|
|
4273
|
+
}, [registry]),
|
|
4036
4274
|
removeTopLevelRule: useCallback((id) => {
|
|
4037
4275
|
setInternal((prev) => {
|
|
4038
4276
|
const topLevelRules = prev.all.topLevelRules.filter((r) => r.id !== id);
|
|
@@ -4053,7 +4291,8 @@ function useFilterStateV2(options) {
|
|
|
4053
4291
|
* `''` and `[]` are values a user can choose, and a filter cleared to one is
|
|
4054
4292
|
* still a filter.
|
|
4055
4293
|
*/
|
|
4056
|
-
function isHeldRule(rule) {
|
|
4294
|
+
function isHeldRule(rule, registry) {
|
|
4295
|
+
if (registry.get(rule.fieldId)?.condition != null) return !hasCompleteValue(rule, registry);
|
|
4057
4296
|
return !isValuelessOperator(rule.operator) && rule.value == null;
|
|
4058
4297
|
}
|
|
4059
4298
|
function heldRulesOf(state) {
|
|
@@ -4247,6 +4486,7 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
|
|
|
4247
4486
|
onChangeRef.current = onChange;
|
|
4248
4487
|
}, [onChange]);
|
|
4249
4488
|
const { committedState } = filterState;
|
|
4489
|
+
const committedRuleIds = useMemo(() => new Set(committedState.topLevelRules.map((rule) => rule.id)), [committedState.topLevelRules]);
|
|
4250
4490
|
const lastReportedState = useRef(committedState);
|
|
4251
4491
|
useEffect(() => {
|
|
4252
4492
|
if (isEqual(lastReportedState.current, committedState)) return;
|
|
@@ -4255,13 +4495,15 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
|
|
|
4255
4495
|
}, [committedState]);
|
|
4256
4496
|
const pendingEditRuleIdRef = useRef(null);
|
|
4257
4497
|
const openedViaScrollIntoViewRef = useRef(false);
|
|
4258
|
-
const
|
|
4259
|
-
|
|
4498
|
+
const { addTopLevelRule } = filterState;
|
|
4499
|
+
const handlePickField = useCallback((field) => {
|
|
4500
|
+
const operator = registry.defaultOperatorFor(field.id);
|
|
4501
|
+
pendingEditRuleIdRef.current = addTopLevelRule({
|
|
4260
4502
|
fieldId: field.id,
|
|
4261
|
-
operator
|
|
4262
|
-
value: null
|
|
4503
|
+
operator,
|
|
4504
|
+
value: field.condition != null ? emptyValueForRule(field, operator) : null
|
|
4263
4505
|
});
|
|
4264
|
-
};
|
|
4506
|
+
}, [addTopLevelRule, registry]);
|
|
4265
4507
|
const hasPills = filterState.state.topLevelRules.length > 0;
|
|
4266
4508
|
const excludeFieldIds = useStableFieldIds(singleUseFields ? filterState.state.topLevelRules.map((rule) => rule.fieldId) : void 0);
|
|
4267
4509
|
const pillsScrollRef = useRef(null);
|
|
@@ -4409,6 +4651,7 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
|
|
|
4409
4651
|
dateTimesEnabled
|
|
4410
4652
|
}, valueControlResolver),
|
|
4411
4653
|
onClose: () => setEditingRuleId(null),
|
|
4654
|
+
onApply: field.condition != null && !committedRuleIds.has(rule.id) && hasCompleteValue(rule, registry) ? () => filterState.updateTopLevelRule(rule.id, (currentRule) => currentRule) : void 0,
|
|
4412
4655
|
open: isOpen,
|
|
4413
4656
|
onOpenChange: (open) => setEditingRuleId(open ? rule.id : null),
|
|
4414
4657
|
trigger: /* @__PURE__ */ jsx(FilterPill, {
|
|
@@ -4417,7 +4660,7 @@ function FilterBar({ registry, initialState, onChange, advancedRulesEnabled = tr
|
|
|
4417
4660
|
else pillNodesRef.current.delete(rule.id);
|
|
4418
4661
|
},
|
|
4419
4662
|
field,
|
|
4420
|
-
rule,
|
|
4663
|
+
rule: field.condition != null && !committedRuleIds.has(rule.id) ? null : rule,
|
|
4421
4664
|
variant: isOpen ? "active" : "default",
|
|
4422
4665
|
optionLabels,
|
|
4423
4666
|
onDismiss: () => filterState.removeTopLevelRule(rule.id)
|
|
@@ -4583,7 +4826,10 @@ var FieldRegistry = class {
|
|
|
4583
4826
|
}
|
|
4584
4827
|
/** Default operator for a registered field. Used when creating a new pill. */
|
|
4585
4828
|
defaultOperatorFor(fieldId) {
|
|
4586
|
-
const
|
|
4829
|
+
const field = this.getOrThrow(fieldId);
|
|
4830
|
+
const operators = getOperatorsForField(field);
|
|
4831
|
+
const defaultOperator = field.condition?.defaultOperator ?? operators[0];
|
|
4832
|
+
if (defaultOperator != null && !operators.includes(defaultOperator)) throw new Error(`FieldRegistry: default operator is not available for field "${fieldId}"`);
|
|
4587
4833
|
if (defaultOperator == null) throw new Error(`FieldRegistry: no operators available for field "${fieldId}"`);
|
|
4588
4834
|
return defaultOperator;
|
|
4589
4835
|
}
|
|
@@ -4752,6 +4998,6 @@ function decodeBase64(input) {
|
|
|
4752
4998
|
return decodeURIComponent(escape(atob(input)));
|
|
4753
4999
|
}
|
|
4754
5000
|
//#endregion
|
|
4755
|
-
export {
|
|
5001
|
+
export { dateRuleIntent as A, getOperatorsForField as C, isRangeOperator as D, isNumericComparisonOperator as E, TableViewConfigurationDropdown as F, TableControls as I, ControlBar as L, TableControlsProvider as M, useTableControls as N, isValuelessOperator as O, TableViewConfiguration as P, DataTableCompactBar as R, getDefaultOperatorForType as S, isCompleteDateRange as T, FILTER_SIZE_TOKENS as _, encodeFilterStateToUrlParam as a, NUMERIC_COMPARISON_OPERATORS as b, FilterBar_default as c, isFilterStateV2 as d, pruneToRegistry as f, resolveValueControl as g, PillShell as h, decodeFilterStateFromUrl as i, TableControlsContext as j, reconcileValueForOperator 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, getOperatorsForType as w, emptyValueForRule as x, resolveDateRangeRuleValue as y };
|
|
4756
5002
|
|
|
4757
|
-
//# sourceMappingURL=TableControls-
|
|
5003
|
+
//# sourceMappingURL=TableControls-C1MF2JvY.mjs.map
|