@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
package/docs/tasty/dsl.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This is the Tasty style language reference — the value syntax, state mappings, tokens, units, extending semantics, and special declarations that apply to both runtime `tasty()` and build-time `tastyStatic()`.
|
|
4
4
|
|
|
5
|
-
For the runtime React API (`tasty()`, hooks, component props), see [
|
|
5
|
+
For the runtime React API (`tasty()`, hooks, component props), see [React API](react-api.md). For all enhanced style properties, see [Style Properties](styles.md). For global configuration, see [Configuration](configuration.md).
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
@@ -25,7 +25,21 @@ fill: { '': '#white', hovered: '#gray.05', 'theme=danger': '#red' }
|
|
|
25
25
|
| Pseudo-class | `:hover` | `:hover` |
|
|
26
26
|
| Class selector | `.active` | `.active` |
|
|
27
27
|
| Attribute selector | `[aria-expanded="true"]` | `[aria-expanded="true"]` |
|
|
28
|
-
| Combined | `hovered & .active` | `[data-hovered].active` |
|
|
28
|
+
| Combined (AND) | `hovered & .active` | `[data-hovered].active` |
|
|
29
|
+
| Combined (OR) | `hovered \| focused` | `[data-hovered], [data-focused]` |
|
|
30
|
+
| Negated (NOT) | `!disabled` | `:not([data-disabled])` |
|
|
31
|
+
| Exclusive (XOR) | `hovered ^ focused` | `[data-hovered]:not([data-focused]), :not([data-hovered])[data-focused]` |
|
|
32
|
+
|
|
33
|
+
Operator precedence (highest to lowest): `!` (NOT) > `^` (XOR) > `|` (OR) > `&` (AND). Use parentheses to override: `hovered & (pressed ^ focused)`.
|
|
34
|
+
|
|
35
|
+
`^` (XOR) means "exactly one of" — `A ^ B` expands to `(A & !B) | (!A & B)`. This is useful for mutually exclusive states where exactly one should be active:
|
|
36
|
+
|
|
37
|
+
```jsx
|
|
38
|
+
fill: {
|
|
39
|
+
'': '#surface',
|
|
40
|
+
'hovered ^ focused': '#accent', // active when hovered OR focused, but not both
|
|
41
|
+
}
|
|
42
|
+
```
|
|
29
43
|
|
|
30
44
|
### Sub-element
|
|
31
45
|
|
|
@@ -93,7 +107,7 @@ mods={{ hovered: true, theme: 'danger' }}
|
|
|
93
107
|
// → data-hovered="" data-theme="danger"
|
|
94
108
|
```
|
|
95
109
|
|
|
96
|
-
Modifiers can also be exposed as top-level component props via `modProps` — see [Runtime — Mod Props](
|
|
110
|
+
Modifiers can also be exposed as top-level component props via `modProps` — see [Runtime — Mod Props](react-api.md#mod-props).
|
|
97
111
|
|
|
98
112
|
---
|
|
99
113
|
|
|
@@ -119,8 +133,6 @@ color: '(#primary, #secondary)', // Fallback syntax
|
|
|
119
133
|
| `cr` | Card border radius | `1cr` | `var(--card-radius)` |
|
|
120
134
|
| `bw` | Border width | `2bw` | `calc(var(--border-width) * 2)` |
|
|
121
135
|
| `ow` | Outline width | `1ow` | `var(--outline-width)` |
|
|
122
|
-
| `fs` | Font size | `1fs` | `var(--font-size)` |
|
|
123
|
-
| `lh` | Line height | `1lh` | `var(--line-height)` |
|
|
124
136
|
| `sf` | Stable fraction | `1sf` | `minmax(0, 1fr)` |
|
|
125
137
|
|
|
126
138
|
You can register additional custom units via [`configure()`](configuration.md#options).
|
|
@@ -432,7 +444,7 @@ const FadeIn = tasty({
|
|
|
432
444
|
|
|
433
445
|
### `@parent(...)` — Parent Element States
|
|
434
446
|
|
|
435
|
-
Style based on ancestor element attributes. Uses `:is([selector] *)` / `:not([selector] *)` for symmetric, composable parent checks. Boolean logic (`&`, `|`,
|
|
447
|
+
Style based on ancestor element attributes. Uses `:is([selector] *)` / `:not([selector] *)` for symmetric, composable parent checks. Boolean logic (`&`, `|`, `!`, `^`) is supported inside `@parent()`.
|
|
436
448
|
|
|
437
449
|
```jsx
|
|
438
450
|
const Highlight = tasty({
|
|
@@ -510,12 +522,13 @@ const Card = tasty({
|
|
|
510
522
|
| `!:has(> Icon)` | `:not(:has(> [data-element="Icon"]))` | Negation (use `!`) |
|
|
511
523
|
| `!:is(Panel)` | `:not([data-element="Panel"])` | Negation (use `!:is`) |
|
|
512
524
|
|
|
513
|
-
Combine with other states using boolean logic:
|
|
525
|
+
Combine with other states using boolean logic (`&`, `|`, `!`, `^`):
|
|
514
526
|
|
|
515
527
|
```jsx
|
|
516
|
-
':has(> Icon) & hovered' // structural + data attribute
|
|
517
|
-
'@parent(hovered) & :has(> Icon)' // parent check + structural
|
|
528
|
+
':has(> Icon) & hovered' // AND: structural + data attribute
|
|
529
|
+
'@parent(hovered) & :has(> Icon)' // AND: parent check + structural
|
|
518
530
|
':has(> Icon) | :has(> Button)' // OR: either sub-element present
|
|
531
|
+
':has(> Icon) ^ :has(> Button)' // XOR: exactly one present
|
|
519
532
|
```
|
|
520
533
|
|
|
521
534
|
> **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.
|
|
@@ -569,6 +582,97 @@ Use explicit `@properties` when you need non-default settings like `inherits: fa
|
|
|
569
582
|
|
|
570
583
|
---
|
|
571
584
|
|
|
585
|
+
## Font Face (`@fontFace`)
|
|
586
|
+
|
|
587
|
+
Register custom fonts directly inside a `styles` object. Keys are font-family names, values are descriptor objects (or arrays of them for multiple weights/styles).
|
|
588
|
+
|
|
589
|
+
```ts
|
|
590
|
+
const Heading = tasty({
|
|
591
|
+
styles: {
|
|
592
|
+
'@fontFace': {
|
|
593
|
+
'Brand Sans': {
|
|
594
|
+
src: 'url("/fonts/brand-sans.woff2") format("woff2")',
|
|
595
|
+
fontDisplay: 'swap',
|
|
596
|
+
},
|
|
597
|
+
},
|
|
598
|
+
fontFamily: '"Brand Sans", sans-serif',
|
|
599
|
+
},
|
|
600
|
+
});
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
### Multiple weights
|
|
604
|
+
|
|
605
|
+
Supply an array to register several variants of the same family:
|
|
606
|
+
|
|
607
|
+
```ts
|
|
608
|
+
'@fontFace': {
|
|
609
|
+
'Brand Sans': [
|
|
610
|
+
{ src: 'url("/fonts/brand-regular.woff2") format("woff2")', fontWeight: 400, fontDisplay: 'swap' },
|
|
611
|
+
{ src: 'url("/fonts/brand-bold.woff2") format("woff2")', fontWeight: 700, fontDisplay: 'swap' },
|
|
612
|
+
],
|
|
613
|
+
}
|
|
614
|
+
```
|
|
615
|
+
|
|
616
|
+
### Supported descriptors
|
|
617
|
+
|
|
618
|
+
| Descriptor | CSS property | Type |
|
|
619
|
+
|---|---|---|
|
|
620
|
+
| `src` (required) | `src` | `string` |
|
|
621
|
+
| `fontWeight` | `font-weight` | `string \| number` |
|
|
622
|
+
| `fontStyle` | `font-style` | `string` |
|
|
623
|
+
| `fontStretch` | `font-stretch` | `string` |
|
|
624
|
+
| `fontDisplay` | `font-display` | `'auto' \| 'block' \| 'swap' \| 'fallback' \| 'optional'` |
|
|
625
|
+
| `unicodeRange` | `unicode-range` | `string` |
|
|
626
|
+
| `ascentOverride` | `ascent-override` | `string` |
|
|
627
|
+
| `descentOverride` | `descent-override` | `string` |
|
|
628
|
+
| `lineGapOverride` | `line-gap-override` | `string` |
|
|
629
|
+
| `sizeAdjust` | `size-adjust` | `string` |
|
|
630
|
+
| `fontFeatureSettings` | `font-feature-settings` | `string` |
|
|
631
|
+
| `fontVariationSettings` | `font-variation-settings` | `string` |
|
|
632
|
+
|
|
633
|
+
> Font-face rules are permanent — they are injected once and never cleaned up, matching how browsers handle `@font-face`.
|
|
634
|
+
|
|
635
|
+
---
|
|
636
|
+
|
|
637
|
+
## Counter Style (`@counterStyle`)
|
|
638
|
+
|
|
639
|
+
Define custom list markers via the CSS `@counter-style` at-rule. Keys are counter-style names, values are descriptor objects.
|
|
640
|
+
|
|
641
|
+
```ts
|
|
642
|
+
const EmojiList = tasty({
|
|
643
|
+
tag: 'ol',
|
|
644
|
+
styles: {
|
|
645
|
+
'@counterStyle': {
|
|
646
|
+
thumbs: {
|
|
647
|
+
system: 'cyclic',
|
|
648
|
+
symbols: '"👍"',
|
|
649
|
+
suffix: '" "',
|
|
650
|
+
},
|
|
651
|
+
},
|
|
652
|
+
listStyleType: 'thumbs',
|
|
653
|
+
},
|
|
654
|
+
});
|
|
655
|
+
```
|
|
656
|
+
|
|
657
|
+
### Supported descriptors
|
|
658
|
+
|
|
659
|
+
| Descriptor | CSS property | Type |
|
|
660
|
+
|---|---|---|
|
|
661
|
+
| `system` (required) | `system` | `'cyclic' \| 'numeric' \| 'alphabetic' \| 'symbolic' \| 'additive' \| 'fixed' \| string` |
|
|
662
|
+
| `symbols` | `symbols` | `string` |
|
|
663
|
+
| `additiveSymbols` | `additive-symbols` | `string` |
|
|
664
|
+
| `prefix` | `prefix` | `string` |
|
|
665
|
+
| `suffix` | `suffix` | `string` |
|
|
666
|
+
| `negative` | `negative` | `string` |
|
|
667
|
+
| `range` | `range` | `string` |
|
|
668
|
+
| `pad` | `pad` | `string` |
|
|
669
|
+
| `fallback` | `fallback` | `string` |
|
|
670
|
+
| `speakAs` | `speak-as` | `string` |
|
|
671
|
+
|
|
672
|
+
> Counter-style rules are permanent — they are injected once and never cleaned up, matching how browsers handle `@counter-style`.
|
|
673
|
+
|
|
674
|
+
---
|
|
675
|
+
|
|
572
676
|
## Style Properties
|
|
573
677
|
|
|
574
678
|
For a complete reference of all enhanced style properties — syntax, values, modifiers, and recommendations — see **[Style Properties Reference](styles.md)**.
|
|
@@ -577,7 +681,7 @@ For a complete reference of all enhanced style properties — syntax, values, mo
|
|
|
577
681
|
|
|
578
682
|
## Learn more
|
|
579
683
|
|
|
580
|
-
- **[
|
|
684
|
+
- **[React API](react-api.md)** — `tasty()` factory, component props, variants, sub-elements, style functions
|
|
581
685
|
- **[Methodology](methodology.md)** — Recommended patterns: root + sub-elements, styleProps, tokens, wrapping
|
|
582
686
|
- **[Configuration](configuration.md)** — Tokens, recipes, custom units, style handlers, TypeScript extensions
|
|
583
687
|
- **[Style Properties](styles.md)** — Complete reference for all enhanced style properties
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Getting Started
|
|
2
2
|
|
|
3
|
-
This guide walks you from zero to a working Tasty component, then through the optional shared configuration and tooling layers. It is the right starting point when you already want to try Tasty in code. If you are still deciding whether Tasty fits your team, start with [Comparison](comparison.md) and [Adoption Guide](adoption.md) first. For a feature overview, see the [README](../README.md). For the full style language reference, see the [Style DSL](dsl.md). For the React API, see the [
|
|
3
|
+
This guide walks you from zero to a working Tasty component, then through the optional shared configuration and tooling layers. It is the right starting point when you already want to try Tasty in code. If you are still deciding whether Tasty fits your team, start with [Comparison](comparison.md) and [Adoption Guide](adoption.md) first. For a feature overview, see the [README](../README.md). For the full style language reference, see the [Style DSL](dsl.md). For the React API, see the [React API](react-api.md). For the rest of the docs by role or task, see the [Docs Hub](README.md).
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -179,19 +179,19 @@ export default [
|
|
|
179
179
|
|
|
180
180
|
## Choosing a rendering mode
|
|
181
181
|
|
|
182
|
-
|
|
182
|
+
`tasty()` is the default for all React apps. All `tasty()` components and style functions are hook-free and work as React Server Components without `'use client'`. In server-only contexts, they produce zero client JavaScript with the full feature set.
|
|
183
183
|
|
|
184
184
|
| Approach | Entry point | Best for | Trade-off |
|
|
185
185
|
|------|-------------|----------|-----------|
|
|
186
|
-
| **Runtime** | `tasty()` from `@tenphi/tasty` |
|
|
187
|
-
| **
|
|
186
|
+
| **Runtime (default)** | `tasty()` from `@tenphi/tasty` | All React apps — server-rendered by default, zero client JS until you need interactivity | Full feature set (styleProps, sub-elements, variants); CSS computed during rendering |
|
|
187
|
+
| **Runtime + SSR integration** | Add `@tenphi/tasty/ssr/*` | Apps with client-side hydration (Next.js client components, Astro islands) | Adds CSS batching, deduplication, FOUC prevention, and client cache hydration |
|
|
188
|
+
| **Zero-runtime** | `tastyStatic()` from `@tenphi/tasty/static` | Non-React frameworks or build-time extraction without React | Requires Babel plugin; no `styleProps` or runtime-only APIs |
|
|
188
189
|
|
|
189
|
-
Both share the same DSL, tokens, units, and state mappings.
|
|
190
|
+
Both `tasty()` and `tastyStatic()` share the same DSL, tokens, units, and state mappings.
|
|
190
191
|
|
|
191
|
-
- Runtime is the default and requires no extra setup beyond `@tenphi/tasty`.
|
|
192
|
-
-
|
|
193
|
-
- Zero-runtime requires the Babel plugin and additional peer dependencies. See [Zero Runtime (tastyStatic)](tasty-static.md).
|
|
194
|
-
- SSR works with existing `tasty()` components — wrap your app with a registry, middleware, or collector. See [Server-Side Rendering](ssr.md).
|
|
192
|
+
- **Runtime** is the default and requires no extra setup beyond `@tenphi/tasty`. In server-only contexts (Next.js RSC, Astro without `client:*` directives, SSG), `tasty()` produces static HTML + CSS with zero client JavaScript — the same end result as `tastyStatic()` but with the full feature set. For example, `tasty()` + `tastyIntegration()` in Astro without islands gives you the complete API with zero JS shipped.
|
|
193
|
+
- **SSR integration** is only needed when your app also has client-side rendering. Add `@tenphi/tasty/ssr/next`, `@tenphi/tasty/ssr/astro`, or the core SSR API to get CSS deduplication and cache hydration. See [Server-Side Rendering](ssr.md).
|
|
194
|
+
- **Zero-runtime** requires the Babel plugin and additional peer dependencies. Use it when you need build-time extraction without a React runtime. See [Zero Runtime (tastyStatic)](tasty-static.md).
|
|
195
195
|
|
|
196
196
|
---
|
|
197
197
|
|
|
@@ -200,7 +200,7 @@ Both share the same DSL, tokens, units, and state mappings.
|
|
|
200
200
|
- **[Docs Hub](README.md)** — Pick the next guide by role, styling approach, or task
|
|
201
201
|
- **[Methodology](methodology.md)** — The recommended patterns for structuring Tasty components: sub-elements, styleProps, tokens, extension
|
|
202
202
|
- **[Style DSL](dsl.md)** — State maps, tokens, units, extending semantics, keyframes, @property
|
|
203
|
-
- **[
|
|
203
|
+
- **[React API](react-api.md)** — `tasty()` factory, component props, variants, sub-elements, style functions
|
|
204
204
|
- **[Building a Design System](design-system.md)** — Practical guide to building a DS layer with Tasty: tokens, recipes, primitives, compound components
|
|
205
205
|
- **[Adoption Guide](adoption.md)** — Roll out Tasty inside an existing design system or platform team
|
|
206
206
|
- **[Comparison](comparison.md)** — Evaluate Tasty against other styling systems
|
package/docs/tasty/injector.md
CHANGED
|
@@ -115,11 +115,13 @@ dispose();
|
|
|
115
115
|
|
|
116
116
|
### `useRawCSS(css, options?)` or `useRawCSS(factory, deps, options?)`
|
|
117
117
|
|
|
118
|
-
|
|
118
|
+
Inject raw CSS without parsing. Hook-free — works in client components, SSR, and React Server Components.
|
|
119
119
|
|
|
120
120
|
Supports two overloads:
|
|
121
|
-
- **Static CSS**: `useRawCSS(cssString, options?)`
|
|
122
|
-
- **Factory function**: `useRawCSS(() => cssString, deps, options?)`
|
|
121
|
+
- **Static CSS**: `useRawCSS(cssString, options?)` — content-based deduplication
|
|
122
|
+
- **Factory function**: `useRawCSS(() => cssString, deps, options?)` — factory called on every invocation, dedup handled internally
|
|
123
|
+
|
|
124
|
+
Use the `id` option for update tracking — when the CSS changes for the same id, the previous injection is replaced:
|
|
123
125
|
|
|
124
126
|
```tsx
|
|
125
127
|
import { useRawCSS } from '@tenphi/tasty';
|
|
@@ -132,7 +134,7 @@ function GlobalReset() {
|
|
|
132
134
|
return null;
|
|
133
135
|
}
|
|
134
136
|
|
|
135
|
-
// Dynamic CSS with factory function
|
|
137
|
+
// Dynamic CSS with factory function and update tracking
|
|
136
138
|
function ThemeStyles({ theme }: { theme: 'dark' | 'light' }) {
|
|
137
139
|
useRawCSS(() => `
|
|
138
140
|
body {
|
|
@@ -140,7 +142,7 @@ function ThemeStyles({ theme }: { theme: 'dark' | 'light' }) {
|
|
|
140
142
|
background: ${theme === 'dark' ? '#000' : '#fff'};
|
|
141
143
|
color: ${theme === 'dark' ? '#fff' : '#000'};
|
|
142
144
|
}
|
|
143
|
-
`, [theme]);
|
|
145
|
+
`, [theme], { id: 'theme-body' });
|
|
144
146
|
|
|
145
147
|
return null;
|
|
146
148
|
}
|
|
@@ -207,13 +209,12 @@ import { configure } from '@tenphi/tasty';
|
|
|
207
209
|
configure({
|
|
208
210
|
devMode: true, // Enable development features (auto-detected)
|
|
209
211
|
maxRulesPerSheet: 8192, // Cap rules per stylesheet (default: 8192)
|
|
210
|
-
unusedStylesThreshold: 500, // Trigger cleanup threshold (CSS rules only)
|
|
211
|
-
bulkCleanupDelay: 5000, // Cleanup delay (ms) - ignored if idleCleanup is true
|
|
212
|
-
idleCleanup: true, // Use requestIdleCallback for cleanup
|
|
213
|
-
bulkCleanupBatchRatio: 0.5, // Clean up oldest 50% per batch
|
|
214
|
-
unusedStylesMinAgeMs: 10000, // Minimum age before cleanup (ms)
|
|
215
212
|
forceTextInjection: false, // Force textContent insertion (auto-detected for tests)
|
|
216
213
|
nonce: 'csp-nonce', // CSP nonce for security
|
|
214
|
+
gc: { // Garbage collection for unused styles
|
|
215
|
+
touchInterval: 1000, // Touch events between GC cycles (default: 1000)
|
|
216
|
+
capacity: 1000, // Max unused styles to retain (default: 1000)
|
|
217
|
+
},
|
|
217
218
|
states: { // Global predefined states for advanced state mapping
|
|
218
219
|
'@mobile': '@media(w < 768px)',
|
|
219
220
|
'@dark': '@root(schema=dark)',
|
|
@@ -229,7 +230,8 @@ configure({
|
|
|
229
230
|
- Most options have sensible defaults and auto-detection
|
|
230
231
|
- `configure()` is optional - the injector works with defaults
|
|
231
232
|
- **Configuration is locked after styles are generated** - calling `configure()` after first render will emit a warning and be ignored
|
|
232
|
-
- `
|
|
233
|
+
- `gc.touchInterval`: Number of touch events between GC cycles. Each style render counts as a touch. When the counter reaches this value, GC is scheduled via `requestIdleCallback`.
|
|
234
|
+
- `gc.capacity`: Maximum number of unused styles (refCount = 0, not in DOM) to retain. When exceeded, the oldest are evicted first. Actively referenced styles don't count against this limit.
|
|
233
235
|
|
|
234
236
|
---
|
|
235
237
|
|
|
@@ -291,21 +293,34 @@ comp3.dispose(); // refCount: 1 → 0, eligible for bulk cleanup
|
|
|
291
293
|
// Next inject() with same styles will increment refCount and reuse immediately
|
|
292
294
|
```
|
|
293
295
|
|
|
294
|
-
###
|
|
296
|
+
### Garbage Collection
|
|
295
297
|
|
|
296
298
|
```typescript
|
|
297
|
-
import { configure } from '@tenphi/tasty';
|
|
299
|
+
import { configure, gc } from '@tenphi/tasty';
|
|
298
300
|
|
|
299
|
-
// CSS rules: Not immediately deleted, marked for bulk cleanup (refCount = 0)
|
|
300
301
|
// Keyframes: Disposed immediately when refCount = 0 (safer for global scope)
|
|
302
|
+
// CSS rules: Tracked by touch count and cleaned up via gc()
|
|
301
303
|
|
|
302
304
|
configure({
|
|
303
|
-
|
|
304
|
-
|
|
305
|
+
gc: {
|
|
306
|
+
touchInterval: 1000, // Schedule GC every 1000 touches
|
|
307
|
+
capacity: 1000, // Max unused styles to retain
|
|
308
|
+
},
|
|
305
309
|
});
|
|
306
310
|
|
|
311
|
+
// Manual GC (synchronous, returns number of swept styles):
|
|
312
|
+
gc();
|
|
313
|
+
|
|
314
|
+
// Force-remove ALL unused styles (e.g. on route change or test teardown):
|
|
315
|
+
gc({ force: true });
|
|
316
|
+
|
|
317
|
+
// GC is also triggered automatically by touch count during rendering.
|
|
318
|
+
// Every `touchInterval` touches, GC is scheduled via requestIdleCallback.
|
|
319
|
+
|
|
307
320
|
// Benefits:
|
|
308
|
-
// -
|
|
321
|
+
// - Activity-proportional: busy apps trigger GC more often
|
|
322
|
+
// - DOM-safe: styles currently in the DOM are never evicted
|
|
323
|
+
// - Oldest-first: least recently used styles are evicted first
|
|
309
324
|
// - Keyframes: Immediate cleanup prevents global namespace pollution
|
|
310
325
|
// - Unused styles can be instantly reactivated (just increment refCount)
|
|
311
326
|
```
|
|
@@ -462,13 +477,14 @@ injectGlobal([
|
|
|
462
477
|
{ selector: '.container', declarations: 'max-width: 1200px;' }
|
|
463
478
|
]);
|
|
464
479
|
|
|
465
|
-
// ✅ Configure
|
|
480
|
+
// ✅ Configure GC for your app (BEFORE first render!)
|
|
466
481
|
import { configure } from '@tenphi/tasty';
|
|
467
482
|
|
|
468
483
|
configure({
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
484
|
+
gc: {
|
|
485
|
+
touchInterval: 1000, // Schedule GC every 1000 style touches
|
|
486
|
+
capacity: 1000, // Max unused styles to retain
|
|
487
|
+
},
|
|
472
488
|
});
|
|
473
489
|
```
|
|
474
490
|
|
|
@@ -480,8 +496,8 @@ configure({
|
|
|
480
496
|
// 1. Hash-based deduplication - same CSS = same className
|
|
481
497
|
// 2. Reference counting - styles stay alive while in use (refCount > 0)
|
|
482
498
|
// 3. Immediate keyframes cleanup - disposed instantly when refCount = 0
|
|
483
|
-
// 4.
|
|
484
|
-
// 5.
|
|
499
|
+
// 4. Touch-count GC - unused CSS rules are evicted oldest-first when over capacity
|
|
500
|
+
// 5. DOM safety guard - styles visible in the DOM are never evicted
|
|
485
501
|
|
|
486
502
|
// Manual cleanup is rarely needed but available:
|
|
487
503
|
cleanup(); // Force immediate cleanup of all unused CSS rules (refCount = 0)
|
|
@@ -511,7 +527,7 @@ const StyledButton = tasty({
|
|
|
511
527
|
// 4. dispose() is called when component unmounts
|
|
512
528
|
```
|
|
513
529
|
|
|
514
|
-
For most development, you'll use the [
|
|
530
|
+
For most development, you'll use the [React API](./react-api.md) rather than the injector directly. The injector provides the high-performance foundation that makes Tasty's declarative styling possible.
|
|
515
531
|
|
|
516
532
|
---
|
|
517
533
|
|
|
@@ -525,4 +541,4 @@ Direct injector usage is recommended for:
|
|
|
525
541
|
- **Performance-critical scenarios** where you need direct control
|
|
526
542
|
- **Testing utilities** that need to inject or extract CSS
|
|
527
543
|
|
|
528
|
-
For regular component styling, prefer the [`tasty()` API](./
|
|
544
|
+
For regular component styling, prefer the [`tasty()` API](./react-api.md) which provides a more developer-friendly interface.
|
|
@@ -214,7 +214,7 @@ The array form is simpler but types all values as `ModValue`:
|
|
|
214
214
|
modProps: ['isLoading', 'isSelected'] as const,
|
|
215
215
|
```
|
|
216
216
|
|
|
217
|
-
For the full API reference, see [Runtime — Mod Props](
|
|
217
|
+
For the full API reference, see [Runtime — Mod Props](react-api.md#mod-props).
|
|
218
218
|
|
|
219
219
|
---
|
|
220
220
|
|
|
@@ -256,6 +256,54 @@ The `tokens` prop sets `style="--progress: 75%"` on the DOM element. The `$progr
|
|
|
256
256
|
|
|
257
257
|
Design tokens (via `configure({ tokens })`) are injected as CSS custom properties on `:root`. Replace tokens (via `configure({ replaceTokens })`) are resolved at parse time and baked into the generated CSS. The `tokens` prop on components is resolved at render time via inline CSS custom properties. Use design tokens for design-system constants, replace tokens for value aliases, and the `tokens` prop for truly dynamic per-instance values.
|
|
258
258
|
|
|
259
|
+
### tokenProps
|
|
260
|
+
|
|
261
|
+
`tokenProps` expose token keys as top-level component props — the token equivalent of `styleProps` and `modProps`. Use them when a component has a fixed set of known dynamic token values.
|
|
262
|
+
|
|
263
|
+
#### Array form
|
|
264
|
+
|
|
265
|
+
Prop names are plain camelCase identifiers. Names ending in `Color` map to `#` color tokens; everything else maps to `$` custom property tokens:
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
const ProgressBar = tasty({
|
|
269
|
+
tokenProps: ['progress', 'accentColor'] as const,
|
|
270
|
+
styles: { width: '$progress', fill: '#accent' },
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
// Clean prop API — no tokens object needed
|
|
274
|
+
<ProgressBar progress="75%" accentColor="#purple" />
|
|
275
|
+
|
|
276
|
+
// Conversion:
|
|
277
|
+
// 'progress' → $progress → --progress
|
|
278
|
+
// 'accentColor' → #accent → --accent-color + --accent-color-oklch
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
#### Object form
|
|
282
|
+
|
|
283
|
+
Keys are prop names; values are `$`/`#`-prefixed token keys. No suffix convention needed — the prefix in the value is explicit:
|
|
284
|
+
|
|
285
|
+
```tsx
|
|
286
|
+
const Card = tasty({
|
|
287
|
+
tokenProps: {
|
|
288
|
+
size: '$card-size',
|
|
289
|
+
color: '#card-accent',
|
|
290
|
+
},
|
|
291
|
+
styles: { padding: '$card-size', fill: '#card-accent' },
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
<Card size="4x" color="#purple" />
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
#### Merge order
|
|
298
|
+
|
|
299
|
+
When all three token sources are present, values merge with increasing priority:
|
|
300
|
+
|
|
301
|
+
1. `tokens` option in `tasty({...})` — default tokens (lowest)
|
|
302
|
+
2. `tokens` prop on the component instance — runtime overrides
|
|
303
|
+
3. `tokenProps`-derived values — highest priority (explicit named props win)
|
|
304
|
+
|
|
305
|
+
The `tokens` prop remains available for ad-hoc or dynamic tokens alongside `tokenProps`.
|
|
306
|
+
|
|
259
307
|
---
|
|
260
308
|
|
|
261
309
|
## styles prop vs style prop
|
|
@@ -458,7 +506,8 @@ See [Configuration](configuration.md) for the full `configure()` API.
|
|
|
458
506
|
- **Use `elements` prop** to declare typed sub-components for compound components
|
|
459
507
|
- **Use `styleProps`** to define what product engineers can customize
|
|
460
508
|
- **Use `modProps`** to expose known modifier states as clean component props
|
|
461
|
-
- **Use `
|
|
509
|
+
- **Use `tokenProps`** to expose known token keys as clean component props
|
|
510
|
+
- **Use `tokens` prop** for ad-hoc or dynamic per-instance token values (progress, user color)
|
|
462
511
|
- **Use modifiers** (`mods` or `modProps`) for state-driven style changes instead of runtime `styles` prop changes
|
|
463
512
|
|
|
464
513
|
### Avoid
|
|
@@ -561,7 +610,7 @@ The `elements` prop gives you typed sub-components with automatic `data-element`
|
|
|
561
610
|
- **[Getting Started](getting-started.md)** — Installation, first component, tooling setup
|
|
562
611
|
- **[Building a Design System](design-system.md)** — Practical guide to building a DS layer with Tasty
|
|
563
612
|
- **[Style DSL](dsl.md)** — State maps, tokens, units, extending semantics, keyframes, @property
|
|
564
|
-
- **[
|
|
613
|
+
- **[React API](react-api.md)** — `tasty()` factory, component props, variants, sub-elements, style functions
|
|
565
614
|
- **[Configuration](configuration.md)** — Full `configure()` API: tokens, recipes, custom units, style handlers
|
|
566
615
|
- **[Style Properties](styles.md)** — Complete reference for all enhanced style properties
|
|
567
616
|
- **[Adoption Guide](adoption.md)** — Who should adopt Tasty, incremental phases, what changes for product engineers
|
|
@@ -55,7 +55,7 @@ Output: CSSRule[]
|
|
|
55
55
|
|
|
56
56
|
**Simplification** (`simplifyCondition` in `simplify.ts`) is not a separate numbered stage. It runs inside exclusive building, `expandExclusiveOrs` branch cleanup, combination ANDs, merge-by-value ORs, and materialization as needed.
|
|
57
57
|
|
|
58
|
-
**Post-pass:** After `processStyles` collects rules from every handler, `runPipeline` filters duplicates using a key of `selector|declarations|atRules|rootPrefix` so identical emitted rules appear once.
|
|
58
|
+
**Post-pass:** After `processStyles` collects rules from every handler, `runPipeline` filters duplicates using a key of `selector|declarations|atRules|rootPrefix|startingStyle` so identical emitted rules appear once.
|
|
59
59
|
|
|
60
60
|
---
|
|
61
61
|
|