@cube-dev/ui-kit 0.0.0-canary-eceba5c → 0.0.0-canary-e521c67
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/es/_internal/hooks/index.js +1 -1
- package/es/_internal/hooks/use-chained-callback.js +1 -1
- package/es/_internal/hooks/use-debounced-value.js +1 -1
- package/es/_internal/hooks/use-deprecation-warning.js +1 -1
- package/es/_internal/hooks/use-effect-once.js +1 -1
- package/es/_internal/hooks/use-event.js +1 -1
- package/es/_internal/hooks/use-is-first-render.js +1 -1
- package/es/_internal/hooks/use-sync-ref.js +1 -1
- package/es/_internal/hooks/use-timer/index.js +1 -1
- package/es/_internal/hooks/use-timer/timer.js +1 -1
- package/es/_internal/hooks/use-timer/use-timer.js +1 -1
- package/es/_internal/hooks/use-update-effect.js +1 -1
- package/es/_internal/hooks/use-warn.js +1 -1
- package/es/_internal/index.js +1 -1
- package/es/components/Block.js +1 -1
- package/es/components/GlobalStyles.js +1 -1
- package/es/components/GridProvider.js +1 -1
- package/es/components/HiddenInput.js +1 -1
- package/es/components/Item.js +1 -1
- package/es/components/OpenTrasition.js +1 -1
- package/es/components/Root.js +1 -1
- package/es/components/actions/Action/Action.js +1 -1
- package/es/components/actions/Button/Button.js +1 -1
- package/es/components/actions/Button/index.js +1 -1
- package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/es/components/actions/CommandMenu/index.js +1 -1
- package/es/components/actions/CommandMenu/styled.js +1 -1
- package/es/components/actions/ItemAction/ItemAction.js +7 -2
- package/es/components/actions/ItemAction/index.js +1 -1
- package/es/components/actions/ItemButton/ItemButton.js +1 -1
- package/es/components/actions/ItemButton/index.js +1 -1
- package/es/components/actions/Link/Link.js +1 -1
- package/es/components/actions/Menu/Menu.js +1 -1
- package/es/components/actions/Menu/MenuItem.js +1 -1
- package/es/components/actions/Menu/MenuSection.js +1 -1
- package/es/components/actions/Menu/MenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/es/components/actions/Menu/context.js +1 -1
- package/es/components/actions/Menu/index.js +1 -1
- package/es/components/actions/Menu/styled.js +1 -1
- package/es/components/actions/index.js +1 -1
- package/es/components/actions/use-action.js +1 -1
- package/es/components/actions/use-anchored-menu.js +1 -1
- package/es/components/actions/use-context-menu.js +1 -1
- package/es/components/content/ActiveZone/ActiveZone.js +1 -1
- package/es/components/content/Alert/Alert.js +1 -1
- package/es/components/content/Alert/index.js +1 -1
- package/es/components/content/Alert/types.js +1 -1
- package/es/components/content/Alert/use-alert.js +1 -1
- package/es/components/content/Avatar/Avatar.js +1 -1
- package/es/components/content/Badge/Badge.js +1 -1
- package/es/components/content/Card/Card.js +1 -1
- package/es/components/content/Content.js +1 -1
- package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/es/components/content/CopyPasteBlock/index.js +1 -1
- package/es/components/content/CopySnippet/CopySnippet.js +1 -1
- package/es/components/content/CopySnippet/index.js +1 -1
- package/es/components/content/Divider.js +1 -1
- package/es/components/content/Footer.js +1 -1
- package/es/components/content/Header.js +1 -1
- package/es/components/content/HotKeys/HotKeys.js +1 -1
- package/es/components/content/HotKeys/index.js +1 -1
- package/es/components/content/ItemBase/ItemBase.js +1 -1
- package/es/components/content/ItemBase/index.js +1 -1
- package/es/components/content/List/SectionHeading.js +1 -1
- package/es/components/content/List/index.js +1 -1
- package/es/components/content/Paragraph.js +1 -1
- package/es/components/content/Placeholder/Placeholder.js +1 -1
- package/es/components/content/PrismCode/PrismCode.js +1 -1
- package/es/components/content/PrismCode/prismSetup.js +1 -1
- package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/es/components/content/Result/Result.js +1 -1
- package/es/components/content/Skeleton/Skeleton.js +1 -1
- package/es/components/content/Tag/Tag.js +1 -1
- package/es/components/content/Text.js +1 -1
- package/es/components/content/Title.js +1 -1
- package/es/components/fields/Checkbox/Checkbox.js +1 -1
- package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/es/components/fields/Checkbox/context.js +1 -1
- package/es/components/fields/Checkbox/index.js +1 -1
- package/es/components/fields/ComboBox/ComboBox.js +696 -180
- package/es/components/fields/ComboBox/index.js +2 -2
- package/es/components/fields/DatePicker/DateInput.js +1 -1
- package/es/components/fields/DatePicker/DateInputBase.js +1 -1
- package/es/components/fields/DatePicker/DatePicker.js +1 -1
- package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/es/components/fields/DatePicker/TimeInput.js +1 -1
- package/es/components/fields/DatePicker/index.js +1 -1
- package/es/components/fields/DatePicker/intl.js +1 -1
- package/es/components/fields/DatePicker/parseDate.js +1 -1
- package/es/components/fields/DatePicker/props.js +1 -1
- package/es/components/fields/DatePicker/types.js +1 -1
- package/es/components/fields/DatePicker/utils.js +1 -1
- package/es/components/fields/FileInput/FileInput.js +1 -1
- package/es/components/fields/FilterListBox/FilterListBox.js +42 -47
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +78 -311
- package/es/components/fields/FilterPicker/index.js +1 -1
- package/es/components/fields/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/LegacyComboBox/LegacyComboBox.js +290 -0
- package/es/components/fields/LegacyComboBox/index.js +10 -0
- package/es/components/fields/ListBox/ListBox.js +35 -5
- package/es/components/fields/ListBox/index.js +1 -1
- package/es/components/fields/NumberInput/NumberInput.js +1 -1
- package/es/components/fields/NumberInput/StepButton.js +1 -1
- package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/es/components/fields/RadioGroup/Radio.js +1 -1
- package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/es/components/fields/RadioGroup/context.js +1 -1
- package/es/components/fields/RadioGroup/index.js +1 -1
- package/es/components/fields/SearchInput/SearchInput.js +1 -1
- package/es/components/fields/SearchInput/index.js +1 -1
- package/es/components/fields/Select/Select.js +56 -50
- package/es/components/fields/Select/index.js +1 -1
- package/es/components/fields/Slider/Gradation.js +1 -1
- package/es/components/fields/Slider/Header.js +1 -1
- package/es/components/fields/Slider/RangeSlider.js +1 -1
- package/es/components/fields/Slider/Slider.js +1 -1
- package/es/components/fields/Slider/SliderBase.js +1 -1
- package/es/components/fields/Slider/SliderInput.js +1 -1
- package/es/components/fields/Slider/SliderThumb.js +1 -1
- package/es/components/fields/Slider/SliderTrack.js +1 -1
- package/es/components/fields/Slider/elements.js +1 -1
- package/es/components/fields/Slider/index.js +1 -1
- package/es/components/fields/Slider/types.js +1 -1
- package/es/components/fields/Switch/Switch.js +12 -19
- package/es/components/fields/Switch/index.js +1 -1
- package/es/components/fields/TextArea/TextArea.js +1 -1
- package/es/components/fields/TextArea/index.js +1 -1
- package/es/components/fields/TextInput/TextInput.js +1 -1
- package/es/components/fields/TextInput/TextInputBase.js +1 -1
- package/es/components/fields/TextInput/index.js +1 -1
- package/es/components/fields/TextInputMapper/TextInputMapper.js +2 -2
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +2 -1
- package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/es/components/form/FieldWrapper/index.js +1 -1
- package/es/components/form/FieldWrapper/types.js +1 -1
- package/es/components/form/Form/Field.js +1 -1
- package/es/components/form/Form/Form.js +1 -1
- package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/es/components/form/Form/ResetButton/index.js +1 -1
- package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/es/components/form/Form/SubmitButton/index.js +1 -1
- package/es/components/form/Form/SubmitError.js +1 -1
- package/es/components/form/Form/index.js +1 -1
- package/es/components/form/Form/types.js +1 -1
- package/es/components/form/Form/use-field/index.js +1 -1
- package/es/components/form/Form/use-field/types.js +1 -1
- package/es/components/form/Form/use-field/use-field-props.js +1 -1
- package/es/components/form/Form/use-field/use-field.js +1 -1
- package/es/components/form/Form/use-form.js +1 -1
- package/es/components/form/Form/validation.js +1 -1
- package/es/components/form/Label.js +1 -1
- package/es/components/form/index.js +1 -1
- package/es/components/form/wrapper.js +1 -1
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +242 -0
- package/es/components/helpers/index.js +10 -0
- package/es/components/layout/Flex.js +1 -1
- package/es/components/layout/Flow.js +1 -1
- package/es/components/layout/Grid.js +1 -1
- package/es/components/layout/Panel.js +1 -1
- package/es/components/layout/Prefix.js +1 -1
- package/es/components/layout/ResizablePanel.js +1 -1
- package/es/components/layout/Space.js +1 -1
- package/es/components/layout/Suffix.js +1 -1
- package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
- package/es/components/organisms/FileTabs/FileTabs.js +1 -1
- package/es/components/organisms/StatsCard/StatsCard.js +1 -1
- package/es/components/other/Base64Upload/Base64Upload.js +1 -1
- package/es/components/other/Calendar/Calendar.js +1 -1
- package/es/components/other/Calendar/CalendarCell.js +1 -1
- package/es/components/other/Calendar/CalendarGrid.js +1 -1
- package/es/components/other/Calendar/RangeCalendar.js +1 -1
- package/es/components/other/CloudLogo/CloudLogo.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/es/components/overlays/AlertDialog/index.js +1 -1
- package/es/components/overlays/AlertDialog/types.js +1 -1
- package/es/components/overlays/Dialog/Dialog.js +1 -1
- package/es/components/overlays/Dialog/DialogContainer.js +1 -1
- package/es/components/overlays/Dialog/DialogForm.js +1 -1
- package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/es/components/overlays/Dialog/context.js +1 -1
- package/es/components/overlays/Dialog/index.js +1 -1
- package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/es/components/overlays/Modal/Modal.js +1 -1
- package/es/components/overlays/Modal/OpenTransition.js +1 -1
- package/es/components/overlays/Modal/Overlay.js +1 -1
- package/es/components/overlays/Modal/Popover.js +1 -1
- package/es/components/overlays/Modal/Tray.js +1 -1
- package/es/components/overlays/Modal/Underlay.js +1 -1
- package/es/components/overlays/Modal/index.js +1 -1
- package/es/components/overlays/Modal/types.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
- package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
- package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
- package/es/components/overlays/NewNotifications/Notification.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
- package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
- package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
- package/es/components/overlays/NewNotifications/index.js +1 -1
- package/es/components/overlays/NewNotifications/types.js +1 -1
- package/es/components/overlays/Notification/Notification.js +1 -1
- package/es/components/overlays/OverlayWrapper.js +1 -1
- package/es/components/overlays/Toasts/Toast.js +1 -1
- package/es/components/overlays/Toasts/index.js +1 -1
- package/es/components/overlays/Toasts/types.js +1 -1
- package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
- package/es/components/overlays/Tooltip/Tooltip.js +30 -18
- package/es/components/overlays/Tooltip/TooltipProvider.js +2 -2
- package/es/components/overlays/Tooltip/TooltipTrigger.js +25 -7
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +1 -1
- package/es/components/portal/Portal.js +1 -1
- package/es/components/portal/PortalProvider.js +1 -1
- package/es/components/portal/index.js +1 -1
- package/es/components/portal/types.js +1 -1
- package/es/components/portal/usePortal.js +1 -1
- package/es/components/shared/InvalidIcon.js +1 -1
- package/es/components/shared/ValidIcon.js +1 -1
- package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/es/components/status/LoadingAnimation/index.js +1 -1
- package/es/components/status/Spin/Cube.js +1 -1
- package/es/components/status/Spin/InternalSpinner.js +1 -1
- package/es/components/status/Spin/Spin.js +1 -1
- package/es/components/status/Spin/SpinsContainer.js +1 -1
- package/es/components/status/Spin/index.js +1 -1
- package/es/components/status/Spin/types.js +1 -1
- package/es/components/status/index.js +1 -1
- package/es/data/item-themes.js +1 -1
- package/es/data/themes.js +1 -1
- package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/es/icons/AdjustmentsIcon.js +1 -1
- package/es/icons/AiIcon.js +1 -1
- package/es/icons/AreaChartIcon.js +1 -1
- package/es/icons/BackwardIcon.js +1 -1
- package/es/icons/BarChartIcon.js +1 -1
- package/es/icons/BellFilledIcon.js +1 -1
- package/es/icons/BellIcon.js +1 -1
- package/es/icons/BooleanIcon.js +1 -1
- package/es/icons/CalendarEditIcon.js +1 -1
- package/es/icons/CalendarIcon.js +1 -1
- package/es/icons/CaretDownIcon.js +1 -1
- package/es/icons/CaretUpIcon.js +1 -1
- package/es/icons/ChartAreaStackedIcon.js +1 -1
- package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +1 -1
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/es/icons/ChartBoxPlot2Icon.js +1 -1
- package/es/icons/ChartBoxPlotIcon.js +1 -1
- package/es/icons/ChartBubbleIcon.js +1 -1
- package/es/icons/ChartDonut2Icon.js +1 -1
- package/es/icons/ChartFunnelIcon.js +1 -1
- package/es/icons/ChartHeatmapIcon.js +1 -1
- package/es/icons/ChartKPIIcon.js +1 -1
- package/es/icons/ChartPie2Icon.js +1 -1
- package/es/icons/ChartScatterIcon.js +1 -1
- package/es/icons/CheckCircleFilledIcon.js +1 -1
- package/es/icons/CheckCircleIcon.js +1 -1
- package/es/icons/CheckIcon.js +1 -1
- package/es/icons/CircleFilledIcon.js +1 -1
- package/es/icons/ClearIcon.js +1 -1
- package/es/icons/CloseCircleFilledIcon.js +1 -1
- package/es/icons/CloseCircleIcon.js +1 -1
- package/es/icons/CloseIcon.js +1 -1
- package/es/icons/CodeIcon.js +1 -1
- package/es/icons/CopyIcon.js +1 -1
- package/es/icons/CountIcon.js +1 -1
- package/es/icons/CubeIcon.js +1 -1
- package/es/icons/CubePauseIcon.js +1 -1
- package/es/icons/CubePlayIcon.js +1 -1
- package/es/icons/CurrencyDollarIcon.js +1 -1
- package/es/icons/DangerIcon.js +1 -1
- package/es/icons/DashboardIcon.js +1 -1
- package/es/icons/DatabaseIcon.js +1 -1
- package/es/icons/DecimalDecreaseIcon.js +1 -1
- package/es/icons/DecimalIncreaseIcon.js +1 -1
- package/es/icons/DirectionIcon.js +1 -1
- package/es/icons/DonutIcon.js +1 -1
- package/es/icons/DownIcon.js +1 -1
- package/es/icons/EditIcon.js +1 -1
- package/es/icons/ExclamationCircleFilledIcon.js +1 -1
- package/es/icons/ExclamationCircleIcon.js +1 -1
- package/es/icons/ExclamationIcon.js +1 -1
- package/es/icons/EyeIcon.js +1 -1
- package/es/icons/EyeInvisibleIcon.js +1 -1
- package/es/icons/FilterIcon.js +1 -1
- package/es/icons/FolderFilledIcon.js +1 -1
- package/es/icons/FolderIcon.js +1 -1
- package/es/icons/FolderOpenFilledIcon.js +1 -1
- package/es/icons/FolderOpenIcon.js +1 -1
- package/es/icons/ForwardIcon.js +1 -1
- package/es/icons/HierarchyIcon.js +1 -1
- package/es/icons/Icon.js +1 -1
- package/es/icons/InfoCircleIcon.js +1 -1
- package/es/icons/InfoIcon.js +1 -1
- package/es/icons/KeyIcon.js +1 -1
- package/es/icons/LeftIcon.js +1 -1
- package/es/icons/LineChartIcon.js +1 -1
- package/es/icons/LoadingIcon.js +1 -1
- package/es/icons/LockFilledIcon.js +1 -1
- package/es/icons/LockIcon.js +1 -1
- package/es/icons/MoreIcon.js +1 -1
- package/es/icons/NotAllowedIcon.js +1 -1
- package/es/icons/Number123Icon.js +1 -1
- package/es/icons/NumberIcon.js +1 -1
- package/es/icons/PauseCircleFilledIcon.js +1 -1
- package/es/icons/PauseCircleIcon.js +1 -1
- package/es/icons/PauseIcon.js +1 -1
- package/es/icons/PercentageIcon.js +1 -1
- package/es/icons/PieChartIcon.js +1 -1
- package/es/icons/PlayCircleIcon.js +1 -1
- package/es/icons/PlayIcon.js +1 -1
- package/es/icons/PlusIcon.js +1 -1
- package/es/icons/ReloadIcon.js +1 -1
- package/es/icons/ReportIcon.js +1 -1
- package/es/icons/ReturnIcon.js +1 -1
- package/es/icons/RightIcon.js +1 -1
- package/es/icons/SchemeIcon.js +1 -1
- package/es/icons/SearchIcon.js +1 -1
- package/es/icons/SettingsIcon.js +1 -1
- package/es/icons/ShieldFilledIcon.js +1 -1
- package/es/icons/ShieldIcon.js +1 -1
- package/es/icons/SlashIcon.js +1 -1
- package/es/icons/SparklesIcon.js +1 -1
- package/es/icons/SqlIcon.js +1 -1
- package/es/icons/StatsIcon.js +1 -1
- package/es/icons/StopIcon.js +1 -1
- package/es/icons/StringIcon.js +1 -1
- package/es/icons/SwitchIcon.js +1 -1
- package/es/icons/TableIcon.js +1 -1
- package/es/icons/ThumbsDownIcon.js +1 -1
- package/es/icons/ThumbsUpIcon.js +1 -1
- package/es/icons/ThunderboltCrossedIcon.js +1 -1
- package/es/icons/ThunderboltFilledIcon.js +1 -1
- package/es/icons/ThunderboltIcon.js +1 -1
- package/es/icons/TimeIcon.js +1 -1
- package/es/icons/UnlockIcon.js +1 -1
- package/es/icons/UpIcon.js +1 -1
- package/es/icons/UserGroupIcon.js +1 -1
- package/es/icons/UserIcon.js +1 -1
- package/es/icons/UserLockIcon.js +1 -1
- package/es/icons/ViewIcon.js +1 -1
- package/es/icons/WarningFilledIcon.js +1 -1
- package/es/icons/WarningIcon.js +1 -1
- package/es/icons/add-new-icon.js +1 -1
- package/es/icons/index.js +1 -1
- package/es/icons/wrap-icon.js +1 -1
- package/es/index.js +2 -1
- package/es/provider.js +1 -1
- package/es/providers/TrackingProvider.js +1 -1
- package/es/providers/navigation.types.js +1 -1
- package/es/providers/navigationAdapter.default.js +1 -1
- package/es/services/notification.js +1 -1
- package/es/shared/form.js +1 -1
- package/es/shared/index.js +1 -1
- package/es/stories/Form.legacy-stories.js +1 -1
- package/es/stories/FormFieldArgs.js +1 -1
- package/es/stories/Layout.stories.js +1 -1
- package/es/stories/Tasty.stories.js +1 -1
- package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
- package/es/stories/components/DialogFormApp.js +1 -1
- package/es/stories/components/StyledButton.js +1 -1
- package/es/stories/lists/baseProps.js +1 -1
- package/es/tasty/debug.js +1 -1
- package/es/tasty/index.js +1 -1
- package/es/tasty/injector/index.js +1 -1
- package/es/tasty/injector/injector.js +1 -1
- package/es/tasty/injector/sheet-manager.js +1 -1
- package/es/tasty/injector/types.js +1 -1
- package/es/tasty/parser/classify.js +1 -1
- package/es/tasty/parser/const.js +1 -1
- package/es/tasty/parser/lru.js +1 -1
- package/es/tasty/parser/parser.js +1 -1
- package/es/tasty/parser/tokenizer.js +1 -1
- package/es/tasty/parser/types.js +1 -1
- package/es/tasty/providers/BreakpointsProvider.js +1 -1
- package/es/tasty/styles/align.js +1 -1
- package/es/tasty/styles/border.js +1 -1
- package/es/tasty/styles/boxShadow.combinator.js +1 -1
- package/es/tasty/styles/color.js +1 -1
- package/es/tasty/styles/createStyle.js +1 -1
- package/es/tasty/styles/dimension.js +1 -1
- package/es/tasty/styles/display.js +1 -1
- package/es/tasty/styles/fade.js +1 -1
- package/es/tasty/styles/fill.js +1 -1
- package/es/tasty/styles/flow.js +1 -1
- package/es/tasty/styles/font.js +1 -1
- package/es/tasty/styles/fontStyle.js +1 -1
- package/es/tasty/styles/gap.js +1 -1
- package/es/tasty/styles/groupRadius.js +1 -1
- package/es/tasty/styles/height.js +1 -1
- package/es/tasty/styles/index.js +1 -1
- package/es/tasty/styles/inset.js +1 -1
- package/es/tasty/styles/justify.js +1 -1
- package/es/tasty/styles/list.js +1 -1
- package/es/tasty/styles/margin.js +1 -1
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/place.js +1 -1
- package/es/tasty/styles/predefined.js +1 -1
- package/es/tasty/styles/preset.js +1 -1
- package/es/tasty/styles/radius.js +1 -1
- package/es/tasty/styles/reset.js +1 -1
- package/es/tasty/styles/scrollbar.js +1 -1
- package/es/tasty/styles/shadow.js +1 -1
- package/es/tasty/styles/styledScrollbar.js +1 -1
- package/es/tasty/styles/transition.js +1 -1
- package/es/tasty/styles/types.js +1 -1
- package/es/tasty/styles/width.js +1 -1
- package/es/tasty/tasty.js +1 -1
- package/es/tasty/types.js +1 -1
- package/es/tasty/utils/cache-wrapper.js +1 -1
- package/es/tasty/utils/case-converter.js +1 -1
- package/es/tasty/utils/colors.js +1 -1
- package/es/tasty/utils/dotize.js +1 -1
- package/es/tasty/utils/filterBaseProps.js +1 -1
- package/es/tasty/utils/getDisplayName.js +1 -1
- package/es/tasty/utils/getModCombinations.js +1 -1
- package/es/tasty/utils/isDevEnv.js +1 -1
- package/es/tasty/utils/mergeStyles.js +1 -1
- package/es/tasty/utils/modAttrs.js +1 -1
- package/es/tasty/utils/renderStyles.js +1 -1
- package/es/tasty/utils/responsive.js +1 -1
- package/es/tasty/utils/string.js +1 -1
- package/es/tasty/utils/styles.js +1 -1
- package/es/tasty/utils/warnings.js +1 -1
- package/es/tokens.js +1 -1
- package/es/type-checks.js +1 -1
- package/es/utils/ResizeSensor.js +1 -1
- package/es/utils/modules.js +1 -1
- package/es/utils/promise.js +1 -1
- package/es/utils/random.js +1 -1
- package/es/utils/range.js +1 -1
- package/es/utils/react/Slots.js +1 -1
- package/es/utils/react/chain.js +1 -1
- package/es/utils/react/forwardRefWithGenerics.js +1 -1
- package/es/utils/react/index.js +2 -2
- package/es/utils/react/interactions.js +1 -1
- package/es/utils/react/isTextOnly.js +1 -1
- package/es/utils/react/mapProps.js +1 -1
- package/es/utils/react/mergeProps.js +1 -1
- package/es/utils/react/nullableValue.js +1 -1
- package/es/utils/react/sharedStore.js +1 -1
- package/es/utils/react/useCombinedRefs.js +11 -6
- package/es/utils/react/useControlledFocusVisible.js +1 -1
- package/es/utils/react/useEventBus.js +1 -1
- package/es/utils/react/useId.js +1 -1
- package/es/utils/react/useIsDarwin.js +1 -1
- package/es/utils/react/useKeySymbols.js +1 -1
- package/es/utils/react/useLayoutEffect.js +1 -1
- package/es/utils/react/useQaProps.js +1 -1
- package/es/utils/react/useViewportSize.js +1 -1
- package/es/utils/react/wrapNodeIfPlain.js +1 -1
- package/es/utils/transitions.js +1 -1
- package/es/utils/tree.js +1 -1
- package/es/utils/warnings.js +1 -1
- package/es/version.js +2 -2
- package/package.json +1 -1
- package/types/components/GridProvider.d.ts +1 -1
- package/types/components/fields/ComboBox/ComboBox.d.ts +91 -30
- package/types/components/fields/ComboBox/index.d.ts +2 -1
- package/types/components/fields/FilterListBox/FilterListBox.d.ts +7 -0
- package/types/components/fields/FilterPicker/FilterPicker.d.ts +9 -2
- package/types/components/fields/LegacyComboBox/LegacyComboBox.d.ts +49 -0
- package/types/components/fields/LegacyComboBox/index.d.ts +1 -0
- package/types/components/fields/ListBox/ListBox.d.ts +5 -0
- package/types/components/fields/Select/Select.d.ts +2 -1
- package/types/components/fields/Switch/Switch.d.ts +1 -1
- package/types/components/fields/index.d.ts +1 -0
- package/types/components/helpers/DisplayTransition/DisplayTransition.d.ts +24 -0
- package/types/components/helpers/index.d.ts +1 -0
- package/types/components/layout/Prefix.d.ts +1 -1
- package/types/components/layout/Suffix.d.ts +1 -1
- package/types/components/overlays/Tooltip/TooltipTrigger.d.ts +5 -0
- package/types/components/overlays/Tooltip/context.d.ts +6 -1
- package/types/index.d.ts +2 -0
- package/types/utils/react/index.d.ts +1 -1
- package/types/utils/react/useCombinedRefs.d.ts +3 -2
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @license MIT
|
|
3
3
|
* author: Cube Dev Team
|
|
4
|
-
* @cube-dev/ui-kit v0.0.0-canary-
|
|
4
|
+
* @cube-dev/ui-kit v0.0.0-canary-e521c67
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
9
|
-
import {
|
|
9
|
+
import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
|
|
10
10
|
import { FocusScope, useKeyboard } from 'react-aria';
|
|
11
|
-
import { Section as BaseSection,
|
|
11
|
+
import { Section as BaseSection, useListState } from 'react-stately';
|
|
12
12
|
import { useEvent } from '../../../_internal';
|
|
13
13
|
import { useWarn } from '../../../_internal/hooks/use-warn';
|
|
14
14
|
import { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';
|
|
@@ -63,8 +63,15 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
63
63
|
return fieldProps;
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
let { qa, label, extra, icon, rightIcon, prefix, suffix, hotkeys, triggerTooltip, triggerDescription, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, descriptionPlacement, placeholder, size = 'medium', styles, listBoxStyles, popoverStyles, type = 'outline', theme = 'default', labelSuffix, shouldFocusWrap, children, shouldFlip = true, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, disabledKeys, onSelectionChange, selectionMode = 'single', listStateRef, focusOnHover, showSelectAll, selectAllLabel = 'All', items, header, footer, headerStyles, footerStyles, triggerStyles, allowsCustomValue, renderSummary, isCheckable, allValueProps, customValueProps, newCustomValueProps, searchPlaceholder, autoFocus, filter, emptyLabel, searchInputStyles, searchInputRef, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, searchValue, onSearchChange, ...otherProps } = props;
|
|
66
|
+
let { qa, label, extra, id, icon, rightIcon, prefix, suffix, hotkeys, triggerTooltip, triggerDescription, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, descriptionPlacement, placeholder, size = 'medium', styles, listBoxStyles, popoverStyles, type = 'outline', theme = 'default', labelSuffix, shouldFocusWrap, children, shouldFlip = true, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, disabledKeys, onSelectionChange, selectionMode = 'single', listStateRef, focusOnHover, showSelectAll, selectAllLabel = 'All', items, header, footer, headerStyles, footerStyles, triggerStyles, allowsCustomValue, renderSummary, isCheckable, allValueProps, customValueProps, newCustomValueProps, searchPlaceholder, autoFocus, filter, emptyLabel, searchInputStyles, searchInputRef, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, searchValue, onSearchChange, sortSelectedToTop: sortSelectedToTopProp, ...otherProps } = props;
|
|
67
|
+
// Track if sortSelectedToTop was explicitly provided
|
|
68
|
+
const sortSelectedToTopExplicit = sortSelectedToTopProp !== undefined;
|
|
69
|
+
// Default to true if items are provided, false otherwise
|
|
70
|
+
const sortSelectedToTop = sortSelectedToTopProp ?? (items ? true : false);
|
|
67
71
|
styles = extractStyles(otherProps, PROP_STYLES, styles);
|
|
72
|
+
// Generate ID for label-trigger linking if not provided
|
|
73
|
+
const generatedId = useId();
|
|
74
|
+
const triggerId = id || generatedId;
|
|
68
75
|
// Generate a unique ID for this FilterPicker instance
|
|
69
76
|
const filterPickerId = useMemo(() => generateRandomId(), []);
|
|
70
77
|
// Get event bus for menu synchronization
|
|
@@ -81,7 +88,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
81
88
|
const [internalSelectedKeys, setInternalSelectedKeys] = useState(defaultSelectedKeys ?? []);
|
|
82
89
|
// Track popover open/close and capture children order for session
|
|
83
90
|
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
84
|
-
const cachedChildrenOrder = useRef(null);
|
|
85
91
|
// Cache for sorted items array when using `items` prop
|
|
86
92
|
const cachedItemsOrder = useRef(null);
|
|
87
93
|
const triggerRef = useRef(null);
|
|
@@ -92,9 +98,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
92
98
|
// session (which caused only the previously selected options to be rendered
|
|
93
99
|
// or the list to appear unsorted).
|
|
94
100
|
// ---------------------------------------------------------------------------
|
|
95
|
-
useEffect(() => {
|
|
96
|
-
cachedChildrenOrder.current = null;
|
|
97
|
-
}, [children]);
|
|
98
101
|
useEffect(() => {
|
|
99
102
|
cachedItemsOrder.current = null;
|
|
100
103
|
}, [items]);
|
|
@@ -106,73 +109,47 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
106
109
|
const effectiveSelectedKeys = isControlledMultiple
|
|
107
110
|
? selectedKeys
|
|
108
111
|
: internalSelectedKeys;
|
|
109
|
-
//
|
|
110
|
-
//
|
|
111
|
-
const
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
// so that callers work with the original key values supplied by the user.
|
|
117
|
-
let str = String(key);
|
|
118
|
-
// Remove React array/object key prefixes (".$" or ".") if present.
|
|
119
|
-
if (str.startsWith('.$')) {
|
|
120
|
-
str = str.slice(2);
|
|
121
|
-
}
|
|
122
|
-
else if (str.startsWith('.')) {
|
|
123
|
-
str = str.slice(1);
|
|
124
|
-
}
|
|
125
|
-
// Un-escape React's internal key encodings.
|
|
126
|
-
return str.replace(/=2/g, ':').replace(/=0/g, '=');
|
|
127
|
-
};
|
|
112
|
+
// Create a local collection for label extraction only (not for rendering)
|
|
113
|
+
// This gives us immediate access to textValue without waiting for FilterListBox
|
|
114
|
+
const localCollectionState = useListState({
|
|
115
|
+
children: children,
|
|
116
|
+
items: items,
|
|
117
|
+
selectionMode: 'none', // We don't need selection management
|
|
118
|
+
});
|
|
128
119
|
// ---------------------------------------------------------------------------
|
|
129
|
-
// Map
|
|
130
|
-
//
|
|
131
|
-
//
|
|
132
|
-
// that the key we pass to ListBox exactly matches the keys it receives from
|
|
133
|
-
// React Aria, so the initial selection is highlighted correctly.
|
|
120
|
+
// Map user-provided keys to collection keys using the local collection.
|
|
121
|
+
// The collection handles key normalization internally, so we use direct
|
|
122
|
+
// string comparison.
|
|
134
123
|
// ---------------------------------------------------------------------------
|
|
135
|
-
const
|
|
124
|
+
const findCollectionKey = useCallback((lookup) => {
|
|
136
125
|
if (lookup == null)
|
|
137
126
|
return lookup;
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
foundKey = element.key;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
if (element.props &&
|
|
151
|
-
typeof element.props === 'object' &&
|
|
152
|
-
'children' in element.props) {
|
|
153
|
-
traverse(element.props.children);
|
|
154
|
-
}
|
|
155
|
-
});
|
|
156
|
-
};
|
|
157
|
-
if (children)
|
|
158
|
-
traverse(children);
|
|
159
|
-
return foundKey;
|
|
160
|
-
}, [children]);
|
|
127
|
+
// Direct comparison - collection handles normalization internally
|
|
128
|
+
for (const item of localCollectionState.collection) {
|
|
129
|
+
if (String(item.key) === String(lookup)) {
|
|
130
|
+
return item.key;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
// Fallback: return the lookup key as-is
|
|
134
|
+
return lookup;
|
|
135
|
+
}, [localCollectionState.collection]);
|
|
161
136
|
const mappedSelectedKey = useMemo(() => {
|
|
162
137
|
if (selectionMode !== 'single')
|
|
163
138
|
return null;
|
|
164
|
-
return effectiveSelectedKey
|
|
165
|
-
|
|
139
|
+
return effectiveSelectedKey
|
|
140
|
+
? findCollectionKey(effectiveSelectedKey)
|
|
141
|
+
: null;
|
|
142
|
+
}, [selectionMode, effectiveSelectedKey, findCollectionKey]);
|
|
166
143
|
const mappedSelectedKeys = useMemo(() => {
|
|
167
144
|
if (selectionMode !== 'multiple')
|
|
168
145
|
return undefined;
|
|
169
146
|
if (effectiveSelectedKeys === 'all')
|
|
170
147
|
return 'all';
|
|
171
148
|
if (Array.isArray(effectiveSelectedKeys)) {
|
|
172
|
-
return effectiveSelectedKeys.map((k) =>
|
|
149
|
+
return effectiveSelectedKeys.map((k) => findCollectionKey(k));
|
|
173
150
|
}
|
|
174
151
|
return effectiveSelectedKeys;
|
|
175
|
-
}, [selectionMode, effectiveSelectedKeys,
|
|
152
|
+
}, [selectionMode, effectiveSelectedKeys, findCollectionKey]);
|
|
176
153
|
// Given an iterable of keys (array or Set) toggle membership for duplicates
|
|
177
154
|
const processSelectionArray = (iterable) => {
|
|
178
155
|
const resultSet = new Set();
|
|
@@ -187,149 +164,42 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
187
164
|
}
|
|
188
165
|
return Array.from(resultSet);
|
|
189
166
|
};
|
|
190
|
-
// Helper to get selected item labels for display
|
|
167
|
+
// Helper to get selected item labels for display using local collection
|
|
191
168
|
const getSelectedLabels = () => {
|
|
169
|
+
const collection = localCollectionState.collection;
|
|
192
170
|
// Handle "all" selection - return all available labels
|
|
193
171
|
if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
|
|
194
172
|
const allLabels = [];
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
if (item && typeof item === 'object') {
|
|
200
|
-
const itemObj = item;
|
|
201
|
-
if (Array.isArray(itemObj.children)) {
|
|
202
|
-
// Section-like object
|
|
203
|
-
extractFromItems(itemObj.children);
|
|
204
|
-
}
|
|
205
|
-
else {
|
|
206
|
-
// Regular item - extract label
|
|
207
|
-
const label = itemObj.textValue ||
|
|
208
|
-
itemObj.label ||
|
|
209
|
-
(typeof itemObj.children === 'string'
|
|
210
|
-
? itemObj.children
|
|
211
|
-
: '') ||
|
|
212
|
-
String(itemObj.children ||
|
|
213
|
-
itemObj.key ||
|
|
214
|
-
itemObj.id ||
|
|
215
|
-
item);
|
|
216
|
-
allLabels.push(label);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
});
|
|
220
|
-
};
|
|
221
|
-
const itemsArray = Array.isArray(items)
|
|
222
|
-
? items
|
|
223
|
-
: Array.from(items);
|
|
224
|
-
extractFromItems(itemsArray);
|
|
225
|
-
return allLabels;
|
|
226
|
-
}
|
|
227
|
-
// Extract from children if available
|
|
228
|
-
if (children) {
|
|
229
|
-
const extractAllLabels = (nodes) => {
|
|
230
|
-
if (!nodes)
|
|
231
|
-
return;
|
|
232
|
-
Children.forEach(nodes, (child) => {
|
|
233
|
-
if (!child || typeof child !== 'object')
|
|
234
|
-
return;
|
|
235
|
-
const element = child;
|
|
236
|
-
if (element.type === ReactAriaItem) {
|
|
237
|
-
const props = element.props;
|
|
238
|
-
const label = props.textValue ||
|
|
239
|
-
(typeof props.children === 'string' ? props.children : '') ||
|
|
240
|
-
String(props.children || '');
|
|
241
|
-
allLabels.push(label);
|
|
242
|
-
}
|
|
243
|
-
if (element.props &&
|
|
244
|
-
typeof element.props === 'object' &&
|
|
245
|
-
'children' in element.props) {
|
|
246
|
-
extractAllLabels(element.props.children);
|
|
247
|
-
}
|
|
248
|
-
});
|
|
249
|
-
};
|
|
250
|
-
extractAllLabels(children);
|
|
251
|
-
return allLabels;
|
|
173
|
+
for (const item of collection) {
|
|
174
|
+
if (item.type === 'item') {
|
|
175
|
+
allLabels.push(item.textValue || String(item.key));
|
|
176
|
+
}
|
|
252
177
|
}
|
|
253
178
|
return allLabels;
|
|
254
179
|
}
|
|
255
180
|
const selectedSet = new Set(selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
|
|
256
|
-
? (effectiveSelectedKeys || []).map((k) =>
|
|
181
|
+
? (effectiveSelectedKeys || []).map((k) => String(k))
|
|
257
182
|
: effectiveSelectedKey != null
|
|
258
|
-
? [
|
|
183
|
+
? [String(effectiveSelectedKey)]
|
|
259
184
|
: []);
|
|
260
185
|
const labels = [];
|
|
261
186
|
const processedKeys = new Set();
|
|
262
|
-
//
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
if (Array.isArray(itemObj.children)) {
|
|
269
|
-
// Section-like object
|
|
270
|
-
extractFromItems(itemObj.children);
|
|
271
|
-
}
|
|
272
|
-
else {
|
|
273
|
-
// Regular item - check if selected
|
|
274
|
-
const itemKey = itemObj.key || itemObj.id;
|
|
275
|
-
if (itemKey != null &&
|
|
276
|
-
selectedSet.has(normalizeKeyValue(itemKey))) {
|
|
277
|
-
const label = itemObj.textValue ||
|
|
278
|
-
itemObj.label ||
|
|
279
|
-
(typeof itemObj.children === 'string'
|
|
280
|
-
? itemObj.children
|
|
281
|
-
: '') ||
|
|
282
|
-
String(itemObj.children || itemKey);
|
|
283
|
-
labels.push(label);
|
|
284
|
-
processedKeys.add(normalizeKeyValue(itemKey));
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
});
|
|
289
|
-
};
|
|
290
|
-
const itemsArray = Array.isArray(items)
|
|
291
|
-
? items
|
|
292
|
-
: Array.from(items);
|
|
293
|
-
extractFromItems(itemsArray);
|
|
294
|
-
}
|
|
295
|
-
// Extract from children if available (for mixed mode or fallback)
|
|
296
|
-
if (children) {
|
|
297
|
-
const extractLabelsWithTracking = (nodes) => {
|
|
298
|
-
if (!nodes)
|
|
299
|
-
return;
|
|
300
|
-
Children.forEach(nodes, (child) => {
|
|
301
|
-
if (!child || typeof child !== 'object')
|
|
302
|
-
return;
|
|
303
|
-
const element = child;
|
|
304
|
-
if (element.type === ReactAriaItem) {
|
|
305
|
-
const childKey = String(element.key);
|
|
306
|
-
if (selectedSet.has(normalizeKeyValue(childKey))) {
|
|
307
|
-
const props = element.props;
|
|
308
|
-
const label = props.textValue ||
|
|
309
|
-
(typeof props.children === 'string' ? props.children : '') ||
|
|
310
|
-
String(props.children || '');
|
|
311
|
-
labels.push(label);
|
|
312
|
-
processedKeys.add(normalizeKeyValue(childKey));
|
|
313
|
-
}
|
|
314
|
-
}
|
|
315
|
-
if (element.props &&
|
|
316
|
-
typeof element.props === 'object' &&
|
|
317
|
-
'children' in element.props) {
|
|
318
|
-
extractLabelsWithTracking(element.props.children);
|
|
319
|
-
}
|
|
320
|
-
});
|
|
321
|
-
};
|
|
322
|
-
extractLabelsWithTracking(children);
|
|
187
|
+
// Use collection to get labels for selected items
|
|
188
|
+
for (const item of collection) {
|
|
189
|
+
if (item.type === 'item' && selectedSet.has(String(item.key))) {
|
|
190
|
+
labels.push(item.textValue || String(item.key));
|
|
191
|
+
processedKeys.add(String(item.key));
|
|
192
|
+
}
|
|
323
193
|
}
|
|
324
|
-
// Handle custom values that
|
|
194
|
+
// Handle custom values that aren't in the collection
|
|
325
195
|
const selectedKeysArr = selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
|
|
326
196
|
? (effectiveSelectedKeys || []).map(String)
|
|
327
197
|
: effectiveSelectedKey != null
|
|
328
198
|
? [String(effectiveSelectedKey)]
|
|
329
199
|
: [];
|
|
330
|
-
// Add labels for any selected keys that weren't
|
|
200
|
+
// Add labels for any selected keys that weren't found in collection (custom values)
|
|
331
201
|
selectedKeysArr.forEach((key) => {
|
|
332
|
-
if (!processedKeys.has(
|
|
202
|
+
if (!processedKeys.has(String(key))) {
|
|
333
203
|
// This is a custom value, use the key as the label
|
|
334
204
|
labels.push(key);
|
|
335
205
|
}
|
|
@@ -361,133 +231,22 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
361
231
|
}, []); // run only once on mount
|
|
362
232
|
// Function to sort children with selected items on top
|
|
363
233
|
const getSortedChildren = useCallback(() => {
|
|
364
|
-
//
|
|
365
|
-
if (
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
// order once per pop-over opening session. The cache is cleared when the
|
|
369
|
-
// pop-over closes so the next opening can recompute.
|
|
370
|
-
if (cachedChildrenOrder.current) {
|
|
371
|
-
return cachedChildrenOrder.current;
|
|
372
|
-
}
|
|
373
|
-
// Popover is open – compute (or recompute) the sorted order for this
|
|
374
|
-
// session.
|
|
375
|
-
// Determine if there were any selections when the popover was previously closed.
|
|
376
|
-
const hadSelectionsWhenClosed = selectionMode === 'multiple'
|
|
377
|
-
? selectionsWhenClosed.current.multiple.length > 0
|
|
378
|
-
: selectionsWhenClosed.current.single !== null;
|
|
379
|
-
// Only apply sorting when there were selections in the previous session.
|
|
380
|
-
// We intentionally do not depend on the `isPopoverOpen` flag here because that
|
|
381
|
-
// flag is updated **after** the first render triggered by clicking the
|
|
382
|
-
// trigger button. Relying on it caused a timing issue where the very first
|
|
383
|
-
// render of a freshly-opened popover was unsorted. By removing the
|
|
384
|
-
// `isPopoverOpen` check we ensure items are already sorted during that first
|
|
385
|
-
// render while still maintaining stable order within an open popover thanks
|
|
386
|
-
// to the `cachedChildrenOrder` guard above.
|
|
387
|
-
if (!hadSelectionsWhenClosed) {
|
|
388
|
-
return children;
|
|
234
|
+
// Warn if sorting is explicitly requested but not supported
|
|
235
|
+
if (sortSelectedToTopExplicit && sortSelectedToTop && !items) {
|
|
236
|
+
console.warn('FilterPicker: sortSelectedToTop only works with the items prop. ' +
|
|
237
|
+
'Sorting will be skipped when using JSX children.');
|
|
389
238
|
}
|
|
390
|
-
//
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
if (selectionsWhenClosed.current.multiple === 'all') {
|
|
394
|
-
// Don't sort when "all" is selected, just return original children
|
|
395
|
-
return children;
|
|
396
|
-
}
|
|
397
|
-
else {
|
|
398
|
-
selectionsWhenClosed.current.multiple.forEach((key) => selectedSet.add(String(key)));
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
else if (selectionMode === 'single' &&
|
|
402
|
-
selectionsWhenClosed.current.single != null) {
|
|
403
|
-
selectedSet.add(String(selectionsWhenClosed.current.single));
|
|
404
|
-
}
|
|
405
|
-
// Helper function to check if an item is selected
|
|
406
|
-
const isItemSelected = (child) => {
|
|
407
|
-
return (child?.key != null && selectedSet.has(normalizeKeyValue(child.key)));
|
|
408
|
-
};
|
|
409
|
-
// Helper function to sort children array
|
|
410
|
-
const sortChildrenArray = (childrenArray) => {
|
|
411
|
-
const cloneWithNormalizedKey = (item) => cloneElement(item, {
|
|
412
|
-
key: item.key ? normalizeKeyValue(item.key) : undefined,
|
|
413
|
-
});
|
|
414
|
-
const selected = [];
|
|
415
|
-
const unselected = [];
|
|
416
|
-
childrenArray.forEach((child) => {
|
|
417
|
-
if (!child || typeof child !== 'object') {
|
|
418
|
-
unselected.push(child);
|
|
419
|
-
return;
|
|
420
|
-
}
|
|
421
|
-
const element = child;
|
|
422
|
-
// Handle sections - sort items within each section
|
|
423
|
-
if (element.type === BaseSection ||
|
|
424
|
-
element.type?.displayName === 'Section') {
|
|
425
|
-
const props = element.props;
|
|
426
|
-
const sectionChildren = Array.isArray(props.children)
|
|
427
|
-
? props.children
|
|
428
|
-
: [props.children];
|
|
429
|
-
const selectedItems = [];
|
|
430
|
-
const unselectedItems = [];
|
|
431
|
-
sectionChildren.forEach((sectionChild) => {
|
|
432
|
-
if (sectionChild && typeof sectionChild === 'object') {
|
|
433
|
-
const sectionElement = sectionChild;
|
|
434
|
-
if (sectionElement.type === ReactAriaItem ||
|
|
435
|
-
sectionElement.type?.displayName === 'Item') {
|
|
436
|
-
const clonedItem = cloneWithNormalizedKey(sectionElement);
|
|
437
|
-
if (isItemSelected(sectionElement)) {
|
|
438
|
-
selectedItems.push(clonedItem);
|
|
439
|
-
}
|
|
440
|
-
else {
|
|
441
|
-
unselectedItems.push(clonedItem);
|
|
442
|
-
}
|
|
443
|
-
}
|
|
444
|
-
else {
|
|
445
|
-
unselectedItems.push(sectionChild);
|
|
446
|
-
}
|
|
447
|
-
}
|
|
448
|
-
else {
|
|
449
|
-
unselectedItems.push(sectionChild);
|
|
450
|
-
}
|
|
451
|
-
});
|
|
452
|
-
// Create new section with sorted children, preserving React element properly
|
|
453
|
-
unselected.push(cloneElement(element, {
|
|
454
|
-
...element.props,
|
|
455
|
-
children: [...selectedItems, ...unselectedItems],
|
|
456
|
-
}));
|
|
457
|
-
}
|
|
458
|
-
// Handle non-section elements (items, dividers, etc.)
|
|
459
|
-
else {
|
|
460
|
-
const clonedItem = cloneWithNormalizedKey(element);
|
|
461
|
-
if (isItemSelected(element)) {
|
|
462
|
-
selected.push(clonedItem);
|
|
463
|
-
}
|
|
464
|
-
else {
|
|
465
|
-
unselected.push(clonedItem);
|
|
466
|
-
}
|
|
467
|
-
}
|
|
468
|
-
});
|
|
469
|
-
return [...selected, ...unselected];
|
|
470
|
-
};
|
|
471
|
-
// Sort the children
|
|
472
|
-
const childrenArray = Children.toArray(children);
|
|
473
|
-
const sortedChildren = sortChildrenArray(childrenArray);
|
|
474
|
-
// Cache the sorted order when popover opens or when we compute it for the
|
|
475
|
-
// first time before opening.
|
|
476
|
-
if (isPopoverOpen || !cachedChildrenOrder.current) {
|
|
477
|
-
cachedChildrenOrder.current = sortedChildren;
|
|
478
|
-
}
|
|
479
|
-
return sortedChildren;
|
|
480
|
-
}, [
|
|
481
|
-
children,
|
|
482
|
-
effectiveSelectedKeys,
|
|
483
|
-
effectiveSelectedKey,
|
|
484
|
-
selectionMode,
|
|
485
|
-
isPopoverOpen,
|
|
486
|
-
]);
|
|
239
|
+
// Return children as-is (no sorting for JSX children)
|
|
240
|
+
return children;
|
|
241
|
+
}, [children, sortSelectedToTop, sortSelectedToTopExplicit, items]);
|
|
487
242
|
// Compute sorted items array when using `items` prop
|
|
488
243
|
const getSortedItems = useCallback(() => {
|
|
489
244
|
if (!items)
|
|
490
245
|
return items;
|
|
246
|
+
// Only sort if explicitly enabled
|
|
247
|
+
if (!sortSelectedToTop) {
|
|
248
|
+
return items;
|
|
249
|
+
}
|
|
491
250
|
// Reuse the cached order if we have it. We only compute the sorted array
|
|
492
251
|
// once when the pop-over is opened. Cache is cleared on close.
|
|
493
252
|
if (cachedItemsOrder.current) {
|
|
@@ -556,6 +315,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
556
315
|
return sorted;
|
|
557
316
|
}, [
|
|
558
317
|
items,
|
|
318
|
+
sortSelectedToTop,
|
|
559
319
|
selectionMode,
|
|
560
320
|
isPopoverOpen,
|
|
561
321
|
selectionsWhenClosed.current.multiple,
|
|
@@ -631,7 +391,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
631
391
|
// Popover just closed – record the latest selection for the next opening
|
|
632
392
|
// and clear the cached order so the next session can compute afresh.
|
|
633
393
|
selectionsWhenClosed.current = { ...latestSelectionRef.current };
|
|
634
|
-
cachedChildrenOrder.current = null;
|
|
635
394
|
cachedItemsOrder.current = null;
|
|
636
395
|
}
|
|
637
396
|
}
|
|
@@ -680,7 +439,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
680
439
|
props.onClear?.();
|
|
681
440
|
return false;
|
|
682
441
|
});
|
|
683
|
-
return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
|
|
442
|
+
return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, id: triggerId, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
|
|
684
443
|
placeholder: !hasSelection,
|
|
685
444
|
selected: hasSelection,
|
|
686
445
|
...externalMods,
|
|
@@ -700,7 +459,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
700
459
|
gridRows: '1sf',
|
|
701
460
|
width: '30x max-content 50vw',
|
|
702
461
|
...popoverStyles,
|
|
703
|
-
}, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(FilterListBox, { autoFocus: true, items: items ? finalItems : undefined, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`, selectedKey: selectionMode === 'single' ? mappedSelectedKey : undefined, selectedKeys: selectionMode === 'multiple' ? mappedSelectedKeys : undefined, searchPlaceholder: searchPlaceholder, filter: filter, searchValue: searchValue, listStyles: listStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, listRef: listRef, disallowEmptySelection: disallowEmptySelection, emptyLabel: emptyLabel, searchInputStyles: searchInputStyles, searchInputRef: searchInputRef, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, allowsCustomValue: allowsCustomValue, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, isLoading: isLoading, stateRef: listStateRef, isCheckable: isCheckable, mods: {
|
|
462
|
+
}, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(FilterListBox, { autoFocus: true, items: items ? finalItems : undefined, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`, _internalCollection: localCollectionState.collection, selectedKey: selectionMode === 'single' ? mappedSelectedKey : undefined, selectedKeys: selectionMode === 'multiple' ? mappedSelectedKeys : undefined, searchPlaceholder: searchPlaceholder, filter: filter, searchValue: searchValue, listStyles: listStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, listRef: listRef, disallowEmptySelection: disallowEmptySelection, emptyLabel: emptyLabel, searchInputStyles: searchInputStyles, searchInputRef: searchInputRef, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, allowsCustomValue: allowsCustomValue, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, isLoading: isLoading, stateRef: listStateRef, isCheckable: isCheckable, mods: {
|
|
704
463
|
popover: true,
|
|
705
464
|
}, size: size === 'small' ? 'medium' : size, showSelectAll: showSelectAll, selectAllLabel: selectAllLabel, header: header, footer: footer, headerStyles: headerStyles, footerStyles: footerStyles, qa: `${props.qa || 'FilterPicker'}ListBox`, allValueProps: allValueProps, customValueProps: customValueProps, newCustomValueProps: newCustomValueProps, onSearchChange: onSearchChange, onEscape: () => close(), onOptionClick: (key) => {
|
|
706
465
|
// For FilterPicker, clicking the content area should close the popover
|
|
@@ -767,11 +526,19 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
767
526
|
}, children: (children
|
|
768
527
|
? finalChildren
|
|
769
528
|
: undefined) }) }) }))] }) }));
|
|
770
|
-
|
|
529
|
+
const finalProps = {
|
|
771
530
|
...props,
|
|
772
531
|
children: undefined,
|
|
773
532
|
styles: undefined,
|
|
774
|
-
}
|
|
533
|
+
};
|
|
534
|
+
// Ensure labelProps has the for attribute for label-trigger linking
|
|
535
|
+
if (!finalProps.labelProps) {
|
|
536
|
+
finalProps.labelProps = {};
|
|
537
|
+
}
|
|
538
|
+
if (!finalProps.labelProps.for) {
|
|
539
|
+
finalProps.labelProps.for = triggerId;
|
|
540
|
+
}
|
|
541
|
+
return wrapWithField(filterPickerField, ref, mergeProps(finalProps, {}));
|
|
775
542
|
});
|
|
776
543
|
FilterPicker.Item = ListBox.Item;
|
|
777
544
|
FilterPicker.Section = BaseSection;
|