@cube-dev/ui-kit 0.121.0 → 0.121.2
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 +12 -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.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- 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.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.js +1 -1
- package/dist/components/actions/use-action.js +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 +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 +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 +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 +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 +1 -1
- 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 +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +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 +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 +1 -1
- package/dist/components/navigation/Tabs/types.js +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 +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.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 +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.js +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 +695 -0
- package/package.json +4 -8
|
@@ -0,0 +1,776 @@
|
|
|
1
|
+
# FilterPicker
|
|
2
|
+
|
|
3
|
+
A versatile selection component that combines a trigger button with a searchable dropdown. It provides a space-efficient interface for selecting one or multiple items from a filtered list, with support for sections, custom summaries, and various UI states. Built with React Aria's accessibility features and the Cube `tasty` style system.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Creating filter interfaces where users need to select from predefined options
|
|
8
|
+
- Building advanced search and filtering systems with multiple criteria
|
|
9
|
+
- Implementing tag-based selection systems with multiple categories
|
|
10
|
+
- Designing compact selection interfaces where space is limited
|
|
11
|
+
- Providing searchable selection without taking up permanent screen space
|
|
12
|
+
- Building user preference panels with organized option groups
|
|
13
|
+
|
|
14
|
+
## Component
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
### Properties
|
|
19
|
+
|
|
20
|
+
- **`selectedKey`** `string` — The selected key in controlled mode
|
|
21
|
+
- **`defaultSelectedKey`** `string` — The default selected key in uncontrolled mode
|
|
22
|
+
- **`selectedKeys`** `string[] | 'all'` — The selected keys in controlled multiple mode. Use "all" to select all items or an array of keys.
|
|
23
|
+
- **`defaultSelectedKeys`** `string[] | 'all'` — The default selected keys in uncontrolled multiple mode. Use "all" to select all items or an array of keys.
|
|
24
|
+
- **`selectionMode`** `'single' | 'multiple'` (default: `single`) — Selection mode for the picker
|
|
25
|
+
- **`allowsCustomValue`** `boolean` (default: `false`) — Whether to allow entering custom values that are not present in the predefined options
|
|
26
|
+
- **`isClearable`** `boolean` (default: `false`) — Whether the filter picker is clearable using a clear button in the rightIcon slot
|
|
27
|
+
- **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection
|
|
28
|
+
- **`disabledKeys`** `Key[]` — Array of keys for disabled items
|
|
29
|
+
- **`items`** `Iterable<T>` — Array of items to render when using the render function pattern for large datasets with dynamic content
|
|
30
|
+
- **`placeholder`** `string` — Placeholder text when no selection is made
|
|
31
|
+
- **`icon`** `ReactNode` — Icon to show in the trigger button
|
|
32
|
+
- **`type`** `'outline' | 'clear' | 'primary' | 'secondary' | 'neutral'` (default: `outline`) — Button styling type
|
|
33
|
+
- **`theme`** `'default' | 'special'` (default: `default`) — Button theme
|
|
34
|
+
- **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Size of the picker component
|
|
35
|
+
- **`searchPlaceholder`** `string` — Placeholder text in the search input
|
|
36
|
+
- **`emptyLabel`** `string` — Custom label to display when no results are found after filtering
|
|
37
|
+
- **`filter`** `((textValue: string, inputValue: string) => boolean) | false` — Custom filter function for determining if an option should be included in search results
|
|
38
|
+
- **`header`** `ReactNode` — Custom header content
|
|
39
|
+
- **`footer`** `ReactNode` — Custom footer content
|
|
40
|
+
- **`renderSummary`** `((args: { selectedLabels, selectedKeys, selectionMode }) => ReactNode) | false` — Custom renderer for the summary shown inside the trigger when there is a selection
|
|
41
|
+
- **`isCheckable`** `boolean` (default: `false`) — Whether to show checkboxes for multiple selection mode
|
|
42
|
+
- **`shouldFocusWrap`** `boolean` (default: `false`) — Whether keyboard navigation should wrap around
|
|
43
|
+
- **`showSelectAll`** `boolean` (default: `false`) — Whether to show the "Select All" option in multiple selection mode
|
|
44
|
+
- **`selectAllLabel`** `string` (default: `All`) — Label for the "Select All" option
|
|
45
|
+
- **`description`** `string` — Field description
|
|
46
|
+
- **`message`** `string` — Help or error message
|
|
47
|
+
- **`listBoxStyles`** `Styles` — Custom styles for the dropdown list container within the popover
|
|
48
|
+
- **`popoverStyles`** `Styles` — Custom styles for the popover dialog that contains the FilterListBox
|
|
49
|
+
- **`triggerStyles`** `Styles` — Custom styles for the trigger button element
|
|
50
|
+
- **`triggerTooltip`** `string | TooltipProps` — Tooltip for the trigger button (separate from field tooltip)
|
|
51
|
+
- **`triggerDescription`** `string` — Description for the trigger button (separate from field description)
|
|
52
|
+
- **`prefix`** `ReactNode` — Content to show before the trigger button text
|
|
53
|
+
- **`suffix`** `ReactNode` — Content to show after the trigger button text
|
|
54
|
+
- **`hotkeys`** `string` — Keyboard shortcut that triggers the picker when pressed
|
|
55
|
+
- **`htmlType`** `'button' | 'submit' | 'reset'` (default: `button`) — HTML button type
|
|
56
|
+
- **`headerStyles`** `Styles` — Custom styles for the header area when header prop is provided
|
|
57
|
+
- **`footerStyles`** `Styles` — Custom styles for the footer area when footer prop is provided
|
|
58
|
+
- **`onSelectionChange`** `(keys: Key | Key[] | 'all' | null) => void` — Callback when selection changes
|
|
59
|
+
- **`onEscape`** `() => void` — Callback when Escape key is pressed
|
|
60
|
+
- **`onOptionClick`** `(key: Key) => void` — Callback when an option is clicked (non-checkbox area)
|
|
61
|
+
|
|
62
|
+
### Base Properties
|
|
63
|
+
|
|
64
|
+
Supports [Base properties](../../BaseProperties.md)
|
|
65
|
+
|
|
66
|
+
### Field Properties
|
|
67
|
+
|
|
68
|
+
Supports all [Field properties](../../FieldProperties.md)
|
|
69
|
+
|
|
70
|
+
### Styling Properties
|
|
71
|
+
|
|
72
|
+
#### styles
|
|
73
|
+
|
|
74
|
+
Customizes the main wrapper element of the FilterPicker component.
|
|
75
|
+
|
|
76
|
+
**Sub-elements:**
|
|
77
|
+
- None - styles apply directly to the wrapper
|
|
78
|
+
|
|
79
|
+
#### triggerStyles
|
|
80
|
+
|
|
81
|
+
Customizes the trigger button element.
|
|
82
|
+
|
|
83
|
+
**Sub-elements:**
|
|
84
|
+
- None - styles apply directly to the trigger button
|
|
85
|
+
|
|
86
|
+
#### listBoxStyles
|
|
87
|
+
|
|
88
|
+
Customizes the dropdown list container within the popover.
|
|
89
|
+
|
|
90
|
+
**Sub-elements:**
|
|
91
|
+
- Same as FilterListBox: `Label`, `Description`, `Content`, `Checkbox`, `CheckboxWrapper`
|
|
92
|
+
|
|
93
|
+
#### popoverStyles
|
|
94
|
+
|
|
95
|
+
Customizes the popover dialog that contains the FilterListBox.
|
|
96
|
+
|
|
97
|
+
**Sub-elements:**
|
|
98
|
+
- Same as Dialog component sub-elements
|
|
99
|
+
|
|
100
|
+
#### headerStyles
|
|
101
|
+
|
|
102
|
+
Customizes the header area when header prop is provided.
|
|
103
|
+
|
|
104
|
+
**Sub-elements:**
|
|
105
|
+
- None - styles apply directly to the header container
|
|
106
|
+
|
|
107
|
+
#### footerStyles
|
|
108
|
+
|
|
109
|
+
Customizes the footer area when footer prop is provided.
|
|
110
|
+
|
|
111
|
+
**Sub-elements:**
|
|
112
|
+
- None - styles apply directly to the footer container
|
|
113
|
+
|
|
114
|
+
### Style Properties
|
|
115
|
+
|
|
116
|
+
These properties allow direct style application without using the `styles` prop: `width`, `height`, `margin`, `padding`, `position`, `inset`, `zIndex`, `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `opacity`, `color`, `fill`, `fade`.
|
|
117
|
+
|
|
118
|
+
### Modifiers
|
|
119
|
+
|
|
120
|
+
The `mods` property accepts the following modifiers you can override:
|
|
121
|
+
|
|
122
|
+
- **`placeholder`** `boolean` — Applied when no selection is made
|
|
123
|
+
- **`selected`** `boolean` — Applied when items are selected
|
|
124
|
+
|
|
125
|
+
## Sub-components
|
|
126
|
+
|
|
127
|
+
### FilterPicker.Item
|
|
128
|
+
|
|
129
|
+
Individual items within the FilterPicker dropdown. Each item is rendered using [Item](../content/Item.md) and supports all Item properties for layout, icons, descriptions, and interactive features.
|
|
130
|
+
|
|
131
|
+
#### Item API
|
|
132
|
+
|
|
133
|
+
For detailed information about all available item properties, see [Item documentation](../content/Item.md). Key properties include:
|
|
134
|
+
|
|
135
|
+
- **`key`** `string \| number` — Unique identifier for the item (required)
|
|
136
|
+
- **`children`** `ReactNode` — The main content/label for the option
|
|
137
|
+
- **`icon`** `ReactNode` — Icon displayed before the content
|
|
138
|
+
- **`rightIcon`** `ReactNode` — Icon displayed after the content
|
|
139
|
+
- **`description`** `ReactNode` — Secondary text below the main content
|
|
140
|
+
- **`descriptionPlacement`** `'inline' \| 'block'` — How the description is positioned
|
|
141
|
+
- **`prefix`** `ReactNode` — Content before the main text
|
|
142
|
+
- **`suffix`** `ReactNode` — Content after the main text
|
|
143
|
+
- **`tooltip`** `string \| boolean \| object` — Tooltip configuration
|
|
144
|
+
- **`styles`** `Styles` — Custom styling for the item
|
|
145
|
+
- **`qa`** `string` — QA identifier for testing
|
|
146
|
+
|
|
147
|
+
#### Example with Rich Items
|
|
148
|
+
|
|
149
|
+
```jsx
|
|
150
|
+
<FilterPicker label="Team Filters" selectionMode="multiple">
|
|
151
|
+
<FilterPicker.Item
|
|
152
|
+
key="active-users"
|
|
153
|
+
icon={<IconUsers />}
|
|
154
|
+
description="Filter by active users"
|
|
155
|
+
suffix="12 users"
|
|
156
|
+
>
|
|
157
|
+
Active Users
|
|
158
|
+
</FilterPicker.Item>
|
|
159
|
+
<FilterPicker.Item
|
|
160
|
+
key="recent-activity"
|
|
161
|
+
icon={<IconClock />}
|
|
162
|
+
description="Recent activity in the last week"
|
|
163
|
+
rightIcon={<IconBadge />}
|
|
164
|
+
>
|
|
165
|
+
Recent Activity
|
|
166
|
+
</FilterPicker.Item>
|
|
167
|
+
</FilterPicker>
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### FilterPicker.Section
|
|
171
|
+
|
|
172
|
+
Groups related items together with an optional heading.
|
|
173
|
+
|
|
174
|
+
- **`title`** `ReactNode` — Optional heading text for the section
|
|
175
|
+
- **`children`** `FilterPicker.Item[]` — Collection of FilterPicker.Item components
|
|
176
|
+
|
|
177
|
+
## Content Patterns
|
|
178
|
+
|
|
179
|
+
### Static Children Pattern
|
|
180
|
+
|
|
181
|
+
The most common pattern for FilterPicker is to provide static children using `FilterPicker.Item` and `FilterPicker.Section` components:
|
|
182
|
+
|
|
183
|
+
```jsx
|
|
184
|
+
<FilterPicker label="Select Options">
|
|
185
|
+
<FilterPicker.Item key="apple">Apple</FilterPicker.Item>
|
|
186
|
+
<FilterPicker.Item key="banana">Banana</FilterPicker.Item>
|
|
187
|
+
<FilterPicker.Section title="Vegetables">
|
|
188
|
+
<FilterPicker.Item key="carrot">Carrot</FilterPicker.Item>
|
|
189
|
+
</FilterPicker.Section>
|
|
190
|
+
</FilterPicker>
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### Dynamic Content Pattern
|
|
194
|
+
|
|
195
|
+
For large datasets or dynamic content, use the `items` prop with a render function. This pattern enables automatic virtualization for performance:
|
|
196
|
+
|
|
197
|
+
```jsx
|
|
198
|
+
<FilterPicker
|
|
199
|
+
label="Large Dataset"
|
|
200
|
+
items={largeDataArray}
|
|
201
|
+
>
|
|
202
|
+
{(item) => (
|
|
203
|
+
<FilterPicker.Item key={item.id} textValue={item.name}>
|
|
204
|
+
{item.name}
|
|
205
|
+
</FilterPicker.Item>
|
|
206
|
+
)}
|
|
207
|
+
</FilterPicker>
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Key Benefits:**
|
|
211
|
+
- **Virtualization**: Automatically enabled for large lists without sections
|
|
212
|
+
- **Performance**: Only renders visible items in the DOM
|
|
213
|
+
- **Dynamic Content**: Perfect for data fetched from APIs or changing datasets
|
|
214
|
+
- **Memory Efficient**: Handles thousands of items smoothly
|
|
215
|
+
- **Selected Items Sorting**: When using the `items` prop, selected items are automatically sorted to the top when the popover reopens (can be controlled with `sortSelectedToTop`)
|
|
216
|
+
|
|
217
|
+
**When to Use:**
|
|
218
|
+
- Lists with 50+ items
|
|
219
|
+
- Dynamic data from APIs
|
|
220
|
+
- Content that changes frequently
|
|
221
|
+
- When virtualization performance is needed
|
|
222
|
+
|
|
223
|
+
## Variants
|
|
224
|
+
|
|
225
|
+
### Selection Modes
|
|
226
|
+
|
|
227
|
+
- `single` - Allows selecting only one item at a time
|
|
228
|
+
- `multiple` - Allows selecting multiple items
|
|
229
|
+
|
|
230
|
+
### Button Types
|
|
231
|
+
|
|
232
|
+
- `outline` - Default outlined button style
|
|
233
|
+
- `clear` - Transparent background button
|
|
234
|
+
- `primary` - Primary brand color button
|
|
235
|
+
- `secondary` - Secondary color button
|
|
236
|
+
- `neutral` - Neutral color button
|
|
237
|
+
|
|
238
|
+
### Sizes
|
|
239
|
+
|
|
240
|
+
- `small` - Compact size for dense interfaces (28px height)
|
|
241
|
+
- `medium` - Standard size for general use (32px height, default)
|
|
242
|
+
- `large` - Emphasized size for important actions (40px height)
|
|
243
|
+
|
|
244
|
+
## Examples
|
|
245
|
+
|
|
246
|
+
### Basic Usage
|
|
247
|
+
|
|
248
|
+
```jsx
|
|
249
|
+
<FilterPicker
|
|
250
|
+
label="Select Options"
|
|
251
|
+
placeholder="Choose items..."
|
|
252
|
+
searchPlaceholder="Search options..."
|
|
253
|
+
>
|
|
254
|
+
<FilterPicker.Item key="apple">Apple</FilterPicker.Item>
|
|
255
|
+
<FilterPicker.Item key="banana">Banana</FilterPicker.Item>
|
|
256
|
+
<FilterPicker.Item key="cherry">Cherry</FilterPicker.Item>
|
|
257
|
+
</FilterPicker>
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### Clearable Selection
|
|
261
|
+
|
|
262
|
+
```jsx
|
|
263
|
+
<FilterPicker
|
|
264
|
+
label="Clearable Filter Picker"
|
|
265
|
+
placeholder="Choose items..."
|
|
266
|
+
selectionMode="single"
|
|
267
|
+
isClearable={true}
|
|
268
|
+
defaultSelectedKey="apple"
|
|
269
|
+
>
|
|
270
|
+
<FilterPicker.Item key="apple">Apple</FilterPicker.Item>
|
|
271
|
+
<FilterPicker.Item key="banana">Banana</FilterPicker.Item>
|
|
272
|
+
<FilterPicker.Item key="cherry">Cherry</FilterPicker.Item>
|
|
273
|
+
</FilterPicker>
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Multiple Selection
|
|
277
|
+
|
|
278
|
+
```jsx
|
|
279
|
+
<FilterPicker
|
|
280
|
+
label="Select Multiple Options"
|
|
281
|
+
placeholder="Choose items..."
|
|
282
|
+
selectionMode="multiple"
|
|
283
|
+
searchPlaceholder="Search options..."
|
|
284
|
+
>
|
|
285
|
+
<FilterPicker.Section title="Fruits">
|
|
286
|
+
<FilterPicker.Item key="apple">Apple</FilterPicker.Item>
|
|
287
|
+
<FilterPicker.Item key="banana">Banana</FilterPicker.Item>
|
|
288
|
+
</FilterPicker.Section>
|
|
289
|
+
<FilterPicker.Section title="Vegetables">
|
|
290
|
+
<FilterPicker.Item key="carrot">Carrot</FilterPicker.Item>
|
|
291
|
+
<FilterPicker.Item key="broccoli">Broccoli</FilterPicker.Item>
|
|
292
|
+
</FilterPicker.Section>
|
|
293
|
+
</FilterPicker>
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
### With Checkboxes
|
|
297
|
+
|
|
298
|
+
```jsx
|
|
299
|
+
<FilterPicker
|
|
300
|
+
label="Select with Checkboxes"
|
|
301
|
+
selectionMode="multiple"
|
|
302
|
+
isCheckable={true}
|
|
303
|
+
searchPlaceholder="Search options..."
|
|
304
|
+
>
|
|
305
|
+
<FilterPicker.Item key="option1">Option 1</FilterPicker.Item>
|
|
306
|
+
<FilterPicker.Item key="option2">Option 2</FilterPicker.Item>
|
|
307
|
+
</FilterPicker>
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
### Multiple Selection with Select All
|
|
311
|
+
|
|
312
|
+
```jsx
|
|
313
|
+
<FilterPicker
|
|
314
|
+
label="Select permissions"
|
|
315
|
+
placeholder="Choose permissions"
|
|
316
|
+
selectionMode="multiple"
|
|
317
|
+
showSelectAll={true}
|
|
318
|
+
selectAllLabel="All Permissions"
|
|
319
|
+
>
|
|
320
|
+
<FilterPicker.Item key="read">Read</FilterPicker.Item>
|
|
321
|
+
<FilterPicker.Item key="write">Write</FilterPicker.Item>
|
|
322
|
+
<FilterPicker.Item key="execute">Execute</FilterPicker.Item>
|
|
323
|
+
</FilterPicker>
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Custom Summary
|
|
327
|
+
|
|
328
|
+
```jsx
|
|
329
|
+
<FilterPicker
|
|
330
|
+
label="Custom Summary Display"
|
|
331
|
+
selectionMode="multiple"
|
|
332
|
+
renderSummary={({ selectedLabels, selectedKeys }) => {
|
|
333
|
+
if (selectedKeys.length === 0) return null;
|
|
334
|
+
if (selectedKeys.length === 1) return `${selectedLabels[0]} selected`;
|
|
335
|
+
return `${selectedKeys.length} items selected`;
|
|
336
|
+
}}
|
|
337
|
+
>
|
|
338
|
+
<FilterPicker.Item key="item1">Item 1</FilterPicker.Item>
|
|
339
|
+
<FilterPicker.Item key="item2">Item 2</FilterPicker.Item>
|
|
340
|
+
</FilterPicker>
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
### No Summary (Icon Only)
|
|
344
|
+
|
|
345
|
+
```jsx
|
|
346
|
+
<FilterPicker
|
|
347
|
+
selectionMode="multiple"
|
|
348
|
+
renderSummary={false}
|
|
349
|
+
icon={<FilterIcon />}
|
|
350
|
+
aria-label="Apply filters"
|
|
351
|
+
>
|
|
352
|
+
<FilterPicker.Item key="filter1">Filter 1</FilterPicker.Item>
|
|
353
|
+
<FilterPicker.Item key="filter2">Filter 2</FilterPicker.Item>
|
|
354
|
+
</FilterPicker>
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
### With Header and Footer
|
|
358
|
+
|
|
359
|
+
```jsx
|
|
360
|
+
<FilterPicker
|
|
361
|
+
label="Programming Languages"
|
|
362
|
+
selectionMode="multiple"
|
|
363
|
+
header={
|
|
364
|
+
<Space gap="1x" flow="row" placeItems="center">
|
|
365
|
+
<Title level={6}>Languages</Title>
|
|
366
|
+
<Badge type="purple">12</Badge>
|
|
367
|
+
</Space>
|
|
368
|
+
}
|
|
369
|
+
footer={
|
|
370
|
+
<Text color="#dark.50" preset="t4">
|
|
371
|
+
Popular languages shown
|
|
372
|
+
</Text>
|
|
373
|
+
}
|
|
374
|
+
>
|
|
375
|
+
<FilterPicker.Section title="Frontend">
|
|
376
|
+
<FilterPicker.Item key="javascript">JavaScript</FilterPicker.Item>
|
|
377
|
+
<FilterPicker.Item key="react">React</FilterPicker.Item>
|
|
378
|
+
</FilterPicker.Section>
|
|
379
|
+
</FilterPicker>
|
|
380
|
+
```
|
|
381
|
+
|
|
382
|
+
### With Custom Values
|
|
383
|
+
|
|
384
|
+
```jsx
|
|
385
|
+
<FilterPicker
|
|
386
|
+
label="Custom Values Allowed"
|
|
387
|
+
placeholder="Type or select..."
|
|
388
|
+
selectionMode="multiple"
|
|
389
|
+
allowsCustomValue={true}
|
|
390
|
+
searchPlaceholder="Search or add custom value..."
|
|
391
|
+
>
|
|
392
|
+
<FilterPicker.Item key="existing1">Existing Option 1</FilterPicker.Item>
|
|
393
|
+
<FilterPicker.Item key="existing2">Existing Option 2</FilterPicker.Item>
|
|
394
|
+
</FilterPicker>
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
### Complex Example
|
|
398
|
+
|
|
399
|
+
```jsx
|
|
400
|
+
<FilterPicker
|
|
401
|
+
label="Advanced Filter System"
|
|
402
|
+
selectionMode="multiple"
|
|
403
|
+
isCheckable={true}
|
|
404
|
+
renderSummary={({ selectedKeys, selectedLabels }) => {
|
|
405
|
+
if (selectedKeys.length === 0) return null;
|
|
406
|
+
if (selectedKeys.length <= 3)
|
|
407
|
+
return `${selectedKeys.length} filters: ${selectedLabels.join(', ')}`;
|
|
408
|
+
return `${selectedKeys.length} filters applied`;
|
|
409
|
+
}}
|
|
410
|
+
header={
|
|
411
|
+
<Space gap="1x" flow="row" placeItems="center">
|
|
412
|
+
<FilterIcon />
|
|
413
|
+
<Title level={6}>Filter Options</Title>
|
|
414
|
+
</Space>
|
|
415
|
+
}
|
|
416
|
+
>
|
|
417
|
+
<FilterPicker.Section title="Date & Time">
|
|
418
|
+
<FilterPicker.Item key="today">Created Today</FilterPicker.Item>
|
|
419
|
+
<FilterPicker.Item key="week">Created This Week</FilterPicker.Item>
|
|
420
|
+
</FilterPicker.Section>
|
|
421
|
+
<FilterPicker.Section title="Status">
|
|
422
|
+
<FilterPicker.Item key="active">Active Items</FilterPicker.Item>
|
|
423
|
+
<FilterPicker.Item key="draft">Draft Items</FilterPicker.Item>
|
|
424
|
+
</FilterPicker.Section>
|
|
425
|
+
</FilterPicker>
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
## Accessibility
|
|
429
|
+
|
|
430
|
+
### Keyboard Navigation
|
|
431
|
+
|
|
432
|
+
- `Tab` - Moves focus to the trigger button
|
|
433
|
+
- `Space/Enter` - Opens the dropdown popover
|
|
434
|
+
- `Arrow Up/Down` - Opens the popover (when closed) or navigates through options (when open)
|
|
435
|
+
- `Escape` - Closes the popover or clears search
|
|
436
|
+
- `Home/End` - Navigate to first/last option
|
|
437
|
+
|
|
438
|
+
### Screen Reader Support
|
|
439
|
+
|
|
440
|
+
- Trigger button announces current selection state
|
|
441
|
+
- Popover opening/closing is announced
|
|
442
|
+
- Search functionality is properly communicated
|
|
443
|
+
- Selection changes are announced immediately
|
|
444
|
+
- Loading and validation states are communicated
|
|
445
|
+
|
|
446
|
+
### ARIA Properties
|
|
447
|
+
|
|
448
|
+
- `aria-label` - Provides accessible label for the trigger button
|
|
449
|
+
- `aria-expanded` - Indicates whether the popover is open
|
|
450
|
+
- `aria-haspopup` - Indicates the button controls a listbox
|
|
451
|
+
- `aria-describedby` - Associates help text and descriptions
|
|
452
|
+
|
|
453
|
+
## Best Practices
|
|
454
|
+
|
|
455
|
+
1. **Do**: Provide clear, descriptive labels for the trigger
|
|
456
|
+
```jsx
|
|
457
|
+
<FilterPicker label="Filter by Category" placeholder="Choose categories...">
|
|
458
|
+
<FilterPicker.Item key="electronics">Electronics</FilterPicker.Item>
|
|
459
|
+
</FilterPicker>
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
2. **Don't**: Use overly long option texts that will be truncated
|
|
463
|
+
```jsx
|
|
464
|
+
// ❌ Avoid very long option text
|
|
465
|
+
<FilterPicker.Item key="long">
|
|
466
|
+
This is an extremely long option text that will be truncated
|
|
467
|
+
</FilterPicker.Item>
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
3. **Do**: Use sections for logical grouping of small to medium lists
|
|
471
|
+
```jsx
|
|
472
|
+
<FilterPicker.Section title="Categories">
|
|
473
|
+
<FilterPicker.Item key="tech">Technology</FilterPicker.Item>
|
|
474
|
+
</FilterPicker.Section>
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
4. **Do**: Use dynamic content pattern for large datasets
|
|
478
|
+
```jsx
|
|
479
|
+
// ✅ For large lists (50+ items)
|
|
480
|
+
<FilterPicker items={largeDataset}>
|
|
481
|
+
{(item) => <FilterPicker.Item key={item.id}>{item.name}</FilterPicker.Item>}
|
|
482
|
+
</FilterPicker>
|
|
483
|
+
```
|
|
484
|
+
|
|
485
|
+
5. **Do**: Use `showSelectAll` for efficient multiple selection in compact interfaces
|
|
486
|
+
```jsx
|
|
487
|
+
<FilterPicker
|
|
488
|
+
selectionMode="multiple"
|
|
489
|
+
showSelectAll
|
|
490
|
+
selectAllLabel="Select All Options"
|
|
491
|
+
placeholder="Choose items..."
|
|
492
|
+
>
|
|
493
|
+
{/* many items */}
|
|
494
|
+
</FilterPicker>
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
6. **Do**: Use `isClearable` when users need to quickly clear selections
|
|
498
|
+
```jsx
|
|
499
|
+
<FilterPicker
|
|
500
|
+
isClearable
|
|
501
|
+
selectionMode="single"
|
|
502
|
+
label="Choose option"
|
|
503
|
+
>
|
|
504
|
+
{/* items */}
|
|
505
|
+
</FilterPicker>
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
7. **Do**: Use `triggerStyles` for custom styling needs beyond standard types
|
|
509
|
+
8. **Accessibility**: Always provide meaningful labels and placeholders
|
|
510
|
+
9. **Performance**: Use `textValue` prop for complex option content
|
|
511
|
+
10. **UX**: Consider using `isCheckable` for multiple selection clarity
|
|
512
|
+
|
|
513
|
+
## Integration with Forms
|
|
514
|
+
|
|
515
|
+
This component supports all [Field properties](../../FieldProperties.md) when used within a Form. The component automatically handles form validation, field states, and integrates with form submission.
|
|
516
|
+
|
|
517
|
+
```jsx
|
|
518
|
+
<Form onSubmit={handleSubmit}>
|
|
519
|
+
<FilterPicker
|
|
520
|
+
name="categories"
|
|
521
|
+
label="Product Categories"
|
|
522
|
+
isRequired
|
|
523
|
+
selectionMode="multiple"
|
|
524
|
+
placeholder="Select categories..."
|
|
525
|
+
rules={[{ required: true }]}
|
|
526
|
+
>
|
|
527
|
+
<FilterPicker.Section title="Electronics">
|
|
528
|
+
<FilterPicker.Item key="phones">Phones</FilterPicker.Item>
|
|
529
|
+
<FilterPicker.Item key="laptops">Laptops</FilterPicker.Item>
|
|
530
|
+
</FilterPicker.Section>
|
|
531
|
+
<FilterPicker.Section title="Clothing">
|
|
532
|
+
<FilterPicker.Item key="shirts">Shirts</FilterPicker.Item>
|
|
533
|
+
<FilterPicker.Item key="pants">Pants</FilterPicker.Item>
|
|
534
|
+
</FilterPicker.Section>
|
|
535
|
+
</FilterPicker>
|
|
536
|
+
</Form>
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
## Advanced Features
|
|
540
|
+
|
|
541
|
+
### Custom Summary Rendering
|
|
542
|
+
|
|
543
|
+
FilterPicker supports custom summary functions for the trigger display:
|
|
544
|
+
|
|
545
|
+
```jsx
|
|
546
|
+
const renderSummary = ({ selectedLabels, selectedKeys, selectionMode }) => {
|
|
547
|
+
if (selectionMode === 'single') {
|
|
548
|
+
return selectedLabels[0] ? `Selected: ${selectedLabels[0]}` : null;
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
if (selectedKeys.length === 0) return null;
|
|
552
|
+
if (selectedKeys.length === 1) return selectedLabels[0];
|
|
553
|
+
if (selectedKeys.length <= 3) return selectedLabels.join(', ');
|
|
554
|
+
return `${selectedKeys.length} items selected`;
|
|
555
|
+
};
|
|
556
|
+
|
|
557
|
+
<FilterPicker renderSummary={renderSummary}>
|
|
558
|
+
{/* items */}
|
|
559
|
+
</FilterPicker>
|
|
560
|
+
```
|
|
561
|
+
|
|
562
|
+
### Custom Values
|
|
563
|
+
|
|
564
|
+
When `allowsCustomValue={true}`, users can add new options:
|
|
565
|
+
|
|
566
|
+
```jsx
|
|
567
|
+
<FilterPicker
|
|
568
|
+
allowsCustomValue={true}
|
|
569
|
+
selectionMode="multiple"
|
|
570
|
+
searchPlaceholder="Search or add new..."
|
|
571
|
+
>
|
|
572
|
+
<FilterPicker.Item key="existing">Existing Option</FilterPicker.Item>
|
|
573
|
+
</FilterPicker>
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
Custom values:
|
|
577
|
+
- Are automatically added when typed and selected
|
|
578
|
+
- Persist across popover sessions
|
|
579
|
+
- Appear in the selection summary
|
|
580
|
+
- Can be removed like any other selection
|
|
581
|
+
|
|
582
|
+
### Selected Items Sorting
|
|
583
|
+
|
|
584
|
+
When using the `items` prop, FilterPicker automatically sorts selected items to the top when the popover reopens. This helps users quickly see and manage their selections.
|
|
585
|
+
|
|
586
|
+
```jsx
|
|
587
|
+
// ✅ Default behavior - sorting enabled with items prop
|
|
588
|
+
<FilterPicker
|
|
589
|
+
items={fruits}
|
|
590
|
+
selectionMode="multiple"
|
|
591
|
+
>
|
|
592
|
+
{(item) => <FilterPicker.Item key={item.key}>{item.label}</FilterPicker.Item>}
|
|
593
|
+
</FilterPicker>
|
|
594
|
+
|
|
595
|
+
// Explicitly disable sorting
|
|
596
|
+
<FilterPicker
|
|
597
|
+
items={fruits}
|
|
598
|
+
sortSelectedToTop={false}
|
|
599
|
+
selectionMode="multiple"
|
|
600
|
+
>
|
|
601
|
+
{(item) => <FilterPicker.Item key={item.key}>{item.label}</FilterPicker.Item>}
|
|
602
|
+
</FilterPicker>
|
|
603
|
+
|
|
604
|
+
// ❌ Sorting not available with JSX children
|
|
605
|
+
<FilterPicker selectionMode="multiple">
|
|
606
|
+
<FilterPicker.Item key="apple">Apple</FilterPicker.Item>
|
|
607
|
+
<FilterPicker.Item key="banana">Banana</FilterPicker.Item>
|
|
608
|
+
</FilterPicker>
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
**Key behaviors:**
|
|
612
|
+
- Sorting only works when using the `items` prop
|
|
613
|
+
- Selected items move to the top when the popover reopens
|
|
614
|
+
- Within sections, selected items sort to the top of their section
|
|
615
|
+
- Sorting is cached during a session to maintain order while the popover is open
|
|
616
|
+
- Defaults to `true` for items prop, `false` for JSX children
|
|
617
|
+
- Can be explicitly controlled with the `sortSelectedToTop` prop
|
|
618
|
+
|
|
619
|
+
### Icon-Only Mode
|
|
620
|
+
|
|
621
|
+
For space-constrained interfaces:
|
|
622
|
+
|
|
623
|
+
```jsx
|
|
624
|
+
<FilterPicker
|
|
625
|
+
renderSummary={false}
|
|
626
|
+
icon={<FilterIcon />}
|
|
627
|
+
aria-label="Apply filters"
|
|
628
|
+
type="clear"
|
|
629
|
+
>
|
|
630
|
+
{/* options */}
|
|
631
|
+
</FilterPicker>
|
|
632
|
+
```
|
|
633
|
+
|
|
634
|
+
### Clearable Selection
|
|
635
|
+
|
|
636
|
+
Add a clear button to quickly reset selection:
|
|
637
|
+
|
|
638
|
+
```jsx
|
|
639
|
+
<FilterPicker
|
|
640
|
+
isClearable
|
|
641
|
+
selectionMode="single"
|
|
642
|
+
label="Choose option"
|
|
643
|
+
onClear={() => console.log('Selection cleared')}
|
|
644
|
+
>
|
|
645
|
+
{/* options */}
|
|
646
|
+
</FilterPicker>
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
The clear button:
|
|
650
|
+
- Appears in the `rightIcon` slot when there's a selection
|
|
651
|
+
- Only shows when `isClearable={true}` and a selection exists
|
|
652
|
+
- Closes the popover when clicked
|
|
653
|
+
- Calls the optional `onClear` callback
|
|
654
|
+
- Is hidden when the picker is disabled or read-only
|
|
655
|
+
|
|
656
|
+
### External Filtering
|
|
657
|
+
|
|
658
|
+
FilterPicker provides two approaches for implementing external filtering when you need to control the filtering logic outside the component:
|
|
659
|
+
|
|
660
|
+
#### Approach 1: Disabled Internal Filtering
|
|
661
|
+
|
|
662
|
+
Use `filter={false}` to disable internal filtering while providing pre-filtered items:
|
|
663
|
+
|
|
664
|
+
```jsx
|
|
665
|
+
const [externalSearch, setExternalSearch] = useState('');
|
|
666
|
+
|
|
667
|
+
const filteredFruits = useMemo(() => {
|
|
668
|
+
if (!externalSearch.trim()) return allFruits;
|
|
669
|
+
return allFruits.filter((fruit) =>
|
|
670
|
+
fruit.label.toLowerCase().includes(externalSearch.toLowerCase())
|
|
671
|
+
);
|
|
672
|
+
}, [externalSearch]);
|
|
673
|
+
|
|
674
|
+
<FilterPicker
|
|
675
|
+
label="Select Fruits"
|
|
676
|
+
placeholder="Choose fruits..."
|
|
677
|
+
selectionMode="multiple"
|
|
678
|
+
filter={false}
|
|
679
|
+
items={filteredFruits}
|
|
680
|
+
searchPlaceholder="Type to search..."
|
|
681
|
+
>
|
|
682
|
+
{(fruit) => (
|
|
683
|
+
<FilterPicker.Item key={fruit.key}>{fruit.label}</FilterPicker.Item>
|
|
684
|
+
)}
|
|
685
|
+
</FilterPicker>
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
#### Approach 2: Controlled Search Input
|
|
689
|
+
|
|
690
|
+
Use `searchValue` and `onSearchChange` for complete control over the search behavior:
|
|
691
|
+
|
|
692
|
+
```jsx
|
|
693
|
+
const [searchValue, setSearchValue] = useState('');
|
|
694
|
+
|
|
695
|
+
// Simulate debounced search
|
|
696
|
+
const [processedSearch, setProcessedSearch] = useState('');
|
|
697
|
+
useEffect(() => {
|
|
698
|
+
const timer = setTimeout(() => setProcessedSearch(searchValue), 300);
|
|
699
|
+
return () => clearTimeout(timer);
|
|
700
|
+
}, [searchValue]);
|
|
701
|
+
|
|
702
|
+
const filteredFruits = useMemo(() => {
|
|
703
|
+
if (!processedSearch.trim()) return allFruits;
|
|
704
|
+
return allFruits.filter((fruit) =>
|
|
705
|
+
fruit.label.toLowerCase().includes(processedSearch.toLowerCase())
|
|
706
|
+
);
|
|
707
|
+
}, [processedSearch]);
|
|
708
|
+
|
|
709
|
+
<FilterPicker
|
|
710
|
+
label="Select Fruits"
|
|
711
|
+
placeholder="Choose fruits..."
|
|
712
|
+
selectionMode="multiple"
|
|
713
|
+
searchValue={searchValue}
|
|
714
|
+
filter={false}
|
|
715
|
+
items={filteredFruits}
|
|
716
|
+
onSearchChange={setSearchValue}
|
|
717
|
+
>
|
|
718
|
+
{(fruit) => (
|
|
719
|
+
<FilterPicker.Item key={fruit.key}>{fruit.label}</FilterPicker.Item>
|
|
720
|
+
)}
|
|
721
|
+
</FilterPicker>
|
|
722
|
+
```
|
|
723
|
+
|
|
724
|
+
**When to use each approach:**
|
|
725
|
+
- **`filter={false}`**: Simpler approach when you just need to pre-filter items without controlling the search input itself. Good for server-side filtering or custom filter logic.
|
|
726
|
+
- **Controlled Search**: Use when you need full control over the search input (debouncing, external UI sync, clearing from outside, or tracking search analytics).
|
|
727
|
+
- **Combine Both**: You can use both together for maximum control - controlled search input with external filtering.
|
|
728
|
+
|
|
729
|
+
## Performance
|
|
730
|
+
|
|
731
|
+
### Optimization Tips
|
|
732
|
+
|
|
733
|
+
- **Use Dynamic Content Pattern**: For large datasets (50+ items), use the `items` prop with render function to enable automatic virtualization
|
|
734
|
+
- **Avoid Sections for Large Lists**: Virtualization is disabled when sections are present, so avoid sections for very large datasets
|
|
735
|
+
- **Use `textValue` prop**: For complex option content, provide searchable text that includes more context than just the visible label
|
|
736
|
+
- **Implement custom filter functions**: For specific search needs or performance-critical filtering
|
|
737
|
+
- **Consider debounced selection changes**: For real-time updates that trigger expensive operations
|
|
738
|
+
- **Use external filtering**: For server-side filtering or complex custom logic
|
|
739
|
+
|
|
740
|
+
### Virtualization
|
|
741
|
+
|
|
742
|
+
When using the dynamic content pattern (`items` prop) without sections, FilterPicker automatically enables virtualization:
|
|
743
|
+
|
|
744
|
+
```jsx
|
|
745
|
+
// ✅ Virtualization enabled - excellent performance with large datasets
|
|
746
|
+
<FilterPicker items={largeArray}>
|
|
747
|
+
{(item) => <FilterPicker.Item key={item.id}>{item.name}</FilterPicker.Item>}
|
|
748
|
+
</FilterPicker>
|
|
749
|
+
|
|
750
|
+
// ❌ Virtualization disabled - sections prevent virtualization
|
|
751
|
+
<FilterPicker items={largeArray}>
|
|
752
|
+
<FilterPicker.Section title="All Items">
|
|
753
|
+
{(item) => <FilterPicker.Item key={item.id}>{item.name}</FilterPicker.Item>}
|
|
754
|
+
</FilterPicker.Section>
|
|
755
|
+
</FilterPicker>
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
### Content Optimization
|
|
759
|
+
|
|
760
|
+
```jsx
|
|
761
|
+
// Optimized for performance
|
|
762
|
+
<FilterPicker.Item
|
|
763
|
+
key="complex"
|
|
764
|
+
textValue="John Doe - Senior Developer"
|
|
765
|
+
>
|
|
766
|
+
<UserCard user={user} />
|
|
767
|
+
</FilterPicker.Item>
|
|
768
|
+
```
|
|
769
|
+
|
|
770
|
+
## Related Components
|
|
771
|
+
|
|
772
|
+
- [FilterListBox](./FilterListBox.md) - The underlying searchable list component
|
|
773
|
+
- [Select](./Select.md) - Use for simple selection without search functionality
|
|
774
|
+
- [ComboBox](./ComboBox.md) - Use when users need to enter custom values
|
|
775
|
+
- [ListBox](./ListBox.md) - Use for basic list selection without search
|
|
776
|
+
- [Button](../actions/Button.md) - The underlying trigger component
|