@cube-dev/ui-kit 0.120.1 → 0.121.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +20 -0
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.d.ts +1 -0
- package/dist/components/actions/Button/Button.js +34 -14
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.d.ts +47 -0
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +105 -0
- package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -0
- package/dist/components/actions/ButtonSplit/context.d.ts +18 -0
- package/dist/components/actions/ButtonSplit/context.js +12 -0
- package/dist/components/actions/ButtonSplit/context.js.map +1 -0
- package/dist/components/actions/ButtonSplit/index.d.ts +3 -0
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.d.ts +2 -2
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.d.ts +8 -3
- package/dist/components/actions/index.js +10 -5
- package/dist/components/actions/index.js.map +1 -1
- package/dist/components/actions/use-action.d.ts +1 -0
- package/dist/components/actions/use-action.js +21 -18
- package/dist/components/actions/use-action.js.map +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +2 -1
- package/dist/components/content/Badge/Badge.js.map +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +5 -2
- package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +3 -2
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +2 -1
- package/dist/components/content/Tag/Tag.js.map +1 -1
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/intl.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +2 -2
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +2 -2
- package/dist/components/fields/RadioGroup/Radio.js +3 -1
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.d.ts +8 -2
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +2 -1
- package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +3 -1
- package/dist/components/navigation/Tabs/styled.js.map +1 -1
- package/dist/components/navigation/Tabs/types.d.ts +2 -2
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/types.js.map +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +2 -2
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransition.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +6 -6
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.js +7 -5
- package/dist/index.js.map +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/BaseProperties.md +78 -0
- package/docs/ComplexLayout.md +459 -0
- package/docs/CreateComponent.md +410 -0
- package/docs/FieldProperties.md +117 -0
- package/docs/Introduction.md +122 -0
- package/docs/RenderCache.md +177 -0
- package/docs/Result.md +42 -0
- package/docs/SimpleLayout.md +26 -0
- package/docs/Typography.md +38 -0
- package/docs/components/Block.md +33 -0
- package/docs/components/CollectionItem.md +293 -0
- package/docs/components/GridProvider.md +38 -0
- package/docs/components/Root.md +50 -0
- package/docs/components/actions/Action.md +47 -0
- package/docs/components/actions/Banner.md +195 -0
- package/docs/components/actions/Button.md +209 -0
- package/docs/components/actions/ButtonGroup.md +46 -0
- package/docs/components/actions/ButtonSplit.md +199 -0
- package/docs/components/actions/CommandMenu.md +422 -0
- package/docs/components/actions/ItemAction.md +60 -0
- package/docs/components/actions/ItemButton.md +316 -0
- package/docs/components/actions/Link.md +325 -0
- package/docs/components/actions/Menu.md +485 -0
- package/docs/components/actions/MenuTrigger.md +47 -0
- package/docs/components/actions/SubMenuTrigger.md +38 -0
- package/docs/components/actions/use-anchored-menu.md +209 -0
- package/docs/components/actions/use-context-menu.md +218 -0
- package/docs/components/content/ActiveZone.md +37 -0
- package/docs/components/content/Alert.md +40 -0
- package/docs/components/content/Avatar.md +37 -0
- package/docs/components/content/Badge.md +194 -0
- package/docs/components/content/Card.md +40 -0
- package/docs/components/content/Content.md +44 -0
- package/docs/components/content/CopyPasteBlock.md +36 -0
- package/docs/components/content/CopySnippet.md +43 -0
- package/docs/components/content/Disclosure.md +181 -0
- package/docs/components/content/Divider.md +39 -0
- package/docs/components/content/Footer.md +35 -0
- package/docs/components/content/Header.md +35 -0
- package/docs/components/content/HotKeys.md +352 -0
- package/docs/components/content/Item.md +499 -0
- package/docs/components/content/ItemBadge.md +31 -0
- package/docs/components/content/ItemCard.md +131 -0
- package/docs/components/content/Layout.md +843 -0
- package/docs/components/content/Paragraph.md +32 -0
- package/docs/components/content/Placeholder.md +37 -0
- package/docs/components/content/PrismCode.md +36 -0
- package/docs/components/content/PrismDiffCode.md +29 -0
- package/docs/components/content/Result.md +46 -0
- package/docs/components/content/Skeleton.md +35 -0
- package/docs/components/content/Tag.md +165 -0
- package/docs/components/content/Text.md +54 -0
- package/docs/components/content/TextItem.md +217 -0
- package/docs/components/content/Title.md +45 -0
- package/docs/components/fields/Checkbox.md +176 -0
- package/docs/components/fields/ComboBox.md +651 -0
- package/docs/components/fields/DatePicker.md +227 -0
- package/docs/components/fields/FileInput.md +194 -0
- package/docs/components/fields/FilterListBox.md +726 -0
- package/docs/components/fields/FilterPicker.md +776 -0
- package/docs/components/fields/HueSlider.md +175 -0
- package/docs/components/fields/ListBox.md +714 -0
- package/docs/components/fields/NumberInput.md +180 -0
- package/docs/components/fields/PasswordInput.md +214 -0
- package/docs/components/fields/Picker.md +906 -0
- package/docs/components/fields/RadioGroup.md +310 -0
- package/docs/components/fields/SearchInput.md +224 -0
- package/docs/components/fields/Select.md +576 -0
- package/docs/components/fields/Slider.md +53 -0
- package/docs/components/fields/Switch.md +169 -0
- package/docs/components/fields/TextArea.md +61 -0
- package/docs/components/fields/TextInput.md +205 -0
- package/docs/components/fields/TextInputMapper.md +34 -0
- package/docs/components/form/Field.md +333 -0
- package/docs/components/form/Form.md +644 -0
- package/docs/components/form/FormInstance.md +307 -0
- package/docs/components/helpers/DisplayTransition.md +268 -0
- package/docs/components/helpers/IconSwitch.md +160 -0
- package/docs/components/layout/Flex.md +51 -0
- package/docs/components/layout/Flow.md +32 -0
- package/docs/components/layout/Grid.md +46 -0
- package/docs/components/layout/Panel.md +65 -0
- package/docs/components/layout/Prefix.md +37 -0
- package/docs/components/layout/ResizablePanel.md +69 -0
- package/docs/components/layout/Space.md +44 -0
- package/docs/components/layout/Suffix.md +39 -0
- package/docs/components/navigation/Tabs.md +726 -0
- package/docs/components/organisms/FileTabs.md +39 -0
- package/docs/components/organisms/StatsCard.md +40 -0
- package/docs/components/other/CloudLogo.md +33 -0
- package/docs/components/overlays/AlertDialog.md +51 -0
- package/docs/components/overlays/Dialog.md +200 -0
- package/docs/components/overlays/DialogContainer.md +201 -0
- package/docs/components/overlays/DialogForm.md +295 -0
- package/docs/components/overlays/DialogTrigger.md +191 -0
- package/docs/components/overlays/Notifications.md +402 -0
- package/docs/components/overlays/Toast.md +289 -0
- package/docs/components/overlays/Tooltip.md +400 -0
- package/docs/components/overlays/TooltipProvider.md +42 -0
- package/docs/components/overlays/TooltipTrigger.md +42 -0
- package/docs/components/overlays/UseDialogContainer.md +597 -0
- package/docs/components/portal/Portal.md +29 -0
- package/docs/components/status/LoadingAnimation.md +27 -0
- package/docs/components/status/Spin.md +35 -0
- package/docs/tasty/configuration.md +211 -0
- package/docs/tasty/debug.md +505 -0
- package/docs/tasty/injector.md +528 -0
- package/docs/tasty/styles.md +567 -0
- package/docs/tasty/tasty-static.md +376 -0
- package/docs/tasty/usage.md +643 -0
- package/package.json +5 -9
|
@@ -0,0 +1,651 @@
|
|
|
1
|
+
# ComboBox
|
|
2
|
+
|
|
3
|
+
A combobox component that combines a text input with a dropdown list, allowing users to either select from predefined options or enter custom values. It features automatic filtering, keyboard navigation, and supports both controlled and uncontrolled modes.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When users need to select from a large list of options and benefit from filtering by typing
|
|
8
|
+
- When you want to provide suggestions while allowing custom input values
|
|
9
|
+
- When you need a searchable dropdown with keyboard navigation support
|
|
10
|
+
- When the list of options is dynamic and can be filtered based on user input
|
|
11
|
+
- When you need a more flexible alternative to standard Select components
|
|
12
|
+
- When you want the selected item to appear first in the dropdown (using `items` prop with `sortSelectedToTop`)
|
|
13
|
+
|
|
14
|
+
## Component
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
### Properties
|
|
19
|
+
|
|
20
|
+
- **`children`** `ReactNode` — ComboBox.Item elements that define the available options
|
|
21
|
+
- **`placeholder`** `string` — Placeholder text when input is empty
|
|
22
|
+
- **`icon`** `ReactNode` — Icon element rendered before the input
|
|
23
|
+
- **`inputValue`** `string` — The current text value in controlled mode
|
|
24
|
+
- **`defaultInputValue`** `string` — The default text value in uncontrolled mode
|
|
25
|
+
- **`description`** `string` — Description text displayed below the input
|
|
26
|
+
- **`message`** `string` — Message text displayed below the input (validation message)
|
|
27
|
+
- **`selectedKey`** `string` — The currently selected key (controlled)
|
|
28
|
+
- **`defaultSelectedKey`** `string` — The key of the initially selected item (uncontrolled)
|
|
29
|
+
- **`allowsCustomValue`** `boolean` (default: `false`) — Whether the combo box allows custom values to be entered
|
|
30
|
+
- **`shouldCommitOnBlur`** `boolean` (default: `true`) — Whether to commit custom value on blur in allowsCustomValue mode
|
|
31
|
+
- **`clearOnBlur`** `boolean` (default: `false`) — Whether to clear selection and input on blur (only applies to non-custom-value mode)
|
|
32
|
+
- **`isClearable`** `boolean` (default: `false`) — Whether the combo box is clearable using ESC keyboard button or clear button inside the input
|
|
33
|
+
- **`sortSelectedToTop`** `boolean` (default: `true when items provided, false otherwise`) — Whether to sort selected item to the top when popover opens (only works with items prop)
|
|
34
|
+
- **`popoverTrigger`** `'focus' | 'input' | 'manual'` (default: `input`) — How the popover is triggered
|
|
35
|
+
- **`filter`** `((textValue: string, inputValue: string) => boolean) | false` — Custom filter function or false to disable filtering. If not provided, uses default contains filter
|
|
36
|
+
- **`hideTrigger`** `boolean` (default: `false`) — Whether to hide the trigger button
|
|
37
|
+
- **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — ComboBox size
|
|
38
|
+
- **`necessityIndicator`** `'label' | 'icon'` — How the required state should be indicated
|
|
39
|
+
- **`onSelectionChange`** `(key: Key | null) => void` — Callback fired when the selected option changes
|
|
40
|
+
- **`onInputChange`** `(value: string) => void` — Callback fired when the input text changes
|
|
41
|
+
- **`onOpenChange`** `(isOpen: boolean) => void` — Callback fired when the popover opens or closes
|
|
42
|
+
- **`prefix`** `ReactNode` — Content rendered before the input
|
|
43
|
+
- **`suffix`** `ReactNode` — Content rendered after the input
|
|
44
|
+
- **`suffixPosition`** `'before' | 'after'` (default: `before`) — Position of suffix relative to validation/loading icons
|
|
45
|
+
- **`onClear`** `() => void` — Callback fired when the clear action is triggered
|
|
46
|
+
- **`direction`** `'top' | 'bottom'` (default: `bottom`) — Preferred direction for the dropdown
|
|
47
|
+
- **`shouldFlip`** `boolean` (default: `true`) — Whether the dropdown should flip to fit in viewport
|
|
48
|
+
- **`overlayOffset`** `number` (default: `8`) — Distance between input and dropdown in pixels
|
|
49
|
+
- **`onFocus`** `() => void` — Callback fired when focus enters the ComboBox
|
|
50
|
+
- **`onBlur`** `() => void` — Callback fired when focus leaves the ComboBox
|
|
51
|
+
|
|
52
|
+
#### Notable Properties
|
|
53
|
+
|
|
54
|
+
**defaultInputValue** - Sets the initial input value in uncontrolled mode. This is useful when you want to display a specific text in the input field on mount without selecting any option. When both `defaultInputValue` and `defaultSelectedKey` are provided, `defaultInputValue` takes priority. The value can be changed by the user and is not enforced after initial render.
|
|
55
|
+
|
|
56
|
+
**sortSelectedToTop** - When using the `items` prop (data-driven mode), the selected item will automatically appear at the top of the list when the popover opens. This is enabled by default when using `items`, but disabled when using JSX children. Set to `false` to maintain the original order.
|
|
57
|
+
|
|
58
|
+
**allowsCustomValue** - Enables users to enter values that aren't in the predefined options list. Custom values can be committed by pressing Enter or on blur (controlled by `shouldCommitOnBlur`). **Important**: When enabled, typing in the input will clear the current selection. When disabled (default), typing only filters the options without clearing the selection.
|
|
59
|
+
|
|
60
|
+
**shouldCommitOnBlur** - When `true` (default), custom values are committed when the input loses focus. When `false`, custom values only commit when Enter is pressed. Only applies when `allowsCustomValue` is enabled.
|
|
61
|
+
|
|
62
|
+
**clearOnBlur** - When `true`, clears both the selection and input when the input loses focus. When `false` (default), the input reverts to showing the current selection. Only applies to non-custom-value mode. Useful for search-like scenarios where you want to reset after each interaction.
|
|
63
|
+
|
|
64
|
+
**popoverTrigger** - Controls how the popover opens:
|
|
65
|
+
- `manual` - Only opens via trigger button or arrow keys
|
|
66
|
+
- `input` (default) - Opens when user types + manual triggers
|
|
67
|
+
- `focus` - Opens on input focus + typing + manual triggers
|
|
68
|
+
|
|
69
|
+
**filter** - Custom filter function or `false` to disable filtering. By default, uses a contains-based filter. Provide a custom function `(textValue, inputValue) => boolean` to customize filtering logic.
|
|
70
|
+
|
|
71
|
+
### Base Properties
|
|
72
|
+
|
|
73
|
+
Supports [Base properties](../../BaseProperties.md)
|
|
74
|
+
|
|
75
|
+
### Field Properties
|
|
76
|
+
|
|
77
|
+
Supports all [Field properties](../../FieldProperties.md)
|
|
78
|
+
|
|
79
|
+
### Styling Properties
|
|
80
|
+
|
|
81
|
+
#### styles
|
|
82
|
+
|
|
83
|
+
Customizes the root wrapper element of the ComboBox (the input container).
|
|
84
|
+
|
|
85
|
+
**Sub-elements:**
|
|
86
|
+
- `Prefix` - Container for prefix content and icons
|
|
87
|
+
- `Suffix` - Container for suffix content, validation icons, and action buttons
|
|
88
|
+
- `InputIcon` - Container for the left icon
|
|
89
|
+
- `ValidationIcon` - Container for validation state icons
|
|
90
|
+
- `State` - Container for state indicators
|
|
91
|
+
|
|
92
|
+
#### inputStyles
|
|
93
|
+
|
|
94
|
+
Customizes the text input element where users type.
|
|
95
|
+
|
|
96
|
+
#### triggerStyles
|
|
97
|
+
|
|
98
|
+
Customizes the dropdown trigger button that opens/closes the popover.
|
|
99
|
+
|
|
100
|
+
#### fieldStyles
|
|
101
|
+
|
|
102
|
+
Customizes the field wrapper element that includes the label, description, message, and the entire input component.
|
|
103
|
+
|
|
104
|
+
#### listBoxStyles
|
|
105
|
+
|
|
106
|
+
Customizes the dropdown list container that displays options.
|
|
107
|
+
|
|
108
|
+
#### overlayStyles
|
|
109
|
+
|
|
110
|
+
Customizes the popover overlay wrapper that contains the list.
|
|
111
|
+
|
|
112
|
+
#### optionStyles
|
|
113
|
+
|
|
114
|
+
Customizes individual option items in the dropdown list.
|
|
115
|
+
|
|
116
|
+
#### sectionStyles
|
|
117
|
+
|
|
118
|
+
Customizes section containers when using grouped options.
|
|
119
|
+
|
|
120
|
+
#### headingStyles
|
|
121
|
+
|
|
122
|
+
Customizes section heading elements within grouped options.
|
|
123
|
+
|
|
124
|
+
### Style Properties
|
|
125
|
+
|
|
126
|
+
These properties allow direct style application without using the `styles` prop: `display`, `font`, `preset`, `hide`, `opacity`, `whiteSpace`, `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`, `color`, `fill`, `fade`.
|
|
127
|
+
|
|
128
|
+
### Modifiers
|
|
129
|
+
|
|
130
|
+
The `mods` property accepts the following modifiers you can override:
|
|
131
|
+
|
|
132
|
+
- **`invalid`** `boolean` — Applied when validation state is invalid
|
|
133
|
+
- **`valid`** `boolean` — Applied when validation state is valid
|
|
134
|
+
- **`disabled`** `boolean` — Applied when the combobox is disabled
|
|
135
|
+
- **`focused`** `boolean` — Applied when the input has focus
|
|
136
|
+
- **`loading`** `boolean` — Applied when the combobox is in loading state
|
|
137
|
+
- **`prefix`** `boolean` — Applied when prefix content is present
|
|
138
|
+
- **`suffix`** `boolean` — Applied when suffix content is present
|
|
139
|
+
- **`clearable`** `boolean` — Applied when the clear button is visible
|
|
140
|
+
|
|
141
|
+
## Variants
|
|
142
|
+
|
|
143
|
+
### Sizes
|
|
144
|
+
|
|
145
|
+
- `small` - Compact size for dense interfaces
|
|
146
|
+
- `medium` - Default size (default)
|
|
147
|
+
- `large` - Emphasized size for important inputs
|
|
148
|
+
|
|
149
|
+
### Popover Trigger Modes
|
|
150
|
+
|
|
151
|
+
- `manual` - Only opens via trigger button or arrow keys
|
|
152
|
+
- `input` - Opens when user types + manual triggers (default)
|
|
153
|
+
- `focus` - Opens on input focus + typing + manual triggers
|
|
154
|
+
|
|
155
|
+
### Validation States
|
|
156
|
+
|
|
157
|
+
- `valid` - Indicates successful validation
|
|
158
|
+
- `invalid` - Indicates validation errors
|
|
159
|
+
|
|
160
|
+
## Examples
|
|
161
|
+
|
|
162
|
+
### Basic Usage
|
|
163
|
+
|
|
164
|
+
```jsx
|
|
165
|
+
<ComboBox label="Fruit" placeholder="Select a fruit...">
|
|
166
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
167
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
168
|
+
<ComboBox.Item key="cherry">Cherry</ComboBox.Item>
|
|
169
|
+
</ComboBox>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
### With Default Selected Value
|
|
173
|
+
|
|
174
|
+
```jsx
|
|
175
|
+
<ComboBox
|
|
176
|
+
label="Fruit"
|
|
177
|
+
placeholder="Select a fruit..."
|
|
178
|
+
defaultSelectedKey="banana"
|
|
179
|
+
>
|
|
180
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
181
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
182
|
+
<ComboBox.Item key="cherry">Cherry</ComboBox.Item>
|
|
183
|
+
</ComboBox>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### Controlled Mode
|
|
187
|
+
|
|
188
|
+
```jsx
|
|
189
|
+
const [selectedKey, setSelectedKey] = useState('apple');
|
|
190
|
+
|
|
191
|
+
<ComboBox
|
|
192
|
+
label="Fruit"
|
|
193
|
+
selectedKey={selectedKey}
|
|
194
|
+
onSelectionChange={setSelectedKey}
|
|
195
|
+
>
|
|
196
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
197
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
198
|
+
<ComboBox.Item key="cherry">Cherry</ComboBox.Item>
|
|
199
|
+
</ComboBox>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### With Custom Values
|
|
203
|
+
|
|
204
|
+
```jsx
|
|
205
|
+
const [inputValue, setInputValue] = useState('');
|
|
206
|
+
|
|
207
|
+
<ComboBox
|
|
208
|
+
allowsCustomValue
|
|
209
|
+
label="Tags"
|
|
210
|
+
placeholder="Type or select..."
|
|
211
|
+
inputValue={inputValue}
|
|
212
|
+
onInputChange={setInputValue}
|
|
213
|
+
>
|
|
214
|
+
<ComboBox.Item key="react">React</ComboBox.Item>
|
|
215
|
+
<ComboBox.Item key="vue">Vue</ComboBox.Item>
|
|
216
|
+
<ComboBox.Item key="angular">Angular</ComboBox.Item>
|
|
217
|
+
</ComboBox>
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### Clearable
|
|
221
|
+
|
|
222
|
+
```jsx
|
|
223
|
+
<ComboBox
|
|
224
|
+
isClearable
|
|
225
|
+
label="Fruit"
|
|
226
|
+
placeholder="Select a fruit..."
|
|
227
|
+
defaultSelectedKey="apple"
|
|
228
|
+
>
|
|
229
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
230
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
231
|
+
<ComboBox.Item key="cherry">Cherry</ComboBox.Item>
|
|
232
|
+
</ComboBox>
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Clear on Blur
|
|
236
|
+
|
|
237
|
+
```jsx
|
|
238
|
+
const [selectedKey, setSelectedKey] = useState(null);
|
|
239
|
+
|
|
240
|
+
<ComboBox
|
|
241
|
+
clearOnBlur
|
|
242
|
+
label="Fruit"
|
|
243
|
+
placeholder="Select a fruit..."
|
|
244
|
+
selectedKey={selectedKey}
|
|
245
|
+
onSelectionChange={setSelectedKey}
|
|
246
|
+
>
|
|
247
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
248
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
249
|
+
<ComboBox.Item key="cherry">Cherry</ComboBox.Item>
|
|
250
|
+
</ComboBox>
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
### With Sections
|
|
254
|
+
|
|
255
|
+
```jsx
|
|
256
|
+
<ComboBox label="Food" placeholder="Select food...">
|
|
257
|
+
<ComboBox.Section key="fruits" title="Fruits">
|
|
258
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
259
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
260
|
+
</ComboBox.Section>
|
|
261
|
+
<ComboBox.Section key="vegetables" title="Vegetables">
|
|
262
|
+
<ComboBox.Item key="carrot">Carrot</ComboBox.Item>
|
|
263
|
+
<ComboBox.Item key="broccoli">Broccoli</ComboBox.Item>
|
|
264
|
+
</ComboBox.Section>
|
|
265
|
+
</ComboBox>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
### With Disabled Items
|
|
269
|
+
|
|
270
|
+
```jsx
|
|
271
|
+
<ComboBox
|
|
272
|
+
label="Fruit"
|
|
273
|
+
placeholder="Select a fruit..."
|
|
274
|
+
disabledKeys={['banana', 'date']}
|
|
275
|
+
>
|
|
276
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
277
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
278
|
+
<ComboBox.Item key="cherry">Cherry</ComboBox.Item>
|
|
279
|
+
<ComboBox.Item key="date">Date</ComboBox.Item>
|
|
280
|
+
</ComboBox>
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### Loading State
|
|
284
|
+
|
|
285
|
+
```jsx
|
|
286
|
+
<ComboBox isLoading label="Fruit" placeholder="Select a fruit...">
|
|
287
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
288
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
289
|
+
</ComboBox>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### Disabled State
|
|
293
|
+
|
|
294
|
+
```jsx
|
|
295
|
+
<ComboBox
|
|
296
|
+
isDisabled
|
|
297
|
+
label="Fruit"
|
|
298
|
+
defaultSelectedKey="apple"
|
|
299
|
+
>
|
|
300
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
301
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
302
|
+
</ComboBox>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
### With Items Array
|
|
306
|
+
|
|
307
|
+
```jsx
|
|
308
|
+
const fruits = [
|
|
309
|
+
{ key: 'apple', label: 'Apple' },
|
|
310
|
+
{ key: 'banana', label: 'Banana' },
|
|
311
|
+
{ key: 'cherry', label: 'Cherry' },
|
|
312
|
+
];
|
|
313
|
+
|
|
314
|
+
<ComboBox label="Fruit" placeholder="Select..." items={fruits}>
|
|
315
|
+
{(item) => <ComboBox.Item key={item.key}>{item.label}</ComboBox.Item>}
|
|
316
|
+
</ComboBox>
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Custom Filter Function
|
|
320
|
+
|
|
321
|
+
```jsx
|
|
322
|
+
<ComboBox
|
|
323
|
+
label="Fruit"
|
|
324
|
+
placeholder="Type to filter..."
|
|
325
|
+
filter={(textValue, inputValue) => {
|
|
326
|
+
return textValue.toLowerCase().startsWith(inputValue.toLowerCase());
|
|
327
|
+
}}
|
|
328
|
+
>
|
|
329
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
330
|
+
<ComboBox.Item key="apricot">Apricot</ComboBox.Item>
|
|
331
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
332
|
+
</ComboBox>
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
### Disable Filtering
|
|
336
|
+
|
|
337
|
+
```jsx
|
|
338
|
+
<ComboBox
|
|
339
|
+
label="Fruit"
|
|
340
|
+
placeholder="Type anything..."
|
|
341
|
+
filter={false}
|
|
342
|
+
>
|
|
343
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
344
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
345
|
+
</ComboBox>
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
### Required Field
|
|
349
|
+
|
|
350
|
+
```jsx
|
|
351
|
+
<ComboBox
|
|
352
|
+
isRequired
|
|
353
|
+
label="Fruit"
|
|
354
|
+
placeholder="Select a fruit..."
|
|
355
|
+
necessityIndicator="label"
|
|
356
|
+
>
|
|
357
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
358
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
359
|
+
</ComboBox>
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### With Description
|
|
363
|
+
|
|
364
|
+
```jsx
|
|
365
|
+
<ComboBox
|
|
366
|
+
label="Fruit"
|
|
367
|
+
placeholder="Select a fruit..."
|
|
368
|
+
description="Choose your favorite fruit from the list"
|
|
369
|
+
>
|
|
370
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
371
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
372
|
+
</ComboBox>
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
### Hidden Trigger Button
|
|
376
|
+
|
|
377
|
+
```jsx
|
|
378
|
+
<ComboBox
|
|
379
|
+
hideTrigger
|
|
380
|
+
label="Fruit"
|
|
381
|
+
placeholder="Type to search..."
|
|
382
|
+
>
|
|
383
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
384
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
385
|
+
</ComboBox>
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
### Long List with Filtering
|
|
389
|
+
|
|
390
|
+
### Virtualized List
|
|
391
|
+
|
|
392
|
+
```jsx
|
|
393
|
+
const items = Array.from({ length: 1000 }, (_, i) => ({
|
|
394
|
+
key: `item-${i}`,
|
|
395
|
+
name: `Item ${i + 1}`,
|
|
396
|
+
}));
|
|
397
|
+
|
|
398
|
+
<ComboBox
|
|
399
|
+
label="Virtualized List"
|
|
400
|
+
placeholder="Search from 1000 items..."
|
|
401
|
+
items={items}
|
|
402
|
+
>
|
|
403
|
+
{(item) => <ComboBox.Item key={item.key}>{item.name}</ComboBox.Item>}
|
|
404
|
+
</ComboBox>
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
### Sort Selected Item to Top
|
|
408
|
+
|
|
409
|
+
```jsx
|
|
410
|
+
const fruits = [
|
|
411
|
+
{ key: 'apple', label: 'Apple' },
|
|
412
|
+
{ key: 'banana', label: 'Banana' },
|
|
413
|
+
{ key: 'cherry', label: 'Cherry' },
|
|
414
|
+
];
|
|
415
|
+
|
|
416
|
+
// Default behavior with items prop - selected item appears first
|
|
417
|
+
<ComboBox
|
|
418
|
+
label="With sorting (default)"
|
|
419
|
+
defaultSelectedKey="cherry"
|
|
420
|
+
items={fruits}
|
|
421
|
+
>
|
|
422
|
+
{(item) => <ComboBox.Item key={item.key}>{item.label}</ComboBox.Item>}
|
|
423
|
+
</ComboBox>
|
|
424
|
+
|
|
425
|
+
// Disable sorting to maintain original order
|
|
426
|
+
<ComboBox
|
|
427
|
+
label="Without sorting"
|
|
428
|
+
defaultSelectedKey="cherry"
|
|
429
|
+
sortSelectedToTop={false}
|
|
430
|
+
items={fruits}
|
|
431
|
+
>
|
|
432
|
+
{(item) => <ComboBox.Item key={item.key}>{item.label}</ComboBox.Item>}
|
|
433
|
+
</ComboBox>
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
### Independent Input and Selection Control
|
|
437
|
+
|
|
438
|
+
```jsx
|
|
439
|
+
const [inputValue, setInputValue] = useState('');
|
|
440
|
+
const [selectedKey, setSelectedKey] = useState(null);
|
|
441
|
+
|
|
442
|
+
<ComboBox
|
|
443
|
+
label="Fruit"
|
|
444
|
+
inputValue={inputValue}
|
|
445
|
+
selectedKey={selectedKey}
|
|
446
|
+
onInputChange={setInputValue}
|
|
447
|
+
onSelectionChange={setSelectedKey}
|
|
448
|
+
>
|
|
449
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
450
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
451
|
+
</ComboBox>
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Custom Value Without Commit on Blur
|
|
455
|
+
|
|
456
|
+
```jsx
|
|
457
|
+
<ComboBox
|
|
458
|
+
allowsCustomValue
|
|
459
|
+
shouldCommitOnBlur={false}
|
|
460
|
+
label="Tags (Enter only)"
|
|
461
|
+
placeholder="Type or select..."
|
|
462
|
+
>
|
|
463
|
+
<ComboBox.Item key="react">React</ComboBox.Item>
|
|
464
|
+
<ComboBox.Item key="vue">Vue</ComboBox.Item>
|
|
465
|
+
</ComboBox>
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
### Show All Items When No Results
|
|
469
|
+
|
|
470
|
+
```jsx
|
|
471
|
+
{/* Type text that yields no results, then click trigger or press arrow keys */}
|
|
472
|
+
<ComboBox label="Search Fruits" placeholder="Type 'xyz' to see behavior...">
|
|
473
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
474
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
475
|
+
</ComboBox>
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
## Accessibility
|
|
479
|
+
|
|
480
|
+
### Keyboard Navigation
|
|
481
|
+
|
|
482
|
+
- `Tab` - Moves focus to/from the combobox input
|
|
483
|
+
- `ArrowDown` - Opens popover (if closed) or moves focus to next option
|
|
484
|
+
- `ArrowUp` - Opens popover (if closed) or moves focus to previous option
|
|
485
|
+
- `Enter` - Selects the focused option and closes popover
|
|
486
|
+
- `Escape` - Closes popover (if open) or clears input (if clearable and popover closed)
|
|
487
|
+
- `Home` - Moves focus to the first option (when popover is open)
|
|
488
|
+
- `End` - Moves focus to the last option (when popover is open)
|
|
489
|
+
- Typing - Filters options based on input value
|
|
490
|
+
|
|
491
|
+
### Screen Reader Support
|
|
492
|
+
|
|
493
|
+
- Input announces as "combobox" with appropriate expanded/collapsed state
|
|
494
|
+
- Selected option is announced when selection changes
|
|
495
|
+
- Focused option is announced as user navigates with arrow keys
|
|
496
|
+
- Loading state is announced via loading indicator
|
|
497
|
+
- Validation states are announced through validation icons
|
|
498
|
+
- Clear button announces as "Clear" action
|
|
499
|
+
|
|
500
|
+
### ARIA Properties
|
|
501
|
+
|
|
502
|
+
- `role="combobox"` - Identifies the input as a combobox
|
|
503
|
+
- `aria-expanded` - Indicates whether the popover is open or closed
|
|
504
|
+
- `aria-haspopup="listbox"` - Indicates the combobox has a listbox popup
|
|
505
|
+
- `aria-controls` - References the listbox ID when popover is open
|
|
506
|
+
- `aria-activedescendant` - References the currently focused option
|
|
507
|
+
- `aria-label` - Provides accessible label when no visible label exists
|
|
508
|
+
- `aria-required` - Indicates required fields
|
|
509
|
+
- `aria-invalid` - Indicates validation errors
|
|
510
|
+
- `aria-describedby` - Links to description and error messages
|
|
511
|
+
|
|
512
|
+
## Best Practices
|
|
513
|
+
|
|
514
|
+
1. **Do**: Provide clear labels and placeholders
|
|
515
|
+
```jsx
|
|
516
|
+
<ComboBox
|
|
517
|
+
label="Country"
|
|
518
|
+
placeholder="Search countries..."
|
|
519
|
+
>
|
|
520
|
+
<ComboBox.Item key="us">United States</ComboBox.Item>
|
|
521
|
+
</ComboBox>
|
|
522
|
+
```
|
|
523
|
+
|
|
524
|
+
2. **Do**: Use sections to group related options
|
|
525
|
+
```jsx
|
|
526
|
+
<ComboBox label="Contact">
|
|
527
|
+
<ComboBox.Section title="Recent">
|
|
528
|
+
<ComboBox.Item key="john">John Doe</ComboBox.Item>
|
|
529
|
+
</ComboBox.Section>
|
|
530
|
+
<ComboBox.Section title="All Contacts">
|
|
531
|
+
<ComboBox.Item key="jane">Jane Smith</ComboBox.Item>
|
|
532
|
+
</ComboBox.Section>
|
|
533
|
+
</ComboBox>
|
|
534
|
+
```
|
|
535
|
+
|
|
536
|
+
3. **Do**: Enable `allowsCustomValue` when user input flexibility is needed
|
|
537
|
+
```jsx
|
|
538
|
+
<ComboBox
|
|
539
|
+
allowsCustomValue
|
|
540
|
+
label="Email"
|
|
541
|
+
placeholder="Enter or select email..."
|
|
542
|
+
>
|
|
543
|
+
<ComboBox.Item key="work">work@example.com</ComboBox.Item>
|
|
544
|
+
</ComboBox>
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
4. **Don't**: Use ComboBox for a small fixed set of options
|
|
548
|
+
```jsx
|
|
549
|
+
{/* Use Select instead for simple dropdowns */}
|
|
550
|
+
<ComboBox label="Yes or No">
|
|
551
|
+
<ComboBox.Item key="yes">Yes</ComboBox.Item>
|
|
552
|
+
<ComboBox.Item key="no">No</ComboBox.Item>
|
|
553
|
+
</ComboBox>
|
|
554
|
+
```
|
|
555
|
+
|
|
556
|
+
5. **Don't**: Disable filtering on large lists
|
|
557
|
+
```jsx
|
|
558
|
+
{/* Defeats the purpose of ComboBox's search capability */}
|
|
559
|
+
<ComboBox filter={false} label="Countries">
|
|
560
|
+
{/* 200+ countries... */}
|
|
561
|
+
</ComboBox>
|
|
562
|
+
```
|
|
563
|
+
|
|
564
|
+
6. **Accessibility**: Always provide meaningful labels and descriptions
|
|
565
|
+
```jsx
|
|
566
|
+
<ComboBox
|
|
567
|
+
label="Product Category"
|
|
568
|
+
description="Select the primary category for your product"
|
|
569
|
+
isRequired
|
|
570
|
+
>
|
|
571
|
+
<ComboBox.Item key="electronics">Electronics</ComboBox.Item>
|
|
572
|
+
</ComboBox>
|
|
573
|
+
```
|
|
574
|
+
|
|
575
|
+
7. **Performance**: Use `items` prop with render function for dynamic lists
|
|
576
|
+
```jsx
|
|
577
|
+
<ComboBox items={largeDataset}>
|
|
578
|
+
{(item) => <ComboBox.Item key={item.id}>{item.name}</ComboBox.Item>}
|
|
579
|
+
</ComboBox>
|
|
580
|
+
```
|
|
581
|
+
|
|
582
|
+
8. **Smart Behavior**: The ComboBox automatically shows all items when opening the popover after filtering yields no results
|
|
583
|
+
```jsx
|
|
584
|
+
{/* User types "xyz" (no match), then clicks trigger - shows all items */}
|
|
585
|
+
<ComboBox label="Search">
|
|
586
|
+
<ComboBox.Item key="apple">Apple</ComboBox.Item>
|
|
587
|
+
<ComboBox.Item key="banana">Banana</ComboBox.Item>
|
|
588
|
+
</ComboBox>
|
|
589
|
+
```
|
|
590
|
+
|
|
591
|
+
9. **Selected Item Sorting**: Use `items` prop for automatic selected-item-first sorting
|
|
592
|
+
```jsx
|
|
593
|
+
{/* With items prop, selected item appears first by default */}
|
|
594
|
+
<ComboBox items={options} defaultSelectedKey="option5">
|
|
595
|
+
{(item) => <ComboBox.Item key={item.key}>{item.label}</ComboBox.Item>}
|
|
596
|
+
</ComboBox>
|
|
597
|
+
```
|
|
598
|
+
|
|
599
|
+
10. **Independent Control**: Control input and selection separately when needed
|
|
600
|
+
```jsx
|
|
601
|
+
const [inputValue, setInputValue] = useState('');
|
|
602
|
+
const [selectedKey, setSelectedKey] = useState(null);
|
|
603
|
+
|
|
604
|
+
<ComboBox
|
|
605
|
+
inputValue={inputValue}
|
|
606
|
+
selectedKey={selectedKey}
|
|
607
|
+
onInputChange={setInputValue}
|
|
608
|
+
onSelectionChange={setSelectedKey}
|
|
609
|
+
>
|
|
610
|
+
{/* options */}
|
|
611
|
+
</ComboBox>
|
|
612
|
+
```
|
|
613
|
+
|
|
614
|
+
## Integration with Forms
|
|
615
|
+
|
|
616
|
+
This component supports all [Field properties](../../FieldProperties.md) when used within a Form. It integrates seamlessly with the form validation system and supports both controlled and uncontrolled modes.
|
|
617
|
+
|
|
618
|
+
### Form Example
|
|
619
|
+
|
|
620
|
+
```jsx
|
|
621
|
+
<Form>
|
|
622
|
+
<ComboBox
|
|
623
|
+
name="country"
|
|
624
|
+
label="Country"
|
|
625
|
+
isRequired
|
|
626
|
+
validationBehavior="native"
|
|
627
|
+
>
|
|
628
|
+
<ComboBox.Item key="us">United States</ComboBox.Item>
|
|
629
|
+
<ComboBox.Item key="uk">United Kingdom</ComboBox.Item>
|
|
630
|
+
<ComboBox.Item key="ca">Canada</ComboBox.Item>
|
|
631
|
+
</ComboBox>
|
|
632
|
+
</Form>
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
## Suggested Improvements
|
|
636
|
+
|
|
637
|
+
- **Virtual Scrolling**: Add support for virtualizing long lists to improve performance with thousands of items
|
|
638
|
+
- **Multi-Select Mode**: Add ability to select multiple items with tag-based display
|
|
639
|
+
- **Async Loading**: Built-in support for async data loading with loading states per scroll position (partial support via `isLoading` prop)
|
|
640
|
+
- **Custom Option Rendering**: Allow more flexibility in rendering option content beyond text
|
|
641
|
+
- **Grouped Item Navigation**: Improve keyboard navigation to allow jumping between section groups (e.g., Ctrl+Arrow to skip to next section)
|
|
642
|
+
- **Empty State Component**: Allow passing custom React components for empty state when no results are found
|
|
643
|
+
- **Prefix/Suffix Slots**: Add more flexible slot-based API for prefix and suffix content
|
|
644
|
+
- **Item Descriptions**: Support for showing secondary text/descriptions in list items
|
|
645
|
+
|
|
646
|
+
## Related Components
|
|
647
|
+
|
|
648
|
+
- [Select](./Select.md) - Use when you need a simple dropdown without filtering
|
|
649
|
+
- [TextInput](./TextInput.md) - Use for free-form text input without suggestions
|
|
650
|
+
- [ListBox](./ListBox.md) - The underlying list component used in ComboBox popover
|
|
651
|
+
- [FilterPicker](./FilterPicker.md) - Alternative with different interaction patterns
|