@cube-dev/ui-kit 0.64.1 → 0.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- 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/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/index.js +1 -1
- package/es/components/actions/use-action.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 +25 -0
- package/es/components/content/HotKeys/index.js +10 -0
- 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 +5 -4
- 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 +1 -1
- package/es/components/fields/ComboBox/index.js +1 -1
- 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/Input/Input.js +1 -1
- package/es/components/fields/Input/index.js +1 -1
- package/es/components/fields/ListBox/ListBox.js +138 -158
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/es/components/fields/TextInputMapper/index.js +1 -1
- package/es/components/fields/index.js +1 -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/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/navigation/Link/Link.js +1 -1
- package/es/components/organisms/FileTabs/FileTabs.js +1 -1
- package/es/components/organisms/Modal/Modal.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/dialog-container.js +1 -1
- package/es/components/overlays/Dialog/index.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/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 +11 -0
- package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +3 -3
- package/es/components/overlays/NewNotifications/NotificationsContext/index.js +3 -2
- 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 +2 -2
- package/es/components/overlays/NewNotifications/index.js +2 -2
- 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 +1 -1
- package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/es/components/overlays/Tooltip/context.js +1 -1
- package/es/components/overlays/Tooltip/index.js +1 -1
- package/es/components/pickers/Menu/Menu.js +1 -1
- package/es/components/pickers/Menu/MenuButton.js +4 -5
- package/es/components/pickers/Menu/MenuItem.js +36 -5
- package/es/components/pickers/Menu/MenuSection.js +1 -1
- package/es/components/pickers/Menu/MenuTrigger.js +1 -1
- package/es/components/pickers/Menu/context.js +1 -1
- package/es/components/pickers/Menu/styled.js +2 -2
- 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/storybook/templates/CustomRoot.js +1 -1
- package/es/components/portal/storybook/templates/PortalOrder.js +1 -1
- package/es/components/portal/storybook/templates/basic.js +1 -1
- package/es/components/portal/storybook/templates/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/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 +12 -0
- package/es/icons/ChartAreaStackedPercentageIcon.js +12 -0
- package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/es/icons/ChartBarGroupedIcon.js +1 -1
- package/es/icons/ChartBarHorizontalIcon.js +2 -2
- package/es/icons/ChartBarLineIcon.js +1 -1
- package/es/icons/ChartBarStackedHorizontalIcon.js +2 -2
- package/es/icons/ChartBarStackedIcon.js +1 -1
- package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +2 -2
- package/es/icons/ChartBarStackedPercentageIcon.js +2 -2
- 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 +12 -0
- 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/DangerIcon.js +1 -1
- package/es/icons/DashboardIcon.js +1 -1
- package/es/icons/DatabaseIcon.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/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/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 +4 -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/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/index.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/marginBlock.js +1 -1
- package/es/tasty/styles/marginInline.js +1 -1
- package/es/tasty/styles/outline.js +1 -1
- package/es/tasty/styles/padding.js +1 -1
- package/es/tasty/styles/paddingBlock.js +1 -1
- package/es/tasty/styles/paddingInline.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 +4 -9
- package/es/tasty/utils/getDisplayName.js +1 -1
- package/es/tasty/utils/getModCombinations.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/index.js +1 -1
- 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/useCombinedRefs.js +1 -1
- package/es/utils/react/useId.js +1 -1
- package/es/utils/react/useIsDarwin.js +42 -0
- package/es/utils/react/useKeySymbols.js +81 -0
- 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 +5 -1
- package/types/components/content/HotKeys/HotKeys.d.ts +6 -0
- package/types/components/content/HotKeys/index.d.ts +2 -0
- package/types/components/fields/ListBox/ListBox.d.ts +3 -1
- package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.d.ts +5 -0
- package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.d.ts +0 -5
- package/types/components/overlays/NewNotifications/NotificationsContext/index.d.ts +2 -1
- package/types/components/overlays/NewNotifications/index.d.ts +1 -1
- package/types/components/pickers/Menu/Menu.d.ts +2 -0
- package/types/icons/ChartAreaStackedIcon.d.ts +4 -0
- package/types/icons/ChartAreaStackedPercentageIcon.d.ts +4 -0
- package/types/icons/ChartFunnelIcon.d.ts +4 -0
- package/types/icons/index.d.ts +3 -0
- package/types/index.d.ts +1 -0
- package/types/utils/react/useIsDarwin.d.ts +12 -0
- package/types/utils/react/useKeySymbols.d.ts +9 -0
@@ -1,19 +1,20 @@
|
|
1
1
|
/**
|
2
2
|
* @license MIT
|
3
3
|
* author: Cube Dev Team
|
4
|
-
* @cube-dev/ui-kit v0.
|
4
|
+
* @cube-dev/ui-kit v0.65.0
|
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 {
|
10
|
-
import { useFilter, useListBox, useListBoxSection, useOption, } from 'react-aria';
|
9
|
+
import { forwardRef, useCallback, useMemo, useRef, useState, } from 'react';
|
10
|
+
import { useFilter, useKeyboard, useListBox, useListBoxSection, useOption, } from 'react-aria';
|
11
11
|
import { Section as BaseSection, Item, useListState } from 'react-stately';
|
12
12
|
import { LoadingIcon, SearchIcon } from '../../../icons';
|
13
13
|
import { useProviderProps } from '../../../provider';
|
14
14
|
import { BASE_STYLES, COLOR_STYLES, extractStyles, OUTER_STYLES, tasty, } from '../../../tasty';
|
15
15
|
import { mergeProps, modAttrs, useCombinedRefs } from '../../../utils/react';
|
16
16
|
import { useFocus } from '../../../utils/react/interactions';
|
17
|
+
import { Block } from '../../Block';
|
17
18
|
import { useFieldProps, useFormProps, wrapWithField } from '../../form';
|
18
19
|
import { DEFAULT_INPUT_STYLES, INPUT_WRAPPER_STYLES, } from '../TextInput/TextInputBase';
|
19
20
|
const ListBoxWrapperElement = tasty({
|
@@ -182,74 +183,51 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
182
183
|
return fieldProps;
|
183
184
|
},
|
184
185
|
});
|
185
|
-
let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, isSearchable = false, searchPlaceholder = 'Search...', autoFocus, filter, searchInputStyles, listStyles, optionStyles, sectionStyles, headingStyles, searchInputRef, listRef, message, description, styles, labelSuffix, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, onSelectionChange, ...otherProps } = props;
|
186
|
+
let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, isSearchable = false, searchPlaceholder = 'Search...', autoFocus, filter, emptyLabel, searchInputStyles, listStyles, optionStyles, sectionStyles, headingStyles, searchInputRef, listRef, message, description, styles, labelSuffix, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, onSelectionChange, ...otherProps } = props;
|
186
187
|
const [searchValue, setSearchValue] = useState('');
|
187
188
|
const { contains } = useFilter({ sensitivity: 'base' });
|
188
|
-
//
|
189
|
-
|
190
|
-
|
191
|
-
|
189
|
+
// Choose the text filter function: user-provided `filter` prop (if any)
|
190
|
+
// or the default `contains` helper from `useFilter`.
|
191
|
+
const textFilterFn = useMemo(() => filter || contains, [filter, contains]);
|
192
|
+
// Collection-level filter function expected by `useListState`.
|
193
|
+
// It converts the text filter (textValue, searchValue) ⟶ boolean
|
194
|
+
// into the shape `(nodes) => Iterable<Node<T>>`.
|
195
|
+
// The current `searchValue` is captured in the closure – every re-render
|
196
|
+
// produces a new function so React Stately updates the collection when the
|
197
|
+
// search term changes.
|
198
|
+
const collectionFilter = useCallback((nodes) => {
|
199
|
+
const term = searchValue.trim();
|
200
|
+
// If there is no search term, return nodes untouched to avoid
|
201
|
+
// unnecessary object allocations.
|
202
|
+
if (!term) {
|
203
|
+
return nodes;
|
192
204
|
}
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
205
|
+
// Recursive helper to filter sections and items.
|
206
|
+
const filterNodes = (iter) => {
|
207
|
+
const result = [];
|
208
|
+
for (const node of iter) {
|
209
|
+
if (node.type === 'section') {
|
210
|
+
const filteredChildren = filterNodes(node.childNodes);
|
211
|
+
if (filteredChildren.length) {
|
212
|
+
// Preserve the original node but replace `childNodes` with the
|
213
|
+
// filtered iterable so that React-Stately can still traverse it.
|
214
|
+
result.push({
|
215
|
+
...node,
|
216
|
+
childNodes: filteredChildren,
|
217
|
+
});
|
218
|
+
}
|
219
|
+
}
|
220
|
+
else {
|
221
|
+
const text = node.textValue ?? String(node.rendered ?? '');
|
222
|
+
if (textFilterFn(text, term)) {
|
223
|
+
result.push(node);
|
224
|
+
}
|
225
|
+
}
|
212
226
|
}
|
213
|
-
return
|
214
|
-
};
|
215
|
-
// Filters a Section element and returns a cloned element with only the matching children.
|
216
|
-
const filterSection = (section) => {
|
217
|
-
if (!isValidElement(section))
|
218
|
-
return null;
|
219
|
-
const childrenArray = Children.toArray(section.props.children);
|
220
|
-
const filteredSectionChildren = childrenArray.filter(filterChild);
|
221
|
-
if (filteredSectionChildren.length === 0)
|
222
|
-
return null;
|
223
|
-
return cloneElement(section, { children: filteredSectionChildren });
|
227
|
+
return result;
|
224
228
|
};
|
225
|
-
|
226
|
-
|
227
|
-
.map((child) => {
|
228
|
-
if (isValidElement(child) &&
|
229
|
-
(child.type === BaseSection || child.props?.title)) {
|
230
|
-
return filterSection(child);
|
231
|
-
}
|
232
|
-
return filterChild(child) ? child : null;
|
233
|
-
})
|
234
|
-
.filter(Boolean);
|
235
|
-
return result.length === 0 ? null : result;
|
236
|
-
}, [isSearchable, searchValue, props.children, filter, contains]);
|
237
|
-
// Create filtered items based on search
|
238
|
-
const filteredItems = useMemo(() => {
|
239
|
-
if (!isSearchable || !searchValue.trim()) {
|
240
|
-
return props.items;
|
241
|
-
}
|
242
|
-
const filterFn = filter || contains;
|
243
|
-
if (props.items) {
|
244
|
-
return Array.from(props.items).filter((item) => {
|
245
|
-
const textValue = typeof item === 'string'
|
246
|
-
? item
|
247
|
-
: item?.textValue || item?.name || String(item);
|
248
|
-
return filterFn(textValue, searchValue);
|
249
|
-
});
|
250
|
-
}
|
251
|
-
return undefined;
|
252
|
-
}, [isSearchable, searchValue, props.items, filter, contains]);
|
229
|
+
return filterNodes(nodes);
|
230
|
+
}, [searchValue, textFilterFn]);
|
253
231
|
// Wrap onSelectionChange to prevent selection when disabled and handle React Aria's Set format
|
254
232
|
const externalSelectionHandler = onSelectionChange || props.onChange;
|
255
233
|
const wrappedOnSelectionChange = useMemo(() => {
|
@@ -281,8 +259,7 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
281
259
|
// Prepare props for useListState with correct selection props
|
282
260
|
const listStateProps = {
|
283
261
|
...props,
|
284
|
-
|
285
|
-
children: filteredChildren,
|
262
|
+
filter: collectionFilter,
|
286
263
|
onSelectionChange: wrappedOnSelectionChange,
|
287
264
|
isDisabled,
|
288
265
|
selectionMode: props.selectionMode || 'single',
|
@@ -304,36 +281,21 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
304
281
|
delete listStateProps.defaultSelectedKey;
|
305
282
|
}
|
306
283
|
else {
|
284
|
+
// For single-selection we convert the scalar key props that our public
|
285
|
+
// API exposes into the Set-based props that React Stately expects.
|
307
286
|
if (selectedKey !== undefined) {
|
308
|
-
listStateProps.
|
287
|
+
listStateProps.selectedKeys =
|
288
|
+
selectedKey == null ? new Set() : new Set([selectedKey]);
|
309
289
|
}
|
310
290
|
if (defaultSelectedKey !== undefined) {
|
311
|
-
// useListState expects a Set for uncontrolled selections, even in single-selection mode
|
312
|
-
// so convert the provided key into a Set. Passing an empty Set means no default selection.
|
313
291
|
listStateProps.defaultSelectedKeys =
|
314
292
|
defaultSelectedKey == null ? new Set() : new Set([defaultSelectedKey]);
|
315
293
|
}
|
316
|
-
// Remove
|
317
|
-
delete listStateProps.
|
294
|
+
// Remove the single-value props so we don't pass unsupported keys through.
|
295
|
+
delete listStateProps.selectedKey;
|
318
296
|
delete listStateProps.defaultSelectedKey;
|
319
297
|
}
|
320
298
|
const listState = useListState(listStateProps);
|
321
|
-
// Manually sync controlled selection if needed
|
322
|
-
useEffect(() => {
|
323
|
-
if (selectedKey !== undefined) {
|
324
|
-
const currentSelection = listState.selectionManager.selectedKeys;
|
325
|
-
const expectedSelection = selectedKey !== null ? new Set([selectedKey]) : new Set();
|
326
|
-
// Check if the current selection matches the expected selection
|
327
|
-
const currentKeys = Array.from(currentSelection);
|
328
|
-
const expectedKeys = Array.from(expectedSelection);
|
329
|
-
const selectionChanged = currentKeys.length !== expectedKeys.length ||
|
330
|
-
currentKeys.some((key) => !expectedSelection.has(key)) ||
|
331
|
-
expectedKeys.some((key) => !currentSelection.has(key));
|
332
|
-
if (selectionChanged) {
|
333
|
-
listState.selectionManager.setSelectedKeys(expectedSelection);
|
334
|
-
}
|
335
|
-
}
|
336
|
-
}, [selectedKey, listState.selectionManager]);
|
337
299
|
styles = extractStyles(otherProps, PROP_STYLES, styles);
|
338
300
|
ref = useCombinedRefs(ref);
|
339
301
|
searchInputRef = useCombinedRefs(searchInputRef);
|
@@ -347,6 +309,78 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
347
309
|
}, listState, listRef);
|
348
310
|
const { isFocused, focusProps } = useFocus({ isDisabled });
|
349
311
|
const isInvalid = validationState === 'invalid';
|
312
|
+
// Keyboard navigation handler for search input
|
313
|
+
const { keyboardProps } = useKeyboard({
|
314
|
+
onKeyDown: (e) => {
|
315
|
+
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
|
316
|
+
e.preventDefault();
|
317
|
+
const isArrowDown = e.key === 'ArrowDown';
|
318
|
+
const { selectionManager, collection } = listState;
|
319
|
+
const currentKey = selectionManager.focusedKey;
|
320
|
+
// Helper function to find next selectable item (skip section headers and disabled items)
|
321
|
+
const findNextSelectableKey = (startKey, direction) => {
|
322
|
+
let nextKey = startKey;
|
323
|
+
const keyGetter = direction === 'forward'
|
324
|
+
? collection.getKeyAfter.bind(collection)
|
325
|
+
: collection.getKeyBefore.bind(collection);
|
326
|
+
while (nextKey != null) {
|
327
|
+
const item = collection.getItem(nextKey);
|
328
|
+
// Use SelectionManager's canSelectItem method for proper validation
|
329
|
+
if (item &&
|
330
|
+
item.type !== 'section' &&
|
331
|
+
selectionManager.canSelectItem(nextKey)) {
|
332
|
+
return nextKey;
|
333
|
+
}
|
334
|
+
nextKey = keyGetter(nextKey);
|
335
|
+
}
|
336
|
+
return null;
|
337
|
+
};
|
338
|
+
// Helper function to find first/last selectable item
|
339
|
+
const findFirstLastSelectableKey = (direction) => {
|
340
|
+
const allKeys = Array.from(collection.getKeys());
|
341
|
+
const keysToCheck = direction === 'forward' ? allKeys : allKeys.reverse();
|
342
|
+
for (const key of keysToCheck) {
|
343
|
+
const item = collection.getItem(key);
|
344
|
+
if (item &&
|
345
|
+
item.type !== 'section' &&
|
346
|
+
selectionManager.canSelectItem(key)) {
|
347
|
+
return key;
|
348
|
+
}
|
349
|
+
}
|
350
|
+
return null;
|
351
|
+
};
|
352
|
+
let nextKey = null;
|
353
|
+
const direction = isArrowDown ? 'forward' : 'backward';
|
354
|
+
if (currentKey == null) {
|
355
|
+
// No current focus, find first/last selectable item
|
356
|
+
nextKey = findFirstLastSelectableKey(direction);
|
357
|
+
}
|
358
|
+
else {
|
359
|
+
// Find next selectable item from current position
|
360
|
+
const candidateKey = direction === 'forward'
|
361
|
+
? collection.getKeyAfter(currentKey)
|
362
|
+
: collection.getKeyBefore(currentKey);
|
363
|
+
nextKey = findNextSelectableKey(candidateKey, direction);
|
364
|
+
// If no next key found and focus wrapping is enabled, wrap to first/last selectable item
|
365
|
+
if (nextKey == null) {
|
366
|
+
nextKey = findFirstLastSelectableKey(direction);
|
367
|
+
}
|
368
|
+
}
|
369
|
+
if (nextKey != null) {
|
370
|
+
selectionManager.setFocusedKey(nextKey);
|
371
|
+
}
|
372
|
+
}
|
373
|
+
else if (e.key === 'Enter' || (e.key === ' ' && !searchValue.trim())) {
|
374
|
+
const focusedKey = listState.selectionManager.focusedKey;
|
375
|
+
if (focusedKey != null) {
|
376
|
+
e.preventDefault();
|
377
|
+
// Use the SelectionManager's select method which handles all selection logic
|
378
|
+
// including single vs multiple selection modes and modifier keys
|
379
|
+
listState.selectionManager.select(focusedKey, e);
|
380
|
+
}
|
381
|
+
}
|
382
|
+
},
|
383
|
+
});
|
350
384
|
const mods = useMemo(() => ({
|
351
385
|
invalid: isInvalid,
|
352
386
|
valid: validationState === 'valid',
|
@@ -362,74 +396,13 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
362
396
|
isLoading,
|
363
397
|
isSearchable,
|
364
398
|
]);
|
365
|
-
const searchInput = isSearchable ? (_jsxs(SearchWrapperElement, { mods: mods, "data-size": "small", children: [_jsx(SearchInputElement, { ref: searchInputRef, "data-is-prefix": true, type: "search", placeholder: searchPlaceholder, value: searchValue, disabled: isDisabled, autoFocus: autoFocus && isSearchable, "data-autofocus": autoFocus
|
399
|
+
const searchInput = isSearchable ? (_jsxs(SearchWrapperElement, { mods: mods, "data-size": "small", children: [_jsx(SearchInputElement, { ref: searchInputRef, "data-is-prefix": true, type: "search", placeholder: searchPlaceholder, value: searchValue, disabled: isDisabled, autoFocus: autoFocus && isSearchable, "data-autofocus": autoFocus ? '' : undefined, styles: searchInputStyles, "data-size": "small", "aria-controls": listBoxProps.id, "aria-activedescendant": listState.selectionManager.focusedKey != null
|
366
400
|
? `${listBoxProps.id}-option-${listState.selectionManager.focusedKey}`
|
367
|
-
: undefined, onChange: (e) =>
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
? listState.collection.getKeyAfter.bind(listState.collection)
|
373
|
-
: listState.collection.getKeyBefore.bind(listState.collection);
|
374
|
-
// Helper function to find next selectable item (skip section headers)
|
375
|
-
const findNextSelectableKey = (startKey) => {
|
376
|
-
let nextKey = startKey;
|
377
|
-
// Keep looking for a selectable item (not a section header)
|
378
|
-
while (nextKey != null) {
|
379
|
-
const item = listState.collection.getItem(nextKey);
|
380
|
-
if (item && item.type !== 'section') {
|
381
|
-
return nextKey;
|
382
|
-
}
|
383
|
-
nextKey = keyGetter(nextKey);
|
384
|
-
}
|
385
|
-
return null;
|
386
|
-
};
|
387
|
-
// Helper function to find first/last selectable item
|
388
|
-
const findFirstLastSelectableKey = () => {
|
389
|
-
const allKeys = Array.from(listState.collection.getKeys());
|
390
|
-
const keysToCheck = isArrowDown ? allKeys : allKeys.reverse();
|
391
|
-
for (const key of keysToCheck) {
|
392
|
-
const item = listState.collection.getItem(key);
|
393
|
-
if (item && item.type !== 'section') {
|
394
|
-
return key;
|
395
|
-
}
|
396
|
-
}
|
397
|
-
return null;
|
398
|
-
};
|
399
|
-
let nextKey;
|
400
|
-
const currentKey = listState.selectionManager.focusedKey;
|
401
|
-
if (currentKey == null) {
|
402
|
-
// No current focus, find first/last selectable item
|
403
|
-
nextKey = findFirstLastSelectableKey();
|
404
|
-
}
|
405
|
-
else {
|
406
|
-
// Find next selectable item from current position
|
407
|
-
const candidateKey = keyGetter(currentKey);
|
408
|
-
nextKey = findNextSelectableKey(candidateKey);
|
409
|
-
// If no next key found, wrap to first/last selectable item
|
410
|
-
if (nextKey == null) {
|
411
|
-
nextKey = findFirstLastSelectableKey();
|
412
|
-
}
|
413
|
-
}
|
414
|
-
if (nextKey != null) {
|
415
|
-
listState.selectionManager.setFocusedKey(nextKey);
|
416
|
-
}
|
417
|
-
}
|
418
|
-
else if (e.key === 'Enter' ||
|
419
|
-
(e.key === ' ' && props.selectionMode === 'multiple')) {
|
420
|
-
const focusedKey = listState.selectionManager.focusedKey;
|
421
|
-
if (focusedKey != null) {
|
422
|
-
e.preventDefault();
|
423
|
-
if (props.selectionMode === 'multiple') {
|
424
|
-
listState.selectionManager.toggleSelection(focusedKey);
|
425
|
-
}
|
426
|
-
else {
|
427
|
-
listState.selectionManager.select(focusedKey);
|
428
|
-
}
|
429
|
-
}
|
430
|
-
}
|
431
|
-
}, ...modAttrs(mods) }), _jsx("div", { "data-element": "Prefix", children: _jsx("div", { "data-element": "InputIcon", children: isLoading ? _jsx(LoadingIcon, {}) : _jsx(SearchIcon, {}) }) })] })) : null;
|
432
|
-
const listBoxField = (_jsxs(ListBoxWrapperElement, { ref: ref, qa: qa || 'ListBox', ...modAttrs(mods), styles: styles, ...focusProps, children: [searchInput, _jsx(ListElement, { ...listBoxProps, ref: listRef, styles: listStyles, "aria-disabled": isDisabled || undefined, children: (() => {
|
401
|
+
: undefined, onChange: (e) => {
|
402
|
+
const value = e.target.value;
|
403
|
+
setSearchValue(value);
|
404
|
+
}, ...keyboardProps, ...modAttrs(mods) }), _jsx("div", { "data-element": "Prefix", children: _jsx("div", { "data-element": "InputIcon", children: isLoading ? _jsx(LoadingIcon, {}) : _jsx(SearchIcon, {}) }) })] })) : null;
|
405
|
+
const listBoxField = (_jsxs(ListBoxWrapperElement, { ref: ref, qa: qa || 'ListBox', ...modAttrs(mods), styles: styles, ...focusProps, children: [searchInput, _jsx(ListElement, { ...listBoxProps, ref: listRef, styles: listStyles, "aria-disabled": isDisabled || undefined, ...(!isSearchable ? keyboardProps : {}), children: (() => {
|
433
406
|
const renderedItems = [];
|
434
407
|
let isFirstSection = true;
|
435
408
|
for (const item of listState.collection) {
|
@@ -444,6 +417,12 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
|
|
444
417
|
renderedItems.push(_jsx(Option, { item: item, state: listState, styles: optionStyles, isParentDisabled: isDisabled, validationState: validationState }, item.key));
|
445
418
|
}
|
446
419
|
}
|
420
|
+
// Show "No results found" message when there are no items after filtration
|
421
|
+
if (renderedItems.length === 0 &&
|
422
|
+
isSearchable &&
|
423
|
+
searchValue.trim()) {
|
424
|
+
return (_jsx("li", { children: _jsx(Block, { preset: "t4", color: "#dark-03", children: emptyLabel !== undefined ? emptyLabel : 'No results found' }) }));
|
425
|
+
}
|
447
426
|
return renderedItems;
|
448
427
|
})() })] }));
|
449
428
|
return wrapWithField(listBoxField, ref, mergeProps({ ...props, styles: undefined }, {}));
|
@@ -452,7 +431,8 @@ function Option({ item, state, styles, isParentDisabled, validationState }) {
|
|
452
431
|
const ref = useRef(null);
|
453
432
|
const isDisabled = isParentDisabled || state.disabledKeys.has(item.key);
|
454
433
|
const isSelected = state.selectionManager.isSelected(item.key);
|
455
|
-
const
|
434
|
+
const isFocused = state.selectionManager.focusedKey === item.key;
|
435
|
+
const { optionProps, isPressed } = useOption({
|
456
436
|
key: item.key,
|
457
437
|
isDisabled,
|
458
438
|
isSelected,
|
@@ -462,7 +442,7 @@ function Option({ item, state, styles, isParentDisabled, validationState }) {
|
|
462
442
|
const description = item?.props?.description;
|
463
443
|
return (_jsxs(OptionElement, { ...optionProps, ref: ref, mods: {
|
464
444
|
selected: isSelected,
|
465
|
-
focused:
|
445
|
+
focused: isFocused,
|
466
446
|
disabled: isDisabled,
|
467
447
|
pressed: isPressed,
|
468
448
|
valid: isSelected && validationState === 'valid',
|