@cube-dev/ui-kit 0.118.0 → 0.119.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/dist/CHANGELOG.md +24 -0
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.d.ts +1 -2
- package/dist/components/Block.js +2 -5
- package/dist/components/Block.js.map +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +2 -3
- package/dist/components/GlobalStyles.js.map +1 -1
- package/dist/components/GridProvider.d.ts +1 -2
- package/dist/components/GridProvider.js +2 -3
- package/dist/components/GridProvider.js.map +1 -1
- package/dist/components/HiddenInput.js +2 -2
- package/dist/components/HiddenInput.js.map +1 -1
- package/dist/components/Root.d.ts +1 -2
- package/dist/components/Root.js +2 -6
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.d.ts +1 -2
- package/dist/components/actions/Action/Action.js +2 -4
- package/dist/components/actions/Action/Action.js.map +1 -1
- package/dist/components/actions/Banner/Banner.js +2 -2
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.d.ts +3 -1769
- package/dist/components/actions/Button/Button.js +2 -4
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +2 -2
- package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.d.ts +1 -3
- package/dist/components/actions/CommandMenu/CommandMenu.js +2 -4
- package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
- package/dist/components/actions/CommandMenu/styled.js +3 -3
- package/dist/components/actions/CommandMenu/styled.js.map +1 -1
- package/dist/components/actions/ItemAction/ItemAction.d.ts +1 -3
- package/dist/components/actions/ItemAction/ItemAction.js +2 -2
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.d.ts +1 -2
- package/dist/components/actions/ItemButton/ItemButton.js +2 -2
- package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.d.ts +1 -3
- package/dist/components/actions/Menu/Menu.js +2 -4
- package/dist/components/actions/Menu/Menu.js.map +1 -1
- package/dist/components/actions/Menu/MenuItem.d.ts +1 -2
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js.map +1 -1
- package/dist/components/actions/Menu/MenuSection.d.ts +1 -2
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js.map +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +2 -2
- package/dist/components/actions/Menu/styled.js.map +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.d.ts +1 -2
- package/dist/components/actions/use-action.js +2 -2
- package/dist/components/actions/use-action.js.map +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.d.ts +1 -2
- package/dist/components/content/ActiveZone/ActiveZone.js +2 -5
- package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
- package/dist/components/content/Alert/Alert.js +2 -2
- package/dist/components/content/Alert/Alert.js.map +1 -1
- package/dist/components/content/Alert/types.d.ts +1 -2
- package/dist/components/content/Alert/use-alert.js +2 -4
- package/dist/components/content/Alert/use-alert.js.map +1 -1
- package/dist/components/content/Avatar/Avatar.d.ts +1 -3
- package/dist/components/content/Avatar/Avatar.js +2 -5
- package/dist/components/content/Avatar/Avatar.js.map +1 -1
- package/dist/components/content/Badge/Badge.js +2 -2
- package/dist/components/content/Badge/Badge.js.map +1 -1
- package/dist/components/content/Card/Card.d.ts +1 -2
- package/dist/components/content/Card/Card.js +2 -5
- package/dist/components/content/Card/Card.js.map +1 -1
- package/dist/components/content/Content.d.ts +1 -2
- package/dist/components/content/Content.js +2 -5
- package/dist/components/content/Content.js.map +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.d.ts +1 -3
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -4
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +2 -2
- package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
- package/dist/components/content/Disclosure/Disclosure.d.ts +1 -3
- package/dist/components/content/Disclosure/Disclosure.js +3 -4
- package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
- package/dist/components/content/Divider.d.ts +1 -2
- package/dist/components/content/Divider.js +2 -4
- package/dist/components/content/Divider.js.map +1 -1
- package/dist/components/content/Footer.d.ts +1 -2
- package/dist/components/content/Footer.js +2 -5
- package/dist/components/content/Footer.js.map +1 -1
- package/dist/components/content/Header.d.ts +1 -2
- package/dist/components/content/Header.js +2 -5
- package/dist/components/content/Header.js.map +1 -1
- package/dist/components/content/HotKeys/HotKeys.d.ts +1 -2
- package/dist/components/content/HotKeys/HotKeys.js +2 -5
- package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
- package/dist/components/content/Item/Item.d.ts +1 -3
- package/dist/components/content/Item/Item.js +2 -3
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.d.ts +1 -2
- package/dist/components/content/ItemBadge/ItemBadge.js +2 -2
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/Layout/GridLayout.d.ts +1 -2
- package/dist/components/content/Layout/GridLayout.js +2 -2
- package/dist/components/content/Layout/GridLayout.js.map +1 -1
- package/dist/components/content/Layout/Layout.d.ts +1 -3
- package/dist/components/content/Layout/Layout.js +3 -7
- package/dist/components/content/Layout/Layout.js.map +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +2 -2
- package/dist/components/content/Layout/LayoutBlock.js.map +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +2 -2
- package/dist/components/content/Layout/LayoutCenter.js.map +1 -1
- package/dist/components/content/Layout/LayoutContainer.d.ts +1 -3
- package/dist/components/content/Layout/LayoutContainer.js +2 -6
- package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
- package/dist/components/content/Layout/LayoutContent.d.ts +1 -2
- package/dist/components/content/Layout/LayoutContent.js +2 -6
- package/dist/components/content/Layout/LayoutContent.js.map +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +2 -2
- package/dist/components/content/Layout/LayoutFlex.js.map +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +2 -2
- package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
- package/dist/components/content/Layout/LayoutGrid.d.ts +1 -2
- package/dist/components/content/Layout/LayoutGrid.js +2 -2
- package/dist/components/content/Layout/LayoutGrid.js.map +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +2 -2
- package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutPane.d.ts +1 -3
- package/dist/components/content/Layout/LayoutPane.js +2 -6
- package/dist/components/content/Layout/LayoutPane.js.map +1 -1
- package/dist/components/content/Layout/LayoutPanel.d.ts +1 -3
- package/dist/components/content/Layout/LayoutPanel.js +2 -6
- package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.d.ts +1 -2
- package/dist/components/content/Layout/LayoutPanelHeader.js +2 -4
- package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +2 -2
- package/dist/components/content/Layout/LayoutToolbar.js.map +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.d.ts +1 -2
- package/dist/components/content/Paragraph.js +2 -3
- package/dist/components/content/Paragraph.js.map +1 -1
- package/dist/components/content/Placeholder/Placeholder.d.ts +1 -3
- package/dist/components/content/Placeholder/Placeholder.js +2 -6
- package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
- package/dist/components/content/PrismCode/PrismCode.d.ts +1 -3
- package/dist/components/content/PrismCode/PrismCode.js +2 -3
- package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.d.ts +1 -3
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js.map +1 -1
- package/dist/components/content/Result/Result.d.ts +1 -2
- package/dist/components/content/Result/Result.js +2 -5
- package/dist/components/content/Result/Result.js.map +1 -1
- package/dist/components/content/Skeleton/Skeleton.d.ts +1 -2
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
- package/dist/components/content/Tag/Tag.d.ts +1 -2
- package/dist/components/content/Tag/Tag.js +2 -2
- package/dist/components/content/Tag/Tag.js.map +1 -1
- package/dist/components/content/Text.d.ts +128 -159
- package/dist/components/content/Text.js +2 -5
- package/dist/components/content/Text.js.map +1 -1
- package/dist/components/content/TextItem/TextItem.d.ts +1 -2
- package/dist/components/content/TextItem/TextItem.js +2 -5
- package/dist/components/content/TextItem/TextItem.js.map +1 -1
- package/dist/components/content/Title.d.ts +1 -2
- package/dist/components/content/Title.js +2 -5
- package/dist/components/content/Title.js.map +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/highlightText.js.map +1 -1
- package/dist/components/content/use-auto-tooltip.d.ts +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/content/use-auto-tooltip.js.map +1 -1
- package/dist/components/fields/Checkbox/Checkbox.d.ts +1 -3
- package/dist/components/fields/Checkbox/Checkbox.js +2 -5
- package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.d.ts +1 -3
- package/dist/components/fields/Checkbox/CheckboxGroup.js +2 -4
- package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -3
- package/dist/components/fields/ComboBox/ComboBox.js +2 -4
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/DatePicker/DateInput.d.ts +1 -3
- package/dist/components/fields/DatePicker/DateInput.js +2 -3
- package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +2 -4
- package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePicker.d.ts +1 -3
- package/dist/components/fields/DatePicker/DatePicker.js +2 -3
- package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +2 -2
- package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +2 -2
- package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +2 -2
- package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +2 -2
- package/dist/components/fields/DatePicker/DatePickerSegment.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.d.ts +1 -3
- package/dist/components/fields/DatePicker/DateRangePicker.js +2 -4
- package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.d.ts +1 -3
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +2 -4
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/TimeInput.d.ts +1 -3
- package/dist/components/fields/DatePicker/TimeInput.js +2 -3
- package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
- package/dist/components/fields/DatePicker/intl.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.d.ts +1 -3
- package/dist/components/fields/FileInput/FileInput.js +2 -4
- package/dist/components/fields/FileInput/FileInput.js.map +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.d.ts +1 -2
- package/dist/components/fields/FilterListBox/FilterListBox.js +5 -7
- package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.d.ts +1 -3
- package/dist/components/fields/FilterPicker/FilterPicker.js +2 -5
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/ListBox.d.ts +1 -3
- package/dist/components/fields/ListBox/ListBox.js +2 -5
- package/dist/components/fields/ListBox/ListBox.js.map +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +2 -2
- package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +2 -2
- package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.d.ts +1 -3
- package/dist/components/fields/Picker/Picker.js +2 -5
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +1 -2
- package/dist/components/fields/RadioGroup/Radio.js +2 -5
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.d.ts +1 -3
- package/dist/components/fields/RadioGroup/RadioGroup.js +2 -4
- package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.d.ts +834 -836
- package/dist/components/fields/Select/Select.js +2 -4
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js.map +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.d.ts +1 -3
- package/dist/components/fields/Slider/Slider.js +2 -3
- package/dist/components/fields/Slider/Slider.js.map +1 -1
- package/dist/components/fields/Slider/SliderBase.js +2 -4
- package/dist/components/fields/Slider/SliderBase.js.map +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
- package/dist/components/fields/Slider/elements.js +2 -2
- package/dist/components/fields/Slider/elements.js.map +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Slider/types.d.ts +1 -3
- package/dist/components/fields/Switch/Switch.d.ts +1 -3
- package/dist/components/fields/Switch/Switch.js +2 -4
- package/dist/components/fields/Switch/Switch.js.map +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.d.ts +1 -3
- package/dist/components/fields/TextInput/TextInputBase.js +3 -5
- package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +2 -2
- package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
- package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/dist/components/form/FieldWrapper/types.d.ts +1 -3
- package/dist/components/form/Form/Field.d.ts +1 -2
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Field.js.map +1 -1
- package/dist/components/form/Form/Form.d.ts +1 -3
- package/dist/components/form/Form/Form.js +2 -5
- package/dist/components/form/Form/Form.js.map +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +2 -2
- package/dist/components/form/Form/use-form.js.map +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.d.ts +1 -3
- package/dist/components/form/Label.js +2 -5
- package/dist/components/form/Label.js.map +1 -1
- package/dist/components/form/wrapper.d.ts +1 -2
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/form/wrapper.js.map +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +2 -2
- package/dist/components/helpers/IconSwitch/IconSwitch.js.map +1 -1
- package/dist/components/layout/Flex.d.ts +1 -2
- package/dist/components/layout/Flex.js +2 -5
- package/dist/components/layout/Flex.js.map +1 -1
- package/dist/components/layout/Flow.d.ts +1 -2
- package/dist/components/layout/Flow.js +2 -5
- package/dist/components/layout/Flow.js.map +1 -1
- package/dist/components/layout/Grid.d.ts +1 -2
- package/dist/components/layout/Grid.js +2 -5
- package/dist/components/layout/Grid.js.map +1 -1
- package/dist/components/layout/Panel.d.ts +1 -3
- package/dist/components/layout/Panel.js +2 -3
- package/dist/components/layout/Panel.js.map +1 -1
- package/dist/components/layout/Prefix.d.ts +1 -2
- package/dist/components/layout/Prefix.js +2 -5
- package/dist/components/layout/Prefix.js.map +1 -1
- package/dist/components/layout/ResizablePanel.d.ts +1 -2
- package/dist/components/layout/ResizablePanel.js +2 -2
- package/dist/components/layout/ResizablePanel.js.map +1 -1
- package/dist/components/layout/Space.d.ts +1 -2
- package/dist/components/layout/Space.js +2 -5
- package/dist/components/layout/Space.js.map +1 -1
- package/dist/components/layout/Suffix.d.ts +1 -2
- package/dist/components/layout/Suffix.js +2 -5
- package/dist/components/layout/Suffix.js.map +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js.map +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +2 -4
- package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +2 -2
- package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +2 -2
- package/dist/components/navigation/Tabs/styled.js.map +1 -1
- package/dist/components/navigation/Tabs/types.d.ts +1 -3
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/types.js.map +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/FileTabs/FileTabs.d.ts +1 -2
- package/dist/components/organisms/FileTabs/FileTabs.js +2 -2
- package/dist/components/organisms/FileTabs/FileTabs.js.map +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +2 -2
- package/dist/components/other/Calendar/Calendar.js.map +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +2 -2
- package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +2 -2
- package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +2 -2
- package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
- package/dist/components/other/CloudLogo/CloudLogo.js +2 -2
- package/dist/components/other/CloudLogo/CloudLogo.js.map +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/AlertDialog/types.d.ts +1 -1
- package/dist/components/overlays/Dialog/Dialog.d.ts +1 -3
- package/dist/components/overlays/Dialog/Dialog.js +2 -4
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.d.ts +1 -2
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +3 -2
- package/dist/components/overlays/Modal/Modal.js +2 -2
- package/dist/components/overlays/Modal/Modal.js.map +1 -1
- package/dist/components/overlays/Modal/OpenTransition.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js.map +1 -1
- package/dist/components/overlays/Modal/Popover.d.ts +1 -1
- package/dist/components/overlays/Modal/Popover.js +2 -2
- package/dist/components/overlays/Modal/Popover.js.map +1 -1
- package/dist/components/overlays/Modal/Tray.d.ts +1 -1
- package/dist/components/overlays/Modal/Tray.js +2 -2
- package/dist/components/overlays/Modal/Tray.js.map +1 -1
- package/dist/components/overlays/Modal/Underlay.js +2 -2
- package/dist/components/overlays/Modal/Underlay.js.map +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +2 -2
- package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.d.ts +2 -0
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +2 -2
- package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +2 -2
- package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +2 -2
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +2 -2
- package/dist/components/overlays/Toast/ToastItem.js.map +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +2 -2
- package/dist/components/overlays/Tooltip/Tooltip.d.ts +1 -3
- package/dist/components/overlays/Tooltip/Tooltip.js +2 -4
- package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.d.ts +1 -2
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/overlays/Tooltip/context.js.map +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.d.ts +2 -0
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +1 -0
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +2 -2
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
- package/dist/components/status/Spin/Cube.js +2 -2
- package/dist/components/status/Spin/Cube.js.map +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +2 -2
- package/dist/components/status/Spin/InternalSpinner.js.map +1 -1
- package/dist/components/status/Spin/Spin.js +2 -2
- package/dist/components/status/Spin/Spin.js.map +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +2 -2
- package/dist/components/status/Spin/SpinsContainer.js.map +1 -1
- package/dist/components/status/Spin/types.d.ts +1 -2
- package/dist/data/item-themes.d.ts +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +2 -2
- package/dist/icons/DirectionIcon.js.map +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.d.ts +1 -3
- package/dist/icons/Icon.js +2 -3
- package/dist/icons/Icon.js.map +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +4 -35
- package/dist/index.js +5 -31
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts +1 -2
- package/dist/provider.js +1 -1
- package/dist/provider.js.map +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/shared/form.d.ts +1 -3
- package/dist/tokens/base.d.ts +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/base.js.map +1 -1
- package/dist/tokens/colors.d.ts +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/index.d.ts +1 -2
- package/dist/tokens/index.js +2 -3
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/layout.d.ts +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/layout.js.map +1 -1
- package/dist/tokens/shadows.d.ts +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/shadows.js.map +1 -1
- package/dist/tokens/sizes.d.ts +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/sizes.js.map +1 -1
- package/dist/tokens/spacing.d.ts +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/spacing.js.map +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/index.d.ts +1 -2
- package/dist/utils/is-dev-env.js +5 -10
- package/dist/utils/is-dev-env.js.map +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.d.ts +3 -3
- package/dist/utils/react/index.js +20 -0
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.d.ts +1 -2
- package/dist/utils/react/mergeProps.js +2 -2
- package/dist/utils/react/mergeProps.js.map +1 -1
- package/dist/utils/react/nullableValue.d.ts +1 -2
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/nullableValue.js.map +1 -1
- package/dist/utils/react/resolveIcon.d.ts +1 -2
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/resolveIcon.js.map +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.d.ts +1 -2
- package/dist/utils/react/useMergeStyles.js +2 -2
- package/dist/utils/react/useMergeStyles.js.map +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/package.json +4 -21
- package/dist/_virtual/_rolldown/runtime.js +0 -8
- package/dist/chunks/cacheKey.js +0 -71
- package/dist/chunks/cacheKey.js.map +0 -1
- package/dist/chunks/definitions.js +0 -261
- package/dist/chunks/definitions.js.map +0 -1
- package/dist/chunks/renderChunk.js +0 -68
- package/dist/chunks/renderChunk.js.map +0 -1
- package/dist/config.js +0 -232
- package/dist/config.js.map +0 -1
- package/dist/css-writer.d.ts +0 -46
- package/dist/css-writer.js +0 -75
- package/dist/css-writer.js.map +0 -1
- package/dist/extractor.d.ts +0 -25
- package/dist/extractor.js +0 -151
- package/dist/extractor.js.map +0 -1
- package/dist/injector/injector.js +0 -401
- package/dist/injector/injector.js.map +0 -1
- package/dist/injector/sheet-manager.js +0 -715
- package/dist/injector/sheet-manager.js.map +0 -1
- package/dist/injector/types.d.ts +0 -19
- package/dist/keyframes/index.js +0 -157
- package/dist/keyframes/index.js.map +0 -1
- package/dist/parser/classify.js +0 -320
- package/dist/parser/classify.js.map +0 -1
- package/dist/parser/const.js +0 -34
- package/dist/parser/const.js.map +0 -1
- package/dist/parser/lru.js +0 -110
- package/dist/parser/lru.js.map +0 -1
- package/dist/parser/parser.js +0 -117
- package/dist/parser/parser.js.map +0 -1
- package/dist/parser/tokenizer.js +0 -70
- package/dist/parser/tokenizer.js.map +0 -1
- package/dist/parser/types.d.ts +0 -38
- package/dist/parser/types.js +0 -47
- package/dist/parser/types.js.map +0 -1
- package/dist/pipeline/conditions.js +0 -378
- package/dist/pipeline/conditions.js.map +0 -1
- package/dist/pipeline/exclusive.js +0 -232
- package/dist/pipeline/exclusive.js.map +0 -1
- package/dist/pipeline/index.js +0 -633
- package/dist/pipeline/index.js.map +0 -1
- package/dist/pipeline/materialize.js +0 -822
- package/dist/pipeline/materialize.js.map +0 -1
- package/dist/pipeline/parseStateKey.js +0 -422
- package/dist/pipeline/parseStateKey.js.map +0 -1
- package/dist/pipeline/simplify.js +0 -558
- package/dist/pipeline/simplify.js.map +0 -1
- package/dist/plugins/okhsl-plugin.js +0 -346
- package/dist/plugins/okhsl-plugin.js.map +0 -1
- package/dist/plugins/types.d.ts +0 -52
- package/dist/properties/index.js +0 -142
- package/dist/properties/index.js.map +0 -1
- package/dist/states/index.js +0 -162
- package/dist/states/index.js.map +0 -1
- package/dist/styles/align.js +0 -15
- package/dist/styles/align.js.map +0 -1
- package/dist/styles/border.js +0 -115
- package/dist/styles/border.js.map +0 -1
- package/dist/styles/color.js +0 -24
- package/dist/styles/color.js.map +0 -1
- package/dist/styles/createStyle.js +0 -78
- package/dist/styles/createStyle.js.map +0 -1
- package/dist/styles/dimension.js +0 -100
- package/dist/styles/dimension.js.map +0 -1
- package/dist/styles/display.js +0 -68
- package/dist/styles/display.js.map +0 -1
- package/dist/styles/fade.js +0 -58
- package/dist/styles/fade.js.map +0 -1
- package/dist/styles/fill.js +0 -52
- package/dist/styles/fill.js.map +0 -1
- package/dist/styles/flow.js +0 -13
- package/dist/styles/flow.js.map +0 -1
- package/dist/styles/gap.js +0 -37
- package/dist/styles/gap.js.map +0 -1
- package/dist/styles/height.js +0 -21
- package/dist/styles/height.js.map +0 -1
- package/dist/styles/index.js +0 -10
- package/dist/styles/index.js.map +0 -1
- package/dist/styles/inset.js +0 -143
- package/dist/styles/inset.js.map +0 -1
- package/dist/styles/justify.js +0 -15
- package/dist/styles/justify.js.map +0 -1
- package/dist/styles/margin.js +0 -97
- package/dist/styles/margin.js.map +0 -1
- package/dist/styles/outline.js +0 -66
- package/dist/styles/outline.js.map +0 -1
- package/dist/styles/padding.js +0 -97
- package/dist/styles/padding.js.map +0 -1
- package/dist/styles/predefined.js +0 -233
- package/dist/styles/predefined.js.map +0 -1
- package/dist/styles/preset.js +0 -126
- package/dist/styles/preset.js.map +0 -1
- package/dist/styles/radius.js +0 -52
- package/dist/styles/radius.js.map +0 -1
- package/dist/styles/scrollbar.js +0 -109
- package/dist/styles/scrollbar.js.map +0 -1
- package/dist/styles/shadow.js +0 -28
- package/dist/styles/shadow.js.map +0 -1
- package/dist/styles/styledScrollbar.js +0 -39
- package/dist/styles/styledScrollbar.js.map +0 -1
- package/dist/styles/transition.js +0 -139
- package/dist/styles/transition.js.map +0 -1
- package/dist/styles/types.d.ts +0 -495
- package/dist/styles/width.js +0 -21
- package/dist/styles/width.js.map +0 -1
- package/dist/tasty/chunks/cacheKey.js +0 -71
- package/dist/tasty/chunks/cacheKey.js.map +0 -1
- package/dist/tasty/chunks/definitions.d.ts +0 -38
- package/dist/tasty/chunks/definitions.js +0 -261
- package/dist/tasty/chunks/definitions.js.map +0 -1
- package/dist/tasty/chunks/renderChunk.js +0 -68
- package/dist/tasty/chunks/renderChunk.js.map +0 -1
- package/dist/tasty/config.d.ts +0 -283
- package/dist/tasty/config.js +0 -401
- package/dist/tasty/config.js.map +0 -1
- package/dist/tasty/debug.d.ts +0 -200
- package/dist/tasty/debug.js +0 -734
- package/dist/tasty/debug.js.map +0 -1
- package/dist/tasty/hooks/useGlobalStyles.d.ts +0 -28
- package/dist/tasty/hooks/useGlobalStyles.js +0 -57
- package/dist/tasty/hooks/useGlobalStyles.js.map +0 -1
- package/dist/tasty/hooks/useKeyframes.d.ts +0 -57
- package/dist/tasty/hooks/useKeyframes.js +0 -55
- package/dist/tasty/hooks/useKeyframes.js.map +0 -1
- package/dist/tasty/hooks/useProperty.d.ts +0 -80
- package/dist/tasty/hooks/useProperty.js +0 -92
- package/dist/tasty/hooks/useProperty.js.map +0 -1
- package/dist/tasty/hooks/useRawCSS.d.ts +0 -54
- package/dist/tasty/hooks/useRawCSS.js +0 -29
- package/dist/tasty/hooks/useRawCSS.js.map +0 -1
- package/dist/tasty/hooks/useStyles.d.ts +0 -41
- package/dist/tasty/hooks/useStyles.js +0 -170
- package/dist/tasty/hooks/useStyles.js.map +0 -1
- package/dist/tasty/index.d.ts +0 -35
- package/dist/tasty/injector/index.d.ts +0 -158
- package/dist/tasty/injector/index.js +0 -155
- package/dist/tasty/injector/index.js.map +0 -1
- package/dist/tasty/injector/injector.d.ts +0 -137
- package/dist/tasty/injector/injector.js +0 -401
- package/dist/tasty/injector/injector.js.map +0 -1
- package/dist/tasty/injector/sheet-manager.d.ts +0 -128
- package/dist/tasty/injector/sheet-manager.js +0 -715
- package/dist/tasty/injector/sheet-manager.js.map +0 -1
- package/dist/tasty/injector/types.d.ts +0 -136
- package/dist/tasty/keyframes/index.js +0 -207
- package/dist/tasty/keyframes/index.js.map +0 -1
- package/dist/tasty/parser/classify.js +0 -320
- package/dist/tasty/parser/classify.js.map +0 -1
- package/dist/tasty/parser/const.js +0 -34
- package/dist/tasty/parser/const.js.map +0 -1
- package/dist/tasty/parser/lru.js +0 -110
- package/dist/tasty/parser/lru.js.map +0 -1
- package/dist/tasty/parser/parser.d.ts +0 -26
- package/dist/tasty/parser/parser.js +0 -117
- package/dist/tasty/parser/parser.js.map +0 -1
- package/dist/tasty/parser/tokenizer.js +0 -70
- package/dist/tasty/parser/tokenizer.js.map +0 -1
- package/dist/tasty/parser/types.d.ts +0 -47
- package/dist/tasty/parser/types.js +0 -47
- package/dist/tasty/parser/types.js.map +0 -1
- package/dist/tasty/pipeline/conditions.js +0 -378
- package/dist/tasty/pipeline/conditions.js.map +0 -1
- package/dist/tasty/pipeline/exclusive.js +0 -232
- package/dist/tasty/pipeline/exclusive.js.map +0 -1
- package/dist/tasty/pipeline/index.d.ts +0 -52
- package/dist/tasty/pipeline/index.js +0 -639
- package/dist/tasty/pipeline/index.js.map +0 -1
- package/dist/tasty/pipeline/materialize.js +0 -822
- package/dist/tasty/pipeline/materialize.js.map +0 -1
- package/dist/tasty/pipeline/parseStateKey.js +0 -422
- package/dist/tasty/pipeline/parseStateKey.js.map +0 -1
- package/dist/tasty/pipeline/simplify.js +0 -558
- package/dist/tasty/pipeline/simplify.js.map +0 -1
- package/dist/tasty/plugins/okhsl-plugin.d.ts +0 -36
- package/dist/tasty/plugins/okhsl-plugin.js +0 -372
- package/dist/tasty/plugins/okhsl-plugin.js.map +0 -1
- package/dist/tasty/plugins/types.d.ts +0 -72
- package/dist/tasty/properties/index.js +0 -159
- package/dist/tasty/properties/index.js.map +0 -1
- package/dist/tasty/states/index.d.ts +0 -44
- package/dist/tasty/states/index.js +0 -390
- package/dist/tasty/states/index.js.map +0 -1
- package/dist/tasty/static/index.d.ts +0 -6
- package/dist/tasty/static/index.js +0 -6
- package/dist/tasty/static/tastyStatic.d.ts +0 -47
- package/dist/tasty/static/tastyStatic.js +0 -32
- package/dist/tasty/static/tastyStatic.js.map +0 -1
- package/dist/tasty/static/types.d.ts +0 -50
- package/dist/tasty/static/types.js +0 -25
- package/dist/tasty/static/types.js.map +0 -1
- package/dist/tasty/styles/align.d.ts +0 -16
- package/dist/tasty/styles/align.js +0 -15
- package/dist/tasty/styles/align.js.map +0 -1
- package/dist/tasty/styles/border.d.ts +0 -26
- package/dist/tasty/styles/border.js +0 -115
- package/dist/tasty/styles/border.js.map +0 -1
- package/dist/tasty/styles/color.d.ts +0 -15
- package/dist/tasty/styles/color.js +0 -24
- package/dist/tasty/styles/color.js.map +0 -1
- package/dist/tasty/styles/createStyle.js +0 -78
- package/dist/tasty/styles/createStyle.js.map +0 -1
- package/dist/tasty/styles/dimension.js +0 -100
- package/dist/tasty/styles/dimension.js.map +0 -1
- package/dist/tasty/styles/display.d.ts +0 -38
- package/dist/tasty/styles/display.js +0 -68
- package/dist/tasty/styles/display.js.map +0 -1
- package/dist/tasty/styles/fade.d.ts +0 -16
- package/dist/tasty/styles/fade.js +0 -58
- package/dist/tasty/styles/fade.js.map +0 -1
- package/dist/tasty/styles/fill.d.ts +0 -45
- package/dist/tasty/styles/fill.js +0 -52
- package/dist/tasty/styles/fill.js.map +0 -1
- package/dist/tasty/styles/flow.d.ts +0 -17
- package/dist/tasty/styles/flow.js +0 -13
- package/dist/tasty/styles/flow.js.map +0 -1
- package/dist/tasty/styles/gap.d.ts +0 -32
- package/dist/tasty/styles/gap.js +0 -37
- package/dist/tasty/styles/gap.js.map +0 -1
- package/dist/tasty/styles/height.d.ts +0 -18
- package/dist/tasty/styles/height.js +0 -21
- package/dist/tasty/styles/height.js.map +0 -1
- package/dist/tasty/styles/index.d.ts +0 -3
- package/dist/tasty/styles/index.js +0 -10
- package/dist/tasty/styles/index.js.map +0 -1
- package/dist/tasty/styles/inset.d.ts +0 -51
- package/dist/tasty/styles/inset.js +0 -143
- package/dist/tasty/styles/inset.js.map +0 -1
- package/dist/tasty/styles/justify.d.ts +0 -16
- package/dist/tasty/styles/justify.js +0 -15
- package/dist/tasty/styles/justify.js.map +0 -1
- package/dist/tasty/styles/list.d.ts +0 -17
- package/dist/tasty/styles/list.js +0 -99
- package/dist/tasty/styles/list.js.map +0 -1
- package/dist/tasty/styles/margin.d.ts +0 -29
- package/dist/tasty/styles/margin.js +0 -97
- package/dist/tasty/styles/margin.js.map +0 -1
- package/dist/tasty/styles/outline.d.ts +0 -30
- package/dist/tasty/styles/outline.js +0 -66
- package/dist/tasty/styles/outline.js.map +0 -1
- package/dist/tasty/styles/padding.d.ts +0 -29
- package/dist/tasty/styles/padding.js +0 -97
- package/dist/tasty/styles/padding.js.map +0 -1
- package/dist/tasty/styles/predefined.d.ts +0 -74
- package/dist/tasty/styles/predefined.js +0 -242
- package/dist/tasty/styles/predefined.js.map +0 -1
- package/dist/tasty/styles/preset.d.ts +0 -48
- package/dist/tasty/styles/preset.js +0 -126
- package/dist/tasty/styles/preset.js.map +0 -1
- package/dist/tasty/styles/radius.d.ts +0 -15
- package/dist/tasty/styles/radius.js +0 -52
- package/dist/tasty/styles/radius.js.map +0 -1
- package/dist/tasty/styles/scrollbar.d.ts +0 -22
- package/dist/tasty/styles/scrollbar.js +0 -109
- package/dist/tasty/styles/scrollbar.js.map +0 -1
- package/dist/tasty/styles/shadow.d.ts +0 -15
- package/dist/tasty/styles/shadow.js +0 -28
- package/dist/tasty/styles/shadow.js.map +0 -1
- package/dist/tasty/styles/styledScrollbar.d.ts +0 -48
- package/dist/tasty/styles/styledScrollbar.js +0 -39
- package/dist/tasty/styles/styledScrollbar.js.map +0 -1
- package/dist/tasty/styles/transition.d.ts +0 -15
- package/dist/tasty/styles/transition.js +0 -139
- package/dist/tasty/styles/transition.js.map +0 -1
- package/dist/tasty/styles/types.d.ts +0 -499
- package/dist/tasty/styles/width.d.ts +0 -18
- package/dist/tasty/styles/width.js +0 -21
- package/dist/tasty/styles/width.js.map +0 -1
- package/dist/tasty/tasty.d.ts +0 -936
- package/dist/tasty/tasty.js +0 -191
- package/dist/tasty/tasty.js.map +0 -1
- package/dist/tasty/types.d.ts +0 -192
- package/dist/tasty/utils/cache-wrapper.js +0 -25
- package/dist/tasty/utils/cache-wrapper.js.map +0 -1
- package/dist/tasty/utils/case-converter.js +0 -9
- package/dist/tasty/utils/case-converter.js.map +0 -1
- package/dist/tasty/utils/colors.d.ts +0 -6
- package/dist/tasty/utils/colors.js +0 -10
- package/dist/tasty/utils/colors.js.map +0 -1
- package/dist/tasty/utils/dotize.d.ts +0 -27
- package/dist/tasty/utils/dotize.js +0 -123
- package/dist/tasty/utils/dotize.js.map +0 -1
- package/dist/tasty/utils/filter-base-props.d.ts +0 -16
- package/dist/tasty/utils/filter-base-props.js +0 -46
- package/dist/tasty/utils/filter-base-props.js.map +0 -1
- package/dist/tasty/utils/get-display-name.d.ts +0 -8
- package/dist/tasty/utils/get-display-name.js +0 -11
- package/dist/tasty/utils/get-display-name.js.map +0 -1
- package/dist/tasty/utils/hsl-to-rgb.js +0 -39
- package/dist/tasty/utils/hsl-to-rgb.js.map +0 -1
- package/dist/tasty/utils/is-dev-env.js +0 -20
- package/dist/tasty/utils/is-dev-env.js.map +0 -1
- package/dist/tasty/utils/merge-styles.d.ts +0 -8
- package/dist/tasty/utils/merge-styles.js +0 -147
- package/dist/tasty/utils/merge-styles.js.map +0 -1
- package/dist/tasty/utils/mod-attrs.d.ts +0 -9
- package/dist/tasty/utils/mod-attrs.js +0 -22
- package/dist/tasty/utils/mod-attrs.js.map +0 -1
- package/dist/tasty/utils/okhsl-to-rgb.js +0 -297
- package/dist/tasty/utils/okhsl-to-rgb.js.map +0 -1
- package/dist/tasty/utils/process-tokens.d.ts +0 -32
- package/dist/tasty/utils/process-tokens.js +0 -172
- package/dist/tasty/utils/process-tokens.js.map +0 -1
- package/dist/tasty/utils/resolve-recipes.d.ts +0 -18
- package/dist/tasty/utils/resolve-recipes.js +0 -144
- package/dist/tasty/utils/resolve-recipes.js.map +0 -1
- package/dist/tasty/utils/string.js +0 -9
- package/dist/tasty/utils/string.js.map +0 -1
- package/dist/tasty/utils/styles.d.ts +0 -204
- package/dist/tasty/utils/styles.js +0 -577
- package/dist/tasty/utils/styles.js.map +0 -1
- package/dist/tasty/utils/typography.d.ts +0 -37
- package/dist/tasty/utils/typography.js +0 -54
- package/dist/tasty/utils/typography.js.map +0 -1
- package/dist/tasty/utils/warnings.d.ts +0 -17
- package/dist/tasty/utils/warnings.js +0 -17
- package/dist/tasty/utils/warnings.js.map +0 -1
- package/dist/tasty/zero/babel.d.ts +0 -111
- package/dist/tasty/zero/babel.js +0 -283
- package/dist/tasty/zero/babel.js.map +0 -1
- package/dist/tasty/zero/index.d.ts +0 -4
- package/dist/tasty/zero/index.js +0 -5
- package/dist/tasty/zero/next.d.ts +0 -61
- package/dist/tasty/zero/next.js +0 -79
- package/dist/tasty/zero/next.js.map +0 -1
- package/dist/tasty.config.ts +0 -311
- package/dist/tokens/typography.d.ts +0 -35
- package/dist/tokens/typography.js +0 -238
- package/dist/tokens/typography.js.map +0 -1
- package/dist/utils/cache-wrapper.js +0 -25
- package/dist/utils/cache-wrapper.js.map +0 -1
- package/dist/utils/case-converter.js +0 -9
- package/dist/utils/case-converter.js.map +0 -1
- package/dist/utils/hsl-to-rgb.js +0 -39
- package/dist/utils/hsl-to-rgb.js.map +0 -1
- package/dist/utils/merge-styles.js +0 -147
- package/dist/utils/merge-styles.js.map +0 -1
- package/dist/utils/okhsl-to-rgb.js +0 -297
- package/dist/utils/okhsl-to-rgb.js.map +0 -1
- package/dist/utils/process-tokens.js +0 -29
- package/dist/utils/process-tokens.js.map +0 -1
- package/dist/utils/resolve-recipes.js +0 -144
- package/dist/utils/resolve-recipes.js.map +0 -1
- package/dist/utils/string.js +0 -9
- package/dist/utils/string.js.map +0 -1
- package/dist/utils/styles.d.ts +0 -23
- package/dist/utils/styles.js +0 -338
- package/dist/utils/styles.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterListBox.js","names":["mergeProps","BaseSection","useFocus","modAttrs"],"sources":["../../../../src/components/fields/FilterListBox/FilterListBox.tsx"],"sourcesContent":["import { Key } from '@react-types/shared';\nimport {\n cloneElement,\n ForwardedRef,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, Item, useListState } from 'react-stately';\nimport { CubeCollectionItemProps } from 'src/components/CollectionItem';\n\nimport { LoadingIcon } from '../../../icons';\nimport { useProviderProps } from '../../../provider';\nimport {\n BASE_STYLES,\n COLOR_STYLES,\n extractStyles,\n OUTER_STYLES,\n Styles,\n tasty,\n} from '../../../tasty';\nimport { mergeProps, modAttrs, useCombinedRefs } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport { StyledHeader } from '../../actions/Menu/styled';\nimport { useFieldProps, useFormProps, wrapWithField } from '../../form';\nimport { CubeListBoxProps, ListBox } from '../ListBox/ListBox';\nimport {\n DEFAULT_INPUT_STYLES,\n INPUT_WRAPPER_STYLES,\n} from '../TextInput/TextInputBase';\n\nimport type { Collection, Node } from '@react-types/shared';\nimport type { FieldBaseProps } from '../../../shared';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\nconst FilterListBoxWrapperElement = tasty({\n styles: {\n display: 'grid',\n flow: 'column',\n gridColumns: '1sf',\n gridRows: 'max-content max-content 1sf',\n gap: 0,\n position: 'relative',\n radius: true,\n color: '#dark-02',\n transition: 'theme',\n outline: {\n '': '#purple-03.0',\n 'invalid & focused': '#danger.50',\n focused: '#purple-03',\n },\n border: {\n '': true,\n focused: '#primary-text',\n valid: '#success-text.50',\n invalid: '#danger-text.50',\n disabled: true,\n popover: false,\n },\n },\n});\n\nconst SearchWrapperElement = tasty({\n qa: 'FilterListBoxSearchWrapper',\n styles: {\n ...INPUT_WRAPPER_STYLES,\n border: 'bottom',\n radius: '1r top',\n fill: '#clear',\n height: '($size + 1x)',\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n\nconst SearchInputElement = tasty({\n as: 'input',\n styles: {\n ...DEFAULT_INPUT_STYLES,\n fill: '#clear',\n padding: {\n '': '.5x 1.5x',\n prefix: '0 1.5x 0 .5x',\n },\n },\n});\n\nconst StyledHeaderWithoutBorder = tasty(StyledHeader, {\n styles: {\n border: false,\n },\n});\n\nexport interface CubeFilterListBoxProps<T>\n extends Omit<CubeListBoxProps<T>, 'filter'>,\n FieldBaseProps {\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** Whether the search input should have autofocus */\n autoFocus?: boolean;\n /**\n * Custom filter function for determining if an option should be included in search results.\n * Pass `false` to disable internal filtering completely (useful for external filtering).\n */\n filter?: FilterFn | false;\n /** Custom label to display when no results are found after filtering */\n emptyLabel?: ReactNode;\n /** Custom styles for the search input */\n searchInputStyles?: Styles;\n /** Whether the FilterListBox is in loading state (shows loading icon in search input) */\n isLoading?: boolean;\n /** Ref for accessing the search input element */\n searchInputRef?: RefObject<HTMLInputElement | null>;\n /** Whether to allow entering custom values that are not present in the predefined options */\n allowsCustomValue?: boolean;\n /** Additional modifiers for styling the FilterListBox */\n mods?: Record<string, boolean>;\n /** Custom styles for the list box */\n listBoxStyles?: Styles;\n\n /**\n * Callback fired when the user presses Escape key while the search input is empty.\n * Can be used by parent components (e.g. FilterPicker) to close an enclosing Dialog.\n */\n onEscape?: () => void;\n\n /**\n * Whether to show checkboxes for multiple selection mode.\n * This adds a checkbox icon to the left of each option.\n */\n isCheckable?: boolean;\n\n /**\n * Callback fired when an option is clicked but not on the checkbox area.\n * Used by FilterPicker to close the popover on non-checkbox clicks.\n */\n onOptionClick?: (key: Key) => void;\n\n /**\n * Props to apply to existing custom values (values that are already selected but not in the predefined options).\n */\n customValueProps?: Partial<CubeCollectionItemProps<T>>;\n\n /**\n * Props to apply to new custom values (values typed in the search input that are about to be added).\n * These are merged with customValueProps for new custom values.\n */\n newCustomValueProps?: Partial<CubeCollectionItemProps<T>>;\n\n /**\n * Controlled search value. When provided, the search input becomes controlled.\n * Use with `onSearchChange` to manage the search state externally.\n */\n searchValue?: string;\n\n /**\n * Callback fired when the search input value changes.\n * Use with `searchValue` for controlled search input.\n */\n onSearchChange?: (value: string) => void;\n\n /**\n * Pre-built collection to use instead of creating a new one.\n * Used internally by FilterPicker to avoid duplicate collection creation.\n * @internal\n */\n _internalCollection?: Collection<Node<any>>;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\nexport const FilterListBox = forwardRef(function FilterListBox<\n T extends object,\n>(props: CubeFilterListBoxProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n props = useProviderProps(props);\n props = useFormProps(props);\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n const fieldProps: any = {};\n\n if (props.selectionMode === 'multiple') {\n fieldProps.selectedKeys = value || [];\n } else {\n fieldProps.selectedKey = value ?? null;\n }\n\n fieldProps.onSelectionChange = (key: any) => {\n if (props.selectionMode === 'multiple') {\n // Handle \"all\" selection and array selections\n if (key === 'all') {\n onChange('all');\n } else {\n onChange(key ? (Array.isArray(key) ? key : [key]) : []);\n }\n } else {\n onChange(Array.isArray(key) ? key[0] : key);\n }\n };\n\n return fieldProps;\n },\n });\n\n let {\n qa,\n label,\n extra,\n id,\n labelStyles,\n isRequired,\n necessityIndicator,\n validationState,\n isDisabled,\n isLoading,\n searchPlaceholder = 'Search...',\n autoFocus,\n filter,\n mods: externalMods,\n emptyLabel,\n searchInputStyles,\n listStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n searchInputRef,\n listRef,\n message,\n description,\n styles,\n focusOnHover,\n shouldFocusWrap,\n labelSuffix,\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange: externalOnSelectionChange,\n allowsCustomValue = false,\n showSelectAll,\n selectAllLabel,\n header,\n footer,\n size = 'medium',\n headerStyles,\n footerStyles,\n listBoxStyles,\n items,\n children: renderChildren,\n onEscape,\n isCheckable,\n onOptionClick,\n selectionMode = 'single',\n allValueProps,\n customValueProps,\n newCustomValueProps,\n searchValue: controlledSearchValue,\n onSearchChange,\n _internalCollection,\n form,\n ...otherProps\n } = props;\n\n // Preserve the original `children` (may be a render function) before we\n // potentially overwrite it.\n let children: ReactNode = renderChildren as ReactNode;\n\n const renderFn = renderChildren as unknown;\n\n if (items && typeof renderFn === 'function') {\n try {\n const itemsArray = Array.from(items as Iterable<any>);\n // Execute the render function for each item to obtain <Item/> / <Section/> nodes.\n children = itemsArray.map((item, idx) => {\n const rendered = (renderFn as (it: any) => ReactNode)(item);\n // Ensure every element has a stable key: rely on the user-provided key\n // inside the render function, otherwise fall back to the item itself or\n // the index. This mirrors React Aria examples where the render function\n // is expected to set keys, but we add a fallback for robustness.\n if (\n isValidElement(rendered) &&\n (rendered as ReactElement).key == null\n ) {\n return cloneElement(rendered as ReactElement, {\n key: (rendered as any)?.key ?? item?.key ?? idx,\n });\n }\n\n return rendered as ReactNode;\n });\n } catch {\n // If conversion fails for some reason, we silently ignore and proceed\n // with the original children value so we don't break runtime.\n }\n }\n\n // Use provided collection from FilterPicker or create our own\n // Hook call order is stable: _internalCollection is consistent per component instance\n const localCollectionState = _internalCollection\n ? { collection: _internalCollection }\n : useListState({\n children: children as any,\n items: items as any,\n selectionMode: 'none' as any,\n });\n\n // Collect original option keys to avoid duplicating them as custom values.\n const originalKeys = useMemo(() => {\n const keys = new Set<string>();\n for (const item of localCollectionState.collection) {\n if (item.type === 'item') {\n keys.add(String(item.key));\n }\n }\n return keys;\n }, [localCollectionState.collection]);\n\n // State to keep track of custom (user-entered) items that were selected.\n const [customKeys, setCustomKeys] = useState<Set<string>>(new Set());\n\n // Initialize custom keys from current selection\n useEffect(() => {\n if (!allowsCustomValue) return;\n\n const currentSelectedKeys = selectedKeys\n ? selectedKeys === 'all'\n ? [] // Skip custom key detection when 'all' is selected\n : Array.from(selectedKeys).map(String)\n : selectedKey != null\n ? [String(selectedKey)]\n : [];\n\n if (currentSelectedKeys.length === 0) return;\n\n const keysToAdd = currentSelectedKeys.filter((k) => !originalKeys.has(k));\n\n if (keysToAdd.length) {\n setCustomKeys((prev) => new Set([...Array.from(prev), ...keysToAdd]));\n }\n }, [allowsCustomValue, selectedKeys, selectedKey, originalKeys]);\n\n // Merge original children with any custom items so they persist in the list.\n // If there are selected custom values, they should appear on top with other\n // selected items (which are already sorted by the parent component, e.g. FilterPicker).\n const mergedChildren: ReactNode = useMemo(() => {\n if (!children && customKeys.size === 0) return children;\n\n // Build React elements for custom values (kept stable via their key).\n const customArray = Array.from(customKeys).map((key) => (\n <Item key={key} textValue={key} {...customValueProps}>\n {key}\n </Item>\n ));\n\n // Identify which custom keys are currently selected so we can promote them.\n const selectedKeysSet = new Set<string>();\n\n if (selectionMode === 'multiple') {\n if (selectedKeys === 'all') {\n // When 'all' is selected, no custom items should be treated as selected\n // since 'all' means all available items, not custom ones\n } else {\n Array.from(selectedKeys ?? []).forEach((k) =>\n selectedKeysSet.add(String(k)),\n );\n }\n } else {\n if (selectedKey != null) selectedKeysSet.add(String(selectedKey));\n }\n\n const selectedCustom: ReactNode[] = [];\n const unselectedCustom: ReactNode[] = [];\n\n customArray.forEach((item: any) => {\n if (selectedKeysSet.has(String(item.key))) {\n selectedCustom.push(item);\n } else {\n unselectedCustom.push(item);\n }\n });\n\n if (!children) {\n // No original items – just return selected custom followed by the rest.\n return [...selectedCustom, ...unselectedCustom];\n }\n\n const originalArray = Array.isArray(children) ? children : [children];\n\n // Final order: selected custom items -> original array (already possibly\n // sorted by parent) -> unselected custom items.\n return [...selectedCustom, ...originalArray, ...unselectedCustom];\n }, [children, customKeys, selectionMode, selectedKey, selectedKeys]);\n\n // Determine an aria-label for the internal ListBox to avoid React Aria warnings.\n const innerAriaLabel =\n (props as any)['aria-label'] ||\n (typeof label === 'string' ? label : undefined);\n\n // Controlled/uncontrolled search value pattern\n const [internalSearchValue, setInternalSearchValue] = useState('');\n const isSearchControlled = controlledSearchValue !== undefined;\n const searchValue = isSearchControlled\n ? controlledSearchValue\n : internalSearchValue;\n\n const handleSearchChange = useCallback(\n (value: string) => {\n if (!isSearchControlled) {\n setInternalSearchValue(value);\n }\n onSearchChange?.(value);\n },\n [isSearchControlled, onSearchChange],\n );\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n // Choose the text filter function: user-provided `filter` prop (if any),\n // or the default `contains` helper from `useFilter`.\n // When filter={false}, disable filtering completely.\n const textFilterFn = useMemo<FilterFn>(\n () => (filter === false ? () => true : filter || contains),\n [filter, contains],\n );\n\n // Create a filter function for collection nodes (similar to ComboBox pattern)\n const filterFn = useCallback(\n (nodes: Iterable<any>) => {\n const term = searchValue.trim();\n\n // Don't filter if no search term\n if (!term) {\n return nodes;\n }\n\n // Filter nodes based on their textValue and preserve section structure\n return [...nodes]\n .map((node: any) => {\n if (node.type === 'section' && node.childNodes) {\n const filteredNodes = [...node.childNodes].filter((child: any) =>\n textFilterFn(child.textValue || '', term),\n );\n\n if (filteredNodes.length === 0) {\n return null;\n }\n\n return {\n ...node,\n childNodes: filteredNodes,\n hasChildNodes: true,\n };\n }\n\n return textFilterFn(node.textValue || '', term) ? node : null;\n })\n .filter(Boolean);\n },\n [searchValue, textFilterFn],\n );\n\n // Handle custom values if allowed\n const enhancedChildren = useMemo(() => {\n let childrenToProcess = mergedChildren;\n\n // Handle custom values if allowed\n if (!allowsCustomValue) return childrenToProcess;\n\n const term = searchValue.trim();\n if (!term) return childrenToProcess;\n\n // Helper to determine if the term is already present (exact match on rendered textValue or the key).\n const doesTermExist = (term: string): boolean => {\n // Check if term exists in custom keys\n if (customKeys.has(term)) {\n return true;\n }\n\n // Check if term exists in original collection\n for (const item of localCollectionState.collection) {\n if (item.type === 'item') {\n const textValue = item.textValue || String(item.rendered || '');\n if (term === textValue || String(item.key) === term) {\n return true;\n }\n }\n }\n return false;\n };\n\n if (doesTermExist(term)) {\n return childrenToProcess;\n }\n\n // Check if there are any items that will match the filter\n // This determines whether we need to visually separate the custom value\n const hasVisibleFilteredItems = (() => {\n // Check original collection items\n for (const item of localCollectionState.collection) {\n if (item.type === 'item') {\n const textValue = item.textValue || String(item.rendered || '');\n if (textFilterFn(textValue, term)) {\n return true;\n }\n } else if (item.type === 'section' && item.childNodes) {\n for (const child of item.childNodes) {\n const textValue = child.textValue || String(child.rendered || '');\n if (textFilterFn(textValue, term)) {\n return true;\n }\n }\n }\n }\n\n // Also check custom keys - they appear as items in mergedChildren\n for (const customKey of customKeys) {\n if (textFilterFn(customKey, term)) {\n return true;\n }\n }\n\n return false;\n })();\n\n // Create the custom option\n const customOption = (\n <Item\n key={term}\n textValue={term}\n {...mergeProps(customValueProps, newCustomValueProps)}\n >\n {term}\n </Item>\n );\n\n // If there are visible filtered items, add visual separation for custom value\n if (hasVisibleFilteredItems && childrenToProcess) {\n // Check if the collection contains any sections\n // If it does, we can't wrap childrenToProcess in another section (would create nested sections)\n const hasSections = [...localCollectionState.collection].some(\n (item) => item.type === 'section',\n );\n\n const customValueSection = (\n <BaseSection key=\"__custom_value__\" aria-label=\"Custom value\">\n {customOption}\n </BaseSection>\n );\n\n if (hasSections) {\n // Collection has sections - just append the custom value section without wrapping\n if (Array.isArray(childrenToProcess)) {\n return [...childrenToProcess, customValueSection];\n }\n return [childrenToProcess, customValueSection];\n }\n\n // No sections in collection - wrap items in a section for visual separation\n const filteredItemsSection = (\n <BaseSection key=\"__filtered_items__\" aria-label=\"Filtered items\">\n {childrenToProcess}\n </BaseSection>\n );\n\n return [filteredItemsSection, customValueSection];\n }\n\n // No visible filtered items, just return the custom option without sections\n if (Array.isArray(childrenToProcess)) {\n return [...childrenToProcess, customOption];\n }\n\n if (childrenToProcess) {\n return [childrenToProcess, customOption];\n }\n\n return customOption;\n }, [\n allowsCustomValue,\n mergedChildren,\n searchValue,\n customKeys,\n localCollectionState.collection,\n customValueProps,\n newCustomValueProps,\n textFilterFn,\n ]);\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n ref = useCombinedRefs(ref);\n searchInputRef = useCombinedRefs(searchInputRef);\n listRef = useCombinedRefs(listRef);\n\n const { isFocused, focusProps } = useFocus({ isDisabled });\n const isInvalid = validationState === 'invalid';\n\n const listBoxRef = useRef<HTMLDivElement>(null);\n\n // Ref to access internal ListBox state (selection manager, etc.)\n const listStateRef = useRef<any>(null);\n\n // No separate focusedKey state needed; rely directly on selectionManager.focusedKey.\n\n // When the search value changes, the visible collection of items may change as well.\n // If the currently focused item is no longer visible, move virtual focus to the first\n // available item so that arrow navigation and Enter behaviour continue to work.\n // If there are no available items, reset the selection so Enter won't select anything.\n // Priority: focus on selected items first, then fall back to first visible item.\n useLayoutEffect(() => {\n const listState = listStateRef.current;\n\n if (!listState) return;\n\n const { selectionManager, collection } = listState;\n\n // Helper to collect visible item keys (supports sections)\n // Collection is already filtered by React Stately via filterFn\n const collectVisibleKeys = (nodes: Iterable<any>, out: Key[]) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n out.push(node.key);\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out);\n }\n }\n };\n\n const visibleKeys: Key[] = [];\n collectVisibleKeys(collection, visibleKeys);\n\n // If there are no visible items, reset the focused key so Enter won't select anything\n if (visibleKeys.length === 0) {\n selectionManager.setFocusedKey(null);\n return;\n }\n\n // Early exit if the current focused key is still present in the visible items.\n const currentFocused = selectionManager.focusedKey;\n if (currentFocused != null && visibleKeys.includes(currentFocused)) {\n return;\n }\n\n // Helper to find the first selected item that's visible\n const findFirstVisibleSelectedKey = (): Key | null => {\n if (selectionMode === 'single') {\n // Single selection: check if selectedKey is visible\n if (selectedKey != null) {\n const selectedKeyStr = String(selectedKey);\n if (visibleKeys.some((k) => String(k) === selectedKeyStr)) {\n return selectedKey;\n }\n }\n } else if (selectionMode === 'multiple') {\n // Multiple selection: find first selected key that's visible\n if (selectedKeys && selectedKeys !== 'all') {\n for (const key of selectedKeys) {\n const keyStr = String(key);\n if (visibleKeys.some((k) => String(k) === keyStr)) {\n return key;\n }\n }\n }\n }\n return null;\n };\n\n // Determine which key to focus\n let keyToFocus: Key | null = null;\n\n // If there's no focus yet (initial state), prioritize selected items\n if (currentFocused == null) {\n keyToFocus = findFirstVisibleSelectedKey();\n } else {\n // If current focused item was filtered out, try to focus another selected item\n keyToFocus = findFirstVisibleSelectedKey();\n }\n\n // Fallback to first visible item if no selected item found\n if (keyToFocus == null) {\n keyToFocus = visibleKeys[0];\n }\n\n // Mark this focus change as keyboard navigation so ListBox will scroll to it\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n\n // Set focus to the determined key\n selectionManager.setFocusedKey(keyToFocus);\n }, [searchValue, enhancedChildren, selectionMode, selectedKey, selectedKeys]);\n\n // Keyboard navigation handler for search input\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n\n const listState = listStateRef.current;\n if (!listState) return;\n\n const { selectionManager, collection } = listState;\n\n // Helper to collect visible item keys (supports sections)\n // Collection is already filtered by React Stately via filterFn\n const collectVisibleKeys = (nodes: Iterable<any>, out: Key[]) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n out.push(node.key);\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out);\n }\n }\n };\n\n const visibleKeys: Key[] = [];\n collectVisibleKeys(collection, visibleKeys);\n\n if (visibleKeys.length === 0) return;\n\n const isArrowDown = e.key === 'ArrowDown';\n const direction = isArrowDown ? 1 : -1;\n\n const currentKey = selectionManager.focusedKey;\n\n let nextKey: Key | null = null;\n\n if (currentKey == null) {\n // If nothing focused yet, pick first/last depending on direction\n nextKey = isArrowDown\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n } else {\n const currentIndex = visibleKeys.indexOf(currentKey);\n if (currentIndex !== -1) {\n const newIndex = currentIndex + direction;\n if (newIndex >= 0 && newIndex < visibleKeys.length) {\n nextKey = visibleKeys[newIndex];\n } else if (shouldFocusWrap) {\n // Wrap around\n nextKey = isArrowDown\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n }\n } else {\n // Fallback\n nextKey = isArrowDown\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n }\n }\n\n if (nextKey != null) {\n // Mark this focus change as keyboard navigation\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n selectionManager.setFocusedKey(nextKey);\n }\n } else if (\n e.key === 'Home' ||\n e.key === 'End' ||\n e.key === 'PageUp' ||\n e.key === 'PageDown'\n ) {\n e.preventDefault();\n\n const listState = listStateRef.current;\n if (!listState) return;\n\n const { selectionManager, collection } = listState;\n\n // Helper to collect visible item keys (supports sections)\n // Collection is already filtered by React Stately via filterFn\n const collectVisibleKeys = (nodes: Iterable<any>, out: Key[]) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n out.push(node.key);\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out);\n }\n }\n };\n\n const visibleKeys: Key[] = [];\n collectVisibleKeys(collection, visibleKeys);\n\n if (visibleKeys.length === 0) return;\n\n const targetKey =\n e.key === 'Home' || e.key === 'PageUp'\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n\n // Mark this focus change as keyboard navigation\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n selectionManager.setFocusedKey(targetKey);\n } else if (e.key === 'Enter' || (e.key === ' ' && !searchValue)) {\n const listState = listStateRef.current;\n\n if (!listState) return;\n\n const keyToSelect = listState.selectionManager.focusedKey;\n\n if (keyToSelect != null) {\n e.preventDefault();\n listState.selectionManager.select(keyToSelect, e);\n\n if (\n e.key === 'Enter' &&\n isCheckable &&\n onEscape &&\n selectionMode === 'multiple'\n ) {\n onEscape();\n }\n }\n } else if (e.key === 'Escape') {\n if (searchValue) {\n // Clear the current search if any text is present.\n e.preventDefault();\n handleSearchChange('');\n } else {\n // Notify parent that Escape was pressed on an empty input.\n if (onEscape) {\n e.preventDefault();\n onEscape();\n }\n }\n }\n },\n });\n\n const mods = useMemo(\n () => ({\n invalid: isInvalid,\n valid: validationState === 'valid',\n disabled: !!isDisabled,\n focused: isFocused,\n loading: !!isLoading,\n searchable: true,\n prefix: !!isLoading,\n ...externalMods,\n }),\n [\n isInvalid,\n validationState,\n isDisabled,\n isFocused,\n isLoading,\n externalMods,\n ],\n );\n\n // Handler must be defined before we render ListBox so we can pass it.\n const handleSelectionChange = (selection: any) => {\n if (allowsCustomValue) {\n // Normalize current selection into an array of string keys\n let selectedValues: string[] = [];\n\n if (selection != null) {\n if (Array.isArray(selection)) {\n selectedValues = selection.map(String);\n } else {\n selectedValues = [String(selection)];\n }\n }\n\n // Build next custom keys set based on selected values\n const nextSet = new Set<string>();\n\n selectedValues.forEach((val) => {\n if (!originalKeys.has(val)) {\n nextSet.add(val);\n }\n });\n\n // Update internal custom keys state\n setCustomKeys(nextSet);\n }\n\n if (externalOnSelectionChange) {\n (externalOnSelectionChange as any)(selection);\n }\n };\n\n // Custom option click handler that ensures search input receives focus\n const handleOptionClick = (key: Key) => {\n // Focus the search input to enable keyboard navigation\n // Use setTimeout to ensure this happens after React state updates\n setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, 0);\n\n // Call the original onOptionClick if provided\n if (onOptionClick) {\n onOptionClick(key);\n }\n };\n\n const searchInput = (\n <SearchWrapperElement mods={mods} data-size={size}>\n {isLoading && (\n <div data-element=\"Prefix\">\n <div data-element=\"InputIcon\">\n {isLoading ? <LoadingIcon /> : null}\n </div>\n </div>\n )}\n <SearchInputElement\n ref={searchInputRef}\n qa={qa || 'FilterListBox'}\n id={id}\n data-prefix={isLoading ? '' : undefined}\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchValue}\n disabled={isDisabled}\n autoFocus={autoFocus}\n data-autofocus={autoFocus ? '' : undefined}\n styles={searchInputStyles}\n data-size={size}\n data-input-type=\"filterlistbox\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-haspopup=\"listbox\"\n aria-activedescendant={\n listStateRef.current?.selectionManager.focusedKey != null\n ? `ListBoxItem-${listStateRef.current?.selectionManager.focusedKey}`\n : undefined\n }\n onChange={(e) => {\n handleSearchChange(e.target.value);\n }}\n {...keyboardProps}\n {...modAttrs(mods)}\n />\n </SearchWrapperElement>\n );\n\n const filterListBoxField = (\n <FilterListBoxWrapperElement\n ref={ref}\n qa=\"FilterListBoxWrapper\"\n {...modAttrs(mods)}\n styles={styles}\n {...focusProps}\n >\n {header ? (\n <StyledHeaderWithoutBorder data-size={size} styles={headerStyles}>\n {header}\n </StyledHeaderWithoutBorder>\n ) : (\n <div role=\"presentation\" />\n )}\n {searchInput}\n <ListBox\n ref={listBoxRef}\n aria-label={innerAriaLabel}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n selectedKeys={selectedKeys}\n defaultSelectedKeys={defaultSelectedKeys}\n selectionMode={selectionMode}\n isDisabled={isDisabled}\n listRef={listRef}\n stateRef={listStateRef}\n listStyles={listStyles}\n shouldFocusWrap={shouldFocusWrap}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n validationState={validationState}\n disallowEmptySelection={props.disallowEmptySelection}\n disabledKeys={props.disabledKeys}\n focusOnHover={focusOnHover}\n shouldUseVirtualFocus={true}\n showSelectAll={showSelectAll}\n selectAllLabel={selectAllLabel}\n footer={footer}\n footerStyles={footerStyles}\n mods={mods}\n size=\"medium\"\n styles={listBoxStyles}\n isCheckable={isCheckable}\n items={items as any}\n allValueProps={allValueProps}\n filter={filterFn}\n emptyLabel={\n searchValue.trim()\n ? emptyLabel !== undefined\n ? emptyLabel\n : 'No results found'\n : 'No items'\n }\n onSelectionChange={handleSelectionChange}\n onEscape={onEscape}\n onOptionClick={handleOptionClick}\n >\n {enhancedChildren as any}\n </ListBox>\n </FilterListBoxWrapperElement>\n );\n\n return wrapWithField<Omit<CubeFilterListBoxProps<T>, 'children'>>(\n filterListBoxField,\n ref,\n props,\n );\n}) as unknown as (<T>(\n props: CubeFilterListBoxProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement) & { Item: typeof Item; Section: typeof BaseSection };\n\nFilterListBox.Item = ListBox.Item;\n\nFilterListBox.Section = BaseSection;\n\nObject.defineProperty(FilterListBox, 'cubeInputType', {\n value: 'FilterListBox',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterListBox.js","names":["mergeProps","BaseSection","useFocus"],"sources":["../../../../src/components/fields/FilterListBox/FilterListBox.tsx"],"sourcesContent":["import { Key } from '@react-types/shared';\nimport {\n BASE_STYLES,\n COLOR_STYLES,\n extractStyles,\n OUTER_STYLES,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n cloneElement,\n ForwardedRef,\n forwardRef,\n isValidElement,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useFilter, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, Item, useListState } from 'react-stately';\nimport { CubeCollectionItemProps } from 'src/components/CollectionItem';\n\nimport { LoadingIcon } from '../../../icons';\nimport { useProviderProps } from '../../../provider';\nimport { mergeProps, modAttrs, useCombinedRefs } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport { StyledHeader } from '../../actions/Menu/styled';\nimport { useFieldProps, useFormProps, wrapWithField } from '../../form';\nimport { CubeListBoxProps, ListBox } from '../ListBox/ListBox';\nimport {\n DEFAULT_INPUT_STYLES,\n INPUT_WRAPPER_STYLES,\n} from '../TextInput/TextInputBase';\n\nimport type { Collection, Node } from '@react-types/shared';\nimport type { FieldBaseProps } from '../../../shared';\n\ntype FilterFn = (textValue: string, inputValue: string) => boolean;\n\nconst FilterListBoxWrapperElement = tasty({\n styles: {\n display: 'grid',\n flow: 'column',\n gridColumns: '1sf',\n gridRows: 'max-content max-content 1sf',\n gap: 0,\n position: 'relative',\n radius: true,\n color: '#dark-02',\n transition: 'theme',\n outline: {\n '': '#purple-03.0',\n 'invalid & focused': '#danger.50',\n focused: '#purple-03',\n },\n border: {\n '': true,\n focused: '#primary-text',\n valid: '#success-text.50',\n invalid: '#danger-text.50',\n disabled: true,\n popover: false,\n },\n },\n});\n\nconst SearchWrapperElement = tasty({\n qa: 'FilterListBoxSearchWrapper',\n styles: {\n ...INPUT_WRAPPER_STYLES,\n border: 'bottom',\n radius: '1r top',\n fill: '#clear',\n height: '($size + 1x)',\n $size: {\n '': '$size-md',\n 'size=small': '$size-sm',\n 'size=medium': '$size-md',\n 'size=large': '$size-lg',\n },\n },\n});\n\nconst SearchInputElement = tasty({\n as: 'input',\n styles: {\n ...DEFAULT_INPUT_STYLES,\n fill: '#clear',\n padding: {\n '': '.5x 1.5x',\n prefix: '0 1.5x 0 .5x',\n },\n },\n});\n\nconst StyledHeaderWithoutBorder = tasty(StyledHeader, {\n styles: {\n border: false,\n },\n});\n\nexport interface CubeFilterListBoxProps<T>\n extends Omit<CubeListBoxProps<T>, 'filter'>,\n FieldBaseProps {\n /** Placeholder text for the search input */\n searchPlaceholder?: string;\n /** Whether the search input should have autofocus */\n autoFocus?: boolean;\n /**\n * Custom filter function for determining if an option should be included in search results.\n * Pass `false` to disable internal filtering completely (useful for external filtering).\n */\n filter?: FilterFn | false;\n /** Custom label to display when no results are found after filtering */\n emptyLabel?: ReactNode;\n /** Custom styles for the search input */\n searchInputStyles?: Styles;\n /** Whether the FilterListBox is in loading state (shows loading icon in search input) */\n isLoading?: boolean;\n /** Ref for accessing the search input element */\n searchInputRef?: RefObject<HTMLInputElement | null>;\n /** Whether to allow entering custom values that are not present in the predefined options */\n allowsCustomValue?: boolean;\n /** Additional modifiers for styling the FilterListBox */\n mods?: Record<string, boolean>;\n /** Custom styles for the list box */\n listBoxStyles?: Styles;\n\n /**\n * Callback fired when the user presses Escape key while the search input is empty.\n * Can be used by parent components (e.g. FilterPicker) to close an enclosing Dialog.\n */\n onEscape?: () => void;\n\n /**\n * Whether to show checkboxes for multiple selection mode.\n * This adds a checkbox icon to the left of each option.\n */\n isCheckable?: boolean;\n\n /**\n * Callback fired when an option is clicked but not on the checkbox area.\n * Used by FilterPicker to close the popover on non-checkbox clicks.\n */\n onOptionClick?: (key: Key) => void;\n\n /**\n * Props to apply to existing custom values (values that are already selected but not in the predefined options).\n */\n customValueProps?: Partial<CubeCollectionItemProps<T>>;\n\n /**\n * Props to apply to new custom values (values typed in the search input that are about to be added).\n * These are merged with customValueProps for new custom values.\n */\n newCustomValueProps?: Partial<CubeCollectionItemProps<T>>;\n\n /**\n * Controlled search value. When provided, the search input becomes controlled.\n * Use with `onSearchChange` to manage the search state externally.\n */\n searchValue?: string;\n\n /**\n * Callback fired when the search input value changes.\n * Use with `searchValue` for controlled search input.\n */\n onSearchChange?: (value: string) => void;\n\n /**\n * Pre-built collection to use instead of creating a new one.\n * Used internally by FilterPicker to avoid duplicate collection creation.\n * @internal\n */\n _internalCollection?: Collection<Node<any>>;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\nexport const FilterListBox = forwardRef(function FilterListBox<\n T extends object,\n>(props: CubeFilterListBoxProps<T>, ref: ForwardedRef<HTMLDivElement>) {\n props = useProviderProps(props);\n props = useFormProps(props);\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n const fieldProps: any = {};\n\n if (props.selectionMode === 'multiple') {\n fieldProps.selectedKeys = value || [];\n } else {\n fieldProps.selectedKey = value ?? null;\n }\n\n fieldProps.onSelectionChange = (key: any) => {\n if (props.selectionMode === 'multiple') {\n // Handle \"all\" selection and array selections\n if (key === 'all') {\n onChange('all');\n } else {\n onChange(key ? (Array.isArray(key) ? key : [key]) : []);\n }\n } else {\n onChange(Array.isArray(key) ? key[0] : key);\n }\n };\n\n return fieldProps;\n },\n });\n\n let {\n qa,\n label,\n extra,\n id,\n labelStyles,\n isRequired,\n necessityIndicator,\n validationState,\n isDisabled,\n isLoading,\n searchPlaceholder = 'Search...',\n autoFocus,\n filter,\n mods: externalMods,\n emptyLabel,\n searchInputStyles,\n listStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n searchInputRef,\n listRef,\n message,\n description,\n styles,\n focusOnHover,\n shouldFocusWrap,\n labelSuffix,\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n onSelectionChange: externalOnSelectionChange,\n allowsCustomValue = false,\n showSelectAll,\n selectAllLabel,\n header,\n footer,\n size = 'medium',\n headerStyles,\n footerStyles,\n listBoxStyles,\n items,\n children: renderChildren,\n onEscape,\n isCheckable,\n onOptionClick,\n selectionMode = 'single',\n allValueProps,\n customValueProps,\n newCustomValueProps,\n searchValue: controlledSearchValue,\n onSearchChange,\n _internalCollection,\n form,\n ...otherProps\n } = props;\n\n // Preserve the original `children` (may be a render function) before we\n // potentially overwrite it.\n let children: ReactNode = renderChildren as ReactNode;\n\n const renderFn = renderChildren as unknown;\n\n if (items && typeof renderFn === 'function') {\n try {\n const itemsArray = Array.from(items as Iterable<any>);\n // Execute the render function for each item to obtain <Item/> / <Section/> nodes.\n children = itemsArray.map((item, idx) => {\n const rendered = (renderFn as (it: any) => ReactNode)(item);\n // Ensure every element has a stable key: rely on the user-provided key\n // inside the render function, otherwise fall back to the item itself or\n // the index. This mirrors React Aria examples where the render function\n // is expected to set keys, but we add a fallback for robustness.\n if (\n isValidElement(rendered) &&\n (rendered as ReactElement).key == null\n ) {\n return cloneElement(rendered as ReactElement, {\n key: (rendered as any)?.key ?? item?.key ?? idx,\n });\n }\n\n return rendered as ReactNode;\n });\n } catch {\n // If conversion fails for some reason, we silently ignore and proceed\n // with the original children value so we don't break runtime.\n }\n }\n\n // Use provided collection from FilterPicker or create our own\n // Hook call order is stable: _internalCollection is consistent per component instance\n const localCollectionState = _internalCollection\n ? { collection: _internalCollection }\n : useListState({\n children: children as any,\n items: items as any,\n selectionMode: 'none' as any,\n });\n\n // Collect original option keys to avoid duplicating them as custom values.\n const originalKeys = useMemo(() => {\n const keys = new Set<string>();\n for (const item of localCollectionState.collection) {\n if (item.type === 'item') {\n keys.add(String(item.key));\n }\n }\n return keys;\n }, [localCollectionState.collection]);\n\n // State to keep track of custom (user-entered) items that were selected.\n const [customKeys, setCustomKeys] = useState<Set<string>>(new Set());\n\n // Initialize custom keys from current selection\n useEffect(() => {\n if (!allowsCustomValue) return;\n\n const currentSelectedKeys = selectedKeys\n ? selectedKeys === 'all'\n ? [] // Skip custom key detection when 'all' is selected\n : Array.from(selectedKeys).map(String)\n : selectedKey != null\n ? [String(selectedKey)]\n : [];\n\n if (currentSelectedKeys.length === 0) return;\n\n const keysToAdd = currentSelectedKeys.filter((k) => !originalKeys.has(k));\n\n if (keysToAdd.length) {\n setCustomKeys((prev) => new Set([...Array.from(prev), ...keysToAdd]));\n }\n }, [allowsCustomValue, selectedKeys, selectedKey, originalKeys]);\n\n // Merge original children with any custom items so they persist in the list.\n // If there are selected custom values, they should appear on top with other\n // selected items (which are already sorted by the parent component, e.g. FilterPicker).\n const mergedChildren: ReactNode = useMemo(() => {\n if (!children && customKeys.size === 0) return children;\n\n // Build React elements for custom values (kept stable via their key).\n const customArray = Array.from(customKeys).map((key) => (\n <Item key={key} textValue={key} {...customValueProps}>\n {key}\n </Item>\n ));\n\n // Identify which custom keys are currently selected so we can promote them.\n const selectedKeysSet = new Set<string>();\n\n if (selectionMode === 'multiple') {\n if (selectedKeys === 'all') {\n // When 'all' is selected, no custom items should be treated as selected\n // since 'all' means all available items, not custom ones\n } else {\n Array.from(selectedKeys ?? []).forEach((k) =>\n selectedKeysSet.add(String(k)),\n );\n }\n } else {\n if (selectedKey != null) selectedKeysSet.add(String(selectedKey));\n }\n\n const selectedCustom: ReactNode[] = [];\n const unselectedCustom: ReactNode[] = [];\n\n customArray.forEach((item: any) => {\n if (selectedKeysSet.has(String(item.key))) {\n selectedCustom.push(item);\n } else {\n unselectedCustom.push(item);\n }\n });\n\n if (!children) {\n // No original items – just return selected custom followed by the rest.\n return [...selectedCustom, ...unselectedCustom];\n }\n\n const originalArray = Array.isArray(children) ? children : [children];\n\n // Final order: selected custom items -> original array (already possibly\n // sorted by parent) -> unselected custom items.\n return [...selectedCustom, ...originalArray, ...unselectedCustom];\n }, [children, customKeys, selectionMode, selectedKey, selectedKeys]);\n\n // Determine an aria-label for the internal ListBox to avoid React Aria warnings.\n const innerAriaLabel =\n (props as any)['aria-label'] ||\n (typeof label === 'string' ? label : undefined);\n\n // Controlled/uncontrolled search value pattern\n const [internalSearchValue, setInternalSearchValue] = useState('');\n const isSearchControlled = controlledSearchValue !== undefined;\n const searchValue = isSearchControlled\n ? controlledSearchValue\n : internalSearchValue;\n\n const handleSearchChange = useCallback(\n (value: string) => {\n if (!isSearchControlled) {\n setInternalSearchValue(value);\n }\n onSearchChange?.(value);\n },\n [isSearchControlled, onSearchChange],\n );\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n // Choose the text filter function: user-provided `filter` prop (if any),\n // or the default `contains` helper from `useFilter`.\n // When filter={false}, disable filtering completely.\n const textFilterFn = useMemo<FilterFn>(\n () => (filter === false ? () => true : filter || contains),\n [filter, contains],\n );\n\n // Create a filter function for collection nodes (similar to ComboBox pattern)\n const filterFn = useCallback(\n (nodes: Iterable<any>) => {\n const term = searchValue.trim();\n\n // Don't filter if no search term\n if (!term) {\n return nodes;\n }\n\n // Filter nodes based on their textValue and preserve section structure\n return [...nodes]\n .map((node: any) => {\n if (node.type === 'section' && node.childNodes) {\n const filteredNodes = [...node.childNodes].filter((child: any) =>\n textFilterFn(child.textValue || '', term),\n );\n\n if (filteredNodes.length === 0) {\n return null;\n }\n\n return {\n ...node,\n childNodes: filteredNodes,\n hasChildNodes: true,\n };\n }\n\n return textFilterFn(node.textValue || '', term) ? node : null;\n })\n .filter(Boolean);\n },\n [searchValue, textFilterFn],\n );\n\n // Handle custom values if allowed\n const enhancedChildren = useMemo(() => {\n let childrenToProcess = mergedChildren;\n\n // Handle custom values if allowed\n if (!allowsCustomValue) return childrenToProcess;\n\n const term = searchValue.trim();\n if (!term) return childrenToProcess;\n\n // Helper to determine if the term is already present (exact match on rendered textValue or the key).\n const doesTermExist = (term: string): boolean => {\n // Check if term exists in custom keys\n if (customKeys.has(term)) {\n return true;\n }\n\n // Check if term exists in original collection\n for (const item of localCollectionState.collection) {\n if (item.type === 'item') {\n const textValue = item.textValue || String(item.rendered || '');\n if (term === textValue || String(item.key) === term) {\n return true;\n }\n }\n }\n return false;\n };\n\n if (doesTermExist(term)) {\n return childrenToProcess;\n }\n\n // Check if there are any items that will match the filter\n // This determines whether we need to visually separate the custom value\n const hasVisibleFilteredItems = (() => {\n // Check original collection items\n for (const item of localCollectionState.collection) {\n if (item.type === 'item') {\n const textValue = item.textValue || String(item.rendered || '');\n if (textFilterFn(textValue, term)) {\n return true;\n }\n } else if (item.type === 'section' && item.childNodes) {\n for (const child of item.childNodes) {\n const textValue = child.textValue || String(child.rendered || '');\n if (textFilterFn(textValue, term)) {\n return true;\n }\n }\n }\n }\n\n // Also check custom keys - they appear as items in mergedChildren\n for (const customKey of customKeys) {\n if (textFilterFn(customKey, term)) {\n return true;\n }\n }\n\n return false;\n })();\n\n // Create the custom option\n const customOption = (\n <Item\n key={term}\n textValue={term}\n {...mergeProps(customValueProps, newCustomValueProps)}\n >\n {term}\n </Item>\n );\n\n // If there are visible filtered items, add visual separation for custom value\n if (hasVisibleFilteredItems && childrenToProcess) {\n // Check if the collection contains any sections\n // If it does, we can't wrap childrenToProcess in another section (would create nested sections)\n const hasSections = [...localCollectionState.collection].some(\n (item) => item.type === 'section',\n );\n\n const customValueSection = (\n <BaseSection key=\"__custom_value__\" aria-label=\"Custom value\">\n {customOption}\n </BaseSection>\n );\n\n if (hasSections) {\n // Collection has sections - just append the custom value section without wrapping\n if (Array.isArray(childrenToProcess)) {\n return [...childrenToProcess, customValueSection];\n }\n return [childrenToProcess, customValueSection];\n }\n\n // No sections in collection - wrap items in a section for visual separation\n const filteredItemsSection = (\n <BaseSection key=\"__filtered_items__\" aria-label=\"Filtered items\">\n {childrenToProcess}\n </BaseSection>\n );\n\n return [filteredItemsSection, customValueSection];\n }\n\n // No visible filtered items, just return the custom option without sections\n if (Array.isArray(childrenToProcess)) {\n return [...childrenToProcess, customOption];\n }\n\n if (childrenToProcess) {\n return [childrenToProcess, customOption];\n }\n\n return customOption;\n }, [\n allowsCustomValue,\n mergedChildren,\n searchValue,\n customKeys,\n localCollectionState.collection,\n customValueProps,\n newCustomValueProps,\n textFilterFn,\n ]);\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n ref = useCombinedRefs(ref);\n searchInputRef = useCombinedRefs(searchInputRef);\n listRef = useCombinedRefs(listRef);\n\n const { isFocused, focusProps } = useFocus({ isDisabled });\n const isInvalid = validationState === 'invalid';\n\n const listBoxRef = useRef<HTMLDivElement>(null);\n\n // Ref to access internal ListBox state (selection manager, etc.)\n const listStateRef = useRef<any>(null);\n\n // No separate focusedKey state needed; rely directly on selectionManager.focusedKey.\n\n // When the search value changes, the visible collection of items may change as well.\n // If the currently focused item is no longer visible, move virtual focus to the first\n // available item so that arrow navigation and Enter behaviour continue to work.\n // If there are no available items, reset the selection so Enter won't select anything.\n // Priority: focus on selected items first, then fall back to first visible item.\n useLayoutEffect(() => {\n const listState = listStateRef.current;\n\n if (!listState) return;\n\n const { selectionManager, collection } = listState;\n\n // Helper to collect visible item keys (supports sections)\n // Collection is already filtered by React Stately via filterFn\n const collectVisibleKeys = (nodes: Iterable<any>, out: Key[]) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n out.push(node.key);\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out);\n }\n }\n };\n\n const visibleKeys: Key[] = [];\n collectVisibleKeys(collection, visibleKeys);\n\n // If there are no visible items, reset the focused key so Enter won't select anything\n if (visibleKeys.length === 0) {\n selectionManager.setFocusedKey(null);\n return;\n }\n\n // Early exit if the current focused key is still present in the visible items.\n const currentFocused = selectionManager.focusedKey;\n if (currentFocused != null && visibleKeys.includes(currentFocused)) {\n return;\n }\n\n // Helper to find the first selected item that's visible\n const findFirstVisibleSelectedKey = (): Key | null => {\n if (selectionMode === 'single') {\n // Single selection: check if selectedKey is visible\n if (selectedKey != null) {\n const selectedKeyStr = String(selectedKey);\n if (visibleKeys.some((k) => String(k) === selectedKeyStr)) {\n return selectedKey;\n }\n }\n } else if (selectionMode === 'multiple') {\n // Multiple selection: find first selected key that's visible\n if (selectedKeys && selectedKeys !== 'all') {\n for (const key of selectedKeys) {\n const keyStr = String(key);\n if (visibleKeys.some((k) => String(k) === keyStr)) {\n return key;\n }\n }\n }\n }\n return null;\n };\n\n // Determine which key to focus\n let keyToFocus: Key | null = null;\n\n // If there's no focus yet (initial state), prioritize selected items\n if (currentFocused == null) {\n keyToFocus = findFirstVisibleSelectedKey();\n } else {\n // If current focused item was filtered out, try to focus another selected item\n keyToFocus = findFirstVisibleSelectedKey();\n }\n\n // Fallback to first visible item if no selected item found\n if (keyToFocus == null) {\n keyToFocus = visibleKeys[0];\n }\n\n // Mark this focus change as keyboard navigation so ListBox will scroll to it\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n\n // Set focus to the determined key\n selectionManager.setFocusedKey(keyToFocus);\n }, [searchValue, enhancedChildren, selectionMode, selectedKey, selectedKeys]);\n\n // Keyboard navigation handler for search input\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n\n const listState = listStateRef.current;\n if (!listState) return;\n\n const { selectionManager, collection } = listState;\n\n // Helper to collect visible item keys (supports sections)\n // Collection is already filtered by React Stately via filterFn\n const collectVisibleKeys = (nodes: Iterable<any>, out: Key[]) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n out.push(node.key);\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out);\n }\n }\n };\n\n const visibleKeys: Key[] = [];\n collectVisibleKeys(collection, visibleKeys);\n\n if (visibleKeys.length === 0) return;\n\n const isArrowDown = e.key === 'ArrowDown';\n const direction = isArrowDown ? 1 : -1;\n\n const currentKey = selectionManager.focusedKey;\n\n let nextKey: Key | null = null;\n\n if (currentKey == null) {\n // If nothing focused yet, pick first/last depending on direction\n nextKey = isArrowDown\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n } else {\n const currentIndex = visibleKeys.indexOf(currentKey);\n if (currentIndex !== -1) {\n const newIndex = currentIndex + direction;\n if (newIndex >= 0 && newIndex < visibleKeys.length) {\n nextKey = visibleKeys[newIndex];\n } else if (shouldFocusWrap) {\n // Wrap around\n nextKey = isArrowDown\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n }\n } else {\n // Fallback\n nextKey = isArrowDown\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n }\n }\n\n if (nextKey != null) {\n // Mark this focus change as keyboard navigation\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n selectionManager.setFocusedKey(nextKey);\n }\n } else if (\n e.key === 'Home' ||\n e.key === 'End' ||\n e.key === 'PageUp' ||\n e.key === 'PageDown'\n ) {\n e.preventDefault();\n\n const listState = listStateRef.current;\n if (!listState) return;\n\n const { selectionManager, collection } = listState;\n\n // Helper to collect visible item keys (supports sections)\n // Collection is already filtered by React Stately via filterFn\n const collectVisibleKeys = (nodes: Iterable<any>, out: Key[]) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n out.push(node.key);\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out);\n }\n }\n };\n\n const visibleKeys: Key[] = [];\n collectVisibleKeys(collection, visibleKeys);\n\n if (visibleKeys.length === 0) return;\n\n const targetKey =\n e.key === 'Home' || e.key === 'PageUp'\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n\n // Mark this focus change as keyboard navigation\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n selectionManager.setFocusedKey(targetKey);\n } else if (e.key === 'Enter' || (e.key === ' ' && !searchValue)) {\n const listState = listStateRef.current;\n\n if (!listState) return;\n\n const keyToSelect = listState.selectionManager.focusedKey;\n\n if (keyToSelect != null) {\n e.preventDefault();\n listState.selectionManager.select(keyToSelect, e);\n\n if (\n e.key === 'Enter' &&\n isCheckable &&\n onEscape &&\n selectionMode === 'multiple'\n ) {\n onEscape();\n }\n }\n } else if (e.key === 'Escape') {\n if (searchValue) {\n // Clear the current search if any text is present.\n e.preventDefault();\n handleSearchChange('');\n } else {\n // Notify parent that Escape was pressed on an empty input.\n if (onEscape) {\n e.preventDefault();\n onEscape();\n }\n }\n }\n },\n });\n\n const mods = useMemo(\n () => ({\n invalid: isInvalid,\n valid: validationState === 'valid',\n disabled: !!isDisabled,\n focused: isFocused,\n loading: !!isLoading,\n searchable: true,\n prefix: !!isLoading,\n ...externalMods,\n }),\n [\n isInvalid,\n validationState,\n isDisabled,\n isFocused,\n isLoading,\n externalMods,\n ],\n );\n\n // Handler must be defined before we render ListBox so we can pass it.\n const handleSelectionChange = (selection: any) => {\n if (allowsCustomValue) {\n // Normalize current selection into an array of string keys\n let selectedValues: string[] = [];\n\n if (selection != null) {\n if (Array.isArray(selection)) {\n selectedValues = selection.map(String);\n } else {\n selectedValues = [String(selection)];\n }\n }\n\n // Build next custom keys set based on selected values\n const nextSet = new Set<string>();\n\n selectedValues.forEach((val) => {\n if (!originalKeys.has(val)) {\n nextSet.add(val);\n }\n });\n\n // Update internal custom keys state\n setCustomKeys(nextSet);\n }\n\n if (externalOnSelectionChange) {\n (externalOnSelectionChange as any)(selection);\n }\n };\n\n // Custom option click handler that ensures search input receives focus\n const handleOptionClick = (key: Key) => {\n // Focus the search input to enable keyboard navigation\n // Use setTimeout to ensure this happens after React state updates\n setTimeout(() => {\n if (searchInputRef.current) {\n searchInputRef.current.focus();\n }\n }, 0);\n\n // Call the original onOptionClick if provided\n if (onOptionClick) {\n onOptionClick(key);\n }\n };\n\n const searchInput = (\n <SearchWrapperElement mods={mods} data-size={size}>\n {isLoading && (\n <div data-element=\"Prefix\">\n <div data-element=\"InputIcon\">\n {isLoading ? <LoadingIcon /> : null}\n </div>\n </div>\n )}\n <SearchInputElement\n ref={searchInputRef}\n qa={qa || 'FilterListBox'}\n id={id}\n data-prefix={isLoading ? '' : undefined}\n type=\"search\"\n placeholder={searchPlaceholder}\n value={searchValue}\n disabled={isDisabled}\n autoFocus={autoFocus}\n data-autofocus={autoFocus ? '' : undefined}\n styles={searchInputStyles}\n data-size={size}\n data-input-type=\"filterlistbox\"\n role=\"combobox\"\n aria-expanded=\"true\"\n aria-haspopup=\"listbox\"\n aria-activedescendant={\n listStateRef.current?.selectionManager.focusedKey != null\n ? `ListBoxItem-${listStateRef.current?.selectionManager.focusedKey}`\n : undefined\n }\n onChange={(e) => {\n handleSearchChange(e.target.value);\n }}\n {...keyboardProps}\n {...modAttrs(mods)}\n />\n </SearchWrapperElement>\n );\n\n const filterListBoxField = (\n <FilterListBoxWrapperElement\n ref={ref}\n qa=\"FilterListBoxWrapper\"\n {...modAttrs(mods)}\n styles={styles}\n {...focusProps}\n >\n {header ? (\n <StyledHeaderWithoutBorder data-size={size} styles={headerStyles}>\n {header}\n </StyledHeaderWithoutBorder>\n ) : (\n <div role=\"presentation\" />\n )}\n {searchInput}\n <ListBox\n ref={listBoxRef}\n aria-label={innerAriaLabel}\n selectedKey={selectedKey}\n defaultSelectedKey={defaultSelectedKey}\n selectedKeys={selectedKeys}\n defaultSelectedKeys={defaultSelectedKeys}\n selectionMode={selectionMode}\n isDisabled={isDisabled}\n listRef={listRef}\n stateRef={listStateRef}\n listStyles={listStyles}\n shouldFocusWrap={shouldFocusWrap}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n validationState={validationState}\n disallowEmptySelection={props.disallowEmptySelection}\n disabledKeys={props.disabledKeys}\n focusOnHover={focusOnHover}\n shouldUseVirtualFocus={true}\n showSelectAll={showSelectAll}\n selectAllLabel={selectAllLabel}\n footer={footer}\n footerStyles={footerStyles}\n mods={mods}\n size=\"medium\"\n styles={listBoxStyles}\n isCheckable={isCheckable}\n items={items as any}\n allValueProps={allValueProps}\n filter={filterFn}\n emptyLabel={\n searchValue.trim()\n ? emptyLabel !== undefined\n ? emptyLabel\n : 'No results found'\n : 'No items'\n }\n onSelectionChange={handleSelectionChange}\n onEscape={onEscape}\n onOptionClick={handleOptionClick}\n >\n {enhancedChildren as any}\n </ListBox>\n </FilterListBoxWrapperElement>\n );\n\n return wrapWithField<Omit<CubeFilterListBoxProps<T>, 'children'>>(\n filterListBoxField,\n ref,\n props,\n );\n}) as unknown as (<T>(\n props: CubeFilterListBoxProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n) => ReactElement) & { Item: typeof Item; Section: typeof BaseSection };\n\nFilterListBox.Item = ListBox.Item;\n\nFilterListBox.Section = BaseSection;\n\nObject.defineProperty(FilterListBox, 'cubeInputType', {\n value: 'FilterListBox',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
import { Styles } from "../../../tasty/styles/types.js";
|
|
3
|
-
import { BasePropsWithoutChildren, BaseStyleProps, ColorStyleProps, OuterStyleProps } from "../../../tasty/types.js";
|
|
4
|
-
import "../../../tasty/index.js";
|
|
5
2
|
import { FieldBaseProps } from "../../../shared/form.js";
|
|
6
3
|
import "../../../shared/index.js";
|
|
7
4
|
import "../../content/Item/index.js";
|
|
@@ -11,6 +8,7 @@ import "../../actions/index.js";
|
|
|
11
8
|
import { ListBox } from "../ListBox/ListBox.js";
|
|
12
9
|
import "../ListBox/index.js";
|
|
13
10
|
import { CubeFilterListBoxProps } from "../FilterListBox/FilterListBox.js";
|
|
11
|
+
import { BasePropsWithoutChildren, BaseStyleProps, ColorStyleProps, OuterStyleProps, Styles } from "@tenphi/tasty";
|
|
14
12
|
import { ForwardedRef, ReactElement, ReactNode, RefObject } from "react";
|
|
15
13
|
import { ListState, Section } from "react-stately";
|
|
16
14
|
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import { extractStyles } from "../../../tasty/utils/styles.js";
|
|
3
|
-
import { BASE_STYLES, COLOR_STYLES, OUTER_STYLES } from "../../../tasty/styles/list.js";
|
|
4
|
-
import { tasty } from "../../../tasty/tasty.js";
|
|
5
|
-
import { filterBaseProps } from "../../../tasty/utils/filter-base-props.js";
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.119.1 | Cube Dev Team */
|
|
6
2
|
import { useEventBus } from "../../../utils/react/useEventBus.js";
|
|
7
3
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
8
4
|
import { _Text } from "../../content/Text.js";
|
|
@@ -21,6 +17,7 @@ import { Dialog } from "../../overlays/Dialog/Dialog.js";
|
|
|
21
17
|
import { DialogTrigger } from "../../overlays/Dialog/DialogTrigger.js";
|
|
22
18
|
import { ListBox } from "../ListBox/ListBox.js";
|
|
23
19
|
import { FilterListBox } from "../FilterListBox/FilterListBox.js";
|
|
20
|
+
import { BASE_STYLES, COLOR_STYLES, OUTER_STYLES, extractStyles, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
24
21
|
import { forwardRef, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
25
22
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
26
23
|
import { FocusScope, useKeyboard } from "react-aria";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterPicker.js","names":["Text","ItemButton","BaseSection"],"sources":["../../../../src/components/fields/FilterPicker/FilterPicker.tsx"],"sourcesContent":["import { CollectionChildren, FocusableRefValue } from '@react-types/shared';\nimport {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FocusScope, Key, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, ListState, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';\nimport { useProviderProps } from '../../../provider';\nimport {\n BASE_STYLES,\n BasePropsWithoutChildren,\n BaseStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n extractStyles,\n filterBaseProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '../../../tasty';\nimport { generateRandomId } from '../../../utils/random';\nimport { mergeProps } from '../../../utils/react';\nimport { useEventBus } from '../../../utils/react/useEventBus';\nimport { CubeItemButtonProps, ItemAction, ItemButton } from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport { useFieldProps, useFormProps, wrapWithField } from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport {\n CubeFilterListBoxProps,\n FilterListBox,\n} from '../FilterListBox/FilterListBox';\nimport { ListBox } from '../ListBox';\n\nimport type { FieldBaseProps } from '../../../shared';\n\n// Define interface for items that can have keys\ninterface ItemWithKey {\n key?: string | number;\n id?: string | number;\n textValue?: string;\n children?: ItemWithKey[];\n [key: string]: unknown;\n}\n\nexport interface CubeFilterPickerProps<T>\n extends Omit<CubeFilterListBoxProps<T>, 'size' | 'tooltip' | 'shape'>,\n Omit<CubeItemProps, 'children' | 'size'>,\n BasePropsWithoutChildren,\n BaseStyleProps,\n OuterStyleProps,\n ColorStyleProps,\n Omit<FieldBaseProps, 'tooltip'>,\n Pick<\n CubeItemButtonProps,\n | 'type'\n | 'theme'\n | 'icon'\n | 'rightIcon'\n | 'prefix'\n | 'suffix'\n | 'hotkeys'\n | 'shape'\n > {\n /** Placeholder text when no selection is made */\n placeholder?: string;\n /** Size of the picker component */\n size?: 'small' | 'medium' | 'large';\n /** Custom styles for the list box popover */\n listBoxStyles?: Styles;\n /** Custom styles for the popover container */\n popoverStyles?: Styles;\n /** Custom styles for the trigger button */\n triggerStyles?: Styles;\n /** Whether to show checkboxes for multiple selection mode */\n isCheckable?: boolean;\n /** Whether to flip the popover placement */\n shouldFlip?: boolean;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /** Tooltip for the trigger button (separate from field tooltip) */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Description for the trigger button (separate from field description) */\n triggerDescription?: CubeItemProps['description'];\n\n /**\n * Custom renderer for the summary shown inside the trigger when there is a selection.\n *\n * For `selectionMode=\"multiple\"` the function receives:\n * - `selectedLabels`: array of labels of the selected items.\n * - `selectedKeys`: array of keys of the selected items or \"all\".\n *\n * For `selectionMode=\"single\"` the function receives:\n * - `selectedLabel`: label of the selected item.\n * - `selectedKey`: key of the selected item.\n *\n * The function should return a `ReactNode` that will be rendered inside the trigger.\n * Set to `false` to hide the summary text completely.\n */\n renderSummary?:\n | ((args: {\n selectedLabels?: string[];\n selectedKeys?: 'all' | (string | number)[];\n selectedLabel?: string;\n selectedKey?: string | number | null;\n selectionMode?: 'single' | 'multiple';\n }) => ReactNode)\n | false;\n\n /** Ref to access internal ListBox state (from FilterListBox) */\n listStateRef?: RefObject<ListState<T>>;\n /** Additional modifiers for styling the FilterPicker */\n mods?: Record<string, boolean>;\n /** Whether the filter picker is clearable using a clear button in the rightIcon slot */\n isClearable?: boolean;\n /** Callback called when the clear button is pressed */\n onClear?: () => void;\n /**\n * Sort selected items to the top when the popover opens.\n * Only works when using the `items` prop (data-driven mode).\n * Ignored when using JSX children.\n * @default true when items are provided, false when using JSX children\n */\n sortSelectedToTop?: boolean;\n /** Callback called when the popover open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\nconst FilterPickerWrapper = tasty({\n qa: 'FilterPicker',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport const FilterPicker = forwardRef(function FilterPicker<T extends object>(\n props: CubeFilterPickerProps<T>,\n ref: ForwardedRef<HTMLElement>,\n) {\n props = useProviderProps(props);\n props = useFormProps(props);\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n const fieldProps: Record<string, unknown> = {};\n\n if (props.selectionMode === 'multiple') {\n fieldProps.selectedKeys = value || [];\n } else {\n fieldProps.selectedKey = value ?? null;\n }\n\n fieldProps.onSelectionChange = (key: Key | null | 'all' | Key[]) => {\n if (props.selectionMode === 'multiple') {\n // Handle \"all\" selection and array selections\n if (key === 'all') {\n onChange('all');\n } else {\n onChange(key ? (Array.isArray(key) ? key : [key]) : []);\n }\n } else {\n onChange(Array.isArray(key) ? key[0] : key);\n }\n };\n\n return fieldProps;\n },\n });\n\n let {\n qa,\n label,\n extra,\n id,\n icon,\n rightIcon,\n prefix,\n suffix,\n hotkeys,\n triggerTooltip,\n triggerDescription,\n labelStyles,\n isRequired,\n necessityIndicator,\n validationState,\n isDisabled,\n isLoading,\n message,\n mods: externalMods,\n description,\n descriptionPlacement,\n placeholder,\n size = 'medium',\n styles,\n listBoxStyles,\n popoverStyles,\n type = 'outline',\n theme = 'default',\n shape,\n labelSuffix,\n shouldFocusWrap,\n children,\n shouldFlip = true,\n containerPadding = 8,\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n disabledKeys,\n onSelectionChange,\n selectionMode = 'single',\n listStateRef,\n focusOnHover,\n showSelectAll,\n selectAllLabel = 'All',\n items,\n header,\n footer,\n headerStyles,\n footerStyles,\n triggerStyles,\n allowsCustomValue,\n renderSummary,\n isCheckable,\n allValueProps,\n customValueProps,\n newCustomValueProps,\n searchPlaceholder,\n autoFocus,\n filter,\n emptyLabel,\n searchInputStyles,\n searchInputRef,\n listStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n listRef,\n disallowEmptySelection,\n shouldUseVirtualFocus,\n onEscape,\n onOptionClick,\n isClearable,\n searchValue,\n onSearchChange,\n sortSelectedToTop: sortSelectedToTopProp,\n onOpenChange,\n form,\n ...otherProps\n } = props;\n\n // Track if sortSelectedToTop was explicitly provided\n const sortSelectedToTopExplicit = sortSelectedToTopProp !== undefined;\n // Default to true if items are provided, false otherwise\n const sortSelectedToTop = sortSelectedToTopProp ?? (items ? true : false);\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n // Generate a unique ID for this FilterPicker instance\n const filterPickerId = useMemo(() => generateRandomId(), []);\n\n // Get event bus for menu synchronization\n const { emit, on } = useEventBus();\n\n // Warn if isCheckable is false in single selection mode\n useWarn(isCheckable === false && selectionMode === 'single', {\n key: ['filterpicker-checkable-single-mode'],\n args: [\n 'CubeUIKit: isCheckable=false is not recommended in single selection mode as it may confuse users about selection behavior.',\n ],\n });\n\n // Internal selection state (uncontrolled scenario)\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(\n defaultSelectedKey ?? null,\n );\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<\n 'all' | Key[]\n >(defaultSelectedKeys ?? []);\n\n // Track popover open/close and capture children order for session\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n // Cache for sorted items array when using `items` prop\n const cachedItemsOrder = useRef<T[] | null>(null);\n const triggerRef = useRef<FocusableRefValue<HTMLButtonElement>>(null);\n\n // ---------------------------------------------------------------------------\n // Invalidate cached sorting whenever the available options change.\n // This ensures newly provided options are displayed and properly sorted on\n // the next popover open instead of re-using a stale order from a previous\n // session (which caused only the previously selected options to be rendered\n // or the list to appear unsorted).\n // ---------------------------------------------------------------------------\n useEffect(() => {\n cachedItemsOrder.current = null;\n }, [items]);\n\n const isControlledSingle = selectedKey !== undefined;\n const isControlledMultiple = selectedKeys !== undefined;\n\n const effectiveSelectedKey = isControlledSingle\n ? selectedKey\n : internalSelectedKey;\n const effectiveSelectedKeys = isControlledMultiple\n ? selectedKeys\n : internalSelectedKeys;\n\n // Create a local collection for label extraction only (not for rendering)\n // This gives us immediate access to textValue without waiting for FilterListBox\n const localCollectionState = useListState({\n children: children as any,\n items: items as any,\n selectionMode: 'none' as any, // We don't need selection management\n });\n\n // ---------------------------------------------------------------------------\n // Map user-provided keys to collection keys using the local collection.\n // The collection handles key normalization internally, so we use direct\n // string comparison.\n // ---------------------------------------------------------------------------\n\n const findCollectionKey = useCallback(\n (lookup: Key): Key => {\n if (lookup == null) return lookup;\n\n // Direct comparison - collection handles normalization internally\n for (const item of localCollectionState.collection) {\n if (String(item.key) === String(lookup)) {\n return item.key;\n }\n }\n\n // Fallback: return the lookup key as-is\n return lookup;\n },\n [localCollectionState.collection],\n );\n\n const mappedSelectedKey = useMemo(() => {\n if (selectionMode !== 'single') return null;\n return effectiveSelectedKey\n ? findCollectionKey(effectiveSelectedKey)\n : null;\n }, [selectionMode, effectiveSelectedKey, findCollectionKey]);\n\n const mappedSelectedKeys = useMemo(() => {\n if (selectionMode !== 'multiple') return undefined;\n\n if (effectiveSelectedKeys === 'all') return 'all' as const;\n\n if (Array.isArray(effectiveSelectedKeys)) {\n return (effectiveSelectedKeys as Key[]).map((k) => findCollectionKey(k));\n }\n\n return effectiveSelectedKeys;\n }, [selectionMode, effectiveSelectedKeys, findCollectionKey]);\n\n // Given an iterable of keys (array or Set) toggle membership for duplicates\n const processSelectionArray = (iterable: Iterable<Key>): string[] => {\n const resultSet = new Set<string>();\n for (const key of iterable) {\n const nKey = String(key);\n if (resultSet.has(nKey)) {\n resultSet.delete(nKey); // toggle off if clicked twice\n } else {\n resultSet.add(nKey); // select\n }\n }\n return Array.from(resultSet);\n };\n\n // Helper to get selected item labels for display using local collection\n const getSelectedLabels = () => {\n const collection = localCollectionState.collection;\n\n // Helper to recursively collect all item labels from collection (including nested in sections)\n const collectAllLabels = (): string[] => {\n const allLabels: string[] = [];\n\n const traverse = (nodes: Iterable<any>) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n allLabels.push(node.textValue || String(node.key));\n } else if (node.childNodes) {\n traverse(node.childNodes);\n }\n }\n };\n\n traverse(collection);\n return allLabels;\n };\n\n // Handle \"all\" selection - return all available labels\n if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {\n return collectAllLabels();\n }\n\n const selectedSet = new Set(\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map((k) => String(k))\n : effectiveSelectedKey != null\n ? [String(effectiveSelectedKey)]\n : [],\n );\n\n const labels: string[] = [];\n const processedKeys = new Set<string>();\n\n // Use collection.getItem() to directly retrieve items by key (works with sections)\n selectedSet.forEach((key) => {\n const item = collection.getItem(key);\n if (item) {\n labels.push(item.textValue || String(item.key));\n processedKeys.add(String(item.key));\n }\n });\n\n // Handle custom values that aren't in the collection\n const selectedKeysArr =\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : effectiveSelectedKey != null\n ? [String(effectiveSelectedKey)]\n : [];\n\n // Add labels for any selected keys that weren't found in collection (custom values)\n selectedKeysArr.forEach((key) => {\n if (!processedKeys.has(String(key))) {\n // This is a custom value, use the key as the label\n labels.push(key);\n }\n });\n\n return labels;\n };\n\n const selectedLabels = getSelectedLabels();\n const hasSelection = selectedLabels.length > 0;\n\n // Always keep the latest selection in a ref (with normalized keys) so that we can read it synchronously in the popover close effect.\n const latestSelectionRef = useRef<{\n single: string | null;\n multiple: 'all' | string[];\n }>({\n single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n effectiveSelectedKeys === 'all'\n ? 'all'\n : (effectiveSelectedKeys ?? []).map(String),\n });\n\n useEffect(() => {\n latestSelectionRef.current = {\n single:\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n effectiveSelectedKeys === 'all'\n ? 'all'\n : (effectiveSelectedKeys ?? []).map(String),\n };\n }, [effectiveSelectedKey, effectiveSelectedKeys]);\n const selectionsWhenClosed = useRef<{\n single: string | null;\n multiple: 'all' | string[];\n }>({ single: null, multiple: [] });\n\n // Capture the initial selection (from defaultSelectedKey(s)) so that\n // the very first popover open can already use it for sorting.\n useEffect(() => {\n selectionsWhenClosed.current = { ...latestSelectionRef.current };\n }, []); // run only once on mount\n\n // Function to sort children with selected items on top\n const getSortedChildren = useCallback(() => {\n // Warn if sorting is explicitly requested but not supported\n if (sortSelectedToTopExplicit && sortSelectedToTop && !items) {\n console.warn(\n 'FilterPicker: sortSelectedToTop only works with the items prop. ' +\n 'Sorting will be skipped when using JSX children.',\n );\n }\n\n // Return children as-is (no sorting for JSX children)\n return children;\n }, [children, sortSelectedToTop, sortSelectedToTopExplicit, items]);\n\n // Compute sorted items array when using `items` prop\n const getSortedItems = useCallback(() => {\n if (!items) return items;\n\n // Only sort if explicitly enabled\n if (!sortSelectedToTop) {\n return items;\n }\n\n // Reuse the cached order if we have it. We only compute the sorted array\n // once when the pop-over is opened. Cache is cleared on close.\n if (cachedItemsOrder.current) {\n return cachedItemsOrder.current;\n }\n\n const selectedSet = new Set<string>();\n\n const addSelected = (key: Key) => {\n if (key != null) selectedSet.add(String(key));\n };\n\n if (selectionMode === 'multiple') {\n if (selectionsWhenClosed.current.multiple === 'all') {\n // Do not sort when all selected – keep original order\n return items;\n }\n (selectionsWhenClosed.current.multiple as string[]).forEach(addSelected);\n } else {\n if (selectionsWhenClosed.current.single != null) {\n addSelected(selectionsWhenClosed.current.single);\n }\n }\n\n if (selectedSet.size === 0) {\n return items;\n }\n\n // Helpers to extract key from item object\n const getItemKey = (obj: unknown): string | undefined => {\n if (obj == null || typeof obj !== 'object') return undefined;\n\n const item = obj as ItemWithKey;\n if (item.key != null) return String(item.key);\n if (item.id != null) return String(item.id);\n return undefined;\n };\n\n const sortArray = (arr: unknown[]): unknown[] => {\n const selectedArr: unknown[] = [];\n const unselectedArr: unknown[] = [];\n\n arr.forEach((obj) => {\n const item = obj as ItemWithKey;\n if (obj && Array.isArray(item.children)) {\n // Section-like object – keep order, but sort its children\n const sortedChildren = sortArray(item.children);\n unselectedArr.push({ ...item, children: sortedChildren });\n } else {\n const key = getItemKey(obj);\n if (key && selectedSet.has(key)) {\n selectedArr.push(obj);\n } else {\n unselectedArr.push(obj);\n }\n }\n });\n\n return [...selectedArr, ...unselectedArr];\n };\n\n const itemsArray = Array.isArray(items)\n ? items\n : Array.from(items as Iterable<unknown>);\n const sorted = sortArray(itemsArray) as T[];\n\n if (isPopoverOpen || !cachedItemsOrder.current) {\n cachedItemsOrder.current = sorted;\n }\n\n return sorted;\n }, [\n items,\n sortSelectedToTop,\n selectionMode,\n isPopoverOpen,\n selectionsWhenClosed.current.multiple,\n selectionsWhenClosed.current.single,\n ]);\n\n const finalItems = getSortedItems();\n\n // FilterListBox handles custom values internally when allowsCustomValue={true}\n // We provide sorted children (if any) and sorted items\n const finalChildren = getSortedChildren();\n\n const renderTriggerContent = () => {\n // When there is a selection and a custom summary renderer is provided – use it.\n if (typeof renderSummary === 'function') {\n if (selectionMode === 'single') {\n return renderSummary({\n selectedLabel: selectedLabels[0],\n selectedKey: effectiveSelectedKey ?? null,\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'single',\n });\n }\n\n return renderSummary({\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'multiple',\n });\n } else if (renderSummary === false) {\n return null;\n }\n\n let content: ReactNode = '';\n\n if (!hasSelection) {\n return <Text.Placeholder>{placeholder}</Text.Placeholder>;\n } else if (selectionMode === 'single') {\n content = selectedLabels[0];\n } else if (effectiveSelectedKeys === 'all') {\n content = selectAllLabel;\n } else {\n content = selectedLabels.join(', ');\n }\n\n if (!content) {\n return null;\n }\n\n return content;\n };\n\n const [shouldUpdatePosition, setShouldUpdatePosition] = useState(true);\n\n // Capture trigger width for overlay min-width\n const triggerWidth = triggerRef?.current?.UNSAFE_getDOMNode()?.offsetWidth;\n\n // The trigger is rendered as a function so we can access the dialog state\n const renderTrigger = (state) => {\n // Listen for other menus opening and close this one if needed\n useEffect(() => {\n const unsubscribe = on('popover:open', (data: { menuId: string }) => {\n // If another menu is opening and this FilterPicker is open, close this one\n if (data.menuId !== filterPickerId && state.isOpen) {\n state.close();\n }\n });\n\n return unsubscribe;\n }, [on, filterPickerId, state]);\n\n // Emit event when this FilterPicker opens\n useEffect(() => {\n if (state.isOpen) {\n emit('popover:open', { menuId: filterPickerId });\n }\n }, [state.isOpen, emit, filterPickerId]);\n\n // Track popover open/close state to control sorting\n useEffect(() => {\n if (state.isOpen !== isPopoverOpen) {\n setIsPopoverOpen(state.isOpen);\n if (!state.isOpen) {\n // Popover just closed – record the latest selection for the next opening\n // and clear the cached order so the next session can compute afresh.\n selectionsWhenClosed.current = { ...latestSelectionRef.current };\n cachedItemsOrder.current = null;\n }\n onOpenChange?.(state.isOpen);\n }\n }, [state.isOpen, isPopoverOpen, onOpenChange]);\n\n // Add keyboard support for arrow keys to open the popover\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !state.isOpen) {\n e.preventDefault();\n state.open();\n }\n },\n });\n\n useEffect(() => {\n // Allow initial positioning & flipping when opening, then lock placement after transition\n // Popover transition is ~120ms, give it a bit more time to finalize placement\n if (state.isOpen) {\n setShouldUpdatePosition(true);\n const id = window.setTimeout(() => setShouldUpdatePosition(false), 160);\n return () => window.clearTimeout(id);\n } else {\n setShouldUpdatePosition(true);\n }\n }, [state.isOpen]);\n\n // Clear button logic\n let showClearButton =\n isClearable && hasSelection && !isDisabled && !props.isReadOnly;\n\n // Clear function\n let clearValue = useEvent(() => {\n if (selectionMode === 'multiple') {\n if (!isControlledMultiple) {\n setInternalSelectedKeys([]);\n }\n onSelectionChange?.([]);\n } else {\n if (!isControlledSingle) {\n setInternalSelectedKey(null);\n }\n onSelectionChange?.(null);\n }\n\n if (state.isOpen) {\n state.close();\n }\n\n triggerRef?.current?.focus?.();\n\n props.onClear?.();\n\n return false;\n });\n\n return (\n <ItemButton\n ref={triggerRef as any}\n data-popover-trigger\n qa={qa || 'FilterPicker'}\n id={id}\n type={type}\n theme={validationState === 'invalid' ? 'danger' : theme}\n size={size}\n shape={shape}\n isDisabled={isDisabled || isLoading}\n data-input-type=\"filterpicker\"\n mods={{\n placeholder: !hasSelection,\n ...externalMods,\n }}\n icon={icon}\n rightIcon={\n isLoading ? (\n <LoadingIcon />\n ) : rightIcon !== undefined ? (\n rightIcon\n ) : showClearButton ? (\n <ItemAction\n icon={<CloseIcon />}\n size={size}\n theme={validationState === 'invalid' ? 'danger' : undefined}\n qa=\"FilterPickerClearButton\"\n mods={{ pressed: false }}\n onPress={clearValue}\n />\n ) : (\n <DirectionIcon to={state.isOpen ? 'top' : 'bottom'} />\n )\n }\n prefix={prefix}\n suffix={suffix}\n hotkeys={hotkeys}\n tooltip={triggerTooltip}\n description={triggerDescription}\n descriptionPlacement={descriptionPlacement}\n styles={triggerStyles}\n {...keyboardProps}\n aria-label={`${props['aria-label'] ?? props.label ?? ''}`}\n >\n {renderTriggerContent()}\n </ItemButton>\n );\n };\n\n const filterPickerField = (\n <FilterPickerWrapper\n qa=\"FilterPickerWrapper\"\n styles={styles}\n {...filterBaseProps(otherProps, { eventProps: true })}\n >\n <DialogTrigger\n type=\"popover\"\n placement=\"bottom start\"\n containerPadding={containerPadding}\n shouldUpdatePosition={shouldUpdatePosition}\n shouldFlip={shouldFlip && shouldUpdatePosition}\n isDismissable={true}\n shouldCloseOnInteractOutside={(el) => {\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n // If no menu trigger was clicked, allow closing\n if (!menuTriggerEl) return true;\n // If the same trigger that opened this popover was clicked, allow closing (toggle)\n if (menuTriggerEl === (triggerRef as any)?.current) return true;\n // Otherwise, don't close here. Let the event bus handle closing when the other opens.\n return false;\n }}\n >\n {renderTrigger}\n {(close) => (\n <Dialog\n qa=\"FilterPickerOverlay\"\n display=\"grid\"\n styles={{\n gridRows: '1sf',\n width: 'max($overlay-min-width, 30x) max-content 50vw',\n '$overlay-min-width': '30x',\n ...popoverStyles,\n }}\n style={\n triggerWidth\n ? ({ '--overlay-min-width': `${triggerWidth}px` } as any)\n : undefined\n }\n >\n <FocusScope restoreFocus>\n <FilterListBox\n autoFocus\n items={items ? (finalItems as typeof props.items) : undefined}\n // Pass an aria-label so the internal ListBox is properly labeled and React Aria doesn't warn.\n aria-label={`${props['aria-label'] ?? props.label ?? ''} Picker`}\n _internalCollection={localCollectionState.collection}\n selectedKey={\n selectionMode === 'single' ? mappedSelectedKey : undefined\n }\n selectedKeys={\n selectionMode === 'multiple' ? mappedSelectedKeys : undefined\n }\n searchPlaceholder={searchPlaceholder}\n filter={filter}\n searchValue={searchValue}\n listStyles={listStyles}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listRef={listRef}\n disallowEmptySelection={disallowEmptySelection}\n emptyLabel={emptyLabel}\n searchInputStyles={searchInputStyles}\n searchInputRef={searchInputRef}\n disabledKeys={disabledKeys}\n focusOnHover={focusOnHover}\n shouldFocusWrap={shouldFocusWrap}\n allowsCustomValue={allowsCustomValue}\n selectionMode={selectionMode}\n validationState={validationState}\n isDisabled={isDisabled}\n isLoading={isLoading}\n stateRef={listStateRef}\n isCheckable={isCheckable}\n mods={{\n popover: true,\n }}\n size={size === 'small' ? 'medium' : size}\n showSelectAll={showSelectAll}\n selectAllLabel={selectAllLabel}\n header={header}\n footer={footer}\n headerStyles={headerStyles}\n footerStyles={footerStyles}\n allValueProps={allValueProps}\n customValueProps={customValueProps}\n newCustomValueProps={newCustomValueProps}\n onSearchChange={onSearchChange}\n onEscape={() => close()}\n onOptionClick={(key) => {\n // For FilterPicker, clicking the content area should close the popover\n // in multiple selection mode (single mode already closes via onSelectionChange)\n if (\n (selectionMode === 'multiple' && isCheckable) ||\n key === '__ALL__'\n ) {\n close();\n }\n }}\n onSelectionChange={(selection) => {\n // No need to change any flags - children order is cached\n\n // Update internal state if uncontrolled\n if (selectionMode === 'single') {\n if (!isControlledSingle) {\n setInternalSelectedKey(selection as Key | null);\n }\n } else {\n if (!isControlledMultiple) {\n let normalized: 'all' | Key[] = selection as\n | 'all'\n | Key[];\n\n if (selection === 'all') {\n normalized = 'all';\n } else if (Array.isArray(selection)) {\n normalized = processSelectionArray(selection);\n } else if (\n selection &&\n typeof selection === 'object' &&\n (selection as any) instanceof Set\n ) {\n normalized = processSelectionArray(\n selection as Set<Key>,\n );\n }\n\n setInternalSelectedKeys(normalized);\n }\n }\n\n // Update latest selection ref synchronously\n if (selectionMode === 'single') {\n latestSelectionRef.current.single =\n selection != null ? String(selection) : null;\n } else {\n if (selection === 'all') {\n latestSelectionRef.current.multiple = 'all';\n } else if (Array.isArray(selection)) {\n latestSelectionRef.current.multiple = Array.from(\n new Set(processSelectionArray(selection)),\n );\n } else if (\n selection &&\n typeof selection === 'object' &&\n (selection as any) instanceof Set\n ) {\n latestSelectionRef.current.multiple = Array.from(\n new Set(processSelectionArray(selection as Set<Key>)),\n );\n } else {\n latestSelectionRef.current.multiple =\n selection === 'all'\n ? 'all'\n : Array.isArray(selection)\n ? selection.map(String)\n : [];\n }\n }\n\n onSelectionChange?.(selection);\n\n if (selectionMode === 'single') {\n close();\n }\n }}\n >\n {\n (children\n ? (finalChildren as CollectionChildren<T>)\n : undefined) as CollectionChildren<T>\n }\n </FilterListBox>\n </FocusScope>\n </Dialog>\n )}\n </DialogTrigger>\n </FilterPickerWrapper>\n );\n\n return wrapWithField<Omit<CubeFilterPickerProps<T>, 'children' | 'tooltip'>>(\n filterPickerField,\n ref as any,\n props,\n );\n}) as unknown as (<T>(\n props: CubeFilterPickerProps<T> & { ref?: ForwardedRef<HTMLElement> },\n) => ReactElement) & { Item: typeof ListBox.Item; Section: typeof BaseSection };\n\nFilterPicker.Item = ListBox.Item;\n\nFilterPicker.Section = BaseSection;\n\nObject.defineProperty(FilterPicker, 'cubeInputType', {\n value: 'FilterPicker',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FilterPicker.js","names":["Text","ItemButton","BaseSection"],"sources":["../../../../src/components/fields/FilterPicker/FilterPicker.tsx"],"sourcesContent":["import { CollectionChildren, FocusableRefValue } from '@react-types/shared';\nimport {\n BASE_STYLES,\n BasePropsWithoutChildren,\n BaseStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n extractStyles,\n filterBaseProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FocusScope, Key, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, ListState, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';\nimport { useProviderProps } from '../../../provider';\nimport { generateRandomId } from '../../../utils/random';\nimport { mergeProps } from '../../../utils/react';\nimport { useEventBus } from '../../../utils/react/useEventBus';\nimport { CubeItemButtonProps, ItemAction, ItemButton } from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport { useFieldProps, useFormProps, wrapWithField } from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport {\n CubeFilterListBoxProps,\n FilterListBox,\n} from '../FilterListBox/FilterListBox';\nimport { ListBox } from '../ListBox';\n\nimport type { FieldBaseProps } from '../../../shared';\n\n// Define interface for items that can have keys\ninterface ItemWithKey {\n key?: string | number;\n id?: string | number;\n textValue?: string;\n children?: ItemWithKey[];\n [key: string]: unknown;\n}\n\nexport interface CubeFilterPickerProps<T>\n extends Omit<CubeFilterListBoxProps<T>, 'size' | 'tooltip' | 'shape'>,\n Omit<CubeItemProps, 'children' | 'size'>,\n BasePropsWithoutChildren,\n BaseStyleProps,\n OuterStyleProps,\n ColorStyleProps,\n Omit<FieldBaseProps, 'tooltip'>,\n Pick<\n CubeItemButtonProps,\n | 'type'\n | 'theme'\n | 'icon'\n | 'rightIcon'\n | 'prefix'\n | 'suffix'\n | 'hotkeys'\n | 'shape'\n > {\n /** Placeholder text when no selection is made */\n placeholder?: string;\n /** Size of the picker component */\n size?: 'small' | 'medium' | 'large';\n /** Custom styles for the list box popover */\n listBoxStyles?: Styles;\n /** Custom styles for the popover container */\n popoverStyles?: Styles;\n /** Custom styles for the trigger button */\n triggerStyles?: Styles;\n /** Whether to show checkboxes for multiple selection mode */\n isCheckable?: boolean;\n /** Whether to flip the popover placement */\n shouldFlip?: boolean;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /** Tooltip for the trigger button (separate from field tooltip) */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Description for the trigger button (separate from field description) */\n triggerDescription?: CubeItemProps['description'];\n\n /**\n * Custom renderer for the summary shown inside the trigger when there is a selection.\n *\n * For `selectionMode=\"multiple\"` the function receives:\n * - `selectedLabels`: array of labels of the selected items.\n * - `selectedKeys`: array of keys of the selected items or \"all\".\n *\n * For `selectionMode=\"single\"` the function receives:\n * - `selectedLabel`: label of the selected item.\n * - `selectedKey`: key of the selected item.\n *\n * The function should return a `ReactNode` that will be rendered inside the trigger.\n * Set to `false` to hide the summary text completely.\n */\n renderSummary?:\n | ((args: {\n selectedLabels?: string[];\n selectedKeys?: 'all' | (string | number)[];\n selectedLabel?: string;\n selectedKey?: string | number | null;\n selectionMode?: 'single' | 'multiple';\n }) => ReactNode)\n | false;\n\n /** Ref to access internal ListBox state (from FilterListBox) */\n listStateRef?: RefObject<ListState<T>>;\n /** Additional modifiers for styling the FilterPicker */\n mods?: Record<string, boolean>;\n /** Whether the filter picker is clearable using a clear button in the rightIcon slot */\n isClearable?: boolean;\n /** Callback called when the clear button is pressed */\n onClear?: () => void;\n /**\n * Sort selected items to the top when the popover opens.\n * Only works when using the `items` prop (data-driven mode).\n * Ignored when using JSX children.\n * @default true when items are provided, false when using JSX children\n */\n sortSelectedToTop?: boolean;\n /** Callback called when the popover open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\nconst FilterPickerWrapper = tasty({\n qa: 'FilterPicker',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport const FilterPicker = forwardRef(function FilterPicker<T extends object>(\n props: CubeFilterPickerProps<T>,\n ref: ForwardedRef<HTMLElement>,\n) {\n props = useProviderProps(props);\n props = useFormProps(props);\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n const fieldProps: Record<string, unknown> = {};\n\n if (props.selectionMode === 'multiple') {\n fieldProps.selectedKeys = value || [];\n } else {\n fieldProps.selectedKey = value ?? null;\n }\n\n fieldProps.onSelectionChange = (key: Key | null | 'all' | Key[]) => {\n if (props.selectionMode === 'multiple') {\n // Handle \"all\" selection and array selections\n if (key === 'all') {\n onChange('all');\n } else {\n onChange(key ? (Array.isArray(key) ? key : [key]) : []);\n }\n } else {\n onChange(Array.isArray(key) ? key[0] : key);\n }\n };\n\n return fieldProps;\n },\n });\n\n let {\n qa,\n label,\n extra,\n id,\n icon,\n rightIcon,\n prefix,\n suffix,\n hotkeys,\n triggerTooltip,\n triggerDescription,\n labelStyles,\n isRequired,\n necessityIndicator,\n validationState,\n isDisabled,\n isLoading,\n message,\n mods: externalMods,\n description,\n descriptionPlacement,\n placeholder,\n size = 'medium',\n styles,\n listBoxStyles,\n popoverStyles,\n type = 'outline',\n theme = 'default',\n shape,\n labelSuffix,\n shouldFocusWrap,\n children,\n shouldFlip = true,\n containerPadding = 8,\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n disabledKeys,\n onSelectionChange,\n selectionMode = 'single',\n listStateRef,\n focusOnHover,\n showSelectAll,\n selectAllLabel = 'All',\n items,\n header,\n footer,\n headerStyles,\n footerStyles,\n triggerStyles,\n allowsCustomValue,\n renderSummary,\n isCheckable,\n allValueProps,\n customValueProps,\n newCustomValueProps,\n searchPlaceholder,\n autoFocus,\n filter,\n emptyLabel,\n searchInputStyles,\n searchInputRef,\n listStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n listRef,\n disallowEmptySelection,\n shouldUseVirtualFocus,\n onEscape,\n onOptionClick,\n isClearable,\n searchValue,\n onSearchChange,\n sortSelectedToTop: sortSelectedToTopProp,\n onOpenChange,\n form,\n ...otherProps\n } = props;\n\n // Track if sortSelectedToTop was explicitly provided\n const sortSelectedToTopExplicit = sortSelectedToTopProp !== undefined;\n // Default to true if items are provided, false otherwise\n const sortSelectedToTop = sortSelectedToTopProp ?? (items ? true : false);\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n // Generate a unique ID for this FilterPicker instance\n const filterPickerId = useMemo(() => generateRandomId(), []);\n\n // Get event bus for menu synchronization\n const { emit, on } = useEventBus();\n\n // Warn if isCheckable is false in single selection mode\n useWarn(isCheckable === false && selectionMode === 'single', {\n key: ['filterpicker-checkable-single-mode'],\n args: [\n 'CubeUIKit: isCheckable=false is not recommended in single selection mode as it may confuse users about selection behavior.',\n ],\n });\n\n // Internal selection state (uncontrolled scenario)\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(\n defaultSelectedKey ?? null,\n );\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<\n 'all' | Key[]\n >(defaultSelectedKeys ?? []);\n\n // Track popover open/close and capture children order for session\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n // Cache for sorted items array when using `items` prop\n const cachedItemsOrder = useRef<T[] | null>(null);\n const triggerRef = useRef<FocusableRefValue<HTMLButtonElement>>(null);\n\n // ---------------------------------------------------------------------------\n // Invalidate cached sorting whenever the available options change.\n // This ensures newly provided options are displayed and properly sorted on\n // the next popover open instead of re-using a stale order from a previous\n // session (which caused only the previously selected options to be rendered\n // or the list to appear unsorted).\n // ---------------------------------------------------------------------------\n useEffect(() => {\n cachedItemsOrder.current = null;\n }, [items]);\n\n const isControlledSingle = selectedKey !== undefined;\n const isControlledMultiple = selectedKeys !== undefined;\n\n const effectiveSelectedKey = isControlledSingle\n ? selectedKey\n : internalSelectedKey;\n const effectiveSelectedKeys = isControlledMultiple\n ? selectedKeys\n : internalSelectedKeys;\n\n // Create a local collection for label extraction only (not for rendering)\n // This gives us immediate access to textValue without waiting for FilterListBox\n const localCollectionState = useListState({\n children: children as any,\n items: items as any,\n selectionMode: 'none' as any, // We don't need selection management\n });\n\n // ---------------------------------------------------------------------------\n // Map user-provided keys to collection keys using the local collection.\n // The collection handles key normalization internally, so we use direct\n // string comparison.\n // ---------------------------------------------------------------------------\n\n const findCollectionKey = useCallback(\n (lookup: Key): Key => {\n if (lookup == null) return lookup;\n\n // Direct comparison - collection handles normalization internally\n for (const item of localCollectionState.collection) {\n if (String(item.key) === String(lookup)) {\n return item.key;\n }\n }\n\n // Fallback: return the lookup key as-is\n return lookup;\n },\n [localCollectionState.collection],\n );\n\n const mappedSelectedKey = useMemo(() => {\n if (selectionMode !== 'single') return null;\n return effectiveSelectedKey\n ? findCollectionKey(effectiveSelectedKey)\n : null;\n }, [selectionMode, effectiveSelectedKey, findCollectionKey]);\n\n const mappedSelectedKeys = useMemo(() => {\n if (selectionMode !== 'multiple') return undefined;\n\n if (effectiveSelectedKeys === 'all') return 'all' as const;\n\n if (Array.isArray(effectiveSelectedKeys)) {\n return (effectiveSelectedKeys as Key[]).map((k) => findCollectionKey(k));\n }\n\n return effectiveSelectedKeys;\n }, [selectionMode, effectiveSelectedKeys, findCollectionKey]);\n\n // Given an iterable of keys (array or Set) toggle membership for duplicates\n const processSelectionArray = (iterable: Iterable<Key>): string[] => {\n const resultSet = new Set<string>();\n for (const key of iterable) {\n const nKey = String(key);\n if (resultSet.has(nKey)) {\n resultSet.delete(nKey); // toggle off if clicked twice\n } else {\n resultSet.add(nKey); // select\n }\n }\n return Array.from(resultSet);\n };\n\n // Helper to get selected item labels for display using local collection\n const getSelectedLabels = () => {\n const collection = localCollectionState.collection;\n\n // Helper to recursively collect all item labels from collection (including nested in sections)\n const collectAllLabels = (): string[] => {\n const allLabels: string[] = [];\n\n const traverse = (nodes: Iterable<any>) => {\n for (const node of nodes) {\n if (node.type === 'item') {\n allLabels.push(node.textValue || String(node.key));\n } else if (node.childNodes) {\n traverse(node.childNodes);\n }\n }\n };\n\n traverse(collection);\n return allLabels;\n };\n\n // Handle \"all\" selection - return all available labels\n if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {\n return collectAllLabels();\n }\n\n const selectedSet = new Set(\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map((k) => String(k))\n : effectiveSelectedKey != null\n ? [String(effectiveSelectedKey)]\n : [],\n );\n\n const labels: string[] = [];\n const processedKeys = new Set<string>();\n\n // Use collection.getItem() to directly retrieve items by key (works with sections)\n selectedSet.forEach((key) => {\n const item = collection.getItem(key);\n if (item) {\n labels.push(item.textValue || String(item.key));\n processedKeys.add(String(item.key));\n }\n });\n\n // Handle custom values that aren't in the collection\n const selectedKeysArr =\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : effectiveSelectedKey != null\n ? [String(effectiveSelectedKey)]\n : [];\n\n // Add labels for any selected keys that weren't found in collection (custom values)\n selectedKeysArr.forEach((key) => {\n if (!processedKeys.has(String(key))) {\n // This is a custom value, use the key as the label\n labels.push(key);\n }\n });\n\n return labels;\n };\n\n const selectedLabels = getSelectedLabels();\n const hasSelection = selectedLabels.length > 0;\n\n // Always keep the latest selection in a ref (with normalized keys) so that we can read it synchronously in the popover close effect.\n const latestSelectionRef = useRef<{\n single: string | null;\n multiple: 'all' | string[];\n }>({\n single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n effectiveSelectedKeys === 'all'\n ? 'all'\n : (effectiveSelectedKeys ?? []).map(String),\n });\n\n useEffect(() => {\n latestSelectionRef.current = {\n single:\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n effectiveSelectedKeys === 'all'\n ? 'all'\n : (effectiveSelectedKeys ?? []).map(String),\n };\n }, [effectiveSelectedKey, effectiveSelectedKeys]);\n const selectionsWhenClosed = useRef<{\n single: string | null;\n multiple: 'all' | string[];\n }>({ single: null, multiple: [] });\n\n // Capture the initial selection (from defaultSelectedKey(s)) so that\n // the very first popover open can already use it for sorting.\n useEffect(() => {\n selectionsWhenClosed.current = { ...latestSelectionRef.current };\n }, []); // run only once on mount\n\n // Function to sort children with selected items on top\n const getSortedChildren = useCallback(() => {\n // Warn if sorting is explicitly requested but not supported\n if (sortSelectedToTopExplicit && sortSelectedToTop && !items) {\n console.warn(\n 'FilterPicker: sortSelectedToTop only works with the items prop. ' +\n 'Sorting will be skipped when using JSX children.',\n );\n }\n\n // Return children as-is (no sorting for JSX children)\n return children;\n }, [children, sortSelectedToTop, sortSelectedToTopExplicit, items]);\n\n // Compute sorted items array when using `items` prop\n const getSortedItems = useCallback(() => {\n if (!items) return items;\n\n // Only sort if explicitly enabled\n if (!sortSelectedToTop) {\n return items;\n }\n\n // Reuse the cached order if we have it. We only compute the sorted array\n // once when the pop-over is opened. Cache is cleared on close.\n if (cachedItemsOrder.current) {\n return cachedItemsOrder.current;\n }\n\n const selectedSet = new Set<string>();\n\n const addSelected = (key: Key) => {\n if (key != null) selectedSet.add(String(key));\n };\n\n if (selectionMode === 'multiple') {\n if (selectionsWhenClosed.current.multiple === 'all') {\n // Do not sort when all selected – keep original order\n return items;\n }\n (selectionsWhenClosed.current.multiple as string[]).forEach(addSelected);\n } else {\n if (selectionsWhenClosed.current.single != null) {\n addSelected(selectionsWhenClosed.current.single);\n }\n }\n\n if (selectedSet.size === 0) {\n return items;\n }\n\n // Helpers to extract key from item object\n const getItemKey = (obj: unknown): string | undefined => {\n if (obj == null || typeof obj !== 'object') return undefined;\n\n const item = obj as ItemWithKey;\n if (item.key != null) return String(item.key);\n if (item.id != null) return String(item.id);\n return undefined;\n };\n\n const sortArray = (arr: unknown[]): unknown[] => {\n const selectedArr: unknown[] = [];\n const unselectedArr: unknown[] = [];\n\n arr.forEach((obj) => {\n const item = obj as ItemWithKey;\n if (obj && Array.isArray(item.children)) {\n // Section-like object – keep order, but sort its children\n const sortedChildren = sortArray(item.children);\n unselectedArr.push({ ...item, children: sortedChildren });\n } else {\n const key = getItemKey(obj);\n if (key && selectedSet.has(key)) {\n selectedArr.push(obj);\n } else {\n unselectedArr.push(obj);\n }\n }\n });\n\n return [...selectedArr, ...unselectedArr];\n };\n\n const itemsArray = Array.isArray(items)\n ? items\n : Array.from(items as Iterable<unknown>);\n const sorted = sortArray(itemsArray) as T[];\n\n if (isPopoverOpen || !cachedItemsOrder.current) {\n cachedItemsOrder.current = sorted;\n }\n\n return sorted;\n }, [\n items,\n sortSelectedToTop,\n selectionMode,\n isPopoverOpen,\n selectionsWhenClosed.current.multiple,\n selectionsWhenClosed.current.single,\n ]);\n\n const finalItems = getSortedItems();\n\n // FilterListBox handles custom values internally when allowsCustomValue={true}\n // We provide sorted children (if any) and sorted items\n const finalChildren = getSortedChildren();\n\n const renderTriggerContent = () => {\n // When there is a selection and a custom summary renderer is provided – use it.\n if (typeof renderSummary === 'function') {\n if (selectionMode === 'single') {\n return renderSummary({\n selectedLabel: selectedLabels[0],\n selectedKey: effectiveSelectedKey ?? null,\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'single',\n });\n }\n\n return renderSummary({\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'multiple',\n });\n } else if (renderSummary === false) {\n return null;\n }\n\n let content: ReactNode = '';\n\n if (!hasSelection) {\n return <Text.Placeholder>{placeholder}</Text.Placeholder>;\n } else if (selectionMode === 'single') {\n content = selectedLabels[0];\n } else if (effectiveSelectedKeys === 'all') {\n content = selectAllLabel;\n } else {\n content = selectedLabels.join(', ');\n }\n\n if (!content) {\n return null;\n }\n\n return content;\n };\n\n const [shouldUpdatePosition, setShouldUpdatePosition] = useState(true);\n\n // Capture trigger width for overlay min-width\n const triggerWidth = triggerRef?.current?.UNSAFE_getDOMNode()?.offsetWidth;\n\n // The trigger is rendered as a function so we can access the dialog state\n const renderTrigger = (state) => {\n // Listen for other menus opening and close this one if needed\n useEffect(() => {\n const unsubscribe = on('popover:open', (data: { menuId: string }) => {\n // If another menu is opening and this FilterPicker is open, close this one\n if (data.menuId !== filterPickerId && state.isOpen) {\n state.close();\n }\n });\n\n return unsubscribe;\n }, [on, filterPickerId, state]);\n\n // Emit event when this FilterPicker opens\n useEffect(() => {\n if (state.isOpen) {\n emit('popover:open', { menuId: filterPickerId });\n }\n }, [state.isOpen, emit, filterPickerId]);\n\n // Track popover open/close state to control sorting\n useEffect(() => {\n if (state.isOpen !== isPopoverOpen) {\n setIsPopoverOpen(state.isOpen);\n if (!state.isOpen) {\n // Popover just closed – record the latest selection for the next opening\n // and clear the cached order so the next session can compute afresh.\n selectionsWhenClosed.current = { ...latestSelectionRef.current };\n cachedItemsOrder.current = null;\n }\n onOpenChange?.(state.isOpen);\n }\n }, [state.isOpen, isPopoverOpen, onOpenChange]);\n\n // Add keyboard support for arrow keys to open the popover\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !state.isOpen) {\n e.preventDefault();\n state.open();\n }\n },\n });\n\n useEffect(() => {\n // Allow initial positioning & flipping when opening, then lock placement after transition\n // Popover transition is ~120ms, give it a bit more time to finalize placement\n if (state.isOpen) {\n setShouldUpdatePosition(true);\n const id = window.setTimeout(() => setShouldUpdatePosition(false), 160);\n return () => window.clearTimeout(id);\n } else {\n setShouldUpdatePosition(true);\n }\n }, [state.isOpen]);\n\n // Clear button logic\n let showClearButton =\n isClearable && hasSelection && !isDisabled && !props.isReadOnly;\n\n // Clear function\n let clearValue = useEvent(() => {\n if (selectionMode === 'multiple') {\n if (!isControlledMultiple) {\n setInternalSelectedKeys([]);\n }\n onSelectionChange?.([]);\n } else {\n if (!isControlledSingle) {\n setInternalSelectedKey(null);\n }\n onSelectionChange?.(null);\n }\n\n if (state.isOpen) {\n state.close();\n }\n\n triggerRef?.current?.focus?.();\n\n props.onClear?.();\n\n return false;\n });\n\n return (\n <ItemButton\n ref={triggerRef as any}\n data-popover-trigger\n qa={qa || 'FilterPicker'}\n id={id}\n type={type}\n theme={validationState === 'invalid' ? 'danger' : theme}\n size={size}\n shape={shape}\n isDisabled={isDisabled || isLoading}\n data-input-type=\"filterpicker\"\n mods={{\n placeholder: !hasSelection,\n ...externalMods,\n }}\n icon={icon}\n rightIcon={\n isLoading ? (\n <LoadingIcon />\n ) : rightIcon !== undefined ? (\n rightIcon\n ) : showClearButton ? (\n <ItemAction\n icon={<CloseIcon />}\n size={size}\n theme={validationState === 'invalid' ? 'danger' : undefined}\n qa=\"FilterPickerClearButton\"\n mods={{ pressed: false }}\n onPress={clearValue}\n />\n ) : (\n <DirectionIcon to={state.isOpen ? 'top' : 'bottom'} />\n )\n }\n prefix={prefix}\n suffix={suffix}\n hotkeys={hotkeys}\n tooltip={triggerTooltip}\n description={triggerDescription}\n descriptionPlacement={descriptionPlacement}\n styles={triggerStyles}\n {...keyboardProps}\n aria-label={`${props['aria-label'] ?? props.label ?? ''}`}\n >\n {renderTriggerContent()}\n </ItemButton>\n );\n };\n\n const filterPickerField = (\n <FilterPickerWrapper\n qa=\"FilterPickerWrapper\"\n styles={styles}\n {...filterBaseProps(otherProps, { eventProps: true })}\n >\n <DialogTrigger\n type=\"popover\"\n placement=\"bottom start\"\n containerPadding={containerPadding}\n shouldUpdatePosition={shouldUpdatePosition}\n shouldFlip={shouldFlip && shouldUpdatePosition}\n isDismissable={true}\n shouldCloseOnInteractOutside={(el) => {\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n // If no menu trigger was clicked, allow closing\n if (!menuTriggerEl) return true;\n // If the same trigger that opened this popover was clicked, allow closing (toggle)\n if (menuTriggerEl === (triggerRef as any)?.current) return true;\n // Otherwise, don't close here. Let the event bus handle closing when the other opens.\n return false;\n }}\n >\n {renderTrigger}\n {(close) => (\n <Dialog\n qa=\"FilterPickerOverlay\"\n display=\"grid\"\n styles={{\n gridRows: '1sf',\n width: 'max($overlay-min-width, 30x) max-content 50vw',\n '$overlay-min-width': '30x',\n ...popoverStyles,\n }}\n style={\n triggerWidth\n ? ({ '--overlay-min-width': `${triggerWidth}px` } as any)\n : undefined\n }\n >\n <FocusScope restoreFocus>\n <FilterListBox\n autoFocus\n items={items ? (finalItems as typeof props.items) : undefined}\n // Pass an aria-label so the internal ListBox is properly labeled and React Aria doesn't warn.\n aria-label={`${props['aria-label'] ?? props.label ?? ''} Picker`}\n _internalCollection={localCollectionState.collection}\n selectedKey={\n selectionMode === 'single' ? mappedSelectedKey : undefined\n }\n selectedKeys={\n selectionMode === 'multiple' ? mappedSelectedKeys : undefined\n }\n searchPlaceholder={searchPlaceholder}\n filter={filter}\n searchValue={searchValue}\n listStyles={listStyles}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listRef={listRef}\n disallowEmptySelection={disallowEmptySelection}\n emptyLabel={emptyLabel}\n searchInputStyles={searchInputStyles}\n searchInputRef={searchInputRef}\n disabledKeys={disabledKeys}\n focusOnHover={focusOnHover}\n shouldFocusWrap={shouldFocusWrap}\n allowsCustomValue={allowsCustomValue}\n selectionMode={selectionMode}\n validationState={validationState}\n isDisabled={isDisabled}\n isLoading={isLoading}\n stateRef={listStateRef}\n isCheckable={isCheckable}\n mods={{\n popover: true,\n }}\n size={size === 'small' ? 'medium' : size}\n showSelectAll={showSelectAll}\n selectAllLabel={selectAllLabel}\n header={header}\n footer={footer}\n headerStyles={headerStyles}\n footerStyles={footerStyles}\n allValueProps={allValueProps}\n customValueProps={customValueProps}\n newCustomValueProps={newCustomValueProps}\n onSearchChange={onSearchChange}\n onEscape={() => close()}\n onOptionClick={(key) => {\n // For FilterPicker, clicking the content area should close the popover\n // in multiple selection mode (single mode already closes via onSelectionChange)\n if (\n (selectionMode === 'multiple' && isCheckable) ||\n key === '__ALL__'\n ) {\n close();\n }\n }}\n onSelectionChange={(selection) => {\n // No need to change any flags - children order is cached\n\n // Update internal state if uncontrolled\n if (selectionMode === 'single') {\n if (!isControlledSingle) {\n setInternalSelectedKey(selection as Key | null);\n }\n } else {\n if (!isControlledMultiple) {\n let normalized: 'all' | Key[] = selection as\n | 'all'\n | Key[];\n\n if (selection === 'all') {\n normalized = 'all';\n } else if (Array.isArray(selection)) {\n normalized = processSelectionArray(selection);\n } else if (\n selection &&\n typeof selection === 'object' &&\n (selection as any) instanceof Set\n ) {\n normalized = processSelectionArray(\n selection as Set<Key>,\n );\n }\n\n setInternalSelectedKeys(normalized);\n }\n }\n\n // Update latest selection ref synchronously\n if (selectionMode === 'single') {\n latestSelectionRef.current.single =\n selection != null ? String(selection) : null;\n } else {\n if (selection === 'all') {\n latestSelectionRef.current.multiple = 'all';\n } else if (Array.isArray(selection)) {\n latestSelectionRef.current.multiple = Array.from(\n new Set(processSelectionArray(selection)),\n );\n } else if (\n selection &&\n typeof selection === 'object' &&\n (selection as any) instanceof Set\n ) {\n latestSelectionRef.current.multiple = Array.from(\n new Set(processSelectionArray(selection as Set<Key>)),\n );\n } else {\n latestSelectionRef.current.multiple =\n selection === 'all'\n ? 'all'\n : Array.isArray(selection)\n ? selection.map(String)\n : [];\n }\n }\n\n onSelectionChange?.(selection);\n\n if (selectionMode === 'single') {\n close();\n }\n }}\n >\n {\n (children\n ? (finalChildren as CollectionChildren<T>)\n : undefined) as CollectionChildren<T>\n }\n </FilterListBox>\n </FocusScope>\n </Dialog>\n )}\n </DialogTrigger>\n </FilterPickerWrapper>\n );\n\n return wrapWithField<Omit<CubeFilterPickerProps<T>, 'children' | 'tooltip'>>(\n filterPickerField,\n ref as any,\n props,\n );\n}) as unknown as (<T>(\n props: CubeFilterPickerProps<T> & { ref?: ForwardedRef<HTMLElement> },\n) => ReactElement) & { Item: typeof ListBox.Item; Section: typeof BaseSection };\n\nFilterPicker.Item = ListBox.Item;\n\nFilterPicker.Section = BaseSection;\n\nObject.defineProperty(FilterPicker, 'cubeInputType', {\n value: 'FilterPicker',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.119.1 | Cube Dev Team */
|
|
2
2
|
import { _FileInput } from "../FileInput/FileInput.js";
|
|
3
3
|
import { TextInput } from "../TextInput/TextInput.js";
|
|
4
4
|
import { _NumberInput } from "../NumberInput/NumberInput.js";
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
|
|
2
|
-
import { Styles } from "../../../tasty/styles/types.js";
|
|
3
|
-
import { BasePropsWithoutChildren } from "../../../tasty/types.js";
|
|
4
|
-
import "../../../tasty/index.js";
|
|
5
2
|
import { FieldBaseProps } from "../../../shared/form.js";
|
|
6
3
|
import "../../../shared/index.js";
|
|
7
4
|
import { CubeCollectionItemProps, _CollectionItem } from "../../CollectionItem.js";
|
|
5
|
+
import { BasePropsWithoutChildren, Styles } from "@tenphi/tasty";
|
|
8
6
|
import { ForwardedRef, ReactElement, ReactNode, RefObject } from "react";
|
|
9
7
|
import { AriaListBoxProps } from "react-aria";
|
|
10
8
|
import { Section } from "react-stately";
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import { extractStyles } from "../../../tasty/utils/styles.js";
|
|
3
|
-
import { mergeStyles } from "../../../tasty/utils/merge-styles.js";
|
|
4
|
-
import { BASE_STYLES, COLOR_STYLES, OUTER_STYLES } from "../../../tasty/styles/list.js";
|
|
5
|
-
import { tasty } from "../../../tasty/tasty.js";
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.119.1 | Cube Dev Team */
|
|
6
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
7
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
8
4
|
import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
|
|
@@ -17,6 +13,7 @@ import { SIZES, SIZE_NAME_TO_KEY } from "../../../tokens/sizes.js";
|
|
|
17
13
|
import { useFormProps } from "../../form/Form/Form.js";
|
|
18
14
|
import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
|
|
19
15
|
import { wrapWithField } from "../../form/wrapper.js";
|
|
16
|
+
import { BASE_STYLES, COLOR_STYLES, OUTER_STYLES, extractStyles, mergeStyles, tasty } from "@tenphi/tasty";
|
|
20
17
|
import { forwardRef, useEffect, useLayoutEffect, useMemo, useRef, useState } from "react";
|
|
21
18
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
22
19
|
import { useKeyboard, useListBox, useListBoxSection, useOption } from "react-aria";
|