@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,177 @@
|
|
|
1
|
+
# RenderCache
|
|
2
|
+
|
|
3
|
+
RenderCache is a performance optimization component that caches rendered React elements and only re-renders specific items when needed. It's useful for lists where most items remain unchanged but you need fine-grained control over which items to re-render.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When rendering lists where only specific items need to re-render based on state changes
|
|
8
|
+
- When child components are expensive to render and don't need to update on every parent re-render
|
|
9
|
+
- When you want more control than React.memo provides, with explicit per-item cache invalidation
|
|
10
|
+
- When building complex UI where selective re-rendering improves performance significantly
|
|
11
|
+
|
|
12
|
+
## Component
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
### Properties
|
|
17
|
+
|
|
18
|
+
- **`items`** `T[]` — Array of items to render
|
|
19
|
+
- **`renderKeys`** `Array<string | number>` — Array of keys that should trigger re-render. Only items with keys in this array will be re-rendered
|
|
20
|
+
- **`getKey`** `(item: T) => string | number` — Function that extracts a unique key from each item
|
|
21
|
+
- **`children`** `(item: T) => ReactElement` — Render function that takes an item and returns a React element
|
|
22
|
+
|
|
23
|
+
### Property Details
|
|
24
|
+
|
|
25
|
+
- **items**: Array of items to render
|
|
26
|
+
- **renderKeys**: Array of keys that should trigger re-render. Only items with keys in this array will be re-rendered
|
|
27
|
+
- **getKey**: Function that extracts a unique key from each item
|
|
28
|
+
- **children**: Render function that takes an item and returns a React element
|
|
29
|
+
|
|
30
|
+
### Base Properties
|
|
31
|
+
|
|
32
|
+
This is a headless component and does not support base properties.
|
|
33
|
+
|
|
34
|
+
## How It Works
|
|
35
|
+
|
|
36
|
+
The component maintains an internal cache of rendered elements. When rendering:
|
|
37
|
+
|
|
38
|
+
1. For each item, it checks if the item's key is in renderKeys
|
|
39
|
+
2. If the key is in renderKeys or the item hasn't been rendered before, it calls the children function to render/re-render
|
|
40
|
+
3. Otherwise, it returns the cached element from the previous render
|
|
41
|
+
4. It automatically cleans up cache entries for items that are no longer in the list
|
|
42
|
+
|
|
43
|
+
## Examples
|
|
44
|
+
|
|
45
|
+
### Basic Usage
|
|
46
|
+
|
|
47
|
+
```jsx
|
|
48
|
+
import { RenderCache } from '@cube-dev/ui-kit';
|
|
49
|
+
|
|
50
|
+
const items = [
|
|
51
|
+
{ id: 1, name: 'Item 1' },
|
|
52
|
+
{ id: 2, name: 'Item 2' },
|
|
53
|
+
{ id: 3, name: 'Item 3' },
|
|
54
|
+
];
|
|
55
|
+
|
|
56
|
+
const [selectedId, setSelectedId] = useState(1);
|
|
57
|
+
|
|
58
|
+
<RenderCache
|
|
59
|
+
items={items}
|
|
60
|
+
renderKeys={[selectedId]}
|
|
61
|
+
getKey={(item) => item.id}
|
|
62
|
+
>
|
|
63
|
+
{(item) => <ExpensiveItem item={item} isSelected={item.id === selectedId} />}
|
|
64
|
+
</RenderCache>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### With List of Expensive Components
|
|
68
|
+
|
|
69
|
+
```jsx
|
|
70
|
+
import { RenderCache } from '@cube-dev/ui-kit';
|
|
71
|
+
|
|
72
|
+
function ExpensiveListItem({ item, isActive }) {
|
|
73
|
+
// Complex rendering logic
|
|
74
|
+
return <div className={isActive ? 'active' : ''}>{item.name}</div>;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
const [activeId, setActiveId] = useState(1);
|
|
78
|
+
|
|
79
|
+
<RenderCache
|
|
80
|
+
items={data}
|
|
81
|
+
renderKeys={[activeId]}
|
|
82
|
+
getKey={(item) => item.id}
|
|
83
|
+
>
|
|
84
|
+
{(item) => (
|
|
85
|
+
<ExpensiveListItem
|
|
86
|
+
item={item}
|
|
87
|
+
isActive={item.id === activeId}
|
|
88
|
+
/>
|
|
89
|
+
)}
|
|
90
|
+
</RenderCache>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
## Performance Considerations
|
|
94
|
+
|
|
95
|
+
- **Cache management**: The component uses useRef to maintain the cache across renders, avoiding unnecessary re-allocations
|
|
96
|
+
- **Automatic cleanup**: Removes cached entries for items no longer in the list to prevent memory leaks
|
|
97
|
+
- **Selective invalidation**: Only items with keys in renderKeys are re-rendered, others use cached elements
|
|
98
|
+
- **Best for expensive renders**: Most effective when child components have significant render cost
|
|
99
|
+
|
|
100
|
+
## Best Practices
|
|
101
|
+
|
|
102
|
+
1. **Use stable keys**: Ensure getKey returns consistent keys for the same items across renders
|
|
103
|
+
```jsx
|
|
104
|
+
// Good: Using stable IDs
|
|
105
|
+
<RenderCache
|
|
106
|
+
items={items}
|
|
107
|
+
getKey={(item) => item.id}
|
|
108
|
+
renderKeys={[selectedId]}
|
|
109
|
+
>
|
|
110
|
+
{(item) => <Item {...item} />}
|
|
111
|
+
</RenderCache>
|
|
112
|
+
|
|
113
|
+
// Bad: Using indices (unstable when list changes)
|
|
114
|
+
<RenderCache
|
|
115
|
+
items={items}
|
|
116
|
+
getKey={(item, index) => index}
|
|
117
|
+
renderKeys={[selectedIndex]}
|
|
118
|
+
>
|
|
119
|
+
{(item) => <Item {...item} />}
|
|
120
|
+
</RenderCache>
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
2. **Minimize renderKeys**: Only include keys that truly need re-rendering to maximize cache benefits
|
|
124
|
+
```jsx
|
|
125
|
+
// Good: Only re-render the active item
|
|
126
|
+
<RenderCache
|
|
127
|
+
items={items}
|
|
128
|
+
renderKeys={[activeItemId]}
|
|
129
|
+
getKey={(item) => item.id}
|
|
130
|
+
>
|
|
131
|
+
{(item) => <Item {...item} />}
|
|
132
|
+
</RenderCache>
|
|
133
|
+
|
|
134
|
+
// Bad: Re-rendering all items defeats the purpose
|
|
135
|
+
<RenderCache
|
|
136
|
+
items={items}
|
|
137
|
+
renderKeys={items.map(item => item.id)}
|
|
138
|
+
getKey={(item) => item.id}
|
|
139
|
+
>
|
|
140
|
+
{(item) => <Item {...item} />}
|
|
141
|
+
</RenderCache>
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
3. **Consider alternatives**: For simple cases, React.memo might be sufficient and simpler
|
|
145
|
+
|
|
146
|
+
4. **Profile first**: Use React DevTools Profiler to confirm you have a performance issue before adding this optimization
|
|
147
|
+
|
|
148
|
+
5. **Avoid inline functions**: Use stable render functions to prevent unnecessary cache invalidation
|
|
149
|
+
```jsx
|
|
150
|
+
// Good: Stable render function
|
|
151
|
+
const renderItem = useCallback((item) => (
|
|
152
|
+
<ExpensiveItem item={item} />
|
|
153
|
+
), []);
|
|
154
|
+
|
|
155
|
+
<RenderCache
|
|
156
|
+
items={items}
|
|
157
|
+
renderKeys={[selectedId]}
|
|
158
|
+
getKey={(item) => item.id}
|
|
159
|
+
>
|
|
160
|
+
{renderItem}
|
|
161
|
+
</RenderCache>
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## When NOT to Use
|
|
165
|
+
|
|
166
|
+
- **Simple lists**: For simple lists without performance issues, regular rendering is simpler
|
|
167
|
+
- **All items update frequently**: If all items need to re-render on every change, the cache overhead isn't worth it
|
|
168
|
+
- **Small lists**: Lists with < 10 items typically don't benefit from caching
|
|
169
|
+
- **Simple components**: If child components render quickly, the optimization overhead may outweigh benefits
|
|
170
|
+
|
|
171
|
+
## Related Components
|
|
172
|
+
|
|
173
|
+
- **React.memo** - For simple component memoization
|
|
174
|
+
- **useMemo** - For memoizing computed values
|
|
175
|
+
- **useCallback** - For memoizing callback functions
|
|
176
|
+
- **DisplayTransition** - For animating component mount/unmount
|
|
177
|
+
|
package/docs/Result.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Result
|
|
2
|
+
|
|
3
|
+
Used to feed back the results of a series of operational tasks.
|
|
4
|
+
|
|
5
|
+
## When To Use
|
|
6
|
+
|
|
7
|
+
Use when important operations need to inform the user to process the results and the feedback is more complicated.
|
|
8
|
+
|
|
9
|
+
## Examples
|
|
10
|
+
|
|
11
|
+
### Success
|
|
12
|
+
|
|
13
|
+
### Info
|
|
14
|
+
|
|
15
|
+
### Warning
|
|
16
|
+
|
|
17
|
+
### Error
|
|
18
|
+
|
|
19
|
+
### Custom Icon
|
|
20
|
+
|
|
21
|
+
### Custom Title
|
|
22
|
+
|
|
23
|
+
### Compact
|
|
24
|
+
|
|
25
|
+
## Properties
|
|
26
|
+
|
|
27
|
+
- **`status`** `'success' | 'error' | 'info' | 'warning' | 404 | 403 | 500` (default: `'info'`) — Result status, determines the icon and color from ready-made templates
|
|
28
|
+
- **`title`** `ReactNode` — The title of the result
|
|
29
|
+
- **`subtitle`** `ReactNode` — Subtitle of the result component
|
|
30
|
+
- **`icon`** `ReactNode` — Custom icon element. Don't use together with `status`
|
|
31
|
+
- **`isCompact`** `boolean` — Whether the result component has a compact presentation
|
|
32
|
+
- **`children`** `ReactNode` — Additional block content, e.g. a set of action buttons
|
|
33
|
+
|
|
34
|
+
## Differences from Ant Design
|
|
35
|
+
|
|
36
|
+
| There are differences | Ant Design property | Cube UIKit property |
|
|
37
|
+
| :-------------------: | :-----------------: | :-----------------: |
|
|
38
|
+
| No | `status` | `status` |
|
|
39
|
+
| No | `title` | `title` |
|
|
40
|
+
| Yes | `subTitle` | `subtitle` |
|
|
41
|
+
| No | `icon` | `icon` |
|
|
42
|
+
| Yes | `extra` | `children` |
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Layout examples
|
|
2
|
+
|
|
3
|
+
## Flow layout
|
|
4
|
+
|
|
5
|
+
Flow Component is used to create gaps between blocks inside block layout.
|
|
6
|
+
|
|
7
|
+
## Flex layout
|
|
8
|
+
|
|
9
|
+
Use Space Component to create a row or a column of elements.
|
|
10
|
+
|
|
11
|
+
Use Flex Component for more flexible layouts.
|
|
12
|
+
|
|
13
|
+
## Grid layout
|
|
14
|
+
|
|
15
|
+
Use Grid Component for grid layouts.
|
|
16
|
+
|
|
17
|
+
### Simple layout with side bar.
|
|
18
|
+
|
|
19
|
+
```jsx
|
|
20
|
+
<Grid gridColumns="200px 1fr" gridRows="60px 1fr" height="500px">
|
|
21
|
+
<Card gridColumn="1 / -1">Header</Card>
|
|
22
|
+
<Card>Sidebar</Card>
|
|
23
|
+
<Card>Content</Card>
|
|
24
|
+
</Grid>
|
|
25
|
+
```
|
|
26
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Typography
|
|
2
|
+
|
|
3
|
+
There are many ways to create typography elements like text labels and headings. You can use complete components, presets or low-level styles to get exact text label you want.
|
|
4
|
+
|
|
5
|
+
## Typography Components
|
|
6
|
+
|
|
7
|
+
### Headings
|
|
8
|
+
|
|
9
|
+
### Paragraphs
|
|
10
|
+
|
|
11
|
+
Paragraphs with gaps between them.
|
|
12
|
+
|
|
13
|
+
### Text labels
|
|
14
|
+
|
|
15
|
+
### Links
|
|
16
|
+
|
|
17
|
+
Use `!` prefix to open link in new tab.
|
|
18
|
+
|
|
19
|
+
```jsx
|
|
20
|
+
(
|
|
21
|
+
<Link to="https://cube-uikit-storybook.netlify.app/">
|
|
22
|
+
Open Cube Cloud UI Kit
|
|
23
|
+
</Link>
|
|
24
|
+
) |
|
|
25
|
+
(
|
|
26
|
+
<Link to="!https://cube-uikit-storybook.netlify.app/">
|
|
27
|
+
Open Cube Cloud UI Kit in new tab
|
|
28
|
+
</Link>
|
|
29
|
+
);
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Use `@` prefix to navigate to the new page without using the Router.
|
|
33
|
+
|
|
34
|
+
```jsx
|
|
35
|
+
<Link to="@">Reload this page</Link> |
|
|
36
|
+
<Link to="@/">Move to the Main Page</Link>;
|
|
37
|
+
```
|
|
38
|
+
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Block
|
|
2
|
+
|
|
3
|
+
A simple block-level container. The most basic layout primitive.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Wrapping content in a block display context
|
|
8
|
+
- Base layout when you need `display: block` without extra semantics
|
|
9
|
+
- Generic container for styling with style props
|
|
10
|
+
|
|
11
|
+
## Properties
|
|
12
|
+
|
|
13
|
+
No component-specific props. Use style props directly.
|
|
14
|
+
|
|
15
|
+
### Style Defaults
|
|
16
|
+
|
|
17
|
+
- `display` — `block`
|
|
18
|
+
|
|
19
|
+
### Base Properties
|
|
20
|
+
|
|
21
|
+
Supports [Base properties](../BaseProperties.md).
|
|
22
|
+
|
|
23
|
+
## Examples
|
|
24
|
+
|
|
25
|
+
```jsx
|
|
26
|
+
<Block>
|
|
27
|
+
<Text>Content in a block container</Text>
|
|
28
|
+
</Block>
|
|
29
|
+
|
|
30
|
+
<Block padding="1x" fill="#surface">
|
|
31
|
+
Styled block with padding and background
|
|
32
|
+
</Block>
|
|
33
|
+
```
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
# CollectionItem
|
|
2
|
+
|
|
3
|
+
`CollectionItem` is the building block for all collection-based components in the UI Kit, providing a consistent API for list items, menu options, and selectors.
|
|
4
|
+
|
|
5
|
+
## Used By
|
|
6
|
+
|
|
7
|
+
ListBox, FilterListBox, Select, ComboBox, FilterPicker, Picker, Menu, CommandMenu
|
|
8
|
+
|
|
9
|
+
## Usage Patterns
|
|
10
|
+
|
|
11
|
+
There are two ways to provide items to collection components:
|
|
12
|
+
|
|
13
|
+
### Static JSX
|
|
14
|
+
|
|
15
|
+
Define items directly. You **must** provide `key` props:
|
|
16
|
+
|
|
17
|
+
```jsx live=false
|
|
18
|
+
<ListBox>
|
|
19
|
+
<ListBox.Item key="apple">Apple</ListBox.Item>
|
|
20
|
+
<ListBox.Item key="banana">Banana</ListBox.Item>
|
|
21
|
+
</ListBox>
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Data-driven (Recommended)
|
|
25
|
+
|
|
26
|
+
**🚨 IMPORTANT:** The `items` prop **must be an array of objects**, where each object contains at least an `id` or `key` property.
|
|
27
|
+
|
|
28
|
+
```jsx live=false
|
|
29
|
+
// ✅ Correct: Array of objects with id/key
|
|
30
|
+
const items = [
|
|
31
|
+
{ id: 'apple', name: 'Apple' },
|
|
32
|
+
{ id: 'banana', name: 'Banana' },
|
|
33
|
+
];
|
|
34
|
+
|
|
35
|
+
<ListBox items={items}>
|
|
36
|
+
{(item) => <ListBox.Item key={item.id}>{item.name}</ListBox.Item>}
|
|
37
|
+
</ListBox>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
```jsx live=false
|
|
41
|
+
// ❌ Wrong: Array of strings won't work
|
|
42
|
+
const items = ['apple', 'banana']; // Don't do this!
|
|
43
|
+
|
|
44
|
+
// ❌ Wrong: Array of primitives won't work
|
|
45
|
+
const items = [1, 2, 3]; // Don't do this!
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Item Requirements
|
|
49
|
+
|
|
50
|
+
- **`id` or `key`** `string | number` — Unique identifier - **critical for selection callbacks** (✅ Required)
|
|
51
|
+
- **`textValue`** `string` — For filtering & accessibility (⚠️ Recommended)
|
|
52
|
+
|
|
53
|
+
**Without `id`/`key`:** React Aria falls back to using order-based keys (e.g., `"0"`, `"1"`), which breaks selection functionality in select components as these values are meaningless for identifying specific items.
|
|
54
|
+
|
|
55
|
+
**Without `textValue`:** Falls back to rendered content, then to key/id.
|
|
56
|
+
|
|
57
|
+
### Rules
|
|
58
|
+
|
|
59
|
+
```jsx live=false
|
|
60
|
+
// ✅ Using 'id'
|
|
61
|
+
const items = [
|
|
62
|
+
{ id: 'apple', name: 'Apple' },
|
|
63
|
+
{ id: 'banana', name: 'Banana' },
|
|
64
|
+
];
|
|
65
|
+
|
|
66
|
+
// ✅ Using 'key'
|
|
67
|
+
const items = [
|
|
68
|
+
{ key: 'apple', name: 'Apple' },
|
|
69
|
+
{ key: 'banana', name: 'Banana' },
|
|
70
|
+
];
|
|
71
|
+
|
|
72
|
+
// ✅ Consistent types
|
|
73
|
+
const items = [
|
|
74
|
+
{ id: '1', name: 'First' },
|
|
75
|
+
{ id: '2', name: 'Second' },
|
|
76
|
+
];
|
|
77
|
+
|
|
78
|
+
// ✅ Explicit textValue for complex content
|
|
79
|
+
const items = [{
|
|
80
|
+
id: 'user-1',
|
|
81
|
+
firstName: 'John',
|
|
82
|
+
lastName: 'Smith',
|
|
83
|
+
textValue: 'John Smith',
|
|
84
|
+
}];
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Always provide explicit `textValue` for:**
|
|
88
|
+
- Icons/images without text
|
|
89
|
+
- Formatted/complex content
|
|
90
|
+
- Non-readable keys (UUIDs)
|
|
91
|
+
- Searchable components (ComboBox, FilterListBox, FilterPicker, CommandMenu)
|
|
92
|
+
|
|
93
|
+
## Properties
|
|
94
|
+
|
|
95
|
+
Extends all [Item component](./content/Item.md) props:
|
|
96
|
+
|
|
97
|
+
- `children` - Item content
|
|
98
|
+
- `icon` / `rightIcon` - Icons
|
|
99
|
+
- `prefix` / `suffix` - Additional content
|
|
100
|
+
- `description` - Secondary text
|
|
101
|
+
- `textValue` - Text for filtering/accessibility
|
|
102
|
+
- `onAction` - Action handler (Menu items)
|
|
103
|
+
|
|
104
|
+
## Examples
|
|
105
|
+
|
|
106
|
+
### Basic
|
|
107
|
+
|
|
108
|
+
```jsx live=false
|
|
109
|
+
const permissions = [
|
|
110
|
+
{ id: 'read', name: 'Read' },
|
|
111
|
+
{ id: 'write', name: 'Write' },
|
|
112
|
+
];
|
|
113
|
+
|
|
114
|
+
<ListBox items={permissions}>
|
|
115
|
+
{(item) => <ListBox.Item key={item.id}>{item.name}</ListBox.Item>}
|
|
116
|
+
</ListBox>
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### With Icons
|
|
120
|
+
|
|
121
|
+
```jsx live=false
|
|
122
|
+
import { IconFile, IconFolder } from '@tabler/icons-react';
|
|
123
|
+
|
|
124
|
+
const items = [
|
|
125
|
+
{ id: 'file', name: 'File', icon: <IconFile /> },
|
|
126
|
+
{ id: 'folder', name: 'Folder', icon: <IconFolder /> },
|
|
127
|
+
];
|
|
128
|
+
|
|
129
|
+
<Menu items={items}>
|
|
130
|
+
{(item) => <Menu.Item key={item.id} icon={item.icon}>{item.name}</Menu.Item>}
|
|
131
|
+
</Menu>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### With Descriptions
|
|
135
|
+
|
|
136
|
+
```jsx live=false
|
|
137
|
+
const users = [
|
|
138
|
+
{
|
|
139
|
+
id: '1',
|
|
140
|
+
name: 'John Smith',
|
|
141
|
+
email: 'john@example.com',
|
|
142
|
+
textValue: 'John Smith john@example.com',
|
|
143
|
+
},
|
|
144
|
+
];
|
|
145
|
+
|
|
146
|
+
<ComboBox items={users}>
|
|
147
|
+
{(item) => (
|
|
148
|
+
<ComboBox.Item key={item.id} description={item.email}>
|
|
149
|
+
{item.name}
|
|
150
|
+
</ComboBox.Item>
|
|
151
|
+
)}
|
|
152
|
+
</ComboBox>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### With Sections
|
|
156
|
+
|
|
157
|
+
```jsx live=false
|
|
158
|
+
<ListBox>
|
|
159
|
+
<ListBox.Section title="Fruits">
|
|
160
|
+
<ListBox.Item key="apple">Apple</ListBox.Item>
|
|
161
|
+
<ListBox.Item key="banana">Banana</ListBox.Item>
|
|
162
|
+
</ListBox.Section>
|
|
163
|
+
<ListBox.Section title="Vegetables">
|
|
164
|
+
<ListBox.Item key="carrot">Carrot</ListBox.Item>
|
|
165
|
+
</ListBox.Section>
|
|
166
|
+
</ListBox>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Disabled Items
|
|
170
|
+
|
|
171
|
+
```jsx live=false
|
|
172
|
+
const items = [
|
|
173
|
+
{ id: 'read', name: 'Read' },
|
|
174
|
+
{ id: 'write', name: 'Write' },
|
|
175
|
+
{ id: 'delete', name: 'Delete', disabled: true },
|
|
176
|
+
];
|
|
177
|
+
|
|
178
|
+
<ListBox
|
|
179
|
+
items={items}
|
|
180
|
+
disabledKeys={items.filter(i => i.disabled).map(i => i.id)}
|
|
181
|
+
>
|
|
182
|
+
{(item) => <ListBox.Item key={item.id}>{item.name}</ListBox.Item>}
|
|
183
|
+
</ListBox>
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
## Best Practices
|
|
187
|
+
|
|
188
|
+
```jsx live=false
|
|
189
|
+
// ✅ Items must be an array of objects
|
|
190
|
+
const items = [{ id: 'user-1', name: 'John' }];
|
|
191
|
+
|
|
192
|
+
// ✅ Always provide id/key in each object
|
|
193
|
+
const items = [
|
|
194
|
+
{ id: 'apple', name: 'Apple' },
|
|
195
|
+
{ id: 'banana', name: 'Banana' },
|
|
196
|
+
];
|
|
197
|
+
|
|
198
|
+
// ✅ Always pass key prop to Item
|
|
199
|
+
<ListBox items={items}>
|
|
200
|
+
{(item) => <ListBox.Item key={item.id}>{item.name}</ListBox.Item>}
|
|
201
|
+
</ListBox>
|
|
202
|
+
|
|
203
|
+
// ✅ Consistent types for id/key
|
|
204
|
+
const items = [
|
|
205
|
+
{ id: '1', name: 'First' },
|
|
206
|
+
{ id: '2', name: 'Second' },
|
|
207
|
+
];
|
|
208
|
+
|
|
209
|
+
// ✅ Explicit textValue for complex content
|
|
210
|
+
const items = [{
|
|
211
|
+
id: 'user-1',
|
|
212
|
+
name: 'John Smith',
|
|
213
|
+
textValue: 'John Smith',
|
|
214
|
+
}];
|
|
215
|
+
|
|
216
|
+
// ✅ Memoize large collections
|
|
217
|
+
const items = useMemo(
|
|
218
|
+
() => data.map(d => ({ id: d.id, name: d.name })),
|
|
219
|
+
[data]
|
|
220
|
+
);
|
|
221
|
+
|
|
222
|
+
// ❌ Don't pass array of strings
|
|
223
|
+
const items = ['apple', 'banana']; // Wrong!
|
|
224
|
+
|
|
225
|
+
// ❌ Don't pass array of numbers
|
|
226
|
+
const items = [1, 2, 3]; // Wrong!
|
|
227
|
+
|
|
228
|
+
// ❌ Don't omit key prop
|
|
229
|
+
<ListBox items={items}>
|
|
230
|
+
{(item) => <ListBox.Item>{item.name}</ListBox.Item>}
|
|
231
|
+
</ListBox>
|
|
232
|
+
|
|
233
|
+
// ❌ Don't omit id/key in objects
|
|
234
|
+
const items = [
|
|
235
|
+
{ name: 'First' }, // Missing id!
|
|
236
|
+
{ name: 'Second' }, // Missing id!
|
|
237
|
+
];
|
|
238
|
+
|
|
239
|
+
// ❌ Don't mix types
|
|
240
|
+
const items = [
|
|
241
|
+
{ id: 1, name: 'First' },
|
|
242
|
+
{ id: '2', name: 'Second' },
|
|
243
|
+
];
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## TypeScript
|
|
247
|
+
|
|
248
|
+
```tsx live=false
|
|
249
|
+
interface User {
|
|
250
|
+
id: string; // Required!
|
|
251
|
+
name: string;
|
|
252
|
+
textValue?: string;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
const items: User[] = [
|
|
256
|
+
{ id: '1', name: 'John', textValue: 'John' },
|
|
257
|
+
];
|
|
258
|
+
|
|
259
|
+
<ListBox items={items}>
|
|
260
|
+
{(item: User) => <ListBox.Item key={item.id}>{item.name}</ListBox.Item>}
|
|
261
|
+
</ListBox>
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
## Quick Reference
|
|
265
|
+
|
|
266
|
+
- **Static JSX** — Key Prop: ✅ Required; Source: Hardcoded value
|
|
267
|
+
- **Data-driven (`items`)** — Key Prop: ✅ Required; Source: Pass `item.key` or `item.id`
|
|
268
|
+
- **Using `.map()`** — Key Prop: ✅ Required; Source: Pass `item.key` or `item.id`
|
|
269
|
+
|
|
270
|
+
- **ListBox** — Selection: Single/Multiple; Search: ❌
|
|
271
|
+
- **FilterListBox** — Selection: Single/Multiple; Search: ✅
|
|
272
|
+
- **Select** — Selection: Single; Search: ❌
|
|
273
|
+
- **ComboBox** — Selection: Single; Search: ✅
|
|
274
|
+
- **FilterPicker** — Selection: Single/Multiple; Search: ✅
|
|
275
|
+
- **Picker** — Selection: Single/Multiple; Search: ❌
|
|
276
|
+
- **Menu** — Selection: Single action; Search: ❌
|
|
277
|
+
- **CommandMenu** — Selection: Single action; Search: ✅
|
|
278
|
+
|
|
279
|
+
## Essential Rules
|
|
280
|
+
|
|
281
|
+
1. **🚨 The `items` prop must be an array of objects** - Never pass arrays of strings, numbers, or other primitives. Each object must have an `id` or `key` property.
|
|
282
|
+
2. **🚨 Always provide `id` or `key` in each object** - Required for selection callbacks to work properly. Without it, React Aria uses order-based keys which are useless in select components.
|
|
283
|
+
3. **🚨 Always pass `key` prop to Item** - Must explicitly pass `key={item.id}` or `key={item.key}` in the render function
|
|
284
|
+
4. **Provide explicit `textValue`** - For icons, complex content, or searchable components
|
|
285
|
+
5. **Use consistent types** - All strings or all numbers, never mixed
|
|
286
|
+
|
|
287
|
+
## Related Components
|
|
288
|
+
|
|
289
|
+
- [Item](./content/Item.md) - Base item component
|
|
290
|
+
- [ListBox](./fields/ListBox.md) - List with selection
|
|
291
|
+
- [Select](./fields/Select.md) - Dropdown selector
|
|
292
|
+
- [ComboBox](./fields/ComboBox.md) - Searchable input
|
|
293
|
+
- [Menu](./actions/Menu.md) - Action menu
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# GridProvider
|
|
2
|
+
|
|
3
|
+
Provides CSS custom properties for responsive grid column calculations. Children can use `$column-width` for precise column sizing.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Responsive grid layouts with consistent column sizing
|
|
8
|
+
- Layouts that need to calculate column widths based on container size
|
|
9
|
+
- Grid systems with configurable column counts
|
|
10
|
+
|
|
11
|
+
## Properties
|
|
12
|
+
|
|
13
|
+
- **`columns`** `number` (default: `2`) — Number of grid columns
|
|
14
|
+
- **`gap`** `Styles['gap']` (default: `'0'`) — Gap between columns
|
|
15
|
+
- **`width`** `Styles['width']` — Forced container width (bypasses auto-detection)
|
|
16
|
+
- **`initialWidth`** `Styles['width']` — Initial width before resize observer kicks in
|
|
17
|
+
|
|
18
|
+
### CSS Custom Properties Provided
|
|
19
|
+
|
|
20
|
+
- `--grid-width` — Total grid width
|
|
21
|
+
- `--columns-amount` — Number of columns
|
|
22
|
+
- `--column-gap` — Gap between columns
|
|
23
|
+
- `--column-width` — Calculated width per column
|
|
24
|
+
|
|
25
|
+
### Style Defaults
|
|
26
|
+
|
|
27
|
+
- `display` — `contents`
|
|
28
|
+
|
|
29
|
+
## Examples
|
|
30
|
+
|
|
31
|
+
```jsx
|
|
32
|
+
<GridProvider columns={12} gap="1x">
|
|
33
|
+
<Grid columns="repeat(12, $column-width)">
|
|
34
|
+
<Block gridColumn="span 6">Half</Block>
|
|
35
|
+
<Block gridColumn="span 6">Half</Block>
|
|
36
|
+
</Grid>
|
|
37
|
+
</GridProvider>
|
|
38
|
+
```
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Root
|
|
2
|
+
|
|
3
|
+
The root application wrapper. Provides theme context, global styles, portal container, modal/toast providers, and navigation. Wrap your app with `Root` at the top level.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- Top-level app component (required)
|
|
8
|
+
- Provides context for modals, toasts, tooltips, and overlays
|
|
9
|
+
- Theme and design token configuration
|
|
10
|
+
|
|
11
|
+
## Properties
|
|
12
|
+
|
|
13
|
+
- **`navigation`** `NavigationAdapter` — Custom navigation adapter for routing
|
|
14
|
+
- **`tracking`** `TrackingProps` — Analytics/tracking event configuration
|
|
15
|
+
- **`tokens`** `Record<string, string>` — Custom design tokens (CSS custom properties)
|
|
16
|
+
- **`fonts`** `boolean` — Whether to load default fonts
|
|
17
|
+
- **`font`** `string` — Custom font family name
|
|
18
|
+
- **`monospaceFont`** `string` — Custom monospace font family name
|
|
19
|
+
- **`fontDisplay`** `'auto' | 'block' | 'swap' | 'fallback' | 'optional'` (default: `'swap'`) — Font display strategy
|
|
20
|
+
- **`bodyStyles`** `Record<string, string>` — Raw CSS styles applied to the `<body>`
|
|
21
|
+
- **`publicUrl`** `string` — Public URL for font loading
|
|
22
|
+
- **`cursorStrategy`** `'web' | 'native'` (default: `'web'`) — Cursor style for interactive elements (`web` uses pointer, `native` uses default)
|
|
23
|
+
|
|
24
|
+
### Style Defaults
|
|
25
|
+
|
|
26
|
+
- `display` — `contents`
|
|
27
|
+
- `color` — `#dark-02`
|
|
28
|
+
- `preset` — `t3`
|
|
29
|
+
|
|
30
|
+
### Base Properties
|
|
31
|
+
|
|
32
|
+
Supports [Base properties](../BaseProperties.md).
|
|
33
|
+
|
|
34
|
+
## Examples
|
|
35
|
+
|
|
36
|
+
```jsx
|
|
37
|
+
<Root>
|
|
38
|
+
<App />
|
|
39
|
+
</Root>
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
```jsx
|
|
43
|
+
<Root
|
|
44
|
+
font="Inter"
|
|
45
|
+
navigation={routerAdapter}
|
|
46
|
+
tokens={{ '--gap': '8px', '--radius': '4px' }}
|
|
47
|
+
>
|
|
48
|
+
<App />
|
|
49
|
+
</Root>
|
|
50
|
+
```
|