@cube-dev/ui-kit 0.121.1 → 0.121.3
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/README.md +155 -17
- package/dist/CHANGELOG.md +12 -0
- package/dist/README.md +155 -17
- 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 +3 -2
- package/dist/components/content/Layout/LayoutContent.js.map +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/intl.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.d.ts +2 -3
- 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/.generated +58 -0
- package/docs/CreateComponent.md +65 -8
- package/docs/Usage.md +304 -0
- package/docs/tasty/styles.md +19 -12
- package/docs/tasty/usage.md +53 -1
- package/package.json +2 -2
package/docs/CreateComponent.md
CHANGED
|
@@ -44,30 +44,73 @@ function MyComponent(props: MyComponentProps) {
|
|
|
44
44
|
|
|
45
45
|
### 2. Style Properties
|
|
46
46
|
|
|
47
|
-
Style properties allow
|
|
47
|
+
Style properties allow consumers to apply layout and styling directly as component props. There are two approaches:
|
|
48
|
+
|
|
49
|
+
**Approach A — `styleProps` on `tasty()`** (simpler, when rest props go directly to the tasty element):
|
|
50
|
+
|
|
51
|
+
`styleProps` tells tasty which CSS properties the component accepts as typed React props. The component still needs to declare the matching TypeScript interfaces so consumers get autocomplete. This works when rest props are spread directly onto the tasty element.
|
|
52
|
+
|
|
53
|
+
```tsx
|
|
54
|
+
import { tasty, BaseProps, OUTER_STYLES, CONTAINER_STYLES } from '@tenphi/tasty';
|
|
55
|
+
import type { OuterStyleProps, ContainerStyleProps } from '@tenphi/tasty';
|
|
56
|
+
|
|
57
|
+
interface CubeMyComponentProps extends BaseProps, OuterStyleProps, ContainerStyleProps {
|
|
58
|
+
label?: string;
|
|
59
|
+
isDisabled?: boolean;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const MyElement = tasty({
|
|
63
|
+
qa: 'MyComponent',
|
|
64
|
+
styles: {
|
|
65
|
+
display: 'flex',
|
|
66
|
+
flow: 'column',
|
|
67
|
+
padding: '2x',
|
|
68
|
+
fill: '#surface',
|
|
69
|
+
radius: '1r',
|
|
70
|
+
border: {
|
|
71
|
+
'': '#border',
|
|
72
|
+
disabled: '#border.5',
|
|
73
|
+
},
|
|
74
|
+
},
|
|
75
|
+
styleProps: [...OUTER_STYLES, ...CONTAINER_STYLES],
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
function MyComponent({ label, isDisabled, ...props }: CubeMyComponentProps) {
|
|
79
|
+
return (
|
|
80
|
+
<MyElement {...props} mods={{ disabled: isDisabled }}>
|
|
81
|
+
{label}
|
|
82
|
+
</MyElement>
|
|
83
|
+
);
|
|
84
|
+
}
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**Approach B — `extractStyles` + `filterBaseProps`** (when you need to split props between multiple elements or add custom logic):
|
|
48
88
|
|
|
49
89
|
```tsx
|
|
50
90
|
import {
|
|
51
91
|
CONTAINER_STYLES,
|
|
52
92
|
ContainerStyleProps,
|
|
53
|
-
BASE_STYLES,
|
|
54
|
-
BaseStyleProps,
|
|
55
93
|
TEXT_STYLES,
|
|
56
94
|
TextStyleProps,
|
|
57
95
|
extractStyles,
|
|
96
|
+
filterBaseProps,
|
|
58
97
|
} from '@tenphi/tasty';
|
|
59
98
|
|
|
60
99
|
interface MyComponentProps
|
|
61
100
|
extends AllBaseProps,
|
|
62
|
-
ContainerStyleProps,
|
|
63
|
-
TextStyleProps {
|
|
64
|
-
// Component-specific props
|
|
101
|
+
ContainerStyleProps,
|
|
102
|
+
TextStyleProps {
|
|
65
103
|
}
|
|
66
104
|
|
|
67
105
|
function MyComponent(props: MyComponentProps) {
|
|
68
106
|
const styles = extractStyles(props, [...CONTAINER_STYLES, ...TEXT_STYLES]);
|
|
69
107
|
|
|
70
|
-
return
|
|
108
|
+
return (
|
|
109
|
+
<Element
|
|
110
|
+
{...filterBaseProps(props, { eventProps: true })}
|
|
111
|
+
styles={styles}
|
|
112
|
+
/>
|
|
113
|
+
);
|
|
71
114
|
}
|
|
72
115
|
```
|
|
73
116
|
|
|
@@ -378,7 +421,7 @@ For input components that need to integrate with forms, see the [Field documenta
|
|
|
378
421
|
|
|
379
422
|
## Best Practices
|
|
380
423
|
|
|
381
|
-
1. **Always support base properties**: Use `
|
|
424
|
+
1. **Always support base properties**: Use `styleProps` (recommended) or `filterBaseProps`, and extend `AllBaseProps`
|
|
382
425
|
|
|
383
426
|
2. **Provide appropriate style properties**: Choose the right combination of style property sets for your component's needs
|
|
384
427
|
|
|
@@ -392,6 +435,20 @@ For input components that need to integrate with forms, see the [Field documenta
|
|
|
392
435
|
|
|
393
436
|
7. **Keep it simple when appropriate**: Not every component needs all features - use what makes sense for your use case
|
|
394
437
|
|
|
438
|
+
8. **Use named React imports**: Import `useCallback`, `useState`, `forwardRef` etc. directly from `'react'` instead of using `React.useCallback(...)`.
|
|
439
|
+
|
|
440
|
+
9. **Use `useEvent` for stable callbacks**: When a callback doesn't need to trigger re-renders, prefer `useEvent` from `src/_internal/hooks/use-event` for a stable identity that always calls the latest implementation:
|
|
441
|
+
|
|
442
|
+
```tsx
|
|
443
|
+
import { useEvent } from '../_internal/hooks/use-event';
|
|
444
|
+
|
|
445
|
+
const handleClick = useEvent((e) => {
|
|
446
|
+
// always has latest closure, but stable identity
|
|
447
|
+
});
|
|
448
|
+
```
|
|
449
|
+
|
|
450
|
+
10. **Use `variants` for theming, not sizing**: The `variants` option in `tasty()` defines mutually exclusive visual variations (e.g. `default`, `danger`, `outline`). CSS is only generated for variants actually rendered at runtime. Use modifiers for dimensions like `size`.
|
|
451
|
+
|
|
395
452
|
## Component Checklist
|
|
396
453
|
|
|
397
454
|
When creating a new component, consider:
|
package/docs/Usage.md
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Usage Guide
|
|
2
|
+
|
|
3
|
+
This guide covers the design system foundations — tokens, presets, colors, units, and patterns — needed to build and maintain components in Cube UI Kit.
|
|
4
|
+
|
|
5
|
+
For styling engine internals see the [Tasty documentation](./tasty/usage.md). Tasty docs are also bundled with this package in `docs/tasty/`:
|
|
6
|
+
|
|
7
|
+
- **usage.md** — `tasty()` component creation, state mappings, sub-elements, variants, extending components, hooks.
|
|
8
|
+
- **configuration.md** — `configure()` options: tokens, recipes, custom units, style handlers, TypeScript module augmentation.
|
|
9
|
+
- **styles.md** — Complete reference for all enhanced style properties (`fill`, `flow`, `preset`, `border`, `radius`, `transition`, etc.).
|
|
10
|
+
- **debug.md** — `tastyDebug` runtime API for inspecting injected CSS and troubleshooting.
|
|
11
|
+
- **injector.md** — Low-level style injector: `inject()`, `injectGlobal()`, deduplication, SSR.
|
|
12
|
+
- **tasty-static.md** — Zero-runtime `tastyStatic()`, Babel plugin, Next.js/Vite integration.
|
|
13
|
+
|
|
14
|
+
## Units
|
|
15
|
+
|
|
16
|
+
Tasty provides custom units that map to CSS custom properties defined on the Root component. Use these instead of raw pixel values to keep styling consistent.
|
|
17
|
+
|
|
18
|
+
| Unit | CSS Variable | Example | Computed (defaults) |
|
|
19
|
+
|------|-------------|---------|---------------------|
|
|
20
|
+
| `x` | `var(--gap)` | `2x` → `calc(var(--gap) * 2)` | 16px |
|
|
21
|
+
| `r` | `var(--radius)` | `1r` → `var(--radius)` | 6px |
|
|
22
|
+
| `cr` | `var(--card-radius)` | `1cr` → `var(--card-radius)` | 10px |
|
|
23
|
+
| `bw` | `var(--border-width)` | `1bw` → `var(--border-width)` | 1px |
|
|
24
|
+
| `ow` | `var(--outline-width)` | `1ow` → `var(--outline-width)` | 3px |
|
|
25
|
+
|
|
26
|
+
## Base Tokens
|
|
27
|
+
|
|
28
|
+
These CSS custom properties are defined in `src/tokens/base.ts` and applied globally.
|
|
29
|
+
|
|
30
|
+
| Token | Default | Description |
|
|
31
|
+
|-------|---------|-------------|
|
|
32
|
+
| `$gap` | `8px` | Base spacing unit (used with `x` multiplier) |
|
|
33
|
+
| `$radius` | `6px` | Base border radius (used with `r` multiplier) |
|
|
34
|
+
| `$border-width` | `1px` | Base border width (used with `bw` multiplier) |
|
|
35
|
+
| `$outline-width` | `3px` | Focus outline width (used with `ow` multiplier) |
|
|
36
|
+
| `$stroke-width` | `1.5` | Icon stroke width |
|
|
37
|
+
| `$disabled-opacity` | `0.4` | Opacity for disabled elements |
|
|
38
|
+
| `$transition` | `80ms` | Default transition duration |
|
|
39
|
+
| `$disclosure-transition` | `120ms` | Disclosure animation duration |
|
|
40
|
+
| `$tab-transition` | `120ms` | Tab animation duration |
|
|
41
|
+
| `$fade-transition` | `200ms` | Fade animation duration |
|
|
42
|
+
| `$large-radius` | `(1r + .5x)` | Larger radius for cards/dialogs |
|
|
43
|
+
| `$card-radius` | `(1r + .5x)` | Card border radius |
|
|
44
|
+
| `$min-dialog-size` | `min(288px, calc(100vw - 2*var(--gap)))` | Minimum dialog width |
|
|
45
|
+
|
|
46
|
+
## Spacing Tokens
|
|
47
|
+
|
|
48
|
+
Defined in `src/tokens/spacing.ts`. Values use the `x` unit.
|
|
49
|
+
|
|
50
|
+
| Token | Value | Computed (gap=8px) |
|
|
51
|
+
|-------|-------|-------------------|
|
|
52
|
+
| `$space-xs` | `0.5x` | 4px |
|
|
53
|
+
| `$space-sm` | `0.75x` | 6px |
|
|
54
|
+
| `$space-md` | `1x` | 8px |
|
|
55
|
+
| `$space-lg` | `1.5x` | 12px |
|
|
56
|
+
| `$space-xl` | `2x` | 16px |
|
|
57
|
+
|
|
58
|
+
## Size Tokens
|
|
59
|
+
|
|
60
|
+
Defined in `src/tokens/sizes.ts`. Used for component heights and icon sizes.
|
|
61
|
+
|
|
62
|
+
| Token | Value |
|
|
63
|
+
|-------|-------|
|
|
64
|
+
| `$size-xs` | `24px` |
|
|
65
|
+
| `$size-sm` | `28px` |
|
|
66
|
+
| `$size-md` | `32px` |
|
|
67
|
+
| `$size-lg` | `40px` |
|
|
68
|
+
| `$size-xl` | `48px` |
|
|
69
|
+
|
|
70
|
+
## Shadow Tokens
|
|
71
|
+
|
|
72
|
+
Defined in `src/tokens/shadows.ts`.
|
|
73
|
+
|
|
74
|
+
| Token | Value |
|
|
75
|
+
|-------|-------|
|
|
76
|
+
| `$item-shadow` | `0 1bw 0.375x #dark.15` |
|
|
77
|
+
| `$card-shadow` | `0 0.5x 2x #shadow` |
|
|
78
|
+
| `$dialog-shadow` | `0 1x 4x #dark.15` |
|
|
79
|
+
|
|
80
|
+
## Layout Tokens
|
|
81
|
+
|
|
82
|
+
Defined in `src/tokens/layout.ts`.
|
|
83
|
+
|
|
84
|
+
| Token | Value |
|
|
85
|
+
|-------|-------|
|
|
86
|
+
| `$max-content-width` | `1440px` |
|
|
87
|
+
| `$topbar-height` | `48px` |
|
|
88
|
+
| `$sidebar-width` | `200px` |
|
|
89
|
+
|
|
90
|
+
## Color Tokens
|
|
91
|
+
|
|
92
|
+
All color tokens use `#name` syntax in styles. Opacity variants use `#name.NN` (e.g. `#dark.06` for 6% opacity). Defined in `src/tokens/colors.ts`.
|
|
93
|
+
|
|
94
|
+
### Base Colors
|
|
95
|
+
|
|
96
|
+
| Token | Description |
|
|
97
|
+
|-------|-------------|
|
|
98
|
+
| `#white`, `#black`, `#clear` | Absolute white, black, and transparent |
|
|
99
|
+
| `#text` | Default text color |
|
|
100
|
+
| `#border` | Default border color |
|
|
101
|
+
| `#placeholder` | Input placeholder text |
|
|
102
|
+
| `#shadow` | Shadow color |
|
|
103
|
+
| `#minor` | Secondary/muted text |
|
|
104
|
+
| `#focus` | Focus ring color |
|
|
105
|
+
| `#pink` | Accent pink |
|
|
106
|
+
| `#light` | Light background |
|
|
107
|
+
|
|
108
|
+
### Semantic Color Groups
|
|
109
|
+
|
|
110
|
+
Each semantic group provides a base color and variants following the pattern: `#name`, `#name-text`, `#name-bg`, `#name-icon`, `#name-desaturated`, `#name-disabled`.
|
|
111
|
+
|
|
112
|
+
| Group | Hue | Purpose |
|
|
113
|
+
|-------|-----|---------|
|
|
114
|
+
| `#primary` / `#purple` | 280.3° | Primary actions, brand color |
|
|
115
|
+
| `#danger` | 23.1° | Errors, destructive actions |
|
|
116
|
+
| `#success` | 156.9° | Success states, confirmations |
|
|
117
|
+
| `#warning` | 84.3° | Warning states, caution |
|
|
118
|
+
| `#note` | 302.3° | Informational notes |
|
|
119
|
+
|
|
120
|
+
### Neutral Scales
|
|
121
|
+
|
|
122
|
+
**Dark scale:** `#dark`, `#dark-01` through `#dark-05`, `#dark-bg` — six-step neutral scale from near-black to light gray.
|
|
123
|
+
|
|
124
|
+
**Purple scale:** `#purple-01` through `#purple-04` — additional purple shades for gradients and accents.
|
|
125
|
+
|
|
126
|
+
### Disabled Colors
|
|
127
|
+
|
|
128
|
+
`#disabled`, `#disabled-text`, `#disabled-bg` — dedicated colors for disabled UI elements.
|
|
129
|
+
|
|
130
|
+
## Typography Presets
|
|
131
|
+
|
|
132
|
+
Use via the `preset` style property. Modifiers can be appended with a space: `'t1 strong'`, `'h2 italic'`.
|
|
133
|
+
|
|
134
|
+
Defined in `src/tokens/typography.ts`.
|
|
135
|
+
|
|
136
|
+
### Headings
|
|
137
|
+
|
|
138
|
+
| Preset | Size | Line Height | Weight |
|
|
139
|
+
|--------|------|-------------|--------|
|
|
140
|
+
| `h1` | 36px | 44px | 600 |
|
|
141
|
+
| `h2` | 24px | 32px | 600 |
|
|
142
|
+
| `h3` | 20px | 28px | 600 |
|
|
143
|
+
| `h4` | 18px | 24px | 600 |
|
|
144
|
+
| `h5` | 16px | 22px | 600 |
|
|
145
|
+
| `h6` | 14px | 20px | 600 |
|
|
146
|
+
|
|
147
|
+
### Text
|
|
148
|
+
|
|
149
|
+
| Preset | Size | Line Height | Weight | Notes |
|
|
150
|
+
|--------|------|-------------|--------|-------|
|
|
151
|
+
| `t1` | 18px | 24px | 400 | |
|
|
152
|
+
| `t2` | 16px | 22px | 400 | |
|
|
153
|
+
| `t2m` | 16px | 22px | 500 | Medium weight variant |
|
|
154
|
+
| `t3` | 14px | 20px | 400 | Base text size |
|
|
155
|
+
| `t3m` | 14px | 20px | 500 | Medium weight variant |
|
|
156
|
+
| `t4` | 12px | 18px | 500 | Small text |
|
|
157
|
+
| `t4m` | 12px | 18px | 600 | Small text, semi-bold |
|
|
158
|
+
|
|
159
|
+
### Paragraph
|
|
160
|
+
|
|
161
|
+
Paragraph presets have slightly increased line heights compared to text presets at the same size, optimized for multi-line reading.
|
|
162
|
+
|
|
163
|
+
| Preset | Size | Line Height | Weight |
|
|
164
|
+
|--------|------|-------------|--------|
|
|
165
|
+
| `p1` | 18px | 28px | 400 |
|
|
166
|
+
| `p2` | 16px | 24px | 400 |
|
|
167
|
+
| `p3` | 14px | 22px | 400 |
|
|
168
|
+
| `p4` | 12px | 20px | 500 |
|
|
169
|
+
|
|
170
|
+
### Markdown / Prose
|
|
171
|
+
|
|
172
|
+
Largest line heights, designed for long-form content blocks.
|
|
173
|
+
|
|
174
|
+
| Preset | Size | Line Height | Weight |
|
|
175
|
+
|--------|------|-------------|--------|
|
|
176
|
+
| `m1` | 18px | 32px | 400 |
|
|
177
|
+
| `m2` | 16px | 28px | 400 |
|
|
178
|
+
| `m3` | 14px | 24px | 400 |
|
|
179
|
+
|
|
180
|
+
### Special Presets
|
|
181
|
+
|
|
182
|
+
| Preset | Description |
|
|
183
|
+
|--------|-------------|
|
|
184
|
+
| `c1` | 14px, weight 600, uppercase — section captions |
|
|
185
|
+
| `c2` | 12px, weight 600, uppercase — small captions |
|
|
186
|
+
| `tag` | 12px, weight 600 — tag/badge text |
|
|
187
|
+
| `strong` | Inherits everything, applies bold weight |
|
|
188
|
+
| `em` | Inherits everything, applies italic style |
|
|
189
|
+
| `default` | Aliases `t3` values — the base text style |
|
|
190
|
+
|
|
191
|
+
## Themes
|
|
192
|
+
|
|
193
|
+
Component themes are set via the `theme` prop or `theme=name` modifier:
|
|
194
|
+
|
|
195
|
+
| Theme | Purpose |
|
|
196
|
+
|-------|---------|
|
|
197
|
+
| `default` | Standard appearance |
|
|
198
|
+
| `danger` | Destructive / error actions |
|
|
199
|
+
| `special` | Highlighted / promoted actions |
|
|
200
|
+
| `success` | Success / positive states |
|
|
201
|
+
| `warning` | Warning / caution states |
|
|
202
|
+
| `note` | Informational / note states |
|
|
203
|
+
|
|
204
|
+
## Recipes
|
|
205
|
+
|
|
206
|
+
Reusable style presets applied via the `recipe` style property. Defined in `src/components/Root.tsx`.
|
|
207
|
+
|
|
208
|
+
| Recipe | Purpose |
|
|
209
|
+
|--------|---------|
|
|
210
|
+
| `reset` | Zero out margin, padding, border, outline; set `box-sizing: border-box` |
|
|
211
|
+
| `button` | Base button appearance: no native styling, `touch-action: manipulation` |
|
|
212
|
+
| `input` | Base input appearance: no native styling, inherit color |
|
|
213
|
+
| `input-autofill` | Handle `:-webkit-autofill` styling |
|
|
214
|
+
| `input-placeholder` | Placeholder text styling via `-webkit-text-fill-color` |
|
|
215
|
+
| `input-search-cancel-button` | Hide native search cancel button |
|
|
216
|
+
|
|
217
|
+
## Common Modifiers
|
|
218
|
+
|
|
219
|
+
These are data-attribute modifiers used in component style maps (via the `mods` prop):
|
|
220
|
+
|
|
221
|
+
| Modifier | Description |
|
|
222
|
+
|----------|-------------|
|
|
223
|
+
| `disabled` | Disabled state |
|
|
224
|
+
| `hovered` | Hover state |
|
|
225
|
+
| `focused` | Focus state |
|
|
226
|
+
| `pressed` | Active/pressed state |
|
|
227
|
+
| `selected` | Selected state |
|
|
228
|
+
| `checked` | Checked state (checkbox, switch) |
|
|
229
|
+
| `invalid` | Invalid validation state |
|
|
230
|
+
| `valid` | Valid validation state |
|
|
231
|
+
| `indeterminate` | Indeterminate state |
|
|
232
|
+
| `collapsed` | Collapsed state |
|
|
233
|
+
| `type=primary` | Primary variant |
|
|
234
|
+
| `type=outline` | Outline variant |
|
|
235
|
+
| `size=small` / `size=medium` / `size=large` | Size modifiers |
|
|
236
|
+
|
|
237
|
+
## State Syntax
|
|
238
|
+
|
|
239
|
+
In style value maps, keys define when styles apply. States can be combined with boolean logic:
|
|
240
|
+
|
|
241
|
+
```jsx
|
|
242
|
+
fill: {
|
|
243
|
+
'': '#surface', // default
|
|
244
|
+
':hover': '#surface-hover', // pseudo-class
|
|
245
|
+
disabled: '#disabled-bg', // data-attribute modifier
|
|
246
|
+
'type=danger': '#danger', // data-attribute with value
|
|
247
|
+
'@media(w < 768px)': '...', // media query
|
|
248
|
+
'@(panel, w >= 300px)': '...', // container query
|
|
249
|
+
'disabled & :hover': '...', // combined with AND
|
|
250
|
+
'a | b': '...', // combined with OR
|
|
251
|
+
'!disabled': '...', // negated
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## Icons
|
|
256
|
+
|
|
257
|
+
Icons live in `src/icons/`. Use existing icons when possible; otherwise use `@tabler/icons-react`.
|
|
258
|
+
|
|
259
|
+
- **`<Icon>`** — wrapper component for sizing and coloring icons. Props: `size`, `stroke`, plus style props.
|
|
260
|
+
- **`wrapIcon(name, icon)`** — creates a Cube icon component from a tabler icon.
|
|
261
|
+
- Always wrap tabler icons with `<Icon>` for custom size/color. Never add props directly to tabler icons.
|
|
262
|
+
- To add new icons run: `pnpm add-icons`
|
|
263
|
+
|
|
264
|
+
## Form System
|
|
265
|
+
|
|
266
|
+
### Form Component
|
|
267
|
+
|
|
268
|
+
`<Form>` wraps a native `<form>` and provides validation context:
|
|
269
|
+
|
|
270
|
+
```jsx
|
|
271
|
+
const [form] = useForm();
|
|
272
|
+
|
|
273
|
+
<Form form={form} onSubmit={(data) => save(data)}>
|
|
274
|
+
<TextInput name="email" label="Email" rules={[{ required: true }, { type: 'email' }]} />
|
|
275
|
+
<SubmitButton>Save</SubmitButton>
|
|
276
|
+
</Form>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### useForm Hook
|
|
280
|
+
|
|
281
|
+
Returns a `CubeFormInstance` with:
|
|
282
|
+
|
|
283
|
+
- **Get/Set:** `getFieldValue`, `setFieldValue`, `getFieldsValue`, `setFieldsValue`, `getFormData`
|
|
284
|
+
- **Validation:** `validateField`, `validateFields`, `resetFieldsValidation`
|
|
285
|
+
- **State queries:** `isFieldValid`, `isFieldInvalid`, `isFieldTouched`, `isValid`, `isDirty`
|
|
286
|
+
- **Errors:** `getFieldError`, `setFieldError`
|
|
287
|
+
|
|
288
|
+
### Validation Rules
|
|
289
|
+
|
|
290
|
+
Async rule-based system. Each rule is an object with one of these properties:
|
|
291
|
+
|
|
292
|
+
| Rule | Description |
|
|
293
|
+
|------|-------------|
|
|
294
|
+
| `required` | Field must have a value |
|
|
295
|
+
| `type` | Type check: `email`, `url`, `number`, `integer`, `date`, `hex`, etc. |
|
|
296
|
+
| `pattern` | Regex pattern match |
|
|
297
|
+
| `min` / `max` | Length or value constraints |
|
|
298
|
+
| `enum` | List of allowed values |
|
|
299
|
+
| `whitespace` | Must contain non-whitespace content |
|
|
300
|
+
| `validator` | Custom async function: `(rule, value) => Promise<void>` |
|
|
301
|
+
|
|
302
|
+
### Field Integration
|
|
303
|
+
|
|
304
|
+
Fields with a `name` prop inside `<Form>` automatically register with the form instance — no `<Field>` wrapper needed. The `useFieldProps` hook handles this internally.
|
package/docs/tasty/styles.md
CHANGED
|
@@ -489,33 +489,40 @@ If the name is not a semantic name, it is used as a literal CSS property name.
|
|
|
489
489
|
|
|
490
490
|
### `scrollbar`
|
|
491
491
|
|
|
492
|
-
|
|
492
|
+
Scrollbar styling using CSS standard properties (`scrollbar-width`, `scrollbar-color`, `scrollbar-gutter`).
|
|
493
493
|
|
|
494
|
-
**Syntax:** `[
|
|
494
|
+
**Syntax:** `[width] [modifiers...] [thumb-color] [track-color]`
|
|
495
495
|
|
|
496
|
-
**
|
|
496
|
+
**Width values** (controls `scrollbar-width`, default is `thin`):
|
|
497
|
+
|
|
498
|
+
| Value | Effect |
|
|
499
|
+
|-------|--------|
|
|
500
|
+
| `thin` | Thin scrollbar (default) |
|
|
501
|
+
| `auto` | Browser-default scrollbar width |
|
|
502
|
+
| `none` | Hide scrollbar (still scrollable, no colors applied) |
|
|
503
|
+
|
|
504
|
+
**Modifiers** (controls gutter and overflow behavior):
|
|
497
505
|
|
|
498
506
|
| Modifier | Effect |
|
|
499
507
|
|----------|--------|
|
|
500
|
-
| `thin` | Thin scrollbar (`scrollbar-width: thin`) |
|
|
501
|
-
| `none` | Hide scrollbar (still scrollable) |
|
|
502
|
-
| `auto` | Browser-default scrollbar width |
|
|
503
508
|
| `stable` | Reserve space for scrollbar (`scrollbar-gutter: stable`) |
|
|
504
509
|
| `both-edges` | Reserve space on both sides (`scrollbar-gutter: stable both-edges`) |
|
|
505
510
|
| `always` | Force scrollbars visible (`overflow: scroll` + `scrollbar-gutter: stable`) |
|
|
506
|
-
| `styled` | Enhanced appearance with rounded thumb, transitions, and custom sizing |
|
|
507
511
|
|
|
508
|
-
**Colors:** Up to
|
|
512
|
+
**Colors:** Up to 2 color values for thumb and track (optional), applied via `scrollbar-color`.
|
|
513
|
+
|
|
514
|
+
**Defaults:** When no colors are specified, the thumb color comes from the `#scrollbar-thumb` token (`#text.5`) and the track color from the `#scrollbar-track` token (`#dark-bg`). These tokens are provided by the base token set. If the base tokens are not loaded, the track falls back to `transparent` via a CSS fallback, while the thumb has no CSS-level fallback — the browser treats the entire `scrollbar-color` declaration as invalid and reverts to the platform-default scrollbar appearance.
|
|
509
515
|
|
|
510
|
-
**
|
|
516
|
+
**Note:** `none` takes precedence over all other modifiers and colors. Combining `none` with other tokens (e.g., `"none always #red"`) produces a warning, and only `scrollbar-width: none` is applied.
|
|
511
517
|
|
|
512
518
|
| Value | Effect |
|
|
513
519
|
|-------|--------|
|
|
514
520
|
| `true` | Thin scrollbar with default thumb/track colors |
|
|
515
521
|
| `"none"` | Hidden scrollbar (still scrollable) |
|
|
516
|
-
| `"thin
|
|
517
|
-
| `"
|
|
518
|
-
| `"always
|
|
522
|
+
| `"thin #purple.40 #dark.04"` | Thin scrollbar with custom colors |
|
|
523
|
+
| `"auto #red #blue"` | Browser-default width with custom colors |
|
|
524
|
+
| `"always #primary.50 #white.02"` | Always visible with custom colors |
|
|
525
|
+
| `"thin stable #red #blue"` | Thin, gutter reserved, custom colors |
|
|
519
526
|
|
|
520
527
|
### `fade`
|
|
521
528
|
|
package/docs/tasty/usage.md
CHANGED
|
@@ -334,6 +334,10 @@ const Custom = tasty({
|
|
|
334
334
|
| `@parent` | Parent/ancestor element states | `@parent(hovered)` |
|
|
335
335
|
| `@own` | Sub-element's own state | `@own(hovered)` |
|
|
336
336
|
| `@starting` | Entry animation | `@starting` |
|
|
337
|
+
| `:is()` | CSS `:is()` structural pseudo-class | `:is(fieldset > label)` |
|
|
338
|
+
| `:has()` | CSS `:has()` relational pseudo-class | `:has(> Icon)` |
|
|
339
|
+
| `:not()` | CSS `:not()` negation (prefer `!:is()`) | `:not(:first-child)` |
|
|
340
|
+
| `:where()` | CSS `:where()` (zero specificity) | `:where(Section)` |
|
|
337
341
|
|
|
338
342
|
#### `@parent(...)` — Parent Element States
|
|
339
343
|
|
|
@@ -359,7 +363,7 @@ const Highlight = tasty({
|
|
|
359
363
|
| `@parent(.active)` | `:is(.active *)` |
|
|
360
364
|
| `@parent(hovered & focused)` | `:is([data-hovered][data-focused] *)` (same ancestor) |
|
|
361
365
|
| `@parent(hovered) & @parent(focused)` | `:is([data-hovered] *):is([data-focused] *)` (independent ancestors) |
|
|
362
|
-
| `@parent(hovered \| focused)` | `:is([data-hovered]
|
|
366
|
+
| `@parent(hovered \| focused)` | `:is([data-hovered] *, [data-focused] *)` (OR inside single wrapper) |
|
|
363
367
|
|
|
364
368
|
For sub-elements, the parent check applies to the root element's ancestors:
|
|
365
369
|
|
|
@@ -377,6 +381,54 @@ const Card = tasty({
|
|
|
377
381
|
// → .t0.t0:is([data-hovered] *) [data-element="Label"]
|
|
378
382
|
```
|
|
379
383
|
|
|
384
|
+
#### `:is()`, `:has()` — CSS Structural Pseudo-classes
|
|
385
|
+
|
|
386
|
+
Use CSS structural pseudo-classes directly in state keys. Capitalized words become `[data-element="..."]` selectors; lowercase words are HTML tags. A trailing combinator (`>`, `+`, `~`) is auto-completed with `*`.
|
|
387
|
+
|
|
388
|
+
`:where()` and `:not()` are also supported but rarely needed — use `:is()` and `!` negation instead.
|
|
389
|
+
|
|
390
|
+
> **Performance warning:** CSS structural pseudo-classes — especially `:has()` — can be costly for the browser to evaluate because they require inspecting the DOM tree beyond the matched element. Tasty already provides a rich, purpose-built state system (`@parent()`, `@own()`, modifiers, boolean logic) that covers the vast majority of use cases without the performance trade-off. **Prefer Tasty's built-in mechanisms and treat `:has()` / `:is()` as a last resort** for conditions that cannot be expressed any other way.
|
|
391
|
+
|
|
392
|
+
```jsx
|
|
393
|
+
const Card = tasty({
|
|
394
|
+
styles: {
|
|
395
|
+
display: {
|
|
396
|
+
'': 'block',
|
|
397
|
+
':has(> Icon)': 'grid', // has Icon as direct child
|
|
398
|
+
':has(+ Icon)': 'grid', // immediately followed by an Icon sibling
|
|
399
|
+
':has(~ Icon)': 'grid', // has an Icon sibling somewhere after
|
|
400
|
+
':has(Icon +)': 'grid', // immediately preceded by an Icon sibling (auto-completes to `Icon + *`)
|
|
401
|
+
':has(Icon ~)': 'grid', // has an Icon sibling somewhere before (auto-completes to `Icon ~ *`)
|
|
402
|
+
':is(fieldset > label)': 'inline', // is a label inside a fieldset (HTML tags)
|
|
403
|
+
'!:has(> Icon)': 'flex', // negation: no Icon child
|
|
404
|
+
},
|
|
405
|
+
},
|
|
406
|
+
});
|
|
407
|
+
```
|
|
408
|
+
|
|
409
|
+
| Syntax | CSS Output | Meaning |
|
|
410
|
+
|--------|------------|---------|
|
|
411
|
+
| `:has(> Icon)` | `:has(> [data-element="Icon"])` | Has Icon as direct child |
|
|
412
|
+
| `:has(+ Icon)` | `:has(+ [data-element="Icon"])` | Immediately followed by an Icon sibling |
|
|
413
|
+
| `:has(~ Icon)` | `:has(~ [data-element="Icon"])` | Has an Icon sibling somewhere after |
|
|
414
|
+
| `:has(Icon +)` | `:has([data-element="Icon"] + *)` | Immediately preceded by an Icon sibling |
|
|
415
|
+
| `:has(Icon ~)` | `:has([data-element="Icon"] ~ *)` | Has an Icon sibling somewhere before |
|
|
416
|
+
| `:has(>)` | `:has(> *)` | Has any direct child |
|
|
417
|
+
| `:is(> Field + input)` | `:is(> [data-element="Field"] + input)` | Structural match |
|
|
418
|
+
| `:has(button)` | `:has(button)` | HTML tag (lowercase, unchanged) |
|
|
419
|
+
| `!:has(> Icon)` | `:not(:has(> [data-element="Icon"]))` | Negation (use `!`) |
|
|
420
|
+
| `!:is(Panel)` | `:not([data-element="Panel"])` | Negation (use `!:is`) |
|
|
421
|
+
|
|
422
|
+
Combine with other states using boolean logic:
|
|
423
|
+
|
|
424
|
+
```jsx
|
|
425
|
+
':has(> Icon) & hovered' // structural + data attribute
|
|
426
|
+
'@parent(hovered) & :has(> Icon)' // parent check + structural
|
|
427
|
+
':has(> Icon) | :has(> Button)' // OR: either sub-element present
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
> **Nesting limit:** The state key parser supports up to 2 levels of nested parentheses inside `:is()`, `:has()`, `:not()`, and `:where()` — e.g. `:has(Input:not(:disabled))` works, but 3+ levels like `:has(:is(:not(:hover)))` will not be tokenized correctly. This covers virtually all practical use cases.
|
|
431
|
+
|
|
380
432
|
---
|
|
381
433
|
|
|
382
434
|
## Style Properties
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cube-dev/ui-kit",
|
|
3
|
-
"version": "0.121.
|
|
3
|
+
"version": "0.121.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UIKit for Cube Projects",
|
|
6
6
|
"repository": {
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
"@react-types/shared": "^3.32.1",
|
|
46
46
|
"@tabler/icons-react": "^3.31.0",
|
|
47
47
|
"@tanstack/react-virtual": "^3.13.12",
|
|
48
|
-
"@tenphi/tasty": "0.
|
|
48
|
+
"@tenphi/tasty": "0.9.0",
|
|
49
49
|
"clipboard-copy": "^4.0.1",
|
|
50
50
|
"clsx": "^1.1.1",
|
|
51
51
|
"diff": "^8.0.3",
|