@persona/design-system 0.10.9 → 0.10.11
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 +43 -0
- package/dist/{Action-CHWYwpYR.d.mts → Action-sLO73eKq.d.mts} +2 -2
- 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 +2 -2
- package/dist/{Badge-BCdsVKuj.mjs → Badge-DZq6ByIU.mjs} +2 -2
- package/dist/{Badge-BCdsVKuj.mjs.map → Badge-DZq6ByIU.mjs.map} +1 -1
- package/dist/BooleanValueControl.d.mts +1 -1
- package/dist/{Breadcrumbs-CMf3Uvow.mjs → Breadcrumbs-DpsNZWF9.mjs} +9 -9
- package/dist/Breadcrumbs-DpsNZWF9.mjs.map +1 -0
- package/dist/{Button-DjD8QxcY.d.mts → Button-C4a4BTjL.d.mts} +2 -2
- package/dist/Button.d.mts +1 -1
- package/dist/CalendarBase.d.mts +1 -1
- package/dist/{Card-DiUHtYg_.d.mts → Card-CPV4_mHk.d.mts} +4 -4
- package/dist/Card.d.mts +1 -1
- package/dist/Card2.d.mts +1 -1
- package/dist/CardGrouping.d.mts +1 -1
- package/dist/{CardV2-ACI5RIzF.mjs → CardV2-DCoDfEvr.mjs} +26 -13
- package/dist/CardV2-DCoDfEvr.mjs.map +1 -0
- package/dist/ChartFrame.d.mts +61 -0
- package/dist/ChartLegend.d.mts +60 -0
- package/dist/ChartPopover.d.mts +155 -0
- package/dist/{Checkbox-Dr4LMKHV.mjs → Checkbox-C3z7UUSC.mjs} +8 -8
- package/dist/Checkbox-C3z7UUSC.mjs.map +1 -0
- package/dist/{CheckboxGroupField-DnVqlpwi.d.mts → CheckboxGroupField-BT87OVOF.d.mts} +2 -2
- package/dist/CheckboxGroupField.d.mts +1 -1
- package/dist/ChoicesValueControl.d.mts +1 -1
- package/dist/{Combobox-Gb_j1dg6.mjs → Combobox-BkK_tosd.mjs} +300 -116
- package/dist/Combobox-BkK_tosd.mjs.map +1 -0
- package/dist/Combobox-aOJDTjzC.d.mts +12 -0
- package/dist/Combobox.d.mts +3 -3
- package/dist/{ComboboxBase-Mb8HyeAI.d.mts → ComboboxBase-Brgv5nxk.d.mts} +65 -25
- package/dist/ComboboxBase.d.mts +2 -2
- package/dist/{ComboboxMultiSelect-C87lkXr7.d.mts → ComboboxMultiSelect-DJyAv0Eg.d.mts} +10 -6
- package/dist/ComboboxMultiSelect.d.mts +2 -2
- package/dist/{ComboboxSingleSelect-CIYakRW5.d.mts → ComboboxSingleSelect-CP8-HLKl.d.mts} +8 -6
- package/dist/ComboboxSingleSelect.d.mts +2 -2
- package/dist/{CompactBar-BLZZWtIE.d.mts → CompactBar-B0LhjrYV.d.mts} +2 -2
- package/dist/CompactBar.d.mts +1 -1
- package/dist/{ConfigFormGroup-BCTWCws5.mjs → ConfigFormGroup-DAUqAhJW.mjs} +2 -2
- package/dist/{ConfigFormGroup-BCTWCws5.mjs.map → ConfigFormGroup-DAUqAhJW.mjs.map} +1 -1
- package/dist/{DataTable-Bf1WDY0z.d.mts → DataTable-CSl5Jn3E.d.mts} +18 -8
- package/dist/{DataTable-CIZJ1vO8.mjs → DataTable-DiwzhNMt.mjs} +41 -28
- package/dist/DataTable-DiwzhNMt.mjs.map +1 -0
- package/dist/DataTable.d.mts +1 -1
- package/dist/{DatePicker-C9redLBr.mjs → DatePicker-BK7ioKBm.mjs} +410 -410
- package/dist/DatePicker-BK7ioKBm.mjs.map +1 -0
- package/dist/DateRangeValueControl.d.mts +1 -1
- package/dist/DateValueControl.d.mts +1 -1
- package/dist/{DropdownButton-DpLG-cIj.mjs → DropdownButton-Dp-MZ5tA.mjs} +3 -3
- package/dist/{DropdownButton-DpLG-cIj.mjs.map → DropdownButton-Dp-MZ5tA.mjs.map} +1 -1
- package/dist/DropdownButton.d.mts +2 -2
- package/dist/{DropdownMenu-DVxXQDRC.d.mts → DropdownMenu-BnHPeHOm.d.mts} +3 -3
- package/dist/{DropdownMenu-c8XK2Lr4.mjs → DropdownMenu-jJSHQaih.mjs} +4 -2
- package/dist/DropdownMenu-jJSHQaih.mjs.map +1 -0
- package/dist/DropdownMenu.d.mts +1 -1
- package/dist/{FieldRegistry-C2NVPhMO.d.mts → FieldRegistry-CJwGpUVK.d.mts} +2 -2
- package/dist/FieldRegistry.d.mts +1 -1
- package/dist/{FilterBar-BE_gBM0H.d.mts → FilterBar-DDyk14sx.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 +1 -1
- package/dist/FloatValueControl.d.mts +3 -2
- package/dist/{FloatingToolbar-DLRaE0o7.mjs → FloatingToolbar-rfKurDs8.mjs} +36 -39
- package/dist/FloatingToolbar-rfKurDs8.mjs.map +1 -0
- package/dist/{FormControl-BztNXLn6.mjs → FormControl--pbTH3bY.mjs} +3 -3
- package/dist/{FormControl-BztNXLn6.mjs.map → FormControl--pbTH3bY.mjs.map} +1 -1
- package/dist/{FormControl-BQe3GRhi.d.mts → FormControl-DPYbLcBK.d.mts} +2 -2
- package/dist/FormControl.d.mts +1 -1
- package/dist/FormControlLabel.d.mts +2 -2
- package/dist/{FormField-BW5uMzId.d.mts → FormField-CYNGm2bJ.d.mts} +2 -2
- package/dist/{FormField-Cf1VMvoa.mjs → FormField-DMxjftFw.mjs} +14 -14
- package/dist/{FormField-Cf1VMvoa.mjs.map → FormField-DMxjftFw.mjs.map} +1 -1
- package/dist/FormField.d.mts +1 -1
- package/dist/{Grid-CYpOqTUu.mjs → Grid-DVC0SSEZ.mjs} +2 -2
- package/dist/{Grid-CYpOqTUu.mjs.map → Grid-DVC0SSEZ.mjs.map} +1 -1
- package/dist/{Header-CV0Lcf0C.d.mts → Header-DaaUprCL.d.mts} +2 -2
- package/dist/Header.d.mts +1 -1
- package/dist/{HelperTooltip-BNM3pTM-.d.mts → HelperTooltip-C5BDdJSI.d.mts} +2 -2
- package/dist/HelperTooltip.d.mts +1 -1
- package/dist/HighlightedText.d.mts +1 -1
- package/dist/{HoverCopyableField-XHC_n9tp.mjs → HoverCopyableField-B2-xlwUt.mjs} +12 -7
- package/dist/HoverCopyableField-B2-xlwUt.mjs.map +1 -0
- package/dist/{IconButton-C_ReZm8v.d.mts → IconButton-7k-wjvH3.d.mts} +2 -2
- package/dist/{IconButton-DxHB2g80.mjs → IconButton-kSjnfhWt.mjs} +11 -10
- package/dist/IconButton-kSjnfhWt.mjs.map +1 -0
- package/dist/IconButton.d.mts +1 -1
- package/dist/ImageTile.d.mts +1 -1
- package/dist/IndexTableLayout.d.mts +4 -4
- package/dist/InlineCombobox.d.mts +1 -1
- package/dist/InlineInput.d.mts +1 -1
- package/dist/{Input-DH-5dKor.d.mts → Input-CwvrBsiS.d.mts} +3 -3
- package/dist/{Input-RHXujO9u.mjs → Input-TRmTBEav.mjs} +5 -5
- package/dist/{Input-RHXujO9u.mjs.map → Input-TRmTBEav.mjs.map} +1 -1
- package/dist/Input.d.mts +1 -1
- package/dist/IntegerValueControl.d.mts +3 -2
- package/dist/{Link-D_kCyLYX.mjs → Link-XvzUN8sY.mjs} +6 -6
- package/dist/Link-XvzUN8sY.mjs.map +1 -0
- package/dist/{ListBox-DxOACf6N.d.mts → ListBox-BePQBYR7.d.mts} +3 -3
- package/dist/{ListBox-BZp6exb8.mjs → ListBox-DahM1PgU.mjs} +12 -12
- package/dist/{ListBox-BZp6exb8.mjs.map → ListBox-DahM1PgU.mjs.map} +1 -1
- package/dist/ListBox.d.mts +1 -1
- package/dist/{ListBoxField-CgnDuhUw.d.mts → ListBoxField-lj7JN1BX.d.mts} +4 -4
- package/dist/ListBoxField.d.mts +1 -1
- package/dist/{LoadingShimmer-oPIv2ESr.mjs → LoadingShimmer-CpfKTSUs.mjs} +4 -3
- package/dist/LoadingShimmer-CpfKTSUs.mjs.map +1 -0
- package/dist/LoadingShimmer.d.mts +1 -1
- package/dist/{LogicRow-Dv_1G1TC.d.mts → LogicRow-Do7t7Suf.d.mts} +2 -2
- package/dist/LogicRow.d.mts +1 -1
- package/dist/MaskedInput.d.mts +2 -2
- package/dist/MatchHighlight.d.mts +1 -1
- package/dist/{Menu-BVn1jh46.mjs → Menu-BvMzSH2I.mjs} +5 -5
- package/dist/{Menu-BVn1jh46.mjs.map → Menu-BvMzSH2I.mjs.map} +1 -1
- package/dist/{Menu-BfjvH8mr.d.mts → Menu-Ca5ftvo6.d.mts} +4 -4
- package/dist/Menu.d.mts +1 -1
- package/dist/{MiddleTruncatedText-DicQsLDG.mjs → MiddleTruncatedText--jzGTD00.mjs} +2 -2
- package/dist/{MiddleTruncatedText-DicQsLDG.mjs.map → MiddleTruncatedText--jzGTD00.mjs.map} +1 -1
- package/dist/{Modal-De5_bPJ_.mjs → Modal-B6X5AgWj.mjs} +54 -25
- package/dist/{Modal-De5_bPJ_.mjs.map → Modal-B6X5AgWj.mjs.map} +1 -1
- package/dist/{Modal-CujB7DuB.d.mts → Modal-BPfFyzkw.d.mts} +3 -3
- package/dist/Modal.d.mts +1 -1
- package/dist/{PageHeader-UPiqJpIF.d.mts → PageHeader-BeBmYmUX.d.mts} +2 -2
- package/dist/{PageHeader-7_Hf6rHl.mjs → PageHeader-bhQTjuZF.mjs} +2 -2
- package/dist/{PageHeader-7_Hf6rHl.mjs.map → PageHeader-bhQTjuZF.mjs.map} +1 -1
- package/dist/PageHeader.d.mts +1 -1
- package/dist/{PageLayout-BdVM37bV.d.mts → PageLayout-BXM_pyrU.d.mts} +2 -2
- package/dist/{PageLayout-DjtGrvJa.mjs → PageLayout-DgEGcZgB.mjs} +3 -3
- package/dist/{PageLayout-DjtGrvJa.mjs.map → PageLayout-DgEGcZgB.mjs.map} +1 -1
- package/dist/PageLayout.d.mts +1 -1
- package/dist/{PageSelector-B5CcAzss.d.mts → PageSelector-C14ABZVL.d.mts} +2 -2
- package/dist/PageSelector.d.mts +1 -1
- package/dist/{Pagination-DMH2IaV0.mjs → Pagination-DE8wT55m.mjs} +5 -5
- package/dist/{Pagination-DMH2IaV0.mjs.map → Pagination-DE8wT55m.mjs.map} +1 -1
- package/dist/{Pii-24D_nSRQ.mjs → Pii-C42ZY88Y.mjs} +2 -2
- package/dist/{Pii-24D_nSRQ.mjs.map → Pii-C42ZY88Y.mjs.map} +1 -1
- package/dist/{PillShell-B7Bm-dsE.d.mts → PillShell-Bkyu5FXB.d.mts} +2 -2
- package/dist/PillShell.d.mts +1 -1
- package/dist/{Popover-DordjYNM.mjs → Popover-DuFjaSoq.mjs} +4 -2
- package/dist/Popover-DuFjaSoq.mjs.map +1 -0
- package/dist/Popover.d.mts +1 -1
- package/dist/ProgressBar.d.mts +1 -1
- package/dist/{ProgressIndicator-zt3ndT9U.mjs → ProgressIndicator-hy1P-RG1.mjs} +3 -3
- package/dist/{ProgressIndicator-zt3ndT9U.mjs.map → ProgressIndicator-hy1P-RG1.mjs.map} +1 -1
- package/dist/{Radio-BlEtetrr.mjs → Radio-B4TBAho6.mjs} +5 -5
- package/dist/Radio-B4TBAho6.mjs.map +1 -0
- package/dist/{RadioGroup-CMrXmmn4.mjs → RadioGroup-Bf24GKOb.mjs} +3 -3
- package/dist/{RadioGroup-CMrXmmn4.mjs.map → RadioGroup-Bf24GKOb.mjs.map} +1 -1
- package/dist/RichTextEditor.d.mts +1 -1
- package/dist/RuleEditorFields.d.mts +2 -2
- package/dist/RulesPill.d.mts +1 -1
- package/dist/SectionHeading.d.mts +1 -1
- package/dist/{SegmentedControl-D_DA-MU1.mjs → SegmentedControl-BpR7sUWO.mjs} +6 -3
- package/dist/SegmentedControl-BpR7sUWO.mjs.map +1 -0
- package/dist/{Select-CaG6OQi1.d.mts → Select-DYdn73Nh.d.mts} +2 -2
- package/dist/{Select-DOlw_LPR.mjs → Select-RdTT2KoH.mjs} +10 -8
- package/dist/Select-RdTT2KoH.mjs.map +1 -0
- package/dist/Select.d.mts +1 -1
- package/dist/SmartTextInput.d.mts +1 -1
- package/dist/SmartTextInputField.d.mts +2 -2
- package/dist/SmartTextInputFunctionDialog.d.mts +1 -1
- package/dist/SmartTextInputPopover.d.mts +1 -1
- package/dist/{Spinner-CXb-KUs1.mjs → Spinner-vcApnJzv.mjs} +2 -2
- package/dist/{Spinner-CXb-KUs1.mjs.map → Spinner-vcApnJzv.mjs.map} +1 -1
- package/dist/{Stack-CODxfzhl.d.mts → Stack-B6MrjJeW.d.mts} +2 -2
- package/dist/Stack.d.mts +1 -1
- package/dist/{StatusIndicator-CzRaEFSz.mjs → StatusIndicator-lwt35J6B.mjs} +3 -3
- package/dist/{StatusIndicator-CzRaEFSz.mjs.map → StatusIndicator-lwt35J6B.mjs.map} +1 -1
- package/dist/{Sticker-CLvRB8V5.d.mts → Sticker-C7Wv3Obx.d.mts} +4 -4
- package/dist/{Sticker-C1_6I08u.mjs → Sticker-jfOM4Yi6.mjs} +5 -5
- package/dist/{Sticker-C1_6I08u.mjs.map → Sticker-jfOM4Yi6.mjs.map} +1 -1
- package/dist/Sticker.d.mts +1 -1
- package/dist/StringValueControl.d.mts +2 -1
- package/dist/Tab.d.mts +2 -2
- package/dist/{TabBar-BCFO38E0.mjs → TabBar-DwHgbIQ6.mjs} +8 -8
- package/dist/TabBar-DwHgbIQ6.mjs.map +1 -0
- package/dist/{Table-DPi4Dt5H.mjs → Table-SMJAWqoe.mjs} +21 -13
- package/dist/Table-SMJAWqoe.mjs.map +1 -0
- package/dist/{TableBox-DNQsgQ8x.mjs → TableBox-DS8mpN3-.mjs} +21 -17
- package/dist/TableBox-DS8mpN3-.mjs.map +1 -0
- package/dist/TableBox.d.mts +1 -1
- package/dist/{TableBoxCell-B9KMWebc.d.mts → TableBoxCell-Bo5xYEmR.d.mts} +6 -6
- package/dist/TableBoxCell.d.mts +1 -1
- package/dist/{TableBoxField-0uIGzBhF.d.mts → TableBoxField-CdgjSGLK.d.mts} +5 -5
- package/dist/TableBoxField.d.mts +1 -1
- package/dist/{TableBoxRow-PjBBDcEk.d.mts → TableBoxRow-DuWS2iRC.d.mts} +2 -2
- package/dist/TableBoxRow.d.mts +1 -1
- package/dist/{TableBoxRowActions-B7stm6Q3.d.mts → TableBoxRowActions-zW74DkXt.d.mts} +2 -2
- package/dist/TableBoxRowActions.d.mts +1 -1
- package/dist/{TableCell-CQsF7t4e.d.mts → TableCell-uv_jqT5e.d.mts} +2 -2
- package/dist/TableCell.d.mts +1 -1
- package/dist/{TableControls-ODHrCDJM.d.mts → TableControls-9vz-HfDu.d.mts} +4 -4
- package/dist/{TableControls-BrP_BqnF.mjs → TableControls-CX7BvgD2.mjs} +107 -43
- package/dist/TableControls-CX7BvgD2.mjs.map +1 -0
- package/dist/TableControls.d.mts +1 -1
- package/dist/{TableControlsContext-CHuLxfa7.d.mts → TableControlsContext-D0Hn3rwL.d.mts} +2 -2
- package/dist/TableControlsContext.d.mts +1 -1
- package/dist/{TableViewConfigurationDropdown-BWBBUXCs.d.mts → TableViewConfigurationDropdown-CZcLH8uR.d.mts} +2 -2
- package/dist/TableViewConfigurationDropdown.d.mts +1 -1
- package/dist/{TechnicalSticker-Cq5jzYKQ.mjs → TechnicalSticker-DrN45Vut.mjs} +9 -7
- package/dist/TechnicalSticker-DrN45Vut.mjs.map +1 -0
- package/dist/{Text-CvaqognH.d.mts → Text-CdHeSHCc.d.mts} +2 -2
- package/dist/Text.d.mts +1 -1
- package/dist/{TextArea-Dro-HH8O.mjs → TextArea-CQ1YNi2b.mjs} +4 -5
- package/dist/TextArea-CQ1YNi2b.mjs.map +1 -0
- package/dist/{TextUnderlineTooltip-Bd5e8KH3.d.mts → TextUnderlineTooltip-By1VVsSs.d.mts} +3 -3
- package/dist/TextUnderlineTooltip.d.mts +1 -1
- package/dist/Tile.d.mts +1 -1
- package/dist/{Toggle-D9MzTIZs.mjs → Toggle-DjmkjJlw.mjs} +13 -9
- package/dist/Toggle-DjmkjJlw.mjs.map +1 -0
- package/dist/{Tooltip-YViXzMdm.mjs → Tooltip-C2VB8I6y.mjs} +18 -5
- package/dist/Tooltip-C2VB8I6y.mjs.map +1 -0
- package/dist/{Tooltip-Ddy2Jq0K.d.mts → Tooltip-OxVvOfn8.d.mts} +3 -3
- package/dist/Tooltip.d.mts +1 -1
- package/dist/{TruncatedText-sr9Fhm3N.d.mts → TruncatedText-Dqj94BFK.d.mts} +2 -2
- package/dist/WizardModal.d.mts +1 -1
- package/dist/chartColors.d.mts +92 -0
- package/dist/chartFrameLayout.d.mts +46 -0
- package/dist/{clientFilterUtils-scLlIuP_.d.mts → clientFilterUtils-CMLuN8kK.d.mts} +2 -2
- package/dist/clientFilterUtils.d.mts +1 -1
- package/dist/components/Accordion/index.mjs +25 -16
- package/dist/components/Accordion/index.mjs.map +1 -1
- package/dist/components/Attribute/index.mjs +8 -6
- package/dist/components/Attribute/index.mjs.map +1 -1
- package/dist/components/Badge/index.mjs +1 -1
- package/dist/components/Banner/index.mjs +3 -3
- package/dist/components/BottomPanel/index.mjs +10 -8
- package/dist/components/BottomPanel/index.mjs.map +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/Chart/index.d.mts +9 -0
- package/dist/components/Chart/index.mjs +680 -0
- package/dist/components/Chart/index.mjs.map +1 -0
- package/dist/components/Checkbox/index.mjs +1 -1
- package/dist/components/CodeHighlight/index.mjs +4 -4
- package/dist/components/Combobox/index.d.mts +5 -3
- package/dist/components/Combobox/index.mjs +1 -1
- package/dist/components/ConfigFormGroup/index.mjs +1 -1
- package/dist/components/DataTable/TableControls/index.d.mts +20 -20
- package/dist/components/DataTable/TableControls/index.mjs +2 -2
- package/dist/components/DataTable/index.d.mts +5 -5
- package/dist/components/DataTable/index.mjs +1 -1
- package/dist/components/DataTable/types.d.mts +1 -1
- 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 +20 -18
- package/dist/components/FloatingPanel/index.mjs.map +1 -1
- package/dist/components/FloatingToolbar/index.mjs +1 -1
- package/dist/components/FormControl/index.d.mts +1 -1
- package/dist/components/FormControl/index.mjs +1 -1
- package/dist/components/FormField/index.d.mts +5 -5
- package/dist/components/FormField/index.mjs +1 -1
- package/dist/components/Grid/index.mjs +1 -1
- package/dist/components/HoverCopyableField/index.mjs +1 -1
- package/dist/components/ImageTile/index.mjs +10 -10
- package/dist/components/ImageTile/index.mjs.map +1 -1
- package/dist/components/Input/index.d.mts +1 -1
- package/dist/components/Input/index.mjs +1 -1
- package/dist/components/Link/index.mjs +1 -1
- package/dist/components/ListBox/index.d.mts +3 -3
- package/dist/components/ListBox/index.mjs +1 -1
- package/dist/components/LoadingShimmer/index.mjs +1 -1
- package/dist/components/MaskedInput/index.mjs +1 -1
- package/dist/components/Menu/index.d.mts +1 -1
- package/dist/components/Menu/index.mjs +1 -1
- package/dist/components/Modal/index.d.mts +1 -1
- package/dist/components/Modal/index.mjs +1 -1
- package/dist/components/PageHeader/index.d.mts +1 -1
- package/dist/components/PageHeader/index.mjs +1 -1
- package/dist/components/Pagination/index.d.mts +1 -1
- 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 +20 -3
- package/dist/components/ProgressBar/index.mjs.map +1 -1
- package/dist/components/ProgressIndicator/index.mjs +1 -1
- package/dist/components/Radio/index.mjs +1 -1
- package/dist/components/RadioGroup/index.mjs +1 -1
- package/dist/components/RichTextEditor/index.mjs +9 -9
- package/dist/components/RightPanel/index.mjs +30 -15
- package/dist/components/RightPanel/index.mjs.map +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/SelectionCard/index.mjs +5 -5
- package/dist/components/Slider/index.mjs +5 -4
- package/dist/components/Slider/index.mjs.map +1 -1
- package/dist/components/SmartTextInput/index.mjs +11 -18
- package/dist/components/SmartTextInput/index.mjs.map +1 -1
- 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/SwatchPicker/index.mjs +2 -1
- package/dist/components/SwatchPicker/index.mjs.map +1 -1
- package/dist/components/TabBar/index.mjs +1 -1
- package/dist/components/Table/index.d.mts +1 -1
- package/dist/components/Table/index.mjs +1 -1
- package/dist/components/TableBox/index.d.mts +1 -1
- 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.mjs +1 -1
- package/dist/components/Tile/index.mjs +2 -2
- package/dist/components/Toast/index.mjs +19 -13
- package/dist/components/Toast/index.mjs.map +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.mjs +8 -8
- package/dist/compound-expression.d.mts +1 -1
- package/dist/{date-range-rule-value-ASr06ClE.d.mts → date-range-rule-value-DyLlMtjr.d.mts} +2 -2
- package/dist/date-range-rule-value.d.mts +1 -1
- package/dist/display.d.mts +1 -1
- package/dist/duration-token.d.mts +11 -0
- package/dist/exit-motion.d.mts +7 -0
- package/dist/fieldPickerOptions.d.mts +2 -2
- package/dist/{filter-size-context-CmFyIPCm.d.mts → filter-size-context-DVnjmuhk.d.mts} +2 -2
- package/dist/filter-size-context.d.mts +1 -1
- package/dist/{filters-yfzOlqKx.d.mts → filters-By_TYKAZ.d.mts} +3 -3
- package/dist/filters.d.mts +1 -1
- package/dist/{helpers-BeCjgAeE.d.mts → helpers-BIHsqdyX.d.mts} +2 -2
- package/dist/helpers.d.mts +1 -1
- package/dist/{index-kIon1vPp.d.mts → index-BozzRwby.d.mts} +2 -2
- package/dist/{index-BEHNqAZa.d.mts → index-CZJp4Af6.d.mts} +3 -3
- package/dist/index2.d.mts +1 -1
- package/dist/index4.d.mts +3 -3
- package/dist/index5.d.mts +1 -1
- package/dist/index6.d.mts +14 -14
- package/dist/{inputFields-BnCdmuBt.d.mts → inputFields-BqO2H-Kj.d.mts} +6 -6
- package/dist/inputFields.d.mts +1 -1
- package/dist/lib/MiddleTruncatedText.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/colorMode.d.mts +1 -1
- package/dist/lib/schemaOptions.mjs +9 -4
- package/dist/lib/schemaOptions.mjs.map +1 -1
- package/dist/lib/useChain.d.mts +1 -1
- package/dist/lib/useModalInsetRight.d.mts +4 -3
- package/dist/lib/useModalInsetRight.mjs +7 -5
- package/dist/lib/useModalInsetRight.mjs.map +1 -1
- package/dist/lint/THIRD_PARTY_NOTICES.md +30 -0
- package/dist/lint/index.mjs +696 -11
- package/dist/lint/index.mjs.map +1 -1
- package/dist/lint/recommended.json +7 -1
- package/dist/mixins/focus.mjs +1 -1
- package/dist/mixins/hoverable.mjs +2 -2
- package/dist/mixins/hoverable.mjs.map +1 -1
- package/dist/mixins/input.mjs +3 -2
- package/dist/mixins/input.mjs.map +1 -1
- package/dist/mixins/menuItem.mjs +2 -0
- package/dist/mixins/menuItem.mjs.map +1 -1
- package/dist/mixins/motion.d.mts +24 -0
- package/dist/mixins/motion.mjs +44 -0
- package/dist/mixins/motion.mjs.map +1 -0
- package/dist/motion-origin.d.mts +7 -0
- package/dist/motion.d.mts +63 -0
- package/dist/no-layout-motion.d.mts +7 -0
- package/dist/no-transition-all.d.mts +7 -0
- package/dist/{operators-BHxKZcpD.d.mts → operators-B8_k3r69.d.mts} +10 -3
- package/dist/operators.d.mts +2 -2
- package/dist/overlay-motion.d.mts +7 -0
- package/dist/patterns/CardGrouping/index.mjs +9 -9
- package/dist/patterns/CardGrouping/index.mjs.map +1 -1
- package/dist/patterns/IndexTableLayout/index.mjs +3 -3
- package/dist/patterns/LayoutLoadingShimmer/index.mjs +4 -4
- package/dist/patterns/LayoutLoadingSpinner/index.mjs +3 -1
- package/dist/patterns/LayoutLoadingSpinner/index.mjs.map +1 -1
- package/dist/patterns/PageLayout/index.d.mts +1 -1
- package/dist/patterns/PageLayout/index.mjs +1 -1
- package/dist/patterns/WizardModal/index.mjs +4 -4
- package/dist/relative-date-label.d.mts +1 -1
- package/dist/tone.d.mts +1 -1
- package/dist/{types-DLnCkvTt.d.mts → types-BJqmRXFV.d.mts} +15 -1
- package/dist/{types-CqcbWyUY.d.mts → types-BOsCi-kZ.d.mts} +8 -2
- package/dist/{types-BXJ6qAGy.d.mts → types-C_CncajO.d.mts} +2 -2
- package/dist/{types-BeFBvQ1c.d.mts → types-D5txFacG.d.mts} +3 -3
- package/dist/types4.d.mts +1 -1
- package/dist/types5.d.mts +1 -1
- package/dist/types6.d.mts +1 -1
- package/dist/{url-state-CXUuK3_r.d.mts → url-state-CXPmXzIZ.d.mts} +2 -2
- package/dist/url-state.d.mts +1 -1
- package/dist/{useChain-B--KAtdN.d.mts → useChain-x9fd9Fyq.d.mts} +2 -2
- package/dist/useChainAtCursor.d.mts +1 -1
- package/dist/useChartColors.d.mts +30 -0
- package/dist/useChartSeriesVisibility.d.mts +22 -0
- package/dist/useChartStyles.d.mts +108 -0
- package/dist/useColumnConfiguration.d.mts +2 -2
- package/dist/useComboboxFooterAction.d.mts +1 -1
- package/dist/{useFilterStateV2-DBpbxAEC.d.mts → useFilterStateV2-DiTS9DTg.d.mts} +3 -3
- package/dist/useFilterStateV2.d.mts +1 -1
- package/dist/{useTableColumns-DJFy0Gp8.d.mts → useTableColumns-BEKJNrb1.d.mts} +2 -2
- package/dist/useTableColumns.d.mts +1 -1
- package/dist/useTruncation.d.mts +1 -1
- package/dist/useValueControlError.d.mts +26 -0
- package/dist/utils.d.mts +1 -1
- package/dist/{validation-Tgg3AhuP.d.mts → validation-BDQdQ1cY.d.mts} +3 -3
- package/dist/validation.d.mts +1 -1
- package/dist/{value-control-resolver-XQbGCdsP.d.mts → value-control-resolver-BFJZEWDn.d.mts} +9 -3
- package/dist/value-control-resolver.d.mts +1 -1
- package/dist/variables/charting.mjs +1 -1
- package/dist/variables/charting.mjs.map +1 -1
- package/dist/variables/keyframes.d.mts +2 -1
- package/dist/variables/keyframes.mjs +9 -1
- package/dist/variables/keyframes.mjs.map +1 -1
- package/dist/variables/transitions.d.mts +31 -1
- package/dist/variables/transitions.mjs +50 -1
- package/dist/variables/transitions.mjs.map +1 -1
- package/llms.txt +3 -2
- package/package.json +14 -4
- package/skills/new-screen/SKILL.md +33 -0
- package/skills/ui-authoring/COMPONENTS.md +19 -1
- package/skills/ui-authoring/PATTERNS.md +57 -33
- package/skills/ui-authoring/STANDARD.md +68 -4
- package/skills/ui-authoring/TOKENS.md +27 -24
- package/dist/Breadcrumbs-CMf3Uvow.mjs.map +0 -1
- package/dist/CardV2-ACI5RIzF.mjs.map +0 -1
- package/dist/Checkbox-Dr4LMKHV.mjs.map +0 -1
- package/dist/Combobox-Gb_j1dg6.mjs.map +0 -1
- package/dist/Combobox-fYZjpn5-.d.mts +0 -11
- package/dist/DataTable-CIZJ1vO8.mjs.map +0 -1
- package/dist/DatePicker-C9redLBr.mjs.map +0 -1
- package/dist/DropdownMenu-c8XK2Lr4.mjs.map +0 -1
- package/dist/FloatingToolbar-DLRaE0o7.mjs.map +0 -1
- package/dist/HoverCopyableField-XHC_n9tp.mjs.map +0 -1
- package/dist/IconButton-DxHB2g80.mjs.map +0 -1
- package/dist/Link-D_kCyLYX.mjs.map +0 -1
- package/dist/LoadingShimmer-oPIv2ESr.mjs.map +0 -1
- package/dist/Popover-DordjYNM.mjs.map +0 -1
- package/dist/Radio-BlEtetrr.mjs.map +0 -1
- package/dist/SegmentedControl-D_DA-MU1.mjs.map +0 -1
- package/dist/Select-DOlw_LPR.mjs.map +0 -1
- package/dist/TabBar-BCFO38E0.mjs.map +0 -1
- package/dist/Table-DPi4Dt5H.mjs.map +0 -1
- package/dist/TableBox-DNQsgQ8x.mjs.map +0 -1
- package/dist/TableControls-BrP_BqnF.mjs.map +0 -1
- package/dist/TechnicalSticker-Cq5jzYKQ.mjs.map +0 -1
- package/dist/TextArea-Dro-HH8O.mjs.map +0 -1
- package/dist/Toggle-D9MzTIZs.mjs.map +0 -1
- package/dist/Tooltip-YViXzMdm.mjs.map +0 -1
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import { a as styled, r as css } from "./styledComponentsInterop-Cs5CCPRy.mjs";
|
|
2
|
+
import { isDisabled, isHovered, isNotDisabled } from "./lib/pseudoClass.mjs";
|
|
2
3
|
import { semanticColor } from "./lib/semanticColor.mjs";
|
|
4
|
+
import { focusStyle } from "./mixins/focus.mjs";
|
|
5
|
+
import { semanticScrollbar } from "./mixins/scrollbar.mjs";
|
|
3
6
|
import { i as Paragraph } from "./Text-D0vEReED.mjs";
|
|
4
|
-
import {
|
|
7
|
+
import { a as Tooltip } from "./Tooltip-C2VB8I6y.mjs";
|
|
5
8
|
import { useOutsideClick } from "./lib/useOutsideClick.mjs";
|
|
6
9
|
import { Z_INDICES } from "./lib/zindex.mjs";
|
|
7
|
-
import { focusStyle } from "./mixins/focus.mjs";
|
|
8
|
-
import { semanticScrollbar } from "./mixins/scrollbar.mjs";
|
|
9
10
|
import { n as Stack } from "./Stack-Bzom2BTR.mjs";
|
|
10
|
-
import { n as Button } from "./IconButton-
|
|
11
|
-
import { n as Sticker } from "./Sticker-
|
|
11
|
+
import { n as Button } from "./IconButton-kSjnfhWt.mjs";
|
|
12
|
+
import { n as Sticker } from "./Sticker-jfOM4Yi6.mjs";
|
|
12
13
|
import { n as useFormField } from "./useFormField-pOVkb5BK.mjs";
|
|
13
|
-
import { r as InputGroup } from "./Input-
|
|
14
|
+
import { r as InputGroup } from "./Input-TRmTBEav.mjs";
|
|
14
15
|
import Input_default from "./components/Input/index.mjs";
|
|
15
|
-
import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-
|
|
16
|
-
import { t as Checkbox } from "./Checkbox-
|
|
17
|
-
import { t as Spinner } from "./Spinner-
|
|
18
|
-
import { Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
16
|
+
import { c as MenuList, n as IconContainer, o as MenuHeading, s as MenuItem, t as FloatingCard } from "./Menu-BvMzSH2I.mjs";
|
|
17
|
+
import { t as Checkbox } from "./Checkbox-C3z7UUSC.mjs";
|
|
18
|
+
import { t as Spinner } from "./Spinner-vcApnJzv.mjs";
|
|
19
19
|
import { Color, Spacing, Typography } from "@persona/design-tokens";
|
|
20
|
+
import { Fragment, cloneElement, forwardRef, isValidElement, useCallback, useEffect, useImperativeHandle, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
20
21
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
21
22
|
import { ArrowLeftIcon, CaretDownIcon, ChevronRightIcon, CircleXInverseIcon, SearchIcon } from "@persona/icons";
|
|
22
23
|
import Fuse from "fuse.js";
|
|
@@ -28,6 +29,35 @@ function isOptionGroup(item) {
|
|
|
28
29
|
return "options" in item && Array.isArray(item.options);
|
|
29
30
|
}
|
|
30
31
|
/**
|
|
32
|
+
* Moves disabled options after the enabled ones, keeping each run in its original order. A section
|
|
33
|
+
* header (inline group) is a boundary, so an option never leaves its section. Nested-group rows
|
|
34
|
+
* count as enabled. Recurses into every group.
|
|
35
|
+
*/
|
|
36
|
+
function sortDisabledOptionsLast(items, isDisabled) {
|
|
37
|
+
const sorted = [];
|
|
38
|
+
let enabled = [];
|
|
39
|
+
let disabled = [];
|
|
40
|
+
const flush = () => {
|
|
41
|
+
sorted.push(...enabled, ...disabled);
|
|
42
|
+
enabled = [];
|
|
43
|
+
disabled = [];
|
|
44
|
+
};
|
|
45
|
+
for (const item of items) if (isOptionGroup(item)) {
|
|
46
|
+
const group = {
|
|
47
|
+
...item,
|
|
48
|
+
options: sortDisabledOptionsLast(item.options, isDisabled)
|
|
49
|
+
};
|
|
50
|
+
if (item.nested) enabled.push(group);
|
|
51
|
+
else {
|
|
52
|
+
flush();
|
|
53
|
+
sorted.push(group);
|
|
54
|
+
}
|
|
55
|
+
} else if (isDisabled(item)) disabled.push(item);
|
|
56
|
+
else enabled.push(item);
|
|
57
|
+
flush();
|
|
58
|
+
return sorted;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
31
61
|
* Flatten the visible leaves at the current navigation level. Inline
|
|
32
62
|
* (non-nested) groups are walked through transparently — their leaves
|
|
33
63
|
* surface at this level. Nested groups are skipped along with their
|
|
@@ -86,9 +116,7 @@ function findNestedGroupByLabel(items, label) {
|
|
|
86
116
|
* nested groups).
|
|
87
117
|
*
|
|
88
118
|
* - Empty `path` returns the original top-level items unchanged.
|
|
89
|
-
* - If
|
|
90
|
-
* state after the registry changes), returns an empty list so the
|
|
91
|
-
* consumer can fall back to the root view.
|
|
119
|
+
* - If a step no longer resolves to a nested group, returns an empty list.
|
|
92
120
|
*/
|
|
93
121
|
function getOptionsAtPath(options, path) {
|
|
94
122
|
let scope = options;
|
|
@@ -142,29 +170,107 @@ function getNavigableItemsAtLevel(items) {
|
|
|
142
170
|
});
|
|
143
171
|
return out;
|
|
144
172
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
173
|
+
function filterComboboxOptions(options, inputValue) {
|
|
174
|
+
const flatOptions = flattenOptions(options);
|
|
175
|
+
const fuse = new Fuse(flatOptions, {
|
|
176
|
+
shouldSort: false,
|
|
177
|
+
threshold: 0,
|
|
178
|
+
ignoreLocation: true,
|
|
179
|
+
minMatchCharLength: 1,
|
|
180
|
+
keys: [
|
|
181
|
+
"label",
|
|
182
|
+
"description",
|
|
183
|
+
"keywords"
|
|
184
|
+
]
|
|
185
|
+
});
|
|
186
|
+
return inputValue === "" ? flatOptions : Array.from(new Set(fuse.search(inputValue).map(({ item }) => item)).values());
|
|
187
|
+
}
|
|
188
|
+
/** All server-specific behavior lives here; client event/filtering behavior passes through. */
|
|
189
|
+
function useComboboxServerMode(props, values, clientOptions = props.options, selectAll = false) {
|
|
190
|
+
const server = props.filterMode === "server";
|
|
191
|
+
const options = useMemo(() => server ? flattenLeafOptions(props.options).map(({ option }) => option) : clientOptions, [
|
|
192
|
+
server,
|
|
193
|
+
props.options,
|
|
194
|
+
clientOptions
|
|
195
|
+
]);
|
|
196
|
+
const selectedItems = useMemo(() => {
|
|
197
|
+
if (!server) return flattenLeafOptions(options).map(({ option }) => option).filter((option) => values.includes(option.value));
|
|
198
|
+
const byValue = /* @__PURE__ */ new Map();
|
|
199
|
+
if (props.filterMode === "server") props.selectedOptions?.forEach((option) => byValue.set(option.value, option));
|
|
200
|
+
flattenLeafOptions(options).forEach(({ option }) => byValue.set(option.value, option));
|
|
201
|
+
return values.flatMap((value) => {
|
|
202
|
+
const option = byValue.get(value) ?? (server ? {
|
|
203
|
+
value,
|
|
204
|
+
label: String(value)
|
|
205
|
+
} : void 0);
|
|
206
|
+
return option ? [option] : [];
|
|
165
207
|
});
|
|
166
|
-
|
|
167
|
-
|
|
208
|
+
}, [
|
|
209
|
+
options,
|
|
210
|
+
server,
|
|
211
|
+
props.filterMode,
|
|
212
|
+
props.selectedOptions,
|
|
213
|
+
values
|
|
214
|
+
]);
|
|
215
|
+
const itemToKey = useCallback((item) => item?.value, []);
|
|
216
|
+
const filterOptions = useCallback((source, inputValue) => server ? flattenOptions(source) : filterComboboxOptions(source, inputValue), [server]);
|
|
217
|
+
const scrollRef = useRef(null);
|
|
218
|
+
const scrollState = useRef({
|
|
219
|
+
open: false,
|
|
220
|
+
rowHeight: 32
|
|
221
|
+
});
|
|
222
|
+
scrollState.current.rowHeight = props.size === "sm" ? 24 : 32;
|
|
223
|
+
scrollState.current.callback = props.filterMode === "server" ? props.onScrollEnd : void 0;
|
|
224
|
+
const checkScrollEnd = useCallback((shortOnly = false) => {
|
|
225
|
+
const list = scrollRef.current;
|
|
226
|
+
if (!scrollState.current.open || !list || list.clientHeight <= 0) return;
|
|
227
|
+
if (shortOnly ? list.scrollHeight <= list.clientHeight : list.scrollHeight - list.scrollTop - list.clientHeight <= scrollState.current.rowHeight) scrollState.current.callback?.();
|
|
228
|
+
}, []);
|
|
229
|
+
const onMenuOpenChange = useCallback((open) => {
|
|
230
|
+
if (scrollState.current.open === open) return;
|
|
231
|
+
scrollState.current.open = open;
|
|
232
|
+
if (open) checkScrollEnd(true);
|
|
233
|
+
}, [checkScrollEnd]);
|
|
234
|
+
useEffect(() => checkScrollEnd(true), [checkScrollEnd, options.length]);
|
|
235
|
+
const getQueryInputProps = (inputProps, isOpen = true, onQueryEdit) => {
|
|
236
|
+
if (props.filterMode !== "server") return inputProps;
|
|
237
|
+
return {
|
|
238
|
+
...inputProps,
|
|
239
|
+
value: isOpen ? props.query : inputProps.value,
|
|
240
|
+
onKeyDown: (event) => {
|
|
241
|
+
if (!isOpen && !event.nativeEvent.isComposing && (event.key.length === 1 && !event.metaKey && !event.ctrlKey && !event.altKey || event.key === "Backspace" || event.key === "Delete" || event.key === "Process" || event.key === "Unidentified" || event.key === "Dead")) event.currentTarget.select();
|
|
242
|
+
inputProps.onKeyDown?.(event);
|
|
243
|
+
},
|
|
244
|
+
onPaste: (event) => {
|
|
245
|
+
if (!isOpen) event.currentTarget.select();
|
|
246
|
+
inputProps.onPaste?.(event);
|
|
247
|
+
},
|
|
248
|
+
onChange: (event) => {
|
|
249
|
+
const nextInput = event.currentTarget.value;
|
|
250
|
+
inputProps.onChange?.(event);
|
|
251
|
+
onQueryEdit?.();
|
|
252
|
+
props.onQueryChange(nextInput);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
return {
|
|
257
|
+
options,
|
|
258
|
+
selectedItems,
|
|
259
|
+
scrollRef,
|
|
260
|
+
onMenuOpenChange,
|
|
261
|
+
onScroll: server ? () => checkScrollEnd() : void 0,
|
|
262
|
+
loadingMore: props.filterMode === "server" && props.isLoadingMore ? /* @__PURE__ */ jsx(LoadingMoreRow, { children: /* @__PURE__ */ jsx(Spinner, {
|
|
263
|
+
size: "sm",
|
|
264
|
+
srText: "Loading more options"
|
|
265
|
+
}) }) : null,
|
|
266
|
+
itemToKey,
|
|
267
|
+
filterOptions,
|
|
268
|
+
getQueryInputProps,
|
|
269
|
+
query: props.filterMode === "server" ? props.query : void 0,
|
|
270
|
+
onInputChange: server ? void 0 : props.onInputChange,
|
|
271
|
+
selectAll: !server && selectAll,
|
|
272
|
+
preserveOptionOrder: server
|
|
273
|
+
};
|
|
168
274
|
}
|
|
169
275
|
function buildVirtualRows(options, filteredOptions, indexRealToIndexVirtual) {
|
|
170
276
|
const rows = [];
|
|
@@ -392,6 +498,10 @@ const LoadingContainer = styled.div`
|
|
|
392
498
|
min-height: 136px;
|
|
393
499
|
padding: ${Spacing[3]};
|
|
394
500
|
`;
|
|
501
|
+
const LoadingMoreRow = styled(LoadingContainer)`
|
|
502
|
+
min-height: 0;
|
|
503
|
+
padding: ${Spacing[2]};
|
|
504
|
+
`;
|
|
395
505
|
const FooterActionContainer = styled.div`
|
|
396
506
|
flex-shrink: 0;
|
|
397
507
|
padding-top: ${Spacing[1]};
|
|
@@ -768,8 +878,14 @@ const CheckboxLabel = styled.span`
|
|
|
768
878
|
position: relative;
|
|
769
879
|
bottom: -1px;
|
|
770
880
|
`;
|
|
771
|
-
function ComboboxMultiSelectComponent(
|
|
772
|
-
const
|
|
881
|
+
function ComboboxMultiSelectComponent(componentProps, ref) {
|
|
882
|
+
const { size = "md", options: rawOptions, isOptionsLoading, filterMode: _filterMode, selectedOptions: _selectedOptions, query: _query, onQueryChange: _onQueryChange, onScrollEnd: _onScrollEnd, isLoadingMore: _isLoadingMore, values = [], onValuesChange, searchPlaceholder = "Search...", onInputChange: _onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, truncate = false, selectAll: requestedSelectAll = false, stableOptionOrder = false, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, virtualize = false, footerAction, ...props } = {
|
|
883
|
+
onScrollEnd: void 0,
|
|
884
|
+
isLoadingMore: void 0,
|
|
885
|
+
...componentProps
|
|
886
|
+
};
|
|
887
|
+
const mode = useComboboxServerMode(componentProps, values, useMemo(() => containsNestedGroup(rawOptions) ? inlineNestedGroups(rawOptions) : rawOptions, [rawOptions]), requestedSelectAll);
|
|
888
|
+
const { options, selectedItems, selectAll } = mode;
|
|
773
889
|
const field = useFormField({
|
|
774
890
|
hasWarning,
|
|
775
891
|
hasError,
|
|
@@ -782,7 +898,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
782
898
|
const comboboxInputRef = useRef(null);
|
|
783
899
|
const caretButtonRef = useRef(null);
|
|
784
900
|
const comboboxContainerRef = useRef(null);
|
|
785
|
-
const scrollableListRef =
|
|
901
|
+
const scrollableListRef = mode.scrollRef;
|
|
786
902
|
const selectedItemsContainerRef = useRef(null);
|
|
787
903
|
const measurementStickerRefs = useRef([]);
|
|
788
904
|
const measurementTruncatorRef = useRef(null);
|
|
@@ -790,8 +906,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
790
906
|
setEmbeddedOpen(embedded);
|
|
791
907
|
}, [embedded]);
|
|
792
908
|
const portalContainerRef = externalPortalContainerRef || comboboxContainerRef;
|
|
793
|
-
const
|
|
794
|
-
const selectedItems = flatOptions.filter((option) => values.includes(option.value));
|
|
909
|
+
const preserveOptionOrder = stableOptionOrder || mode.preserveOptionOrder;
|
|
795
910
|
useEffect(() => {
|
|
796
911
|
measurementStickerRefs.current = measurementStickerRefs.current.slice(0, selectedItems.length);
|
|
797
912
|
}, [selectedItems.length]);
|
|
@@ -802,10 +917,14 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
802
917
|
if (searchInputRef.current) searchInputRef.current.focus();
|
|
803
918
|
}
|
|
804
919
|
}), []);
|
|
805
|
-
const filteredOptions =
|
|
920
|
+
const filteredOptions = useMemo(() => mode.filterOptions(options, inputValue), [
|
|
921
|
+
mode.filterOptions,
|
|
922
|
+
options,
|
|
923
|
+
inputValue
|
|
924
|
+
]);
|
|
806
925
|
const isGrouped = useMemo(() => options.some(isOptionGroup), [options]);
|
|
807
926
|
const optionsWithSelectedFirstInGroups = useMemo(() => {
|
|
808
|
-
if (!isGrouped || values.length === 0 ||
|
|
927
|
+
if (!isGrouped || values.length === 0 || preserveOptionOrder) return options;
|
|
809
928
|
return options.map((item) => {
|
|
810
929
|
if (isOptionGroup(item)) {
|
|
811
930
|
const groupLeaves = flattenOptions(item.options);
|
|
@@ -824,7 +943,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
824
943
|
options,
|
|
825
944
|
isGrouped,
|
|
826
945
|
values,
|
|
827
|
-
|
|
946
|
+
preserveOptionOrder
|
|
828
947
|
]);
|
|
829
948
|
const navigableItems = useMemo(() => {
|
|
830
949
|
const items = [];
|
|
@@ -838,7 +957,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
838
957
|
} else if (filteredOptions.some((f) => f.value === item.value)) items.push(item);
|
|
839
958
|
return items;
|
|
840
959
|
}
|
|
841
|
-
const orderedFiltered = !isGrouped && values.length > 0 && !
|
|
960
|
+
const orderedFiltered = !isGrouped && values.length > 0 && !preserveOptionOrder ? filteredOptions.toSorted((a, b) => {
|
|
842
961
|
const aSelected = values.includes(a.value);
|
|
843
962
|
if (aSelected === values.includes(b.value)) return 0;
|
|
844
963
|
return aSelected ? -1 : 1;
|
|
@@ -855,7 +974,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
855
974
|
isGrouped,
|
|
856
975
|
values,
|
|
857
976
|
optionsWithSelectedFirstInGroups,
|
|
858
|
-
|
|
977
|
+
preserveOptionOrder
|
|
859
978
|
]);
|
|
860
979
|
const optionsToRender = useMemo(() => {
|
|
861
980
|
if (!isGrouped && values.length > 0) return navigableItems;
|
|
@@ -895,6 +1014,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
895
1014
|
const getOptionId = useCallback((index) => `${field.inputId}-option-${index}`, [field.inputId]);
|
|
896
1015
|
const { addSelectedItem, getSelectedItemProps, getDropdownProps, removeSelectedItem, reset, setSelectedItems } = useMultipleSelection({
|
|
897
1016
|
selectedItems,
|
|
1017
|
+
itemToKey: mode.itemToKey,
|
|
898
1018
|
onStateChange: ({ selectedItems: newSelectedItems, type }) => {
|
|
899
1019
|
switch (type) {
|
|
900
1020
|
case useMultipleSelection.stateChangeTypes.SelectedItemKeyDownBackspace:
|
|
@@ -949,6 +1069,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
949
1069
|
const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, closeMenu, openMenu } = useCombobox({
|
|
950
1070
|
items: navigableItems,
|
|
951
1071
|
itemToString,
|
|
1072
|
+
itemToKey: mode.itemToKey,
|
|
952
1073
|
getItemId: getOptionId,
|
|
953
1074
|
isOpen: embedded ? embeddedOpen : void 0,
|
|
954
1075
|
selectedItem: null,
|
|
@@ -967,7 +1088,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
967
1088
|
switch (type) {
|
|
968
1089
|
case useCombobox.stateChangeTypes.InputChange:
|
|
969
1090
|
setInputValue(newInputValue || "");
|
|
970
|
-
onInputChange?.(newInputValue || "");
|
|
1091
|
+
mode.onInputChange?.(newInputValue || "");
|
|
971
1092
|
break;
|
|
972
1093
|
case useCombobox.stateChangeTypes.InputKeyDownEnter:
|
|
973
1094
|
case useCombobox.stateChangeTypes.ItemClick:
|
|
@@ -1083,7 +1204,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1083
1204
|
isOptionsLoading,
|
|
1084
1205
|
itemCount: navigableItems.length,
|
|
1085
1206
|
isMenuOpen,
|
|
1086
|
-
inputValue,
|
|
1207
|
+
inputValue: mode.query ?? inputValue,
|
|
1087
1208
|
highlightedIndex,
|
|
1088
1209
|
setHighlightedIndex,
|
|
1089
1210
|
inputId: field.inputId
|
|
@@ -1093,8 +1214,13 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1093
1214
|
}, [isMenuOpen, openMenu]);
|
|
1094
1215
|
const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
|
|
1095
1216
|
useEffect(() => {
|
|
1217
|
+
mode.onMenuOpenChange(isMenuOpen);
|
|
1096
1218
|
onOpenChange?.(isMenuOpen);
|
|
1097
|
-
}, [
|
|
1219
|
+
}, [
|
|
1220
|
+
isMenuOpen,
|
|
1221
|
+
onOpenChange,
|
|
1222
|
+
mode.onMenuOpenChange
|
|
1223
|
+
]);
|
|
1098
1224
|
useEffect(() => {
|
|
1099
1225
|
if (isMenuOpen && navigableItems.length > 0 && !isFooterHighlighted) {
|
|
1100
1226
|
if (highlightedIndex === -1 || highlightedIndex >= navigableItems.length) setHighlightedIndex(0);
|
|
@@ -1179,8 +1305,9 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1179
1305
|
const handleSearchInputBlur = useCallback((e) => {
|
|
1180
1306
|
if (!isMenuOpen) return;
|
|
1181
1307
|
const relatedTarget = e.relatedTarget;
|
|
1182
|
-
|
|
1183
|
-
|
|
1308
|
+
if (!(relatedTarget != null && (Boolean(comboboxContainerRef.current?.contains(relatedTarget)) || Boolean(relatedTarget.closest("#combobox-dropdown-portal-wrapper"))))) {
|
|
1309
|
+
if (!embedded) closeMenu();
|
|
1310
|
+
}
|
|
1184
1311
|
}, [
|
|
1185
1312
|
embedded,
|
|
1186
1313
|
isMenuOpen,
|
|
@@ -1227,7 +1354,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1227
1354
|
return /* @__PURE__ */ jsx("div", {
|
|
1228
1355
|
ref: (el) => measurementStickerRefs.current[index] = el,
|
|
1229
1356
|
children: /* @__PURE__ */ jsx(Sticker, {
|
|
1230
|
-
variant:
|
|
1357
|
+
variant: item?.labelStickerVariant || "grey",
|
|
1231
1358
|
disabled: field.disabled,
|
|
1232
1359
|
children: item.label
|
|
1233
1360
|
})
|
|
@@ -1250,7 +1377,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1250
1377
|
selectedItem: item,
|
|
1251
1378
|
index
|
|
1252
1379
|
});
|
|
1253
|
-
const stickerVariant =
|
|
1380
|
+
const stickerVariant = item?.labelStickerVariant || "grey";
|
|
1254
1381
|
return /* @__PURE__ */ jsx(TruncatedSticker, {
|
|
1255
1382
|
...stickerProps,
|
|
1256
1383
|
variant: stickerVariant,
|
|
@@ -1267,7 +1394,7 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1267
1394
|
selectedItem: item,
|
|
1268
1395
|
index
|
|
1269
1396
|
});
|
|
1270
|
-
const stickerVariant =
|
|
1397
|
+
const stickerVariant = item?.labelStickerVariant || "grey";
|
|
1271
1398
|
return /* @__PURE__ */ jsx(Sticker, {
|
|
1272
1399
|
...stickerProps,
|
|
1273
1400
|
variant: stickerVariant,
|
|
@@ -1315,14 +1442,16 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1315
1442
|
leftIcon: embedded ? void 0 : /* @__PURE__ */ jsx(SearchIcon, {}),
|
|
1316
1443
|
size,
|
|
1317
1444
|
children: /* @__PURE__ */ jsx(SearchInput, {
|
|
1318
|
-
...
|
|
1445
|
+
...mode.getQueryInputProps({
|
|
1446
|
+
...searchInputDownshiftProps,
|
|
1447
|
+
value: inputValue,
|
|
1448
|
+
onChange: (event) => {
|
|
1449
|
+
setInputValue(event.target.value);
|
|
1450
|
+
mode.onInputChange?.(event.target.value);
|
|
1451
|
+
}
|
|
1452
|
+
}, true, () => setHighlightedIndex(0)),
|
|
1319
1453
|
$embedded: embedded,
|
|
1320
1454
|
placeholder: searchPlaceholder,
|
|
1321
|
-
value: inputValue,
|
|
1322
|
-
onChange: (e) => {
|
|
1323
|
-
setInputValue(e.target.value);
|
|
1324
|
-
onInputChange?.(e.target.value);
|
|
1325
|
-
},
|
|
1326
1455
|
onKeyDown: handleSearchInputKeyDown,
|
|
1327
1456
|
onBlur: handleSearchInputBlur,
|
|
1328
1457
|
disabled: field.disabled,
|
|
@@ -1335,23 +1464,28 @@ function ComboboxMultiSelectComponent({ size = "md", options: rawOptions, isOpti
|
|
|
1335
1464
|
$embedded: embedded,
|
|
1336
1465
|
tabIndex: -1,
|
|
1337
1466
|
ref: scrollableListRef,
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1467
|
+
onScroll: mode.onScroll,
|
|
1468
|
+
children: isMenuOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
1469
|
+
isOptionsLoading ? /* @__PURE__ */ jsx(LoadingContainer, { children: /* @__PURE__ */ jsx(Spinner, { size: "md" }) }) : navigableItems.length > 0 ? renderOptionsWithGroups({
|
|
1470
|
+
options: optionsToRender,
|
|
1471
|
+
filteredOptions: navigableItems,
|
|
1472
|
+
renderOption,
|
|
1473
|
+
virtualizer: virtualize ? virtualizer : void 0,
|
|
1474
|
+
virtualRows: virtualize ? virtualRows : void 0
|
|
1475
|
+
}) : /* @__PURE__ */ jsx(EmptyState, {
|
|
1476
|
+
role: "status",
|
|
1477
|
+
"aria-live": "polite",
|
|
1478
|
+
size,
|
|
1479
|
+
children: emptyStateMessage
|
|
1480
|
+
}),
|
|
1481
|
+
mode.loadingMore,
|
|
1482
|
+
showFooterAction && footerAction && /* @__PURE__ */ jsx(FooterActionRow, {
|
|
1483
|
+
action: footerAction,
|
|
1484
|
+
size,
|
|
1485
|
+
id: footerActionId,
|
|
1486
|
+
isHighlighted: isFooterHighlighted
|
|
1487
|
+
})
|
|
1488
|
+
] })
|
|
1355
1489
|
})]
|
|
1356
1490
|
})
|
|
1357
1491
|
})]
|
|
@@ -1375,7 +1509,37 @@ const StyledMenuItem = styled(MenuItem)`
|
|
|
1375
1509
|
min-width: 0;
|
|
1376
1510
|
box-sizing: border-box;
|
|
1377
1511
|
}
|
|
1512
|
+
|
|
1513
|
+
/* MenuItem drops pointer events when disabled; keep them so the reason tooltip opens on hover.
|
|
1514
|
+
\`stateReducer\` refuses a click on a disabled option, so it still can't be picked. */
|
|
1515
|
+
&[aria-disabled='true'] {
|
|
1516
|
+
pointer-events: auto;
|
|
1517
|
+
}
|
|
1378
1518
|
`;
|
|
1519
|
+
/** Room the reason tooltip needs beside its row: its 250px max width, 8px offset and 8px margin. */
|
|
1520
|
+
const REASON_TOOLTIP_SPACE = 266;
|
|
1521
|
+
/**
|
|
1522
|
+
* A disabled option's reason, shown on hover. It opens to the right of the row, or above it when
|
|
1523
|
+
* the row reaches too close to the right edge of the screen (an embedded or narrow menu).
|
|
1524
|
+
*/
|
|
1525
|
+
function DisabledReasonTooltip({ reason, children }) {
|
|
1526
|
+
const [side, setSide] = useState("right");
|
|
1527
|
+
return /* @__PURE__ */ jsx(Tooltip, {
|
|
1528
|
+
trigger: children,
|
|
1529
|
+
triggerProps: { onPointerEnter: (event) => {
|
|
1530
|
+
const { right } = event.currentTarget.getBoundingClientRect();
|
|
1531
|
+
setSide(window.innerWidth - right >= REASON_TOOLTIP_SPACE ? "right" : "top");
|
|
1532
|
+
} },
|
|
1533
|
+
side,
|
|
1534
|
+
align: side === "top" ? "start" : "center",
|
|
1535
|
+
collisionPadding: 8,
|
|
1536
|
+
hideWhenDetached: true,
|
|
1537
|
+
size: "sm",
|
|
1538
|
+
zIndex: Z_INDICES.modalDropdownTooltip,
|
|
1539
|
+
interactive: false,
|
|
1540
|
+
children: reason
|
|
1541
|
+
});
|
|
1542
|
+
}
|
|
1379
1543
|
const ParentMenuItem = styled(MenuItem)`
|
|
1380
1544
|
${IconContainer} {
|
|
1381
1545
|
margin-right: 0;
|
|
@@ -1425,7 +1589,15 @@ const StickerComboboxInput = styled(ComboboxInput)`
|
|
|
1425
1589
|
color: transparent;
|
|
1426
1590
|
caret-color: transparent;
|
|
1427
1591
|
`;
|
|
1428
|
-
function ComboboxSingleSelectComponent(
|
|
1592
|
+
function ComboboxSingleSelectComponent(componentProps, ref) {
|
|
1593
|
+
const { size = "md", options: optionsProp, isOptionsLoading, filterMode: _filterMode, selectedOptions: _selectedOptions, query: _query, onQueryChange: _onQueryChange, onScrollEnd: _onScrollEnd, isLoadingMore: _isLoadingMore, value, onChange, optionDisabledReason, onInputChange: _onInputChange, placeholder = "Select an option...", emptyStateMessage = "No options found", disabled = false, hasWarning, hasError, required, id, labelId, "aria-label": ariaLabel, onOpenChange, portal = false, portalContainerRef: externalPortalContainerRef, trigger, embedded = false, footerAction, ...props } = {
|
|
1594
|
+
onScrollEnd: void 0,
|
|
1595
|
+
isLoadingMore: void 0,
|
|
1596
|
+
...componentProps
|
|
1597
|
+
};
|
|
1598
|
+
const clientOptions = useMemo(() => optionDisabledReason == null ? optionsProp : sortDisabledOptionsLast(optionsProp, (option) => optionDisabledReason(option) != null), [optionsProp, optionDisabledReason]);
|
|
1599
|
+
const mode = useComboboxServerMode(componentProps, useMemo(() => value == null ? [] : [value], [value]), clientOptions);
|
|
1600
|
+
const options = mode.options;
|
|
1429
1601
|
const field = useFormField({
|
|
1430
1602
|
hasWarning,
|
|
1431
1603
|
hasError,
|
|
@@ -1487,7 +1659,11 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1487
1659
|
hasNestedGroups
|
|
1488
1660
|
]);
|
|
1489
1661
|
const renderSource = isSearching ? hasNestedGroups ? searchableLeaves : options : nestedOptions;
|
|
1490
|
-
const standardFilteredOptions =
|
|
1662
|
+
const standardFilteredOptions = useMemo(() => mode.filterOptions(renderSource, inputValue), [
|
|
1663
|
+
mode.filterOptions,
|
|
1664
|
+
renderSource,
|
|
1665
|
+
inputValue
|
|
1666
|
+
]);
|
|
1491
1667
|
const filteredOptions = useMemo(() => {
|
|
1492
1668
|
if (!isSearching || !hasNestedGroups || searchableLeafFuse == null) return standardFilteredOptions;
|
|
1493
1669
|
if (inputValue === "") return searchableLeaves;
|
|
@@ -1513,9 +1689,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1513
1689
|
navigableItems
|
|
1514
1690
|
]);
|
|
1515
1691
|
const downshiftNodes = useMemo(() => new Set(downshiftItems.map((item) => item.kind === "group" ? item.group : item.option)), [downshiftItems]);
|
|
1516
|
-
const
|
|
1517
|
-
const flatOptionsForFallback = useMemo(() => flattenOptions(options), [options]);
|
|
1518
|
-
const selectedOption = allLeaves.find(({ option }) => option.value === value)?.option ?? flatOptionsForFallback.find((option) => option.value === value) ?? null;
|
|
1692
|
+
const selectedOption = mode.selectedItems[0] ?? null;
|
|
1519
1693
|
const selectedNavigableItem = useMemo(() => selectedOption ? {
|
|
1520
1694
|
kind: "leaf",
|
|
1521
1695
|
option: selectedOption
|
|
@@ -1536,22 +1710,22 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1536
1710
|
const { isOpen, getToggleButtonProps, getMenuProps, getInputProps, getItemProps, highlightedIndex, setHighlightedIndex, openMenu } = useCombobox({
|
|
1537
1711
|
items: downshiftItems,
|
|
1538
1712
|
itemToString,
|
|
1539
|
-
|
|
1713
|
+
itemToKey: (item) => item?.kind === "leaf" ? mode.itemToKey(item.option) : item?.group.label,
|
|
1540
1714
|
isOpen: embedded ? isDropdownOpen : void 0,
|
|
1541
1715
|
selectedItem: isDropdownOpen ? null : selectedNavigableItem,
|
|
1542
|
-
inputValue,
|
|
1716
|
+
inputValue: isDropdownOpen ? mode.query ?? inputValue : inputValue,
|
|
1543
1717
|
onInputValueChange({ inputValue: newInputValue, type }) {
|
|
1544
1718
|
if (type === useCombobox.stateChangeTypes.ControlledPropUpdatedSelectedItem && isDropdownOpen && !embedded) return;
|
|
1545
|
-
const isUserEdit = type === useCombobox.stateChangeTypes.InputChange || type === useCombobox.stateChangeTypes.InputKeyDownEscape;
|
|
1719
|
+
const isUserEdit = type === useCombobox.stateChangeTypes.InputChange && (mode.query === void 0 || !isDropdownOpen) || type === useCombobox.stateChangeTypes.InputKeyDownEscape;
|
|
1546
1720
|
if (newInputValue === "" && isUserEdit && !embedded && trigger == null) onChange?.(null);
|
|
1547
1721
|
setInputValue(newInputValue || "");
|
|
1548
|
-
onInputChange?.(newInputValue || "");
|
|
1722
|
+
mode.onInputChange?.(newInputValue || "");
|
|
1549
1723
|
},
|
|
1550
1724
|
onIsOpenChange({ isOpen: newIsOpen }) {
|
|
1551
1725
|
if (embedded) return;
|
|
1552
1726
|
setIsDropdownOpen(newIsOpen);
|
|
1553
1727
|
if (newIsOpen) {
|
|
1554
|
-
if (selectedOption || committedLabelRef.current != null
|
|
1728
|
+
if (selectedOption || committedLabelRef.current != null) setInputValue("");
|
|
1555
1729
|
} else setInputValue(committedLabelRef.current ?? selectedOption?.label ?? "");
|
|
1556
1730
|
},
|
|
1557
1731
|
onSelectedItemChange: ({ selectedItem: newSelectedItem }) => {
|
|
@@ -1616,7 +1790,8 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1616
1790
|
option
|
|
1617
1791
|
},
|
|
1618
1792
|
index: currentIndex,
|
|
1619
|
-
"aria-selected": isSelected
|
|
1793
|
+
"aria-selected": isSelected,
|
|
1794
|
+
"aria-disabled": disabledReason != null ? true : void 0
|
|
1620
1795
|
});
|
|
1621
1796
|
const labelContent = option.labelStickerVariant ? /* @__PURE__ */ jsx(Sticker, {
|
|
1622
1797
|
variant: option.labelStickerVariant,
|
|
@@ -1629,7 +1804,8 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1629
1804
|
title: option.description,
|
|
1630
1805
|
children: option.description
|
|
1631
1806
|
})] });
|
|
1632
|
-
|
|
1807
|
+
const key = `leaf-${String(option.value)}-${currentIndex}`;
|
|
1808
|
+
const item = /* @__PURE__ */ jsxs(StyledMenuItem, {
|
|
1633
1809
|
...itemProps,
|
|
1634
1810
|
disabled: disabledReason != null,
|
|
1635
1811
|
"aria-describedby": disabledReason != null ? descriptionId : void 0,
|
|
@@ -1637,11 +1813,16 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1637
1813
|
selected: isSelected,
|
|
1638
1814
|
size,
|
|
1639
1815
|
tabIndex: -1,
|
|
1640
|
-
children: [labelContent, disabledReason != null && /* @__PURE__ */ jsx(
|
|
1816
|
+
children: [labelContent, disabledReason != null && /* @__PURE__ */ jsx("span", {
|
|
1641
1817
|
id: descriptionId,
|
|
1818
|
+
hidden: true,
|
|
1642
1819
|
children: disabledReason
|
|
1643
1820
|
})]
|
|
1644
|
-
},
|
|
1821
|
+
}, key);
|
|
1822
|
+
return disabledReason == null ? item : /* @__PURE__ */ jsx(DisabledReasonTooltip, {
|
|
1823
|
+
reason: disabledReason,
|
|
1824
|
+
children: item
|
|
1825
|
+
}, key);
|
|
1645
1826
|
}, [
|
|
1646
1827
|
highlightedIndex,
|
|
1647
1828
|
selectedOption,
|
|
@@ -1716,27 +1897,14 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1716
1897
|
if (embedded && isMenuOpen && comboboxInputRef.current) comboboxInputRef.current.focus({ preventScroll: true });
|
|
1717
1898
|
}, [embedded, isMenuOpen]);
|
|
1718
1899
|
const dropdownPosition = useDropdownPosition(portalContainerRef, isMenuOpen, embedded ? false : portal);
|
|
1719
|
-
const
|
|
1720
|
-
let firstNavigableIndex = -1;
|
|
1721
|
-
let lastNavigableIndex = -1;
|
|
1722
|
-
downshiftItems.forEach((item, index) => {
|
|
1723
|
-
if (isItemDisabled(item)) return;
|
|
1724
|
-
if (firstNavigableIndex === -1) firstNavigableIndex = index;
|
|
1725
|
-
lastNavigableIndex = index;
|
|
1726
|
-
});
|
|
1727
|
-
return {
|
|
1728
|
-
firstNavigableIndex,
|
|
1729
|
-
lastNavigableIndex
|
|
1730
|
-
};
|
|
1731
|
-
}, [downshiftItems, isItemDisabled]);
|
|
1900
|
+
const firstEnabledIndex = useMemo(() => downshiftItems.findIndex((item) => !isItemDisabled(item)), [downshiftItems, isItemDisabled]);
|
|
1732
1901
|
const { isFooterHighlighted, footerActionId, showFooterAction, handleFooterKeyDown } = useComboboxFooterAction({
|
|
1733
1902
|
footerAction,
|
|
1734
1903
|
isOptionsLoading,
|
|
1735
1904
|
itemCount: downshiftItems.length,
|
|
1736
|
-
firstNavigableIndex,
|
|
1737
|
-
lastNavigableIndex,
|
|
1905
|
+
firstNavigableIndex: downshiftItems.length > 0 ? 0 : -1,
|
|
1738
1906
|
isMenuOpen,
|
|
1739
|
-
inputValue,
|
|
1907
|
+
inputValue: mode.query ?? inputValue,
|
|
1740
1908
|
highlightedIndex,
|
|
1741
1909
|
setHighlightedIndex,
|
|
1742
1910
|
inputId: field.inputId
|
|
@@ -1780,8 +1948,13 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1780
1948
|
handleAscend
|
|
1781
1949
|
]);
|
|
1782
1950
|
useEffect(() => {
|
|
1951
|
+
mode.onMenuOpenChange(isMenuOpen);
|
|
1783
1952
|
onOpenChange?.(isMenuOpen);
|
|
1784
|
-
}, [
|
|
1953
|
+
}, [
|
|
1954
|
+
isMenuOpen,
|
|
1955
|
+
onOpenChange,
|
|
1956
|
+
mode.onMenuOpenChange
|
|
1957
|
+
]);
|
|
1785
1958
|
useEffect(() => {
|
|
1786
1959
|
if (!embedded && !isMenuOpen) setInputValue(committedLabelRef.current ?? selectedOption?.label ?? "");
|
|
1787
1960
|
}, [
|
|
@@ -1789,19 +1962,23 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1789
1962
|
selectedOption,
|
|
1790
1963
|
isMenuOpen
|
|
1791
1964
|
]);
|
|
1965
|
+
const levelKey = JSON.stringify([navigationPath, mode.query ?? inputValue]);
|
|
1966
|
+
const levelKeyRef = useRef(levelKey);
|
|
1792
1967
|
useEffect(() => {
|
|
1793
|
-
|
|
1968
|
+
const levelChanged = levelKeyRef.current !== levelKey;
|
|
1969
|
+
levelKeyRef.current = levelKey;
|
|
1970
|
+
if (!isMenuOpen || isFooterHighlighted || firstEnabledIndex === -1) return;
|
|
1794
1971
|
const highlighted = downshiftItems[highlightedIndex];
|
|
1795
|
-
if (highlighted
|
|
1796
|
-
if (highlightedIndex !== firstNavigableIndex) setHighlightedIndex(firstNavigableIndex);
|
|
1972
|
+
if (highlighted == null || levelChanged && isItemDisabled(highlighted)) setHighlightedIndex(firstEnabledIndex);
|
|
1797
1973
|
}, [
|
|
1798
1974
|
downshiftItems,
|
|
1799
1975
|
isMenuOpen,
|
|
1800
1976
|
highlightedIndex,
|
|
1801
1977
|
isFooterHighlighted,
|
|
1802
1978
|
setHighlightedIndex,
|
|
1979
|
+
firstEnabledIndex,
|
|
1803
1980
|
isItemDisabled,
|
|
1804
|
-
|
|
1981
|
+
levelKey
|
|
1805
1982
|
]);
|
|
1806
1983
|
const displayValue = isMenuOpen ? inputValue : committedLabelRef.current ?? selectedOption?.label ?? "";
|
|
1807
1984
|
const hasSticker = !isMenuOpen && selectedOption?.labelStickerVariant;
|
|
@@ -1853,12 +2030,14 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1853
2030
|
children: selectedOption.label
|
|
1854
2031
|
}),
|
|
1855
2032
|
/* @__PURE__ */ jsx(InputComponent, {
|
|
1856
|
-
...
|
|
2033
|
+
...mode.getQueryInputProps({
|
|
2034
|
+
...mainInputProps,
|
|
2035
|
+
value: displayValue
|
|
2036
|
+
}, isMenuOpen),
|
|
1857
2037
|
size,
|
|
1858
2038
|
$isOpen: isMenuOpen,
|
|
1859
2039
|
hasWarning: field.hasWarning,
|
|
1860
2040
|
hasError: field.hasError,
|
|
1861
|
-
value: displayValue,
|
|
1862
2041
|
$selectedItemStyle: selectedOption?.PLEASE_DO_NOT_USE_labelFontStyle
|
|
1863
2042
|
}),
|
|
1864
2043
|
/* @__PURE__ */ jsx(CaretButton, {
|
|
@@ -1887,17 +2066,21 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1887
2066
|
size,
|
|
1888
2067
|
children: /* @__PURE__ */ jsx(SearchInput, {
|
|
1889
2068
|
$embedded: embedded,
|
|
1890
|
-
...
|
|
2069
|
+
...mode.getQueryInputProps({
|
|
2070
|
+
...searchInputProps,
|
|
2071
|
+
value: inputValue
|
|
2072
|
+
}),
|
|
1891
2073
|
size,
|
|
1892
2074
|
hasWarning: field.hasWarning,
|
|
1893
2075
|
hasError: field.hasError,
|
|
1894
|
-
value: inputValue,
|
|
1895
2076
|
autoComplete: "off"
|
|
1896
2077
|
})
|
|
1897
2078
|
})
|
|
1898
2079
|
}), /* @__PURE__ */ jsx(SingleSelectScrollableMenuList, {
|
|
1899
2080
|
$embedded: embedded,
|
|
1900
2081
|
tabIndex: -1,
|
|
2082
|
+
ref: mode.scrollRef,
|
|
2083
|
+
onScroll: mode.onScroll,
|
|
1901
2084
|
children: isMenuOpen && /* @__PURE__ */ jsxs(Fragment$1, { children: [
|
|
1902
2085
|
showBackRow && /* @__PURE__ */ jsxs(BackRow, {
|
|
1903
2086
|
type: "button",
|
|
@@ -1926,6 +2109,7 @@ function ComboboxSingleSelectComponent({ size = "md", options, isOptionsLoading,
|
|
|
1926
2109
|
size,
|
|
1927
2110
|
children: emptyStateMessage
|
|
1928
2111
|
}),
|
|
2112
|
+
mode.loadingMore,
|
|
1929
2113
|
showFooterAction && footerAction && /* @__PURE__ */ jsx(FooterActionRow, {
|
|
1930
2114
|
action: footerAction,
|
|
1931
2115
|
size,
|
|
@@ -1955,4 +2139,4 @@ const Combobox = forwardRef(ComboboxComponent);
|
|
|
1955
2139
|
//#endregion
|
|
1956
2140
|
export { CaretButton as n, flattenOptions as r, Combobox as t };
|
|
1957
2141
|
|
|
1958
|
-
//# sourceMappingURL=Combobox-
|
|
2142
|
+
//# sourceMappingURL=Combobox-BkK_tosd.mjs.map
|