@cube-dev/ui-kit 0.0.0-canary-c210a8c → 0.0.0-canary-184567a
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/_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.js +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/ComplexLayout.md +469 -0
- package/docs/CreateComponent.md +410 -0
- package/docs/Introduction.md +122 -0
- package/docs/RenderCache.md +172 -0
- package/docs/Result.md +35 -0
- package/docs/SimpleLayout.md +26 -0
- package/docs/Typography.md +38 -0
- package/docs/components/CollectionItem.md +299 -0
- package/docs/components/actions/Banner.md +189 -0
- package/docs/components/actions/Button.md +183 -0
- package/docs/components/actions/ButtonSplit.md +189 -0
- package/docs/components/actions/CommandMenu.md +430 -0
- package/docs/components/actions/ItemButton.md +304 -0
- package/docs/components/actions/Link.md +325 -0
- package/docs/components/actions/Menu.md +509 -0
- package/docs/components/actions/use-anchored-menu.md +211 -0
- package/docs/components/actions/use-context-menu.md +220 -0
- package/docs/components/content/Badge.md +187 -0
- package/docs/components/content/Disclosure.md +177 -0
- package/docs/components/content/HotKeys.md +352 -0
- package/docs/components/content/Item.md +488 -0
- package/docs/components/content/ItemCard.md +125 -0
- package/docs/components/content/Layout.md +866 -0
- package/docs/components/content/Tag.md +156 -0
- package/docs/components/content/TextItem.md +211 -0
- package/docs/components/fields/Checkbox.md +180 -0
- package/docs/components/fields/ComboBox.md +617 -0
- package/docs/components/fields/DatePicker.md +231 -0
- package/docs/components/fields/FileInput.md +197 -0
- package/docs/components/fields/FilterListBox.md +703 -0
- package/docs/components/fields/FilterPicker.md +736 -0
- package/docs/components/fields/HueSlider.md +175 -0
- package/docs/components/fields/ListBox.md +691 -0
- package/docs/components/fields/NumberInput.md +184 -0
- package/docs/components/fields/PasswordInput.md +218 -0
- package/docs/components/fields/Picker.md +884 -0
- package/docs/components/fields/RadioGroup.md +314 -0
- package/docs/components/fields/SearchInput.md +227 -0
- package/docs/components/fields/Select.md +583 -0
- package/docs/components/fields/Slider.md +53 -0
- package/docs/components/fields/Switch.md +174 -0
- package/docs/components/fields/TextArea.md +61 -0
- package/docs/components/fields/TextInput.md +204 -0
- package/docs/components/fields/TextInputMapper.md +34 -0
- package/docs/components/form/Field.md +341 -0
- package/docs/components/form/Form.md +455 -0
- package/docs/components/form/FormInstance.md +319 -0
- package/docs/components/helpers/DisplayTransition.md +259 -0
- package/docs/components/helpers/IconSwitch.md +156 -0
- package/docs/components/navigation/Tabs.md +704 -0
- package/docs/components/overlays/Dialog.md +202 -0
- package/docs/components/overlays/DialogContainer.md +201 -0
- package/docs/components/overlays/DialogForm.md +290 -0
- package/docs/components/overlays/DialogTrigger.md +191 -0
- package/docs/components/overlays/Notifications.md +406 -0
- package/docs/components/overlays/Toast.md +285 -0
- package/docs/components/overlays/Tooltip.md +371 -0
- package/docs/components/overlays/UseDialogContainer.md +603 -0
- package/package.json +1 -1
- package/docs/.gitignore +0 -3
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
# Create Component
|
|
2
|
+
|
|
3
|
+
This guide explains how to create components using the `tasty` style helper and React Aria Hooks. Components in the Cube UI Kit follow consistent patterns for styling, accessibility, and functionality.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Creating a component involves several optional but recommended elements:
|
|
8
|
+
|
|
9
|
+
- **Base properties** handling using `filterBaseProps`
|
|
10
|
+
- **Style properties** for direct styling capabilities
|
|
11
|
+
- **Modifiers (`mods`)** for state-based styling
|
|
12
|
+
- **Additional style properties** for styling inner elements
|
|
13
|
+
- **Sub-elements** for targeted styling within components
|
|
14
|
+
- **React Aria integration** for accessibility
|
|
15
|
+
|
|
16
|
+
Everything is optional - you can create simplified components without all features, but exported UI Kit components should be feature-rich and consistent.
|
|
17
|
+
|
|
18
|
+
## Core Concepts
|
|
19
|
+
|
|
20
|
+
### 1. Base Properties with `filterBaseProps`
|
|
21
|
+
|
|
22
|
+
The `filterBaseProps` helper ensures only valid DOM properties are passed to elements, filtering out design system properties and unsupported event handlers.
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import { filterBaseProps, AllBaseProps } from '@tenphi/tasty';
|
|
26
|
+
|
|
27
|
+
interface MyComponentProps extends AllBaseProps {
|
|
28
|
+
customProp?: string;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
function MyComponent(props: MyComponentProps) {
|
|
32
|
+
return (
|
|
33
|
+
<div {...filterBaseProps(props, { eventProps: true })}>
|
|
34
|
+
{props.children}
|
|
35
|
+
</div>
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Filter options:**
|
|
41
|
+
- `eventProps: true` - Include standard DOM event handlers (onClick, onFocus, etc.)
|
|
42
|
+
- `labelable: true` - Include ARIA labeling properties
|
|
43
|
+
- `propNames: Set<string>` - Include specific additional properties
|
|
44
|
+
|
|
45
|
+
### 2. Style Properties
|
|
46
|
+
|
|
47
|
+
Style properties allow direct styling without using the `styles` prop. Use predefined style property sets from `/src/tasty/styles/list.ts`:
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import {
|
|
51
|
+
CONTAINER_STYLES,
|
|
52
|
+
ContainerStyleProps,
|
|
53
|
+
BASE_STYLES,
|
|
54
|
+
BaseStyleProps,
|
|
55
|
+
TEXT_STYLES,
|
|
56
|
+
TextStyleProps,
|
|
57
|
+
extractStyles,
|
|
58
|
+
} from '@tenphi/tasty';
|
|
59
|
+
|
|
60
|
+
interface MyComponentProps
|
|
61
|
+
extends AllBaseProps,
|
|
62
|
+
ContainerStyleProps, // All container styles
|
|
63
|
+
TextStyleProps { // Text-specific styles
|
|
64
|
+
// Component-specific props
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function MyComponent(props: MyComponentProps) {
|
|
68
|
+
const styles = extractStyles(props, [...CONTAINER_STYLES, ...TEXT_STYLES]);
|
|
69
|
+
|
|
70
|
+
return <Element styles={styles} />;
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Available style property sets:**
|
|
75
|
+
|
|
76
|
+
- `BASE_STYLES` - `display`, `font`, `preset`, `hide`, `opacity`, `whiteSpace`
|
|
77
|
+
- `POSITION_STYLES` - `gridArea`, `order`, `margin`, `inset`, `position`, `zIndex`, etc.
|
|
78
|
+
- `BLOCK_STYLES` - `padding`, `border`, `radius`, `shadow`, `overflow`, etc.
|
|
79
|
+
- `COLOR_STYLES` - `color`, `fill`, `fade`
|
|
80
|
+
- `TEXT_STYLES` - `textTransform` (for other text styling, use `preset`)
|
|
81
|
+
- `DIMENSION_STYLES` - `width`, `height`, `flex`, `flexBasis`, etc.
|
|
82
|
+
- `FLOW_STYLES` - `flow`, `gap`, `align`, `justify`, `gridColumns`, etc.
|
|
83
|
+
- `CONTAINER_STYLES` - Combination of all above styles
|
|
84
|
+
- `OUTER_STYLES` - Position and dimension styles only
|
|
85
|
+
|
|
86
|
+
### 3. Modifiers (`mods`) Property
|
|
87
|
+
|
|
88
|
+
Modifiers enable state-based styling through the `mods` prop, which creates `data-*` attributes:
|
|
89
|
+
|
|
90
|
+
```tsx
|
|
91
|
+
interface MyComponentProps extends AllBaseProps {
|
|
92
|
+
isLoading?: boolean;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
function MyComponent({ isLoading, mods, ...props }: MyComponentProps) {
|
|
96
|
+
return (
|
|
97
|
+
<Element
|
|
98
|
+
mods={{
|
|
99
|
+
loading: isLoading,
|
|
100
|
+
...mods, // Allow external mods to override
|
|
101
|
+
}}
|
|
102
|
+
styles={{
|
|
103
|
+
color: {
|
|
104
|
+
'': '#dark',
|
|
105
|
+
loading: '#gray',
|
|
106
|
+
'loading & hovered': '#light-gray',
|
|
107
|
+
}
|
|
108
|
+
}}
|
|
109
|
+
/>
|
|
110
|
+
);
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Usage:**
|
|
115
|
+
```tsx
|
|
116
|
+
<MyComponent mods={{ custom: true, highlighted: isHighlighted }} />
|
|
117
|
+
// Renders: <div data-custom data-highlighted class="...">
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### 4. Sub-elements for Targeted Styling
|
|
121
|
+
|
|
122
|
+
Sub-elements allow styling inner parts through the main `styles` prop. They automatically inherit the parent's state and modifiers, making them ideal for tightly coupled UI elements.
|
|
123
|
+
|
|
124
|
+
```tsx
|
|
125
|
+
const MyElement = tasty({
|
|
126
|
+
styles: {
|
|
127
|
+
display: 'flex',
|
|
128
|
+
gap: '1x',
|
|
129
|
+
|
|
130
|
+
// Sub-element styles
|
|
131
|
+
Icon: {
|
|
132
|
+
preset: 'h3',
|
|
133
|
+
color: '#purple',
|
|
134
|
+
},
|
|
135
|
+
Label: {
|
|
136
|
+
preset: 'default bold',
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
});
|
|
140
|
+
|
|
141
|
+
function MyComponent(props) {
|
|
142
|
+
return (
|
|
143
|
+
<MyElement {...props}>
|
|
144
|
+
<span data-element="Icon">🎉</span>
|
|
145
|
+
<span data-element="Label">{props.children}</span>
|
|
146
|
+
</MyElement>
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Usage with style overrides:**
|
|
152
|
+
```tsx
|
|
153
|
+
<MyComponent
|
|
154
|
+
styles={{
|
|
155
|
+
Icon: { color: '#red' }, // Override icon color
|
|
156
|
+
Label: { preset: 'h4' }, // Override label size
|
|
157
|
+
}}
|
|
158
|
+
>
|
|
159
|
+
Custom styled content
|
|
160
|
+
</MyComponent>
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
**When to use sub-elements:**
|
|
164
|
+
- Elements that should share the parent's state (hover, focus, disabled, etc.)
|
|
165
|
+
- Tightly coupled UI parts (icon + label, title + subtitle)
|
|
166
|
+
- When you want a single `styles` prop to control everything
|
|
167
|
+
- Simpler components with predictable inner structure
|
|
168
|
+
|
|
169
|
+
### 5. Additional Style Properties
|
|
170
|
+
|
|
171
|
+
Create dedicated style properties for styling inner elements independently. This approach gives more control and allows inner elements to have their own state.
|
|
172
|
+
|
|
173
|
+
```tsx
|
|
174
|
+
import { Styles } from '@tenphi/tasty';
|
|
175
|
+
|
|
176
|
+
interface MyComponentProps extends AllBaseProps {
|
|
177
|
+
styles?: Styles;
|
|
178
|
+
iconStyles?: Styles; // Additional style property
|
|
179
|
+
labelStyles?: Styles; // Another additional style property
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function MyComponent({ iconStyles, labelStyles, ...props }: MyComponentProps) {
|
|
183
|
+
const styles = extractStyles(props, CONTAINER_STYLES);
|
|
184
|
+
|
|
185
|
+
return (
|
|
186
|
+
<Element styles={styles}>
|
|
187
|
+
<IconElement styles={iconStyles} />
|
|
188
|
+
<LabelElement styles={labelStyles} />
|
|
189
|
+
</Element>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**When to use additional style properties:**
|
|
195
|
+
- Inner elements need independent state management (separate hover, focus behaviors)
|
|
196
|
+
- Complex components with multiple logical sections
|
|
197
|
+
- Components that need fine-grained styling control
|
|
198
|
+
- When different parts of the component might have different interaction patterns
|
|
199
|
+
|
|
200
|
+
### 6. React Aria Integration
|
|
201
|
+
|
|
202
|
+
Use React Aria hooks for accessibility and behavior:
|
|
203
|
+
|
|
204
|
+
```tsx
|
|
205
|
+
import { useButton } from 'react-aria';
|
|
206
|
+
import { useRef } from 'react';
|
|
207
|
+
|
|
208
|
+
function MyButton(props) {
|
|
209
|
+
const ref = useRef();
|
|
210
|
+
const { buttonProps } = useButton(props, ref);
|
|
211
|
+
|
|
212
|
+
return (
|
|
213
|
+
<Element
|
|
214
|
+
{...buttonProps}
|
|
215
|
+
ref={ref}
|
|
216
|
+
styles={extractStyles(props, CONTAINER_STYLES)}
|
|
217
|
+
/>
|
|
218
|
+
);
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Examples
|
|
223
|
+
|
|
224
|
+
### Example 1: Block Component (Basic)
|
|
225
|
+
|
|
226
|
+
This demonstrates a basic component with:
|
|
227
|
+
- Base properties support
|
|
228
|
+
- All container style properties
|
|
229
|
+
- Clean, minimal implementation
|
|
230
|
+
|
|
231
|
+
```tsx
|
|
232
|
+
import { forwardRef } from 'react';
|
|
233
|
+
import {
|
|
234
|
+
AllBaseProps,
|
|
235
|
+
CONTAINER_STYLES,
|
|
236
|
+
ContainerStyleProps,
|
|
237
|
+
extractStyles,
|
|
238
|
+
filterBaseProps,
|
|
239
|
+
tasty,
|
|
240
|
+
} from '@tenphi/tasty';
|
|
241
|
+
|
|
242
|
+
const BlockElement = tasty({
|
|
243
|
+
styles: {
|
|
244
|
+
display: 'block',
|
|
245
|
+
},
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
export interface CubeBlockProps
|
|
249
|
+
extends Omit<AllBaseProps, keyof ContainerStyleProps | 'as'>,
|
|
250
|
+
ContainerStyleProps {}
|
|
251
|
+
|
|
252
|
+
export const Block = forwardRef(function Block(props: CubeBlockProps, ref) {
|
|
253
|
+
const styles = extractStyles(props, CONTAINER_STYLES);
|
|
254
|
+
|
|
255
|
+
return (
|
|
256
|
+
<BlockElement
|
|
257
|
+
{...filterBaseProps(props, { eventProps: true })}
|
|
258
|
+
ref={ref}
|
|
259
|
+
styles={styles}
|
|
260
|
+
/>
|
|
261
|
+
);
|
|
262
|
+
});
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Example 2: Action Component (Advanced)
|
|
266
|
+
|
|
267
|
+
This demonstrates advanced features:
|
|
268
|
+
- React Aria integration (`useButton`)
|
|
269
|
+
- Complex modifier handling
|
|
270
|
+
- Multiple style property sets
|
|
271
|
+
- Custom behavior logic
|
|
272
|
+
|
|
273
|
+
```tsx
|
|
274
|
+
import { FocusableRef } from '@react-types/shared';
|
|
275
|
+
import { forwardRef } from 'react';
|
|
276
|
+
import { AriaButtonProps, useButton, useHover } from 'react-aria';
|
|
277
|
+
import {
|
|
278
|
+
AllBaseProps,
|
|
279
|
+
BaseStyleProps,
|
|
280
|
+
CONTAINER_STYLES,
|
|
281
|
+
ContainerStyleProps,
|
|
282
|
+
extractStyles,
|
|
283
|
+
Styles,
|
|
284
|
+
TagName,
|
|
285
|
+
tasty,
|
|
286
|
+
TEXT_STYLES,
|
|
287
|
+
TextStyleProps,
|
|
288
|
+
} from '@tenphi/tasty';
|
|
289
|
+
|
|
290
|
+
export interface CubeActionProps<T extends TagName = 'button'>
|
|
291
|
+
extends Omit<AllBaseProps<T>, 'htmlType'>,
|
|
292
|
+
BaseStyleProps,
|
|
293
|
+
ContainerStyleProps,
|
|
294
|
+
TextStyleProps,
|
|
295
|
+
Omit<AriaButtonProps, 'type'> {
|
|
296
|
+
to?: string;
|
|
297
|
+
label?: string;
|
|
298
|
+
htmlType?: 'button' | 'submit' | 'reset';
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
const DEFAULT_ACTION_STYLES: Styles = {
|
|
302
|
+
recipe: 'reset button',
|
|
303
|
+
position: 'relative',
|
|
304
|
+
preset: 'inherit',
|
|
305
|
+
outline: {
|
|
306
|
+
'': '#purple-03.0',
|
|
307
|
+
focused: '#purple-03',
|
|
308
|
+
},
|
|
309
|
+
transition: 'theme',
|
|
310
|
+
cursor: '$pointer',
|
|
311
|
+
} as const;
|
|
312
|
+
|
|
313
|
+
const ActionElement = tasty({
|
|
314
|
+
as: 'button',
|
|
315
|
+
styles: DEFAULT_ACTION_STYLES,
|
|
316
|
+
});
|
|
317
|
+
|
|
318
|
+
const STYLE_PROPS = [...CONTAINER_STYLES, ...TEXT_STYLES];
|
|
319
|
+
|
|
320
|
+
export const Action = forwardRef(function Action(
|
|
321
|
+
{
|
|
322
|
+
to,
|
|
323
|
+
as = 'button',
|
|
324
|
+
htmlType,
|
|
325
|
+
label,
|
|
326
|
+
theme,
|
|
327
|
+
mods,
|
|
328
|
+
onPress,
|
|
329
|
+
isDisabled,
|
|
330
|
+
...props
|
|
331
|
+
}: CubeActionProps,
|
|
332
|
+
ref: FocusableRef<HTMLElement>,
|
|
333
|
+
) {
|
|
334
|
+
const domRef = useRef();
|
|
335
|
+
const { buttonProps, isPressed } = useButton(
|
|
336
|
+
{
|
|
337
|
+
'aria-label': label,
|
|
338
|
+
onPress,
|
|
339
|
+
isDisabled,
|
|
340
|
+
...props,
|
|
341
|
+
},
|
|
342
|
+
domRef,
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
const { hoverProps, isHovered } = useHover({ isDisabled });
|
|
346
|
+
|
|
347
|
+
const styles = extractStyles(props, STYLE_PROPS);
|
|
348
|
+
|
|
349
|
+
return (
|
|
350
|
+
<ActionElement
|
|
351
|
+
data-theme={theme}
|
|
352
|
+
{...buttonProps}
|
|
353
|
+
{...hoverProps}
|
|
354
|
+
mods={{
|
|
355
|
+
hovered: isHovered && !isDisabled,
|
|
356
|
+
pressed: isPressed && !isDisabled,
|
|
357
|
+
disabled: isDisabled,
|
|
358
|
+
...mods, // Allow external mods to override
|
|
359
|
+
}}
|
|
360
|
+
ref={domRef}
|
|
361
|
+
type={htmlType || 'button'}
|
|
362
|
+
as={as}
|
|
363
|
+
styles={styles}
|
|
364
|
+
/>
|
|
365
|
+
);
|
|
366
|
+
});
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Form Integration
|
|
370
|
+
|
|
371
|
+
For input components that need to integrate with forms, see the [Field documentation](./components/form/Field.md) for comprehensive guidance on:
|
|
372
|
+
|
|
373
|
+
- Form state management
|
|
374
|
+
- Validation integration
|
|
375
|
+
- Label and help text handling
|
|
376
|
+
- Error state management
|
|
377
|
+
- Accessibility requirements for form controls
|
|
378
|
+
|
|
379
|
+
## Best Practices
|
|
380
|
+
|
|
381
|
+
1. **Always support base properties**: Use `filterBaseProps` and extend `AllBaseProps`
|
|
382
|
+
|
|
383
|
+
2. **Provide appropriate style properties**: Choose the right combination of style property sets for your component's needs
|
|
384
|
+
|
|
385
|
+
3. **Design for extensibility**: Allow `mods` overrides and provide additional style properties for inner elements
|
|
386
|
+
|
|
387
|
+
4. **Use React Aria**: Integrate appropriate React Aria hooks for accessibility and standard behavior
|
|
388
|
+
|
|
389
|
+
5. **Follow naming conventions**: Use `Cube[ComponentName]Props` for interfaces and descriptive names for sub-elements
|
|
390
|
+
|
|
391
|
+
6. **Document sub-elements**: Clearly document what sub-elements are available for styling
|
|
392
|
+
|
|
393
|
+
7. **Keep it simple when appropriate**: Not every component needs all features - use what makes sense for your use case
|
|
394
|
+
|
|
395
|
+
## Component Checklist
|
|
396
|
+
|
|
397
|
+
When creating a new component, consider:
|
|
398
|
+
|
|
399
|
+
- [ ] Base properties support (`AllBaseProps`, `filterBaseProps`)
|
|
400
|
+
- [ ] Appropriate style property sets
|
|
401
|
+
- [ ] Modifier (`mods`) support for state-based styling
|
|
402
|
+
- [ ] Additional style properties for inner elements
|
|
403
|
+
- [ ] Sub-element definitions for targeted styling
|
|
404
|
+
- [ ] React Aria integration for accessibility
|
|
405
|
+
- [ ] TypeScript interfaces following naming conventions
|
|
406
|
+
- [ ] forwardRef for ref passing
|
|
407
|
+
- [ ] Default styles and theme support
|
|
408
|
+
- [ ] Documentation following UI Kit standards
|
|
409
|
+
|
|
410
|
+
Remember: Start simple and add features as needed. A basic, working component is better than an over-engineered one!
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
# Welcome to Cube Cloud UI Kit
|
|
2
|
+
|
|
3
|
+
A comprehensive React component library built for modern web applications with accessibility, theming, and developer experience at its core.
|
|
4
|
+
|
|
5
|
+
## What is Cube UI Kit?
|
|
6
|
+
|
|
7
|
+
Cube UI Kit is a complete design system that provides:
|
|
8
|
+
- **Accessible Components** - Built with React Aria hooks for WCAG compliance
|
|
9
|
+
- **Powerful Styling System** - The `tasty` style system for maintainable, theme-able components
|
|
10
|
+
- **Form Management** - Integrated form handling with validation and state management
|
|
11
|
+
- **Consistent Design** - Unified visual language across all components
|
|
12
|
+
|
|
13
|
+
Browse example stories by navigating to them in the sidebar to see components in action.
|
|
14
|
+
|
|
15
|
+
## Key Features
|
|
16
|
+
|
|
17
|
+
### 🎨 Tasty Style System
|
|
18
|
+
A declarative styling approach that makes it easy to create consistent, maintainable styles:
|
|
19
|
+
- **State-based styling** - Bind styles to hover, focus, and custom modifiers
|
|
20
|
+
- **Responsive design** - Use arrays for breakpoint-specific styles
|
|
21
|
+
- **Token-based theming** - Built-in color tokens and semantic units
|
|
22
|
+
- **Component variants** - Pre-defined style variations for different use cases
|
|
23
|
+
|
|
24
|
+
### ♿ Accessibility First
|
|
25
|
+
Every component is built with accessibility as a priority:
|
|
26
|
+
- React Aria hooks provide keyboard navigation and screen reader support
|
|
27
|
+
- ARIA attributes are automatically managed
|
|
28
|
+
- Focus management follows best practices
|
|
29
|
+
- High contrast and reduced motion support
|
|
30
|
+
|
|
31
|
+
### 📝 Modern Form Handling
|
|
32
|
+
Streamlined form development with built-in field support:
|
|
33
|
+
- All input components have integrated field properties
|
|
34
|
+
- Automatic validation and error handling
|
|
35
|
+
- Form-level configuration inheritance
|
|
36
|
+
- No wrapper components needed for most use cases
|
|
37
|
+
|
|
38
|
+
## Getting Started
|
|
39
|
+
|
|
40
|
+
### Basic Usage
|
|
41
|
+
|
|
42
|
+
```jsx
|
|
43
|
+
import { Button, TextInput, Form } from '@cube-dev/ui-kit';
|
|
44
|
+
|
|
45
|
+
function MyApp() {
|
|
46
|
+
return (
|
|
47
|
+
<Form onSubmit={handleSubmit}>
|
|
48
|
+
<TextInput
|
|
49
|
+
name="email"
|
|
50
|
+
label="Email"
|
|
51
|
+
type="email"
|
|
52
|
+
isRequired
|
|
53
|
+
/>
|
|
54
|
+
<Button type="primary">Submit</Button>
|
|
55
|
+
</Form>
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Styling Components
|
|
61
|
+
|
|
62
|
+
Use the `tasty` system for consistent styling:
|
|
63
|
+
|
|
64
|
+
```jsx
|
|
65
|
+
import { tasty, Button } from '@cube-dev/ui-kit';
|
|
66
|
+
|
|
67
|
+
const CustomButton = tasty(Button, {
|
|
68
|
+
styles: {
|
|
69
|
+
padding: '2x 4x',
|
|
70
|
+
fill: {
|
|
71
|
+
'': '#purple',
|
|
72
|
+
hovered: '#purple.8',
|
|
73
|
+
},
|
|
74
|
+
color: '#white',
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Core Concepts
|
|
80
|
+
|
|
81
|
+
### Styling with Tasty
|
|
82
|
+
|
|
83
|
+
The `tasty` style system provides a powerful, declarative way to style components:
|
|
84
|
+
|
|
85
|
+
- **Custom Units** - Use semantic units like `2x` (gap), `1r` (radius), `#purple` (color tokens)
|
|
86
|
+
- **State Bindings** - Style different states using modifiers like `hovered`, `focused`, `disabled`
|
|
87
|
+
- **Responsive Arrays** - Define breakpoint-specific styles with arrays: `padding: ['4x', '2x', '1x']`
|
|
88
|
+
- **Sub-element Styling** - Style internal component parts using element names
|
|
89
|
+
|
|
90
|
+
### Form Integration
|
|
91
|
+
|
|
92
|
+
All input components work seamlessly with the Form component:
|
|
93
|
+
|
|
94
|
+
- **Built-in Field Support** - No wrapper components needed
|
|
95
|
+
- **Automatic Validation** - Validation rules and error display
|
|
96
|
+
- **Form-level Configuration** - Inherit settings like `labelPosition` and `validationState`
|
|
97
|
+
- **Programmatic Control** - Use `Form.useForm()` for advanced form management
|
|
98
|
+
|
|
99
|
+
### Component Architecture
|
|
100
|
+
|
|
101
|
+
Components are designed with composition and reusability in mind:
|
|
102
|
+
|
|
103
|
+
- **Base Properties** - Common props like `qa`, styling, and accessibility
|
|
104
|
+
- **Style Properties** - Direct style application without the `styles` prop
|
|
105
|
+
- **Modifiers** - Control component states through the `mods` prop
|
|
106
|
+
- **Variants** - Pre-defined style themes and sizes
|
|
107
|
+
|
|
108
|
+
## Documentation Structure
|
|
109
|
+
|
|
110
|
+
Each component includes comprehensive documentation:
|
|
111
|
+
|
|
112
|
+
- **Usage Examples** - Real-world implementation patterns
|
|
113
|
+
- **Accessibility Guidelines** - Keyboard navigation and screen reader support
|
|
114
|
+
- **Styling Reference** - Available sub-elements and modifiers
|
|
115
|
+
- **Best Practices** - Recommended usage patterns and common pitfalls
|
|
116
|
+
|
|
117
|
+
## Next Steps
|
|
118
|
+
|
|
119
|
+
1. **Explore Components** - Browse the sidebar to see all available components
|
|
120
|
+
2. **Learn Tasty** - Visit the [Tasty documentation](./tasty/usage.md) to master the styling system
|
|
121
|
+
3. **Build Forms** - Check out [Form documentation](./components/form/Form.md) for form development patterns
|
|
122
|
+
4. **Accessibility** - Review accessibility guidelines for inclusive design
|
|
@@ -0,0 +1,172 @@
|
|
|
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
|
+
### Property Details
|
|
19
|
+
|
|
20
|
+
- **items**: Array of items to render
|
|
21
|
+
- **renderKeys**: Array of keys that should trigger re-render. Only items with keys in this array will be re-rendered
|
|
22
|
+
- **getKey**: Function that extracts a unique key from each item
|
|
23
|
+
- **children**: Render function that takes an item and returns a React element
|
|
24
|
+
|
|
25
|
+
### Base Properties
|
|
26
|
+
|
|
27
|
+
This is a headless component and does not support base properties.
|
|
28
|
+
|
|
29
|
+
## How It Works
|
|
30
|
+
|
|
31
|
+
The component maintains an internal cache of rendered elements. When rendering:
|
|
32
|
+
|
|
33
|
+
1. For each item, it checks if the item's key is in renderKeys
|
|
34
|
+
2. If the key is in renderKeys or the item hasn't been rendered before, it calls the children function to render/re-render
|
|
35
|
+
3. Otherwise, it returns the cached element from the previous render
|
|
36
|
+
4. It automatically cleans up cache entries for items that are no longer in the list
|
|
37
|
+
|
|
38
|
+
## Examples
|
|
39
|
+
|
|
40
|
+
### Basic Usage
|
|
41
|
+
|
|
42
|
+
```jsx
|
|
43
|
+
import { RenderCache } from '@cube-dev/ui-kit';
|
|
44
|
+
|
|
45
|
+
const items = [
|
|
46
|
+
{ id: 1, name: 'Item 1' },
|
|
47
|
+
{ id: 2, name: 'Item 2' },
|
|
48
|
+
{ id: 3, name: 'Item 3' },
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
const [selectedId, setSelectedId] = useState(1);
|
|
52
|
+
|
|
53
|
+
<RenderCache
|
|
54
|
+
items={items}
|
|
55
|
+
renderKeys={[selectedId]}
|
|
56
|
+
getKey={(item) => item.id}
|
|
57
|
+
>
|
|
58
|
+
{(item) => <ExpensiveItem item={item} isSelected={item.id === selectedId} />}
|
|
59
|
+
</RenderCache>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### With List of Expensive Components
|
|
63
|
+
|
|
64
|
+
```jsx
|
|
65
|
+
import { RenderCache } from '@cube-dev/ui-kit';
|
|
66
|
+
|
|
67
|
+
function ExpensiveListItem({ item, isActive }) {
|
|
68
|
+
// Complex rendering logic
|
|
69
|
+
return <div className={isActive ? 'active' : ''}>{item.name}</div>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
const [activeId, setActiveId] = useState(1);
|
|
73
|
+
|
|
74
|
+
<RenderCache
|
|
75
|
+
items={data}
|
|
76
|
+
renderKeys={[activeId]}
|
|
77
|
+
getKey={(item) => item.id}
|
|
78
|
+
>
|
|
79
|
+
{(item) => (
|
|
80
|
+
<ExpensiveListItem
|
|
81
|
+
item={item}
|
|
82
|
+
isActive={item.id === activeId}
|
|
83
|
+
/>
|
|
84
|
+
)}
|
|
85
|
+
</RenderCache>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
## Performance Considerations
|
|
89
|
+
|
|
90
|
+
- **Cache management**: The component uses useRef to maintain the cache across renders, avoiding unnecessary re-allocations
|
|
91
|
+
- **Automatic cleanup**: Removes cached entries for items no longer in the list to prevent memory leaks
|
|
92
|
+
- **Selective invalidation**: Only items with keys in renderKeys are re-rendered, others use cached elements
|
|
93
|
+
- **Best for expensive renders**: Most effective when child components have significant render cost
|
|
94
|
+
|
|
95
|
+
## Best Practices
|
|
96
|
+
|
|
97
|
+
1. **Use stable keys**: Ensure getKey returns consistent keys for the same items across renders
|
|
98
|
+
```jsx
|
|
99
|
+
// Good: Using stable IDs
|
|
100
|
+
<RenderCache
|
|
101
|
+
items={items}
|
|
102
|
+
getKey={(item) => item.id}
|
|
103
|
+
renderKeys={[selectedId]}
|
|
104
|
+
>
|
|
105
|
+
{(item) => <Item {...item} />}
|
|
106
|
+
</RenderCache>
|
|
107
|
+
|
|
108
|
+
// Bad: Using indices (unstable when list changes)
|
|
109
|
+
<RenderCache
|
|
110
|
+
items={items}
|
|
111
|
+
getKey={(item, index) => index}
|
|
112
|
+
renderKeys={[selectedIndex]}
|
|
113
|
+
>
|
|
114
|
+
{(item) => <Item {...item} />}
|
|
115
|
+
</RenderCache>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
2. **Minimize renderKeys**: Only include keys that truly need re-rendering to maximize cache benefits
|
|
119
|
+
```jsx
|
|
120
|
+
// Good: Only re-render the active item
|
|
121
|
+
<RenderCache
|
|
122
|
+
items={items}
|
|
123
|
+
renderKeys={[activeItemId]}
|
|
124
|
+
getKey={(item) => item.id}
|
|
125
|
+
>
|
|
126
|
+
{(item) => <Item {...item} />}
|
|
127
|
+
</RenderCache>
|
|
128
|
+
|
|
129
|
+
// Bad: Re-rendering all items defeats the purpose
|
|
130
|
+
<RenderCache
|
|
131
|
+
items={items}
|
|
132
|
+
renderKeys={items.map(item => item.id)}
|
|
133
|
+
getKey={(item) => item.id}
|
|
134
|
+
>
|
|
135
|
+
{(item) => <Item {...item} />}
|
|
136
|
+
</RenderCache>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
3. **Consider alternatives**: For simple cases, React.memo might be sufficient and simpler
|
|
140
|
+
|
|
141
|
+
4. **Profile first**: Use React DevTools Profiler to confirm you have a performance issue before adding this optimization
|
|
142
|
+
|
|
143
|
+
5. **Avoid inline functions**: Use stable render functions to prevent unnecessary cache invalidation
|
|
144
|
+
```jsx
|
|
145
|
+
// Good: Stable render function
|
|
146
|
+
const renderItem = useCallback((item) => (
|
|
147
|
+
<ExpensiveItem item={item} />
|
|
148
|
+
), []);
|
|
149
|
+
|
|
150
|
+
<RenderCache
|
|
151
|
+
items={items}
|
|
152
|
+
renderKeys={[selectedId]}
|
|
153
|
+
getKey={(item) => item.id}
|
|
154
|
+
>
|
|
155
|
+
{renderItem}
|
|
156
|
+
</RenderCache>
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## When NOT to Use
|
|
160
|
+
|
|
161
|
+
- **Simple lists**: For simple lists without performance issues, regular rendering is simpler
|
|
162
|
+
- **All items update frequently**: If all items need to re-render on every change, the cache overhead isn't worth it
|
|
163
|
+
- **Small lists**: Lists with < 10 items typically don't benefit from caching
|
|
164
|
+
- **Simple components**: If child components render quickly, the optimization overhead may outweigh benefits
|
|
165
|
+
|
|
166
|
+
## Related Components
|
|
167
|
+
|
|
168
|
+
- **React.memo** - For simple component memoization
|
|
169
|
+
- **useMemo** - For memoizing computed values
|
|
170
|
+
- **useCallback** - For memoizing callback functions
|
|
171
|
+
- **DisplayTransition** - For animating component mount/unmount
|
|
172
|
+
|