@cube-dev/ui-kit 0.0.0-canary-e521c67 → 0.0.0-canary-810714b
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 +2 -7
- 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 +180 -696
- 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 +47 -42
- package/es/components/fields/FilterListBox/index.js +1 -1
- package/es/components/fields/FilterPicker/FilterPicker.js +311 -78
- 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/ListBox/ListBox.js +5 -35
- 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 +50 -56
- 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 +30 -21
- 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 +1 -2
- 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/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 +18 -30
- package/es/components/overlays/Tooltip/TooltipProvider.js +2 -2
- package/es/components/overlays/Tooltip/TooltipTrigger.js +7 -25
- 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 +1 -2
- 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 +6 -11
- 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 +30 -91
- package/types/components/fields/ComboBox/index.d.ts +1 -2
- package/types/components/fields/FilterListBox/FilterListBox.d.ts +0 -7
- package/types/components/fields/FilterPicker/FilterPicker.d.ts +2 -9
- package/types/components/fields/ListBox/ListBox.d.ts +0 -5
- package/types/components/fields/Select/Select.d.ts +1 -2
- package/types/components/fields/Switch/Switch.d.ts +2 -1
- package/types/components/fields/index.d.ts +0 -1
- 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 +0 -5
- package/types/components/overlays/Tooltip/context.d.ts +1 -6
- package/types/index.d.ts +0 -2
- package/types/utils/react/index.d.ts +1 -1
- package/types/utils/react/useCombinedRefs.d.ts +2 -3
- package/es/components/fields/LegacyComboBox/LegacyComboBox.js +0 -290
- package/es/components/fields/LegacyComboBox/index.js +0 -10
- package/es/components/helpers/DisplayTransition/DisplayTransition.js +0 -242
- package/es/components/helpers/index.js +0 -10
- package/types/components/fields/LegacyComboBox/LegacyComboBox.d.ts +0 -49
- package/types/components/fields/LegacyComboBox/index.d.ts +0 -1
- package/types/components/helpers/DisplayTransition/DisplayTransition.d.ts +0 -24
- package/types/components/helpers/index.d.ts +0 -1
|
@@ -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-810714b
|
|
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 { forwardRef, useCallback, useEffect,
|
|
9
|
+
import { Children, cloneElement, forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
|
|
10
10
|
import { FocusScope, useKeyboard } from 'react-aria';
|
|
11
|
-
import { Section as BaseSection,
|
|
11
|
+
import { Section as BaseSection, Item as ReactAriaItem, } 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,15 +63,8 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
63
63
|
return fieldProps;
|
|
64
64
|
},
|
|
65
65
|
});
|
|
66
|
-
let { qa, label, extra,
|
|
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);
|
|
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;
|
|
71
67
|
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;
|
|
75
68
|
// Generate a unique ID for this FilterPicker instance
|
|
76
69
|
const filterPickerId = useMemo(() => generateRandomId(), []);
|
|
77
70
|
// Get event bus for menu synchronization
|
|
@@ -88,6 +81,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
88
81
|
const [internalSelectedKeys, setInternalSelectedKeys] = useState(defaultSelectedKeys ?? []);
|
|
89
82
|
// Track popover open/close and capture children order for session
|
|
90
83
|
const [isPopoverOpen, setIsPopoverOpen] = useState(false);
|
|
84
|
+
const cachedChildrenOrder = useRef(null);
|
|
91
85
|
// Cache for sorted items array when using `items` prop
|
|
92
86
|
const cachedItemsOrder = useRef(null);
|
|
93
87
|
const triggerRef = useRef(null);
|
|
@@ -98,6 +92,9 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
98
92
|
// session (which caused only the previously selected options to be rendered
|
|
99
93
|
// or the list to appear unsorted).
|
|
100
94
|
// ---------------------------------------------------------------------------
|
|
95
|
+
useEffect(() => {
|
|
96
|
+
cachedChildrenOrder.current = null;
|
|
97
|
+
}, [children]);
|
|
101
98
|
useEffect(() => {
|
|
102
99
|
cachedItemsOrder.current = null;
|
|
103
100
|
}, [items]);
|
|
@@ -109,47 +106,73 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
109
106
|
const effectiveSelectedKeys = isControlledMultiple
|
|
110
107
|
? selectedKeys
|
|
111
108
|
: internalSelectedKeys;
|
|
112
|
-
//
|
|
113
|
-
//
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
109
|
+
// Utility: remove React's ".$" / "." prefixes from element keys so that we
|
|
110
|
+
// can compare them with user-provided keys.
|
|
111
|
+
const normalizeKeyValue = (key) => {
|
|
112
|
+
if (key == null)
|
|
113
|
+
return '';
|
|
114
|
+
// React escapes "=" as "=0" and ":" as "=2" when it stores keys internally.
|
|
115
|
+
// We strip the possible React prefixes first and then un-escape those sequences
|
|
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
|
+
};
|
|
119
128
|
// ---------------------------------------------------------------------------
|
|
120
|
-
// Map
|
|
121
|
-
//
|
|
122
|
-
//
|
|
129
|
+
// Map public-facing keys (without React's "." prefix) to the actual React
|
|
130
|
+
// element keys that appear in the collection (which usually have the `.$`
|
|
131
|
+
// or `.` prefix added by React when children are in an array). This ensures
|
|
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.
|
|
123
134
|
// ---------------------------------------------------------------------------
|
|
124
|
-
const
|
|
135
|
+
const findReactKey = useCallback((lookup) => {
|
|
125
136
|
if (lookup == null)
|
|
126
137
|
return lookup;
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
138
|
+
const normalizedLookup = normalizeKeyValue(lookup);
|
|
139
|
+
let foundKey = lookup;
|
|
140
|
+
const traverse = (nodes) => {
|
|
141
|
+
Children.forEach(nodes, (child) => {
|
|
142
|
+
if (!child || typeof child !== 'object')
|
|
143
|
+
return;
|
|
144
|
+
const element = child;
|
|
145
|
+
if (element.key != null) {
|
|
146
|
+
if (normalizeKeyValue(element.key) === normalizedLookup) {
|
|
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]);
|
|
136
161
|
const mappedSelectedKey = useMemo(() => {
|
|
137
162
|
if (selectionMode !== 'single')
|
|
138
163
|
return null;
|
|
139
|
-
return effectiveSelectedKey
|
|
140
|
-
|
|
141
|
-
: null;
|
|
142
|
-
}, [selectionMode, effectiveSelectedKey, findCollectionKey]);
|
|
164
|
+
return effectiveSelectedKey ? findReactKey(effectiveSelectedKey) : null;
|
|
165
|
+
}, [selectionMode, effectiveSelectedKey, findReactKey]);
|
|
143
166
|
const mappedSelectedKeys = useMemo(() => {
|
|
144
167
|
if (selectionMode !== 'multiple')
|
|
145
168
|
return undefined;
|
|
146
169
|
if (effectiveSelectedKeys === 'all')
|
|
147
170
|
return 'all';
|
|
148
171
|
if (Array.isArray(effectiveSelectedKeys)) {
|
|
149
|
-
return effectiveSelectedKeys.map((k) =>
|
|
172
|
+
return effectiveSelectedKeys.map((k) => findReactKey(k));
|
|
150
173
|
}
|
|
151
174
|
return effectiveSelectedKeys;
|
|
152
|
-
}, [selectionMode, effectiveSelectedKeys,
|
|
175
|
+
}, [selectionMode, effectiveSelectedKeys, findReactKey]);
|
|
153
176
|
// Given an iterable of keys (array or Set) toggle membership for duplicates
|
|
154
177
|
const processSelectionArray = (iterable) => {
|
|
155
178
|
const resultSet = new Set();
|
|
@@ -164,42 +187,149 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
164
187
|
}
|
|
165
188
|
return Array.from(resultSet);
|
|
166
189
|
};
|
|
167
|
-
// Helper to get selected item labels for display
|
|
190
|
+
// Helper to get selected item labels for display
|
|
168
191
|
const getSelectedLabels = () => {
|
|
169
|
-
const collection = localCollectionState.collection;
|
|
170
192
|
// Handle "all" selection - return all available labels
|
|
171
193
|
if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
|
|
172
194
|
const allLabels = [];
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
195
|
+
// Extract from items prop if available
|
|
196
|
+
if (items) {
|
|
197
|
+
const extractFromItems = (itemsArray) => {
|
|
198
|
+
itemsArray.forEach((item) => {
|
|
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;
|
|
177
252
|
}
|
|
178
253
|
return allLabels;
|
|
179
254
|
}
|
|
180
255
|
const selectedSet = new Set(selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
|
|
181
|
-
? (effectiveSelectedKeys || []).map((k) =>
|
|
256
|
+
? (effectiveSelectedKeys || []).map((k) => normalizeKeyValue(k))
|
|
182
257
|
: effectiveSelectedKey != null
|
|
183
|
-
? [
|
|
258
|
+
? [normalizeKeyValue(effectiveSelectedKey)]
|
|
184
259
|
: []);
|
|
185
260
|
const labels = [];
|
|
186
261
|
const processedKeys = new Set();
|
|
187
|
-
//
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
262
|
+
// Extract from items prop if available
|
|
263
|
+
if (items) {
|
|
264
|
+
const extractFromItems = (itemsArray) => {
|
|
265
|
+
itemsArray.forEach((item) => {
|
|
266
|
+
if (item && typeof item === 'object') {
|
|
267
|
+
const itemObj = item;
|
|
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);
|
|
193
323
|
}
|
|
194
|
-
// Handle custom values that
|
|
324
|
+
// Handle custom values that don't have corresponding items/children
|
|
195
325
|
const selectedKeysArr = selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
|
|
196
326
|
? (effectiveSelectedKeys || []).map(String)
|
|
197
327
|
: effectiveSelectedKey != null
|
|
198
328
|
? [String(effectiveSelectedKey)]
|
|
199
329
|
: [];
|
|
200
|
-
// Add labels for any selected keys that weren't
|
|
330
|
+
// Add labels for any selected keys that weren't processed (custom values)
|
|
201
331
|
selectedKeysArr.forEach((key) => {
|
|
202
|
-
if (!processedKeys.has(
|
|
332
|
+
if (!processedKeys.has(normalizeKeyValue(key))) {
|
|
203
333
|
// This is a custom value, use the key as the label
|
|
204
334
|
labels.push(key);
|
|
205
335
|
}
|
|
@@ -231,22 +361,133 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
231
361
|
}, []); // run only once on mount
|
|
232
362
|
// Function to sort children with selected items on top
|
|
233
363
|
const getSortedChildren = useCallback(() => {
|
|
234
|
-
//
|
|
235
|
-
if (
|
|
236
|
-
|
|
237
|
-
|
|
364
|
+
// If children is not provided or is a render function, return it as-is
|
|
365
|
+
if (!children || typeof children === 'function')
|
|
366
|
+
return children;
|
|
367
|
+
// Reuse the cached order if we have it. We only want to compute the sorted
|
|
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;
|
|
238
389
|
}
|
|
239
|
-
//
|
|
240
|
-
|
|
241
|
-
|
|
390
|
+
// Create selected keys set for fast lookup
|
|
391
|
+
const selectedSet = new Set();
|
|
392
|
+
if (selectionMode === 'multiple') {
|
|
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
|
+
]);
|
|
242
487
|
// Compute sorted items array when using `items` prop
|
|
243
488
|
const getSortedItems = useCallback(() => {
|
|
244
489
|
if (!items)
|
|
245
490
|
return items;
|
|
246
|
-
// Only sort if explicitly enabled
|
|
247
|
-
if (!sortSelectedToTop) {
|
|
248
|
-
return items;
|
|
249
|
-
}
|
|
250
491
|
// Reuse the cached order if we have it. We only compute the sorted array
|
|
251
492
|
// once when the pop-over is opened. Cache is cleared on close.
|
|
252
493
|
if (cachedItemsOrder.current) {
|
|
@@ -315,7 +556,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
315
556
|
return sorted;
|
|
316
557
|
}, [
|
|
317
558
|
items,
|
|
318
|
-
sortSelectedToTop,
|
|
319
559
|
selectionMode,
|
|
320
560
|
isPopoverOpen,
|
|
321
561
|
selectionsWhenClosed.current.multiple,
|
|
@@ -391,6 +631,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
391
631
|
// Popover just closed – record the latest selection for the next opening
|
|
392
632
|
// and clear the cached order so the next session can compute afresh.
|
|
393
633
|
selectionsWhenClosed.current = { ...latestSelectionRef.current };
|
|
634
|
+
cachedChildrenOrder.current = null;
|
|
394
635
|
cachedItemsOrder.current = null;
|
|
395
636
|
}
|
|
396
637
|
}
|
|
@@ -439,7 +680,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
439
680
|
props.onClear?.();
|
|
440
681
|
return false;
|
|
441
682
|
});
|
|
442
|
-
return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true,
|
|
683
|
+
return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
|
|
443
684
|
placeholder: !hasSelection,
|
|
444
685
|
selected: hasSelection,
|
|
445
686
|
...externalMods,
|
|
@@ -459,7 +700,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
459
700
|
gridRows: '1sf',
|
|
460
701
|
width: '30x max-content 50vw',
|
|
461
702
|
...popoverStyles,
|
|
462
|
-
}, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(FilterListBox, { autoFocus: true, items: items ? finalItems : undefined, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`,
|
|
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: {
|
|
463
704
|
popover: true,
|
|
464
705
|
}, 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) => {
|
|
465
706
|
// For FilterPicker, clicking the content area should close the popover
|
|
@@ -526,19 +767,11 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
|
|
|
526
767
|
}, children: (children
|
|
527
768
|
? finalChildren
|
|
528
769
|
: undefined) }) }) }))] }) }));
|
|
529
|
-
|
|
770
|
+
return wrapWithField(filterPickerField, ref, mergeProps({
|
|
530
771
|
...props,
|
|
531
772
|
children: undefined,
|
|
532
773
|
styles: undefined,
|
|
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, {}));
|
|
774
|
+
}, {}));
|
|
542
775
|
});
|
|
543
776
|
FilterPicker.Item = ListBox.Item;
|
|
544
777
|
FilterPicker.Section = BaseSection;
|
|
@@ -1,7 +1,7 @@
|
|
|
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-810714b
|
|
5
5
|
* Released under the MIT license.
|
|
6
6
|
*/
|
|
7
7
|
|
|
@@ -9,7 +9,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
9
9
|
import { useHover } from '@react-aria/interactions';
|
|
10
10
|
import { IconMinus } from '@tabler/icons-react';
|
|
11
11
|
import { useVirtualizer } from '@tanstack/react-virtual';
|
|
12
|
-
import { forwardRef, useEffect,
|
|
12
|
+
import { forwardRef, useEffect, useMemo, useRef, useState, } from 'react';
|
|
13
13
|
import { useKeyboard, useListBox, useListBoxSection, useOption, } from 'react-aria';
|
|
14
14
|
import { Section as BaseSection, useListState } from 'react-stately';
|
|
15
15
|
import { useWarn } from '../../../_internal/hooks/use-warn';
|
|
@@ -240,12 +240,8 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
|
240
240
|
return fieldProps;
|
|
241
241
|
},
|
|
242
242
|
});
|
|
243
|
-
let { qa, label, extra,
|
|
244
|
-
// Generate ID for label-listbox linking if not provided
|
|
245
|
-
const generatedId = useId();
|
|
246
|
-
const listBoxId = id || generatedId;
|
|
243
|
+
let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, listStyles, optionStyles, sectionStyles, headingStyles, listRef, message, description, styles, mods: externalMods, size = 'medium', labelSuffix, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, shouldUseVirtualFocus, onSelectionChange, stateRef, focusOnHover, header, footer, headerStyles, footerStyles, onEscape, isCheckable, onOptionClick, showSelectAll, selectAllLabel, allValueProps, ...otherProps } = props;
|
|
247
244
|
const [, forceUpdate] = useState({});
|
|
248
|
-
const lastSelectedKeyRef = useRef(null);
|
|
249
245
|
// Wrap onSelectionChange to prevent selection when disabled and handle React Aria's Set format
|
|
250
246
|
const externalSelectionHandler = onSelectionChange || props.onChange;
|
|
251
247
|
const wrappedOnSelectionChange = useMemo(() => {
|
|
@@ -263,26 +259,16 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
|
263
259
|
}
|
|
264
260
|
else if (keys instanceof Set) {
|
|
265
261
|
if (keys.size === 0) {
|
|
266
|
-
if (disableSelectionToggle && props.selectionMode === 'single') {
|
|
267
|
-
const prevKey = lastSelectedKeyRef.current;
|
|
268
|
-
if (prevKey != null) {
|
|
269
|
-
externalSelectionHandler(prevKey);
|
|
270
|
-
return;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
262
|
externalSelectionHandler(props.selectionMode === 'multiple' ? [] : null);
|
|
274
263
|
}
|
|
275
264
|
else if (props.selectionMode === 'multiple') {
|
|
276
265
|
externalSelectionHandler(Array.from(keys));
|
|
277
266
|
}
|
|
278
267
|
else {
|
|
279
|
-
|
|
280
|
-
lastSelectedKeyRef.current = key ?? null;
|
|
281
|
-
externalSelectionHandler(key);
|
|
268
|
+
externalSelectionHandler(Array.from(keys)[0]);
|
|
282
269
|
}
|
|
283
270
|
}
|
|
284
271
|
else {
|
|
285
|
-
lastSelectedKeyRef.current = keys;
|
|
286
272
|
externalSelectionHandler(keys);
|
|
287
273
|
}
|
|
288
274
|
};
|
|
@@ -335,13 +321,6 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
|
335
321
|
const listState = useListState({
|
|
336
322
|
...listStateProps,
|
|
337
323
|
});
|
|
338
|
-
useLayoutEffect(() => {
|
|
339
|
-
const selected = listState.selectionManager.selectedKeys;
|
|
340
|
-
if (selected && selected.size > 0) {
|
|
341
|
-
const first = Array.from(selected)[0];
|
|
342
|
-
lastSelectedKeyRef.current = first ?? null;
|
|
343
|
-
}
|
|
344
|
-
}, [listState.selectionManager.selectedKeys]);
|
|
345
324
|
// Calculate select all state for multiple selection mode
|
|
346
325
|
const selectAllState = useMemo(() => {
|
|
347
326
|
// Select-all only makes sense for multiple selection mode *and* when the UI is enabled
|
|
@@ -431,7 +410,6 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
|
431
410
|
listRef = useCombinedRefs(listRef);
|
|
432
411
|
const { listBoxProps } = useListBox({
|
|
433
412
|
...props,
|
|
434
|
-
id: listBoxId,
|
|
435
413
|
'aria-label': props['aria-label'] || label?.toString(),
|
|
436
414
|
isDisabled,
|
|
437
415
|
shouldUseVirtualFocus: shouldUseVirtualFocus ?? false,
|
|
@@ -564,15 +542,7 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
|
564
542
|
}
|
|
565
543
|
return renderedItems;
|
|
566
544
|
})() }) }), footer ? (_jsx(StyledFooter, { styles: footerStyles, "data-size": size, children: footer })) : (_jsx("div", { role: "presentation" }))] }));
|
|
567
|
-
|
|
568
|
-
// Ensure labelProps has the for attribute for label-listbox linking
|
|
569
|
-
if (!finalProps.labelProps) {
|
|
570
|
-
finalProps.labelProps = {};
|
|
571
|
-
}
|
|
572
|
-
if (!finalProps.labelProps.for) {
|
|
573
|
-
finalProps.labelProps.for = listBoxId;
|
|
574
|
-
}
|
|
575
|
-
return wrapWithField(listBoxField, ref, mergeProps(finalProps, {}));
|
|
545
|
+
return wrapWithField(listBoxField, ref, mergeProps({ ...props, styles: undefined }, {}));
|
|
576
546
|
});
|
|
577
547
|
function Option({ size = 'medium', item, state, styles, isParentDisabled, validationState, focusOnHover = false, isCheckable, onClick: onOptionClick, virtualStyle, virtualRef, virtualIndex, lastFocusSourceRef, }) {
|
|
578
548
|
const localRef = useRef(null);
|