@cube-dev/ui-kit 0.125.1 → 0.127.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CHANGELOG.md +56 -0
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +6 -6
- package/dist/components/GlobalStyles.js.map +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/CommandMenu.js.map +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/Menu.js.map +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 -2
- package/dist/components/actions/Menu/styled.js.map +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 +4 -5
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +2 -2
- package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +7 -1
- package/dist/components/content/Layout/LayoutPanel.js.map +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 +2 -2
- package/dist/components/content/Text.js.map +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 +2 -2
- package/dist/components/fields/Checkbox/Checkbox.js.map +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.d.ts +4 -4
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js.map +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 +2 -2
- package/dist/components/fields/DatePicker/DatePickerSegment.js.map +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.d.ts +4 -4
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js.map +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 +2 -2
- package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.d.ts +1 -0
- package/dist/components/fields/RadioGroup/Radio.js +7 -9
- package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.d.ts +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/Grid.js.map +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +2 -1
- package/dist/components/layout/ResizablePanel.js.map +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.d.ts +4 -2
- package/dist/components/navigation/Tabs/types.js +3 -2
- package/dist/components/navigation/Tabs/types.js.map +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +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 +18 -5
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
- package/dist/components/status/Spin/Cube.js +2 -1
- package/dist/components/status/Spin/Cube.js.map +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.d.ts +2 -2
- 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.d.ts +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/index.js.map +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/tokens/typography.d.ts +1 -2
- package/dist/tokens/typography.js +1 -18
- package/dist/tokens/typography.js.map +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/selection.js +1 -1
- package/dist/utils/styles.d.ts +1 -1
- package/dist/utils/styles.js +5 -4
- package/dist/utils/styles.js.map +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/CreateComponent.md +1 -1
- package/docs/Usage.md +1 -1
- package/docs/components/fields/ComboBox.md +27 -0
- package/docs/components/fields/FilterListBox.md +25 -0
- package/docs/components/fields/FilterPicker.md +34 -0
- package/docs/components/fields/ListBox.md +38 -8
- package/docs/components/fields/Picker.md +25 -0
- package/docs/components/fields/Select.md +2 -0
- package/docs/components/navigation/Tabs.md +2 -2
- package/docs/tasty/README.md +4 -4
- package/docs/tasty/adoption.md +5 -3
- package/docs/tasty/comparison.md +24 -25
- package/docs/tasty/configuration.md +130 -1
- package/docs/tasty/debug.md +11 -9
- package/docs/tasty/design-system.md +39 -10
- package/docs/tasty/dsl.md +114 -10
- package/docs/tasty/getting-started.md +10 -10
- package/docs/tasty/injector.md +41 -25
- package/docs/tasty/methodology.md +52 -3
- package/docs/tasty/{PIPELINE.md → pipeline.md} +1 -1
- package/docs/tasty/{runtime.md → react-api.md} +168 -8
- package/docs/tasty/ssr.md +141 -81
- package/docs/tasty/styles.md +26 -6
- package/docs/tasty/tasty-static.md +103 -2
- package/package.json +3 -3
|
@@ -313,6 +313,31 @@ Groups related items together with an optional heading.
|
|
|
313
313
|
</ListBox>
|
|
314
314
|
```
|
|
315
315
|
|
|
316
|
+
### With Sections (Dynamic)
|
|
317
|
+
|
|
318
|
+
Sections and items can be defined dynamically using the `items` prop with a render function. Pass hierarchical data where each section contains a `children` array.
|
|
319
|
+
|
|
320
|
+
```jsx
|
|
321
|
+
const categories = [
|
|
322
|
+
{ name: 'Fruits', children: [
|
|
323
|
+
{ key: 'apple', label: 'Apple' },
|
|
324
|
+
{ key: 'banana', label: 'Banana' },
|
|
325
|
+
]},
|
|
326
|
+
{ name: 'Vegetables', children: [
|
|
327
|
+
{ key: 'carrot', label: 'Carrot' },
|
|
328
|
+
{ key: 'broccoli', label: 'Broccoli' },
|
|
329
|
+
]},
|
|
330
|
+
];
|
|
331
|
+
|
|
332
|
+
<ListBox label="Select food items" selectionMode="single" items={categories}>
|
|
333
|
+
{(category) => (
|
|
334
|
+
<ListBox.Section key={category.name} title={category.name} items={category.children}>
|
|
335
|
+
{(item) => <ListBox.Item key={item.key}>{item.label}</ListBox.Item>}
|
|
336
|
+
</ListBox.Section>
|
|
337
|
+
)}
|
|
338
|
+
</ListBox>
|
|
339
|
+
```
|
|
340
|
+
|
|
316
341
|
### Multiple Selection
|
|
317
342
|
|
|
318
343
|
```jsx
|
|
@@ -694,15 +719,20 @@ This component supports all [Field properties](../../FieldProperties.md) when us
|
|
|
694
719
|
|
|
695
720
|
### Virtualization
|
|
696
721
|
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
722
|
+
For large datasets, use the `items` prop with a render function. This enables automatic virtualization — only visible items are rendered in the DOM, providing smooth scrolling even with thousands of items.
|
|
723
|
+
|
|
724
|
+
```jsx
|
|
725
|
+
const items = Array.from({ length: 1000 }, (_, i) => ({
|
|
726
|
+
key: `item-${i}`,
|
|
727
|
+
label: `Item ${i + 1}`,
|
|
728
|
+
}));
|
|
729
|
+
|
|
730
|
+
<ListBox label="Large Dataset" selectionMode="single" items={items}>
|
|
731
|
+
{(item) => <ListBox.Item key={item.key}>{item.label}</ListBox.Item>}
|
|
732
|
+
</ListBox>
|
|
733
|
+
```
|
|
704
734
|
|
|
705
|
-
**Note**: Virtualization is
|
|
735
|
+
**Note**: Virtualization is disabled when sections are present. For very large datasets, prefer a flat list structure.
|
|
706
736
|
|
|
707
737
|
### Optimization Tips
|
|
708
738
|
|
|
@@ -425,6 +425,31 @@ Organize items into logical groups with section headers.
|
|
|
425
425
|
</Picker>
|
|
426
426
|
```
|
|
427
427
|
|
|
428
|
+
### With Sections (Dynamic)
|
|
429
|
+
|
|
430
|
+
Sections and items can be defined dynamically using the `items` prop with a render function. Pass hierarchical data where each section contains a `children` array.
|
|
431
|
+
|
|
432
|
+
```jsx
|
|
433
|
+
const categories = [
|
|
434
|
+
{ name: 'Fruits', children: [
|
|
435
|
+
{ key: 'apple', label: 'Apple' },
|
|
436
|
+
{ key: 'banana', label: 'Banana' },
|
|
437
|
+
]},
|
|
438
|
+
{ name: 'Vegetables', children: [
|
|
439
|
+
{ key: 'carrot', label: 'Carrot' },
|
|
440
|
+
{ key: 'broccoli', label: 'Broccoli' },
|
|
441
|
+
]},
|
|
442
|
+
];
|
|
443
|
+
|
|
444
|
+
<Picker label="Favorite Food" placeholder="Select a food" items={categories}>
|
|
445
|
+
{(category) => (
|
|
446
|
+
<Picker.Section key={category.name} title={category.name} items={category.children}>
|
|
447
|
+
{(item) => <Picker.Item key={item.key}>{item.label}</Picker.Item>}
|
|
448
|
+
</Picker.Section>
|
|
449
|
+
)}
|
|
450
|
+
</Picker>
|
|
451
|
+
```
|
|
452
|
+
|
|
428
453
|
### Different Sizes
|
|
429
454
|
|
|
430
455
|
Picker supports three sizes: small, medium (default), and large.
|
|
@@ -112,12 +112,12 @@ For individual tabs:
|
|
|
112
112
|
|
|
113
113
|
### Sizes
|
|
114
114
|
|
|
115
|
-
- `xsmall` - Extra small size with t4 typography
|
|
115
|
+
- `xsmall` - Extra small size with t4 typography
|
|
116
116
|
- `small` - Small size with t3m typography (default)
|
|
117
117
|
- `medium` - Default size with t3m typography
|
|
118
118
|
- `large` - Larger tabs with t3m typography
|
|
119
119
|
|
|
120
|
-
**Note:** Radio type
|
|
120
|
+
**Note:** Radio type supports `large` (default, 40px total) and `medium` (32px total) sizes, mapped to Item button sizes `medium` (32px) and `xsmall` (24px) respectively.
|
|
121
121
|
|
|
122
122
|
## Compound Components
|
|
123
123
|
|
package/docs/tasty/README.md
CHANGED
|
@@ -6,18 +6,18 @@ Tasty is a styling engine for design systems that turns component state into det
|
|
|
6
6
|
|
|
7
7
|
- **New to Tasty**: [Getting Started](getting-started.md) for installation, the first component, optional shared `configure()`, ESLint, editor tooling, and rendering mode selection.
|
|
8
8
|
- **Learning the component model**: [Methodology](methodology.md) for root + sub-elements, `styleProps`, tokens, extension, and recommended boundaries between `styles`, `style`, and wrappers.
|
|
9
|
-
- **Evaluating the selector model**: [Style rendering pipeline](
|
|
9
|
+
- **Evaluating the selector model**: [Style rendering pipeline](pipeline.md) for how mutually exclusive selectors make stateful styling deterministic.
|
|
10
10
|
- **Evaluating fit**: [Comparison](comparison.md) for tool-selection context, then [Adoption Guide](adoption.md) for audience fit and rollout strategy inside a design system.
|
|
11
11
|
|
|
12
12
|
## By Role
|
|
13
13
|
|
|
14
|
-
- **Application developer using an existing design system**: [Getting Started](getting-started.md), then [
|
|
14
|
+
- **Application developer using an existing design system**: [Getting Started](getting-started.md), then [React API](react-api.md).
|
|
15
15
|
- **Design-system author**: [Methodology](methodology.md), [Building a Design System](design-system.md), [Configuration](configuration.md), and [Adoption Guide](adoption.md).
|
|
16
16
|
- **Platform or tooling engineer**: [Configuration](configuration.md), [Zero Runtime (tastyStatic)](tasty-static.md), [Server-Side Rendering](ssr.md), and [Debug Utilities](debug.md).
|
|
17
17
|
|
|
18
18
|
## By Styling Approach
|
|
19
19
|
|
|
20
|
-
- **
|
|
20
|
+
- **React components**: [React API](react-api.md)
|
|
21
21
|
- **Zero-runtime / build-time extraction**: [Zero Runtime (tastyStatic)](tasty-static.md)
|
|
22
22
|
- **Runtime `tasty()` with server collection and hydration**: [Server-Side Rendering](ssr.md)
|
|
23
23
|
|
|
@@ -27,5 +27,5 @@ Tasty is a styling engine for design systems that turns component state into det
|
|
|
27
27
|
- **Look up a property handler**: [Style Properties](styles.md)
|
|
28
28
|
- **Define tokens, units, recipes, keyframes, or properties globally**: [Configuration](configuration.md)
|
|
29
29
|
- **Debug generated CSS or cache behavior**: [Debug Utilities](debug.md)
|
|
30
|
-
- **Understand how selector generation works internally**: [Style rendering pipeline](
|
|
30
|
+
- **Understand how selector generation works internally**: [Style rendering pipeline](pipeline.md)
|
|
31
31
|
- **Understand runtime injection internals**: [Style Injector](injector.md)
|
package/docs/tasty/adoption.md
CHANGED
|
@@ -13,7 +13,7 @@ Tasty is not the surface your product engineers interact with directly. It sits
|
|
|
13
13
|
```
|
|
14
14
|
Product code
|
|
15
15
|
└─ DS components (Button, Card, Layout, ...)
|
|
16
|
-
└─ Tasty engine (tasty(), configure(),
|
|
16
|
+
└─ Tasty engine (tasty(), configure(), style functions)
|
|
17
17
|
└─ CSS (mutually exclusive selectors, tokens, custom properties)
|
|
18
18
|
```
|
|
19
19
|
|
|
@@ -64,7 +64,7 @@ Tasty provides the engine. The DS team defines the language that runs on it. Her
|
|
|
64
64
|
| **Units** | Custom multiplier units (`x`, `r`, `bw`, or your own) | `configure({ units })` |
|
|
65
65
|
| **State aliases** | Responsive breakpoints, theme modes, feature flags | `configure({ states })` |
|
|
66
66
|
| **Recipes** | Reusable style bundles (card, elevated, input-reset) | `configure({ recipes })` |
|
|
67
|
-
| **Typography** | Preset definitions (h1-h6, t1-t4, etc.) | `configure({
|
|
67
|
+
| **Typography** | Preset definitions (h1-h6, t1-t4, etc.) | `configure({ presets: { ... } })` |
|
|
68
68
|
| **Style props** | Which CSS properties each component exposes as React props | `styleProps` in each component |
|
|
69
69
|
| **Sub-elements** | Inner parts of compound components (Title, Icon, Content) | `elements` + capitalized keys in `styles` |
|
|
70
70
|
| **Override rules** | How product engineers extend or constrain components | Styled wrappers via `tasty(Base, { ... })` |
|
|
@@ -270,6 +270,8 @@ const LoadingButton = tasty(Button, {
|
|
|
270
270
|
</Space>
|
|
271
271
|
```
|
|
272
272
|
|
|
273
|
+
**Components are server components by default.** All `tasty()` components and style functions are hook-free, so they work as React Server Components without `'use client'`. In server-only contexts (Next.js RSC, Astro without `client:*` directives), they produce zero client JavaScript. Product engineers only add `'use client'` when their component needs actual React interactivity (state, effects, event handlers), never because of styling.
|
|
274
|
+
|
|
273
275
|
**No cascade/specificity concerns.** Tasty's mutually exclusive selectors mean extending a component cannot accidentally break another. Import order, class name collisions, and specificity arithmetic are non-issues.
|
|
274
276
|
|
|
275
277
|
---
|
|
@@ -289,7 +291,7 @@ const LoadingButton = tasty(Button, {
|
|
|
289
291
|
- [Methodology](methodology.md) -- the recommended patterns for structuring Tasty components
|
|
290
292
|
- [Building a Design System](design-system.md) -- practical guide to building a DS layer with Tasty
|
|
291
293
|
- [Style DSL](dsl.md) -- state maps, tokens, units, extending semantics, keyframes, @property
|
|
292
|
-
- [
|
|
294
|
+
- [React API](react-api.md) -- `tasty()` factory, component props, variants, sub-elements, style functions
|
|
293
295
|
- [Configuration](configuration.md) -- tokens, recipes, custom units, style handlers, and TypeScript extensions
|
|
294
296
|
- [Style Properties](styles.md) -- complete reference for all enhanced style properties
|
|
295
297
|
- [Comparison](comparison.md) -- positioning and trade-offs vs. other styling systems
|
package/docs/tasty/comparison.md
CHANGED
|
@@ -29,14 +29,14 @@ That is why syntax-level comparisons are often shallow. The more meaningful comp
|
|
|
29
29
|
|
|
30
30
|
## High-level positioning
|
|
31
31
|
|
|
32
|
-
| System | Best described as | Main authoring model | Conflict model | Best fit |
|
|
33
|
-
|
|
34
|
-
| **Tasty** | Design-system styling engine | Custom DSL with tokens, state maps, recipes, style props, sub-elements, custom units | **Mutually exclusive selector resolution** for stateful styles | Teams building shared component APIs or a house styling language |
|
|
35
|
-
| **Tailwind CSS** | Utility-first styling framework | Utility classes in markup | Utility composition, variants, and framework-controlled ordering | Product teams optimizing for speed and direct authoring |
|
|
36
|
-
| **Panda CSS** | Typed styling engine with atomic output | Typed style objects, recipes, generated primitives, style props | Atomic CSS with static analysis | Teams wanting a DS-friendly engine with typed primitives |
|
|
37
|
-
| **vanilla-extract** | Zero-runtime TS-native stylesheet system | `.css.ts` files, theme contracts, style composition | Standard CSS semantics | Teams wanting static CSS and low-level control |
|
|
38
|
-
| **StyleX** | Compiler-based atomic styling system | JS authoring with compiler-generated atomic CSS | Compiler-controlled atomic composition | Large app teams wanting optimized, predictable atomic styling |
|
|
39
|
-
| **Stitches** (deprecated) **/ Emotion** | Component-first CSS-in-JS | Styled components, `css()` APIs, object/string styles | Composition within CSS-in-JS rules | Teams optimizing for component DX and flexible styling |
|
|
32
|
+
| System | Best described as | Main authoring model | Conflict model | RSC / zero-JS SSG | Best fit |
|
|
33
|
+
|---|---|---|---|---|---|
|
|
34
|
+
| **Tasty** | Design-system styling engine | Custom DSL with tokens, state maps, recipes, style props, sub-elements, custom units | **Mutually exclusive selector resolution** for stateful styles | Yes — hook-free, server components by default | Teams building shared component APIs or a house styling language |
|
|
35
|
+
| **Tailwind CSS** | Utility-first styling framework | Utility classes in markup | Utility composition, variants, and framework-controlled ordering | Yes — no JS runtime | Product teams optimizing for speed and direct authoring |
|
|
36
|
+
| **Panda CSS** | Typed styling engine with atomic output | Typed style objects, recipes, generated primitives, style props | Atomic CSS with static analysis | Yes — build-time extraction | Teams wanting a DS-friendly engine with typed primitives |
|
|
37
|
+
| **vanilla-extract** | Zero-runtime TS-native stylesheet system | `.css.ts` files, theme contracts, style composition | Standard CSS semantics | Yes — build-time extraction | Teams wanting static CSS and low-level control |
|
|
38
|
+
| **StyleX** | Compiler-based atomic styling system | JS authoring with compiler-generated atomic CSS | Compiler-controlled atomic composition | Yes — compiler-extracted | Large app teams wanting optimized, predictable atomic styling |
|
|
39
|
+
| **Stitches** (deprecated) **/ Emotion** | Component-first CSS-in-JS | Styled components, `css()` APIs, object/string styles | Composition within CSS-in-JS rules | No — requires `'use client'` | Teams optimizing for component DX and flexible styling |
|
|
40
40
|
|
|
41
41
|
---
|
|
42
42
|
|
|
@@ -92,7 +92,7 @@ That makes Tasty less of a "better way to write CSS objects" and more of a **sta
|
|
|
92
92
|
Beyond state resolution, Tasty also provides several structural capabilities that reinforce the design-system layer:
|
|
93
93
|
|
|
94
94
|
- **CSS properties as typed React props** — `styleProps` lets a component expose selected style properties as normal props (`<Button placeSelf="end">`), including state maps for responsive values. This keeps layout and composition controls inside a governed component API instead of pushing teams back to ad hoc styling escapes.
|
|
95
|
-
- **Sub-element styling** — Compound components declare inner parts via capitalized keys in `styles` and `data-element` attributes. States, tokens, and recipes apply across the entire element tree from a single definition. See [
|
|
95
|
+
- **Sub-element styling** — Compound components declare inner parts via capitalized keys in `styles` and `data-element` attributes. States, tokens, and recipes apply across the entire element tree from a single definition. See [React API — Sub-element Styling](react-api.md#sub-element-styling).
|
|
96
96
|
- **Auto-inferred `@property`** — When a custom property is assigned a concrete value, Tasty infers the CSS `@property` syntax and registers it automatically, enabling smooth transitions on custom properties without manual declarations.
|
|
97
97
|
- **AI-friendly style definitions** — Style definitions are declarative, self-contained, and structurally consistent. AI tools can read, refactor, and generate Tasty styles as confidently as a human — no hidden cascade logic or implicit ordering to second-guess.
|
|
98
98
|
- **Companion ecosystem** — An [ESLint plugin](https://github.com/tenphi/eslint-plugin-tasty) with 27 lint rules, a [VS Code extension](https://github.com/tenphi/tasty-vscode-extension) for syntax highlighting, and [Glaze](https://github.com/tenphi/glaze) for OKHSL color theme generation with automatic WCAG contrast solving.
|
|
@@ -235,13 +235,12 @@ Tasty is more opinionated.
|
|
|
235
235
|
|
|
236
236
|
It behaves less like "TypeScript that outputs CSS" and more like a **state-aware style compiler**. It is designed to encode higher-level styling semantics rather than only expose CSS primitives in typed form.
|
|
237
237
|
|
|
238
|
-
This also makes Tasty's
|
|
238
|
+
This also makes Tasty's rendering model notable:
|
|
239
239
|
|
|
240
|
-
-
|
|
241
|
-
- `tastyStatic()` with the Babel plugin produces static class name strings with
|
|
242
|
-
- In static mode, the output is plain CSS + class names, so it can be used with any JavaScript framework — not only React
|
|
240
|
+
- `tasty()` components are hook-free and work as React Server Components. In server-only contexts (Next.js RSC, Astro without islands), they produce static HTML + CSS with zero client JavaScript — the full feature set is available without sacrificing server rendering
|
|
241
|
+
- `tastyStatic()` with the Babel plugin produces static class name strings via build-time extraction, with no React dependency at runtime — the output works with any JavaScript framework
|
|
243
242
|
|
|
244
|
-
Runtime features like `styleProps`, sub-element components, and dynamic variants are
|
|
243
|
+
Runtime features like `styleProps`, sub-element components, and dynamic variants are available in the `tasty()` path. The `tastyStatic()` path is framework-agnostic but limited to the DSL, tokens, and state logic.
|
|
245
244
|
|
|
246
245
|
So the tradeoff is roughly:
|
|
247
246
|
|
|
@@ -303,6 +302,8 @@ So while Stitches and Emotion are strong tools for building components, Tasty is
|
|
|
303
302
|
|
|
304
303
|
That makes it narrower in audience, but deeper in architectural ambition.
|
|
305
304
|
|
|
305
|
+
There is also a fundamental architectural difference: Emotion and styled-components rely on React context and hooks internally, which means they require `'use client'` in modern React and cannot run as React Server Components. Tasty's style functions and `tasty()` components are hook-free, so they work as server components by default and produce zero client JavaScript in server-only contexts. This is not a minor compatibility detail — it means Tasty-based components stay as server components until *your* code needs interactivity, while Emotion and styled-components force the client boundary at the styling layer.
|
|
306
|
+
|
|
306
307
|
For teams evaluating runtime styling at scale, Tasty also documents its runtime benchmarks and caching model in the main [README](../README.md#performance). That matters, but it is still secondary to the core question of whether you want Tasty's deterministic selector model.
|
|
307
308
|
|
|
308
309
|
---
|
|
@@ -311,20 +312,18 @@ For teams evaluating runtime styling at scale, Tasty also documents its runtime
|
|
|
311
312
|
|
|
312
313
|
Tasty is not limited to one execution model.
|
|
313
314
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
That distinction matters.
|
|
315
|
+
The term "runtime" in `tasty()` refers to *when* style computation happens — during React rendering — not to where that rendering occurs. In server-only contexts (Next.js RSC without `'use client'`, Astro without `client:*` directives, SSG), `tasty()` components render on the server, produce static HTML + CSS, and ship **zero client JavaScript**. The full feature set — `styleProps`, sub-elements, variants, state maps — is available. The result is the same as what `tastyStatic()` produces, but without giving up any runtime capabilities.
|
|
317
316
|
|
|
318
|
-
|
|
317
|
+
Client JavaScript only enters the picture when a component needs React interactivity (state, effects, event handlers) — and that is the consuming component's decision, never Tasty's. Tasty never forces the `'use client'` boundary.
|
|
319
318
|
|
|
320
|
-
|
|
319
|
+
`tastyStatic()` with the Babel plugin is for a different scenario: when you want build-time CSS extraction **without React at runtime**. The output is framework-agnostic — any JavaScript framework can consume the resulting class names and CSS. This makes Tasty usable as the compiler layer underneath a design-system implementation, even outside the React ecosystem.
|
|
321
320
|
|
|
322
|
-
The tradeoff is that some capabilities — `styleProps`, sub-element components (`<Card.Title>`), dynamic variants — are tied to the
|
|
321
|
+
The tradeoff is that some capabilities — `styleProps`, sub-element components (`<Card.Title>`), dynamic variants — are tied to the `tasty()` path. The `tastyStatic()` path is best understood as extraction and compilation of the DSL, tokens, and state logic without a React dependency.
|
|
323
322
|
|
|
324
323
|
This flexibility is one of Tasty's more unusual strengths:
|
|
325
324
|
|
|
326
|
-
-
|
|
327
|
-
-
|
|
325
|
+
- `tasty()` as the default for all React setups — zero client JS in server-only contexts, full feature set, SSR integration available when client hydration is needed
|
|
326
|
+
- `tastyStatic()` as a static compiler whose output works with any framework, including non-React ones
|
|
328
327
|
|
|
329
328
|
---
|
|
330
329
|
|
|
@@ -337,8 +336,8 @@ These are optimized for styling product code directly.
|
|
|
337
336
|
|
|
338
337
|
Examples:
|
|
339
338
|
- Tailwind CSS
|
|
340
|
-
- Emotion
|
|
341
|
-
- Stitches (deprecated)
|
|
339
|
+
- Emotion (requires `'use client'` — not RSC-compatible)
|
|
340
|
+
- Stitches (deprecated, requires `'use client'`)
|
|
342
341
|
|
|
343
342
|
### Typed styling engines
|
|
344
343
|
These are optimized for generating CSS with stronger structure and tooling.
|
|
@@ -412,7 +411,7 @@ Tasty is most compelling when the problem is not just "how do we write styles,"
|
|
|
412
411
|
|
|
413
412
|
- [README](../README.md) — overview, quick start, and feature highlights
|
|
414
413
|
- [Style DSL](dsl.md) — state maps, tokens, units, extending semantics, keyframes, @property
|
|
415
|
-
- [
|
|
414
|
+
- [React API](react-api.md) — `tasty()` factory, component props, variants, sub-elements, style functions
|
|
416
415
|
- [Style Properties](styles.md) — complete reference for all enhanced style properties
|
|
417
416
|
- [Configuration](configuration.md) — tokens, recipes, custom units, style handlers, and TypeScript extensions
|
|
418
417
|
- [Zero Runtime (tastyStatic)](tasty-static.md) — build-time static styling with Babel plugin
|
|
@@ -54,8 +54,12 @@ These docs use `data-schema="dark"` in examples. If your app already standardize
|
|
|
54
54
|
| `replaceTokens` | `Record<string, string \| number>` | - | Parse-time token substitution (inline replacement) |
|
|
55
55
|
| `keyframes` | `Record<string, KeyframesSteps>` | - | Global keyframes for animations |
|
|
56
56
|
| `properties` | `Record<string, PropertyDefinition>` | - | Global CSS @property definitions |
|
|
57
|
+
| `fontFace` | `Record<string, FontFaceInput>` | - | Global @font-face definitions |
|
|
58
|
+
| `counterStyle` | `Record<string, CounterStyleDescriptors>` | - | Global @counter-style definitions |
|
|
57
59
|
| `autoPropertyTypes` | `boolean` | `true` | Auto-infer and register `@property` types from values |
|
|
58
60
|
| `recipes` | `Record<string, RecipeStyles>` | - | Predefined style recipes (named style bundles) |
|
|
61
|
+
| `presets` | `Record<string, TypographyPreset>` | - | Typography presets — shorthand for `generateTypographyTokens()` |
|
|
62
|
+
| `globalStyles` | `Record<string, Styles>` | - | Global Tasty styles keyed by CSS selector |
|
|
59
63
|
| `colorSpace` | `'rgb' \| 'hsl' \| 'oklch'` | `'oklch'` | Color space for decomposed color token companion variables |
|
|
60
64
|
|
|
61
65
|
---
|
|
@@ -133,6 +137,65 @@ See [Replace Tokens](dsl.md#replace-tokens) in the Style DSL reference.
|
|
|
133
137
|
|
|
134
138
|
---
|
|
135
139
|
|
|
140
|
+
## Font Face
|
|
141
|
+
|
|
142
|
+
Register custom fonts globally so every component can reference them by family name. Values are descriptor objects or arrays (for multiple weights/styles). Rules are injected eagerly when styles are first generated.
|
|
143
|
+
|
|
144
|
+
```ts
|
|
145
|
+
configure({
|
|
146
|
+
fontFace: {
|
|
147
|
+
'Brand Sans': [
|
|
148
|
+
{
|
|
149
|
+
src: 'url("/fonts/brand-regular.woff2") format("woff2")',
|
|
150
|
+
fontWeight: 400,
|
|
151
|
+
fontDisplay: 'swap',
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
src: 'url("/fonts/brand-bold.woff2") format("woff2")',
|
|
155
|
+
fontWeight: 700,
|
|
156
|
+
fontDisplay: 'swap',
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
Icons: {
|
|
160
|
+
src: 'url("/fonts/icons.woff2") format("woff2")',
|
|
161
|
+
fontDisplay: 'block',
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
});
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
Now any component can use `fontFamily: '"Brand Sans", sans-serif'` and the browser will already have the `@font-face` rules in the stylesheet.
|
|
168
|
+
|
|
169
|
+
See [Font Face (`@fontFace`)](dsl.md#font-face-fontface) for inline usage inside component styles and the full list of supported descriptors.
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Counter Style
|
|
174
|
+
|
|
175
|
+
Define custom list-marker algorithms globally. Rules are injected eagerly when styles are first generated.
|
|
176
|
+
|
|
177
|
+
```ts
|
|
178
|
+
configure({
|
|
179
|
+
counterStyle: {
|
|
180
|
+
thumbs: {
|
|
181
|
+
system: 'cyclic',
|
|
182
|
+
symbols: '"👍"',
|
|
183
|
+
suffix: '" "',
|
|
184
|
+
},
|
|
185
|
+
'lower-roman-parens': {
|
|
186
|
+
system: 'extends lower-roman',
|
|
187
|
+
suffix: '") "',
|
|
188
|
+
},
|
|
189
|
+
},
|
|
190
|
+
});
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
Components can then reference `listStyleType: 'thumbs'` directly.
|
|
194
|
+
|
|
195
|
+
See [Counter Style (`@counterStyle`)](dsl.md#counter-style-counterstyle) for inline usage inside component styles and the full list of supported descriptors.
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
136
199
|
## Recipes
|
|
137
200
|
|
|
138
201
|
Recipes are predefined, named style bundles. Define them globally via `configure()`:
|
|
@@ -159,6 +222,72 @@ For how to apply, compose, and override recipes in components, see [Recipes](dsl
|
|
|
159
222
|
|
|
160
223
|
---
|
|
161
224
|
|
|
225
|
+
## Typography Presets
|
|
226
|
+
|
|
227
|
+
Typography presets are a shorthand for `generateTypographyTokens()`. Instead of calling the function manually and spreading the result into `tokens`, pass the presets directly:
|
|
228
|
+
|
|
229
|
+
```jsx
|
|
230
|
+
configure({
|
|
231
|
+
presets: {
|
|
232
|
+
h1: { fontSize: '32px', lineHeight: '1.2', fontWeight: '700' },
|
|
233
|
+
t2: { fontSize: '16px', lineHeight: '1.5', fontWeight: '400' },
|
|
234
|
+
tag: {
|
|
235
|
+
fontSize: '10px',
|
|
236
|
+
lineHeight: '1.4',
|
|
237
|
+
letterSpacing: '0.04em',
|
|
238
|
+
fontWeight: '600',
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
});
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
Each preset generates `$name-font-size`, `$name-line-height`, `$name-letter-spacing`, `$name-font-weight`, and optional `$name-bold-font-weight`, `$name-icon-size`, `$name-text-transform`, `$name-font-family`, `$name-font-style` tokens.
|
|
245
|
+
|
|
246
|
+
Preset values support state maps for responsive or theme-aware typography:
|
|
247
|
+
|
|
248
|
+
```jsx
|
|
249
|
+
configure({
|
|
250
|
+
presets: {
|
|
251
|
+
t2: {
|
|
252
|
+
fontSize: '16px',
|
|
253
|
+
lineHeight: '1.5',
|
|
254
|
+
fontWeight: { '': '400', '@dark': '300' },
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
});
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
The generated tokens are merged **under** explicit `tokens` — if both `presets` and `tokens` define `$t2-font-weight`, the `tokens` value wins. Plugins can also provide `presets`; plugin presets are merged first, then config presets, then explicit tokens on top.
|
|
261
|
+
|
|
262
|
+
---
|
|
263
|
+
|
|
264
|
+
## Global Styles
|
|
265
|
+
|
|
266
|
+
Apply Tasty styles to any selector via configuration, without needing `useGlobalStyles(selector, ...)` at runtime:
|
|
267
|
+
|
|
268
|
+
```jsx
|
|
269
|
+
configure({
|
|
270
|
+
globalStyles: {
|
|
271
|
+
body: {
|
|
272
|
+
fill: '#surface',
|
|
273
|
+
color: '#text',
|
|
274
|
+
preset: 't2',
|
|
275
|
+
margin: 0,
|
|
276
|
+
fontFamily: 'system-ui, sans-serif',
|
|
277
|
+
},
|
|
278
|
+
html: {
|
|
279
|
+
overflow: 'hidden',
|
|
280
|
+
},
|
|
281
|
+
},
|
|
282
|
+
});
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
Each key is a CSS selector, and each value is a Tasty `Styles` object supporting the full style syntax including style properties, tokens, state maps, and selector-based sub-styling (e.g. `$: '> .app'` for elements outside React scope). Global styles are injected alongside `:root` tokens when the first style is rendered.
|
|
286
|
+
|
|
287
|
+
Global styles are automatically emitted in all rendering modes: runtime (client), SSR, and zero-runtime (Babel plugin). Plugins can also provide `globalStyles`; they are merged per selector with config global styles (config wins on conflict).
|
|
288
|
+
|
|
289
|
+
---
|
|
290
|
+
|
|
162
291
|
## Auto Property Types
|
|
163
292
|
|
|
164
293
|
CSS cannot transition or animate custom properties unless their type is declared via [`@property`](https://developer.mozilla.org/en-US/docs/Web/CSS/@property). Tasty handles this automatically — when a custom property is assigned a concrete value (e.g. `'$scale': 1`, `'$gap': '10px'`, `'#accent': 'purple'`), the type is inferred and a `@property` rule is registered.
|
|
@@ -262,4 +391,4 @@ declare module '@tenphi/tasty' {
|
|
|
262
391
|
}
|
|
263
392
|
```
|
|
264
393
|
|
|
265
|
-
See [Style DSL](dsl.md) for state maps, tokens, units, and extending semantics, and [
|
|
394
|
+
See [Style DSL](dsl.md) for state maps, tokens, units, and extending semantics, and [React API](react-api.md) for `tasty()`, style functions, and component props.
|
package/docs/tasty/debug.md
CHANGED
|
@@ -12,6 +12,8 @@ In development mode (`isDevEnv()` returns `true`), `tastyDebug` is automatically
|
|
|
12
12
|
|
|
13
13
|
All methods **log to the console by default**. Pass `{ raw: true }` to suppress logging and only return data.
|
|
14
14
|
|
|
15
|
+
> **Note (2.0.0+):** Class names use a content-addressed base36 hash format (e.g. `t3a5f`) instead of the previous sequential `t{number}` format. Cross-environment hydration reads the rendered class list from `window.__TASTY__` (the legacy `window.__TASTY_SSR_CACHE__` global was removed in 2.0.0).
|
|
16
|
+
|
|
15
17
|
---
|
|
16
18
|
|
|
17
19
|
## Quick Start
|
|
@@ -69,8 +71,8 @@ Retrieves CSS text for a given target. Logs the result with rule count and size.
|
|
|
69
71
|
| `'unused'` | CSS with refCount = 0 (cached but not used) |
|
|
70
72
|
| `'global'` | Only global CSS (from `injectGlobal`) |
|
|
71
73
|
| `'page'` | All CSS on the page (including non-tasty) |
|
|
72
|
-
| `'
|
|
73
|
-
| `['
|
|
74
|
+
| `'t3a5f'` | CSS for a specific tasty class (class names are `t` + base36 hash) |
|
|
75
|
+
| `['t3a5f', 't9k2']` | CSS for multiple tasty classes |
|
|
74
76
|
| `'.my-button'` | CSS affecting a DOM element (by selector) |
|
|
75
77
|
| `element` | CSS affecting a DOM element (by reference) |
|
|
76
78
|
|
|
@@ -88,11 +90,11 @@ interface CssOptions extends DebugOptions {
|
|
|
88
90
|
tastyDebug.css('active');
|
|
89
91
|
|
|
90
92
|
// Specific class, silent
|
|
91
|
-
const css = tastyDebug.css('
|
|
93
|
+
const css = tastyDebug.css('t3a5f', { raw: true });
|
|
92
94
|
|
|
93
95
|
// Compare original vs browser-parsed CSS (dev mode only)
|
|
94
|
-
tastyDebug.css('
|
|
95
|
-
tastyDebug.css('
|
|
96
|
+
tastyDebug.css('t3a5f'); // live CSSOM
|
|
97
|
+
tastyDebug.css('t3a5f', { source: true }); // original output
|
|
96
98
|
|
|
97
99
|
// Shadow DOM
|
|
98
100
|
tastyDebug.css('all', { root: shadowRoot });
|
|
@@ -125,11 +127,11 @@ interface ChunkInfo {
|
|
|
125
127
|
```typescript
|
|
126
128
|
tastyDebug.inspect('.my-card');
|
|
127
129
|
// Logs: inspect div — 3 classes, 5 rules, 1.2KB
|
|
128
|
-
// Chunks:
|
|
130
|
+
// Chunks: t3a5f→appearance, t9k2→font, tb71→dimension
|
|
129
131
|
|
|
130
132
|
// Silent
|
|
131
133
|
const result = tastyDebug.inspect('.my-card', { raw: true });
|
|
132
|
-
console.log(result.classes); // ['
|
|
134
|
+
console.log(result.classes); // ['t3a5f', 't9k2', 'tb71']
|
|
133
135
|
console.log(result.rules); // 5
|
|
134
136
|
```
|
|
135
137
|
|
|
@@ -291,10 +293,10 @@ tastyDebug.summary({ root: shadowRoot });
|
|
|
291
293
|
tastyDebug.inspect('.my-button');
|
|
292
294
|
|
|
293
295
|
// 2. See CSS for a specific class
|
|
294
|
-
tastyDebug.css('
|
|
296
|
+
tastyDebug.css('t3a5f');
|
|
295
297
|
|
|
296
298
|
// 3. Compare original vs browser-parsed (dev mode)
|
|
297
|
-
tastyDebug.css('
|
|
299
|
+
tastyDebug.css('t3a5f', { source: true });
|
|
298
300
|
```
|
|
299
301
|
|
|
300
302
|
### Checking cache efficiency
|
|
@@ -84,25 +84,54 @@ configure({
|
|
|
84
84
|
|
|
85
85
|
### Typography presets
|
|
86
86
|
|
|
87
|
-
|
|
87
|
+
Pass typography presets directly to `configure()` — they are converted to tokens automatically:
|
|
88
88
|
|
|
89
89
|
```tsx
|
|
90
|
-
import { configure
|
|
90
|
+
import { configure } from '@tenphi/tasty';
|
|
91
91
|
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
92
|
+
configure({
|
|
93
|
+
presets: {
|
|
94
|
+
h1: { fontSize: '2rem', lineHeight: '1.2', letterSpacing: '-0.02em', fontWeight: 700 },
|
|
95
|
+
t2: { fontSize: '0.875rem', lineHeight: '1.5', letterSpacing: 'normal', fontWeight: 400 },
|
|
96
|
+
},
|
|
95
97
|
});
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Preset values support state maps for responsive or theme-aware typography:
|
|
96
101
|
|
|
102
|
+
```tsx
|
|
97
103
|
configure({
|
|
98
|
-
|
|
99
|
-
|
|
104
|
+
presets: {
|
|
105
|
+
t2: {
|
|
106
|
+
fontSize: '0.875rem',
|
|
107
|
+
lineHeight: '1.5',
|
|
108
|
+
fontWeight: { '': 400, '@dark': 300 },
|
|
109
|
+
},
|
|
100
110
|
},
|
|
101
111
|
});
|
|
102
112
|
```
|
|
103
113
|
|
|
104
114
|
Then use `preset: 'h1'` or `preset: 't2'` in any component's styles.
|
|
105
115
|
|
|
116
|
+
> You can also call `generateTypographyTokens()` manually and spread the result into `tokens` for more control — `presets` is just a shorthand.
|
|
117
|
+
|
|
118
|
+
### Registering brand fonts
|
|
119
|
+
|
|
120
|
+
Register your design system's custom fonts via `configure({ fontFace })` so every component can reference them:
|
|
121
|
+
|
|
122
|
+
```ts
|
|
123
|
+
configure({
|
|
124
|
+
fontFace: {
|
|
125
|
+
'Brand Sans': [
|
|
126
|
+
{ src: 'url("/fonts/brand-regular.woff2") format("woff2")', fontWeight: 400, fontDisplay: 'swap' },
|
|
127
|
+
{ src: 'url("/fonts/brand-bold.woff2") format("woff2")', fontWeight: 700, fontDisplay: 'swap' },
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
See [Font Face](configuration.md#font-face) for the full configuration reference.
|
|
134
|
+
|
|
106
135
|
---
|
|
107
136
|
|
|
108
137
|
## Defining state aliases
|
|
@@ -317,7 +346,7 @@ Usage:
|
|
|
317
346
|
|
|
318
347
|
Sub-elements share the root component's state context by default. A `disabled` modifier on `<Card>` affects `Title`, `Content`, and `Footer` styles automatically — no prop drilling. For the full mental model, see [Methodology — Component architecture](methodology.md#component-architecture-root--sub-elements).
|
|
319
348
|
|
|
320
|
-
For sub-element syntax details (selector affix `$`, `@own()`, `elements` config), see [
|
|
349
|
+
For sub-element syntax details (selector affix `$`, `@own()`, `elements` config), see [React API — Sub-element Styling](react-api.md#sub-element-styling).
|
|
321
350
|
|
|
322
351
|
---
|
|
323
352
|
|
|
@@ -387,7 +416,7 @@ ds/
|
|
|
387
416
|
index.ts # Recipe definitions (imported by config.ts)
|
|
388
417
|
tokens/
|
|
389
418
|
colors.ts # Color token definitions
|
|
390
|
-
typography.ts # Typography presets
|
|
419
|
+
typography.ts # Typography presets for configure({ presets })
|
|
391
420
|
spacing.ts # Spacing token definitions
|
|
392
421
|
index.ts # Public API: re-exports components + configure
|
|
393
422
|
```
|
|
@@ -401,7 +430,7 @@ The key principle: `config.ts` imports tokens and recipes, calls `configure()`,
|
|
|
401
430
|
- **[Methodology](methodology.md)** — The recommended patterns for structuring Tasty components
|
|
402
431
|
- **[Getting Started](getting-started.md)** — Installation, first component, tooling setup
|
|
403
432
|
- **[Style DSL](dsl.md)** — State maps, tokens, units, extending semantics, keyframes, @property
|
|
404
|
-
- **[
|
|
433
|
+
- **[React API](react-api.md)** — `tasty()` factory, component props, variants, sub-elements, style functions
|
|
405
434
|
- **[Configuration](configuration.md)** — Full `configure()` API: tokens, recipes, custom units, style handlers
|
|
406
435
|
- **[Adoption Guide](adoption.md)** — Who should adopt Tasty, incremental phases, what changes for product engineers
|
|
407
436
|
- **[Style Properties](styles.md)** — Complete reference for all enhanced style properties
|