@cube-dev/ui-kit 0.171.0 → 0.173.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/README.md +1 -1
- package/dist/CHANGELOG.md +35 -0
- package/dist/README.md +1 -1
- 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 +2 -2
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.d.ts +1 -0
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/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/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +2 -2
- package/dist/components/data/TableBase/column-tint.js.map +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.d.ts +2 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.d.ts +3 -3
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/types.js.map +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- 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/ColorInput/ColorInput.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +2 -2
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.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/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +2 -2
- package/dist/components/fields/color/color.js.map +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.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/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.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/Board/Board.js +1 -1
- package/dist/components/layout/Board/Board.js.map +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/placement.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.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/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/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/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.d.ts +2 -2
- package/dist/components/other/CubeLogo/CubeLogo.js +12 -12
- package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.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.d.ts +2 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
- 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/Modal/types.d.ts +1 -0
- 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.d.ts +2 -0
- 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/Tooltip.js.map +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.d.ts +2 -0
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +1 -0
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/data/themes.js.map +1 -1
- package/dist/eslint-plugin/defaults.generated.js +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +1 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.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/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.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/GripVerticalIcon.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/PipetteIcon.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 +3 -3
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/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/all-tokens.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.d.ts +2 -2
- package/dist/tokens/color-theme.js +2 -2
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.d.ts +3 -3
- package/dist/tokens/colors.js +4 -4
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.d.ts +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.d.ts +5 -5
- package/dist/tokens/palette.js +11 -11
- package/dist/tokens/palette.js.map +1 -1
- package/dist/tokens/resolve.d.ts +2 -2
- package/dist/tokens/resolve.js +9 -9
- package/dist/tokens/resolve.js.map +1 -1
- package/dist/tokens/shadows.d.ts +1 -1
- package/dist/tokens/shadows.js +2 -2
- package/dist/tokens/shadows.js.map +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/index.d.ts +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/disabledProps.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.d.ts +1 -1
- package/dist/utils/react/index.js +2 -2
- 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/useBufferedValue.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/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/{useSchema.d.ts → useScheme.d.ts} +16 -16
- package/dist/utils/react/{useSchema.js → useScheme.js} +30 -30
- package/dist/utils/react/{useSchema.js.map → useScheme.js.map} +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.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +3 -3
- package/docs/Colors.md +2 -2
- package/docs/Introduction.md +1 -1
- package/docs/Theming.md +19 -19
- package/docs/Usage.md +19 -19
- package/docs/components/content/ItemCard.md +1 -1
- package/docs/components/content/PrismCode.md +2 -2
- package/docs/components/data/DataTable.md +1 -1
- package/docs/components/fields/Picker.md +1 -1
- package/docs/components/organisms/StatsCard.md +1 -1
- package/docs/components/other/CubeLogo.md +9 -9
- package/docs/components/overlays/Tooltip.md +3 -3
- package/docs/components/overlays/TooltipProvider.md +1 -1
- package/docs/tasty/README.md +13 -8
- package/docs/tasty/adoption.md +56 -31
- package/docs/tasty/ai-agents.md +78 -77
- package/docs/tasty/comparison.md +69 -40
- package/docs/tasty/configuration.md +97 -87
- package/docs/tasty/debug.md +4 -2
- package/docs/tasty/design-system.md +41 -22
- package/docs/tasty/dsl.md +225 -195
- package/docs/tasty/getting-started.md +60 -39
- package/docs/tasty/injector.md +63 -26
- package/docs/tasty/methodology.md +42 -36
- package/docs/tasty/migration-v3.md +49 -49
- package/docs/tasty/plugins.md +37 -33
- package/docs/tasty/react-api.md +65 -44
- package/docs/tasty/runtime-benchmarks.md +178 -0
- package/docs/tasty/ssr.md +99 -61
- package/docs/tasty/styles.md +1 -1
- package/docs/tasty/tasty-static.md +137 -104
- package/package.json +2 -2
|
@@ -37,35 +37,35 @@ Every path is drawn with `currentColor`. Inheriting is the default and usually c
|
|
|
37
37
|
<CubeFullLogo color="#dark" />
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
There are **no baked-in brand hexes**, which is what lets the marks work on any surface and in any
|
|
40
|
+
There are **no baked-in brand hexes**, which is what lets the marks work on any surface and in any scheme.
|
|
41
41
|
|
|
42
|
-
## Light and dark
|
|
42
|
+
## Light and dark schemes
|
|
43
43
|
|
|
44
44
|
The mark is two different drawings rather than one drawing recoloured — the dark variant is filled differently so it holds its weight against a dark surface. Both are rendered, and the `@dark` state swaps them in CSS.
|
|
45
45
|
|
|
46
46
|
That means the swap costs no re-render, is correct during SSR and before hydration, and needs no prop in the normal case. It also means a snapshot of the DOM always contains both paths; assert on `[data-element="LightMark"]` / `[data-element="DarkMark"]` rather than on a single `path`.
|
|
47
47
|
|
|
48
|
-
### Pinning a
|
|
48
|
+
### Pinning a scheme
|
|
49
49
|
|
|
50
|
-
`@dark` is a _state_, and it is resolved against the **document**. Where the background is known but the document
|
|
50
|
+
`@dark` is a _state_, and it is resolved against the **document**. Where the background is known but the document scheme does not describe it, pass `scheme` to pin one mark:
|
|
51
51
|
|
|
52
52
|
```jsx
|
|
53
53
|
{/* A fixed-dark panel inside a light app */}
|
|
54
54
|
<Block fill="#surface-inverse">
|
|
55
|
-
<CubeFullLogo
|
|
55
|
+
<CubeFullLogo scheme="dark" color="#white" />
|
|
56
56
|
</Block>
|
|
57
57
|
|
|
58
58
|
{/* A themed region — `tokens` overrides token *values*, so it cannot reach a state */}
|
|
59
|
-
<Block tokens={renderColorTokens({
|
|
60
|
-
<CubeFullLogo
|
|
59
|
+
<Block tokens={renderColorTokens({ scheme: 'dark' })} fill="#surface">
|
|
60
|
+
<CubeFullLogo scheme="dark" />
|
|
61
61
|
</Block>
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
-
Use it only when you know the surface. Omitting it is the right default: a pinned
|
|
64
|
+
Use it only when you know the surface. Omitting it is the right default: a pinned scheme stops following the user's own light/dark preference.
|
|
65
65
|
|
|
66
66
|
## Properties
|
|
67
67
|
|
|
68
|
-
- **`
|
|
68
|
+
- **`scheme`** `'light' | 'dark'` — Pin one mark instead of letting the `@dark` state pick. Omit it unless you know the surface; see [Pinning a scheme](#pinning-a-scheme)
|
|
69
69
|
- **`size`** — Maps onto `font-size`. Both axes on `CubeLogo`, height only on `CubeFullLogo`
|
|
70
70
|
- **`color`** — Any color token. Both marks are drawn with `currentColor`, so this is inherited by default
|
|
71
71
|
|
|
@@ -42,7 +42,7 @@ Display container for tooltip content. Has a directional arrow dependent on its
|
|
|
42
42
|
- **`showIcon`** `boolean` — Controls whether an icon should be displayed in the tooltip
|
|
43
43
|
- **`placement`** `PlacementAxis` (default: `'top'`) — Position of the tooltip relative to its trigger. Options: `top`, `bottom`, `left`, `right`
|
|
44
44
|
- **`isMaterial`** `boolean` — Enables material-style tooltip with auto pointer events
|
|
45
|
-
- **`isLight`** `boolean` — Uses light color
|
|
45
|
+
- **`isLight`** `boolean` — Uses light color scheme for the tooltip
|
|
46
46
|
- **`isOpen`** `boolean` — Controlled open state of the tooltip
|
|
47
47
|
- **`defaultOpen`** `boolean` — Whether the tooltip is open by default (uncontrolled)
|
|
48
48
|
- **`onOpenChange`** `(isOpen: boolean) => void` — Callback when the tooltip open state changes
|
|
@@ -78,7 +78,7 @@ These properties allow direct style application without using the `styles` prop:
|
|
|
78
78
|
The `mods` property on the tooltip accepts the following modifiers you can override:
|
|
79
79
|
|
|
80
80
|
- **`material`** `boolean` — Enables material-style tooltip with pointer events
|
|
81
|
-
- **`light`** `boolean` — Uses light color
|
|
81
|
+
- **`light`** `boolean` — Uses light color scheme instead of dark
|
|
82
82
|
- **`open`** `boolean` — Indicates whether the tooltip is currently visible
|
|
83
83
|
|
|
84
84
|
## Usage Patterns
|
|
@@ -144,7 +144,7 @@ Control where the tooltip appears relative to its trigger:
|
|
|
144
144
|
The tooltip is capped at `36x` wide (or the viewport minus `4x`, whichever is smaller) and wraps its content to stay inside that cap. Runs with no spaces — URLs, tokens, identifiers, error strings — are broken mid-word rather than allowed to overflow the bubble.
|
|
145
145
|
|
|
146
146
|
```jsx
|
|
147
|
-
<TooltipProvider title="https://cubecloud.example.com/deployments/12345/
|
|
147
|
+
<TooltipProvider title="https://cubecloud.example.com/deployments/12345/scheme/files/model/cubes/very_long_cube_name.yml">
|
|
148
148
|
<Button>Hover me</Button>
|
|
149
149
|
</TooltipProvider>
|
|
150
150
|
```
|
|
@@ -19,7 +19,7 @@ A convenience wrapper that combines `TooltipTrigger` and `Tooltip` into a single
|
|
|
19
19
|
- **`delay`** `number` (default: `250`) — The delay time in ms for the tooltip to show up
|
|
20
20
|
- **`closeDelay`** `number` (default: `500`) — The delay time in ms for the tooltip to close
|
|
21
21
|
- **`isMaterial`** `boolean` — Enables material-style tooltip with auto pointer events
|
|
22
|
-
- **`isLight`** `boolean` — Uses light color
|
|
22
|
+
- **`isLight`** `boolean` — Uses light color scheme for the tooltip
|
|
23
23
|
- **`isOpen`** `boolean` — Controlled open state of the tooltip
|
|
24
24
|
- **`defaultOpen`** `boolean` — Whether the tooltip is open by default (uncontrolled)
|
|
25
25
|
- **`onOpenChange`** `(isOpen: boolean) => void` — Callback when the tooltip open state changes
|
package/docs/tasty/README.md
CHANGED
|
@@ -1,25 +1,29 @@
|
|
|
1
1
|
# Tasty Docs
|
|
2
2
|
|
|
3
|
-
Tasty is
|
|
3
|
+
Tasty is CSS-in-JS for React design systems. You describe hover, disabled, variants, themes, responsive behavior, and other conditions as state maps; Tasty compiles them so one branch wins without specificity fights or source-order surprises.
|
|
4
|
+
|
|
5
|
+
Use this hub to move from the core idea to a working component, then into design-system patterns or API reference as needed.
|
|
4
6
|
|
|
5
7
|
## Start Here
|
|
6
8
|
|
|
7
|
-
- **
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
10
|
-
- **
|
|
9
|
+
- **Understand why**: [Introduction](../README.md) for the problem, the state-map model, and the product overview.
|
|
10
|
+
- **Try it**: [Getting Started](getting-started.md) to build a stateful component, add shared configuration, and choose a rendering mode.
|
|
11
|
+
- **Build a component system**: [Methodology](methodology.md) for root + sub-elements, typed public APIs, tokens, and extension patterns; then [Building a Design System](design-system.md).
|
|
12
|
+
- **Evaluate or adopt it**: [Comparison](comparison.md) for tool-selection context and [Adoption Guide](adoption.md) for an incremental rollout.
|
|
13
|
+
- **Understand the compiler**: [Style rendering pipeline](pipeline.md) for how state maps become mutually exclusive selectors.
|
|
11
14
|
|
|
12
15
|
## By Role
|
|
13
16
|
|
|
14
17
|
- **Application developer using an existing design system**: [Getting Started](getting-started.md), then [React API](react-api.md).
|
|
15
18
|
- **Design-system author**: [Methodology](methodology.md), [Building a Design System](design-system.md), [Configuration](configuration.md), and [Adoption Guide](adoption.md).
|
|
16
|
-
- **Platform or tooling engineer**: [Configuration](configuration.md), [
|
|
19
|
+
- **Platform or tooling engineer**: [Configuration](configuration.md), [Build-Time Extraction (`tastyStatic`)](tasty-static.md), [Server-Side Rendering](ssr.md), and [Debug Utilities](debug.md).
|
|
17
20
|
|
|
18
21
|
## By Styling Approach
|
|
19
22
|
|
|
20
23
|
- **React components**: [React API](react-api.md)
|
|
21
|
-
- **Zero-runtime
|
|
22
|
-
- **
|
|
24
|
+
- **Zero-client-runtime React with `tasty()`**: [Server-Side Rendering](ssr.md), especially the static Astro integration
|
|
25
|
+
- **Build-time extraction with `tastyStatic()`**: [Build-Time Extraction](tasty-static.md)
|
|
26
|
+
- **Hydrated `tasty()` with server collection**: [Server-Side Rendering](ssr.md)
|
|
23
27
|
- **Upgrading from v2**: [Migration Guide (v2 → v3)](migration-v3.md)
|
|
24
28
|
|
|
25
29
|
## By Task
|
|
@@ -32,3 +36,4 @@ Tasty is a styling engine for design systems that turns component state into det
|
|
|
32
36
|
- **Debug generated CSS or cache behavior**: [Debug Utilities](debug.md)
|
|
33
37
|
- **Understand how selector generation works internally**: [Style rendering pipeline](pipeline.md)
|
|
34
38
|
- **Understand runtime injection internals**: [Style Injector](injector.md)
|
|
39
|
+
- **Reproduce and interpret performance measurements**: [Runtime Benchmarks](runtime-benchmarks.md)
|
package/docs/tasty/adoption.md
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Adoption Guide
|
|
2
2
|
|
|
3
|
-
Tasty is
|
|
3
|
+
Tasty is most useful where reusable component styling has become a state-resolution problem: hover intersects with disabled, variants intersect with themes, and every extension makes selector behavior harder to predict.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
It normally sits underneath a design system’s existing components. You can preserve their public React APIs while moving their style logic into state maps that produce one declared winner. Adoption should start with a small, state-heavy component—not an all-at-once rewrite.
|
|
6
|
+
|
|
7
|
+
This guide is for design-system maintainers and platform engineers evaluating Tasty or introducing it into an existing codebase. Use it for rollout strategy and adoption sequencing; use the [Comparison guide](comparison.md) when the open question is whether Tasty is the right tool.
|
|
6
8
|
|
|
7
9
|
---
|
|
8
10
|
|
|
@@ -18,12 +20,14 @@ Product code
|
|
|
18
20
|
```
|
|
19
21
|
|
|
20
22
|
**What Tasty owns:**
|
|
23
|
+
|
|
21
24
|
- The DSL and value parser (tokens, custom units, auto-calc, color opacity)
|
|
22
25
|
- State compilation (mutually exclusive selectors from state maps)
|
|
23
26
|
- Style injection and deduplication (runtime or build-time)
|
|
24
27
|
- The `tasty()` component factory and hooks API
|
|
25
28
|
|
|
26
29
|
**What the DS team owns:**
|
|
30
|
+
|
|
27
31
|
- Token names and values (colors, spacing, typography)
|
|
28
32
|
- Custom units and their semantics
|
|
29
33
|
- State aliases (`@mobile`, `@dark`, `@compact`)
|
|
@@ -39,12 +43,14 @@ Two teams using Tasty can end up with very different authoring models. That is b
|
|
|
39
43
|
## Who should adopt Tasty
|
|
40
44
|
|
|
41
45
|
**Strong fit:**
|
|
42
|
-
|
|
46
|
+
|
|
47
|
+
- A design-system or platform team that owns shared component APIs
|
|
43
48
|
- Components with complex, intersecting states (hover + disabled + theme + breakpoint)
|
|
44
49
|
- Teams that need deterministic style resolution without cascade/specificity bugs
|
|
45
|
-
- Organizations
|
|
50
|
+
- Organizations that want tokens, states, and extension rules to stay consistent across products
|
|
46
51
|
|
|
47
52
|
**Not the right fit:**
|
|
53
|
+
|
|
48
54
|
- Solo developers building a one-off app with minimal UI structure
|
|
49
55
|
- Teams that want a shared utility vocabulary and direct markup authoring (Tailwind is better here)
|
|
50
56
|
- Projects where low ceremony matters more than central governance
|
|
@@ -58,16 +64,16 @@ For a detailed comparison with Tailwind, Panda CSS, vanilla-extract, StyleX, Sti
|
|
|
58
64
|
|
|
59
65
|
Tasty provides the engine. The DS team defines the language that runs on it. Here is what that typically involves:
|
|
60
66
|
|
|
61
|
-
| Layer
|
|
62
|
-
|
|
63
|
-
| **Tokens**
|
|
64
|
-
| **Units**
|
|
65
|
-
| **State aliases**
|
|
66
|
-
| **Recipes**
|
|
67
|
-
| **Typography**
|
|
68
|
-
| **Style props**
|
|
69
|
-
| **Sub-elements**
|
|
70
|
-
| **Override rules** | How product engineers extend or constrain components
|
|
67
|
+
| Layer | What you define | Where |
|
|
68
|
+
| ------------------ | ---------------------------------------------------------- | ------------------------------------------ |
|
|
69
|
+
| **Tokens** | Color names, spacing scale, border widths, radii | `configure({ tokens })` |
|
|
70
|
+
| **Units** | Custom multiplier units (`x`, `r`, `bw`, or your own) | `configure({ units })` |
|
|
71
|
+
| **State aliases** | Responsive breakpoints, theme modes, feature flags | `configure({ states })` |
|
|
72
|
+
| **Recipes** | Reusable style bundles (card, elevated, input-reset) | `configure({ recipes })` |
|
|
73
|
+
| **Typography** | Preset definitions (h1-h6, t1-t4, etc.) | `configure({ presets: { ... } })` |
|
|
74
|
+
| **Style props** | Which CSS properties each component exposes as React props | `styleProps` in each component |
|
|
75
|
+
| **Sub-elements** | Inner parts of compound components (Title, Icon, Content) | `elements` + capitalized keys in `styles` |
|
|
76
|
+
| **Override rules** | How product engineers extend or constrain components | Styled wrappers via `tasty(Base, { ... })` |
|
|
71
77
|
|
|
72
78
|
The same engine can power a minimal design system with a handful of tokens:
|
|
73
79
|
|
|
@@ -85,9 +91,15 @@ Here is how the layers connect end-to-end. The DS team configures the engine, de
|
|
|
85
91
|
```tsx
|
|
86
92
|
// ds/config.ts — DS team defines the language
|
|
87
93
|
configure({
|
|
88
|
-
tokens: {
|
|
94
|
+
tokens: {
|
|
95
|
+
'#primary': 'oklch(55% 0.25 265)',
|
|
96
|
+
'#surface': '#fff',
|
|
97
|
+
'#text': '#111',
|
|
98
|
+
},
|
|
89
99
|
states: { '@mobile': '@media(w < 768px)', '@dark': '@root(schema=dark)' },
|
|
90
|
-
recipes: {
|
|
100
|
+
recipes: {
|
|
101
|
+
card: { padding: '4x', fill: '#surface', radius: '1r', border: true },
|
|
102
|
+
},
|
|
91
103
|
});
|
|
92
104
|
|
|
93
105
|
// ds/components/Card.tsx — DS team builds components on top
|
|
@@ -105,7 +117,7 @@ const Card = tasty({
|
|
|
105
117
|
<Card padding={{ '': '4x', '@mobile': '2x' }}>
|
|
106
118
|
<Card.Title>Monthly Revenue</Card.Title>
|
|
107
119
|
<Card.Body>$1.2M — up 12% from last month</Card.Body>
|
|
108
|
-
</Card
|
|
120
|
+
</Card>;
|
|
109
121
|
```
|
|
110
122
|
|
|
111
123
|
See [Configuration](configuration.md) for the full `configure()` API.
|
|
@@ -116,9 +128,21 @@ See [Configuration](configuration.md) for the full `configure()` API.
|
|
|
116
128
|
|
|
117
129
|
You do not need to adopt everything at once. Tasty is designed to be introduced layer by layer.
|
|
118
130
|
|
|
119
|
-
A practical
|
|
131
|
+
A practical first slice is one component that already suffers from intersecting state and variant logic: a button, input, menu item, disclosure, or interactive card. Keep its public API unchanged, move one or two properties into Tasty state maps, and verify that the declared priority matches the behavior your team expects.
|
|
132
|
+
|
|
133
|
+
This proves the differentiator before you invest in a complete token vocabulary or migrate an entire component library.
|
|
134
|
+
|
|
135
|
+
### Phase 1 -- Pilot one state-heavy component
|
|
136
|
+
|
|
137
|
+
Choose a component with a known hover/disabled, focus/error, or variant/theme interaction. Preserve its external props and visual behavior. The pilot should answer three questions:
|
|
138
|
+
|
|
139
|
+
1. Is the state map easier to review than the existing selectors or conditional class logic?
|
|
140
|
+
2. Does extending the component keep the intended state priority?
|
|
141
|
+
3. Can your current tokens and component API move over without product-code churn?
|
|
142
|
+
|
|
143
|
+
If the answer is yes, establish the shared design-system vocabulary around the successful slice.
|
|
120
144
|
|
|
121
|
-
### Phase
|
|
145
|
+
### Phase 2 -- Tokens and units
|
|
122
146
|
|
|
123
147
|
Start by defining your design tokens and custom units. This is the lowest-risk step: it only configures the parser and does not require rewriting any components.
|
|
124
148
|
|
|
@@ -136,14 +160,14 @@ configure({
|
|
|
136
160
|
// A DS typically redefines them to use CSS custom properties
|
|
137
161
|
// so that the actual scale is controlled via CSS, not JS:
|
|
138
162
|
units: {
|
|
139
|
-
x: 'var(--gap)',
|
|
163
|
+
x: 'var(--gap)', // 2x → calc(var(--gap) * 2)
|
|
140
164
|
r: 'var(--radius)',
|
|
141
165
|
bw: 'var(--border-width)',
|
|
142
166
|
},
|
|
143
167
|
});
|
|
144
168
|
```
|
|
145
169
|
|
|
146
|
-
### Phase
|
|
170
|
+
### Phase 3 -- State aliases and recipes
|
|
147
171
|
|
|
148
172
|
Define the state vocabulary your components will share. This is where you start encoding your team's conventions.
|
|
149
173
|
|
|
@@ -152,7 +176,8 @@ configure({
|
|
|
152
176
|
states: {
|
|
153
177
|
'@mobile': '@media(w < 768px)',
|
|
154
178
|
'@tablet': '@media(w < 1024px)',
|
|
155
|
-
'@dark':
|
|
179
|
+
'@dark':
|
|
180
|
+
'@root(schema=dark) | (!@root(schema) & @media(prefers-color-scheme: dark))',
|
|
156
181
|
},
|
|
157
182
|
recipes: {
|
|
158
183
|
card: { padding: '4x', fill: '#surface', radius: '1r', border: true },
|
|
@@ -161,7 +186,7 @@ configure({
|
|
|
161
186
|
});
|
|
162
187
|
```
|
|
163
188
|
|
|
164
|
-
### Phase
|
|
189
|
+
### Phase 4 -- Migrate a few primitives
|
|
165
190
|
|
|
166
191
|
Pick 2-3 widely used primitives (Box, Text, Button) and rewrite them with `tasty()`. Keep the public API identical so product code does not need to change.
|
|
167
192
|
|
|
@@ -179,7 +204,7 @@ const Box = tasty({
|
|
|
179
204
|
|
|
180
205
|
At this point you can validate the DSL, token workflow, and component authoring experience before expanding the rollout.
|
|
181
206
|
|
|
182
|
-
### Phase
|
|
207
|
+
### Phase 5 -- Expand state resolution
|
|
183
208
|
|
|
184
209
|
Move the components with the most painful intersecting states (buttons with hover + disabled + theme variants, inputs with focus + error + readonly) to Tasty's state map syntax. This is where mutually exclusive selectors start paying off.
|
|
185
210
|
|
|
@@ -209,7 +234,7 @@ const Button = tasty({
|
|
|
209
234
|
});
|
|
210
235
|
```
|
|
211
236
|
|
|
212
|
-
### Phase
|
|
237
|
+
### Phase 6 -- Standardize style props and sub-elements
|
|
213
238
|
|
|
214
239
|
Define which style props each component category exposes. Layout components get flow/gap/padding. Interactive components get positioning. Compound components declare sub-elements.
|
|
215
240
|
|
|
@@ -225,9 +250,9 @@ const Card = tasty({
|
|
|
225
250
|
});
|
|
226
251
|
```
|
|
227
252
|
|
|
228
|
-
### Phase
|
|
253
|
+
### Phase 7 -- Expand to full DS coverage
|
|
229
254
|
|
|
230
|
-
Migrate the remaining components, add the [ESLint plugin](https://github.com/tenphi/eslint-plugin-tasty) to enforce style conventions at lint time, and
|
|
255
|
+
Migrate the remaining components, add the [ESLint plugin](https://github.com/tenphi/eslint-plugin-tasty) to enforce style conventions at lint time, and choose between [server-only `tasty()`](ssr.md) and [`tastyStatic()` build-time extraction](tasty-static.md) when a page should ship no Tasty styling runtime.
|
|
231
256
|
|
|
232
257
|
---
|
|
233
258
|
|
|
@@ -254,8 +279,8 @@ const DangerButton = tasty(Button, {
|
|
|
254
279
|
const LoadingButton = tasty(Button, {
|
|
255
280
|
styles: {
|
|
256
281
|
fill: {
|
|
257
|
-
loading: '#yellow',
|
|
258
|
-
disabled: '#gray.20',
|
|
282
|
+
loading: '#yellow', // new state appended
|
|
283
|
+
disabled: '#gray.20', // existing state overridden in place
|
|
259
284
|
},
|
|
260
285
|
},
|
|
261
286
|
});
|
|
@@ -270,7 +295,7 @@ const LoadingButton = tasty(Button, {
|
|
|
270
295
|
</Space>
|
|
271
296
|
```
|
|
272
297
|
|
|
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
|
|
298
|
+
**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 they ship no Tasty styling runtime. Astro without `client:*` directives ships no client JavaScript; server-only Next.js RSC follows the same Tasty architecture, while final output depends on the application deployment. Product engineers only add `'use client'` when their component needs actual React interactivity (state, effects, event handlers), never because of styling.
|
|
274
299
|
|
|
275
300
|
**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.
|
|
276
301
|
|
|
@@ -295,4 +320,4 @@ const LoadingButton = tasty(Button, {
|
|
|
295
320
|
- [Configuration](configuration.md) -- tokens, recipes, custom units, style handlers, and TypeScript extensions
|
|
296
321
|
- [Style Properties](styles.md) -- complete reference for all enhanced style properties
|
|
297
322
|
- [Comparison](comparison.md) -- positioning and trade-offs vs. other styling systems
|
|
298
|
-
- [
|
|
323
|
+
- [Build-Time Extraction (`tastyStatic`)](tasty-static.md) -- static styling with the Babel plugin
|
package/docs/tasty/ai-agents.md
CHANGED
|
@@ -16,7 +16,7 @@ Color tokens (`#name`), custom properties (`$name`), `preset` names, `recipe` na
|
|
|
16
16
|
const Card = tasty({ as: 'div', styles: { … }, styleProps: ['padding'] }); // new component
|
|
17
17
|
const Hero = tasty(Card, { styles: { … } }); // extend a component
|
|
18
18
|
const cls = useStyles({ … }); // ad-hoc class name
|
|
19
|
-
tastyStatic('.card', { … }); // build-time
|
|
19
|
+
tastyStatic('.card', { … }); // build-time extraction
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
- Wrap, don't pass styles per instance: ❌ `<Box styles={{ padding: '2x' }} />` → ✅ `const Box = tasty({ styles: { padding: '2x' } })`.
|
|
@@ -29,26 +29,26 @@ Keys are camelCase — a Tasty property or a real CSS property. No kebab-case, n
|
|
|
29
29
|
|
|
30
30
|
Prefer the Tasty shorthand over its CSS equivalents:
|
|
31
31
|
|
|
32
|
-
| Use
|
|
33
|
-
|
|
34
|
-
| `fill`
|
|
35
|
-
| `image`
|
|
36
|
-
| `border`
|
|
37
|
-
| `radius`
|
|
38
|
-
| `outline`
|
|
39
|
-
| `shadow`
|
|
40
|
-
| `padding`
|
|
41
|
-
| `margin`
|
|
42
|
-
| `inset`
|
|
43
|
-
| `width` / `height`
|
|
44
|
-
| `flow`
|
|
45
|
-
| `preset`
|
|
46
|
-
| `font`
|
|
47
|
-
| `scrollbar`
|
|
48
|
-
| `gridColumns` / `gridRows` / `gridAreas` | `gridTemplateColumns` / `Rows` / `Areas`
|
|
49
|
-
| `textOverflow: 'ellipsis / 3'`
|
|
50
|
-
| `hide: true`
|
|
51
|
-
| `flexGrow` / `flexShrink` / `flexBasis`
|
|
32
|
+
| Use | Instead of |
|
|
33
|
+
| ---------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
34
|
+
| `fill` | `backgroundColor`, `background` |
|
|
35
|
+
| `image` | `backgroundImage` |
|
|
36
|
+
| `border` | `borderColor`, `borderWidth`, `borderStyle`, `borderTop`/`Right`/`Bottom`/`Left` |
|
|
37
|
+
| `radius` | `borderRadius` |
|
|
38
|
+
| `outline` | `outlineColor`, `outlineWidth`, `outlineStyle`, `outlineOffset` |
|
|
39
|
+
| `shadow` | `boxShadow` |
|
|
40
|
+
| `padding` | `paddingTop`/`Right`/`Bottom`/`Left` |
|
|
41
|
+
| `margin` | `marginTop`/`Right`/`Bottom`/`Left` |
|
|
42
|
+
| `inset` | `top`, `right`, `bottom`, `left` |
|
|
43
|
+
| `width` / `height` | `minWidth`/`maxWidth`, `minHeight`/`maxHeight` |
|
|
44
|
+
| `flow` | `flexDirection`, `flexWrap`, `flexFlow`, `gridAutoFlow` |
|
|
45
|
+
| `preset` | `fontSize`, `lineHeight`, `letterSpacing`, `fontWeight`, `fontStyle`, `textTransform` |
|
|
46
|
+
| `font` | `fontFamily` |
|
|
47
|
+
| `scrollbar` | `scrollbarWidth`, `scrollbarColor`, `scrollbarGutter` |
|
|
48
|
+
| `gridColumns` / `gridRows` / `gridAreas` | `gridTemplateColumns` / `Rows` / `Areas` |
|
|
49
|
+
| `textOverflow: 'ellipsis / 3'` | `lineClamp` |
|
|
50
|
+
| `hide: true` | `display: 'none'` |
|
|
51
|
+
| `flexGrow` / `flexShrink` / `flexBasis` | `flex` |
|
|
52
52
|
|
|
53
53
|
The last row goes the other way — longhands over the shorthand — because `flex` is lossy: it resets the components you omit to non-initial values (`flex: '0'` silently sets `flex-basis: 0%`) and cannot express `flexShrink: 0` at all. The longhands also carry separate state maps.
|
|
54
54
|
|
|
@@ -56,23 +56,23 @@ The last row goes the other way — longhands over the shorthand — because `fl
|
|
|
56
56
|
|
|
57
57
|
### Tokens
|
|
58
58
|
|
|
59
|
-
| Syntax
|
|
60
|
-
|
|
61
|
-
| `#name`
|
|
62
|
-
| `#name.50`
|
|
63
|
-
| `#name.$opacity`
|
|
64
|
-
| `#clear` / `#current` | `transparent` / `currentcolor`
|
|
65
|
-
| `$name`
|
|
66
|
-
| `(#a, #b)`
|
|
67
|
-
| `$$name` / `##name`
|
|
68
|
-
| `$$name(…)`
|
|
59
|
+
| Syntax | Meaning |
|
|
60
|
+
| --------------------- | ------------------------------------------------------------------------- |
|
|
61
|
+
| `#name` | color token → `var(--name-color)` |
|
|
62
|
+
| `#name.50` | token at 50% opacity (`0`–`100`) |
|
|
63
|
+
| `#name.$opacity` | opacity from a custom property |
|
|
64
|
+
| `#clear` / `#current` | `transparent` / `currentcolor` |
|
|
65
|
+
| `$name` | custom property → `var(--name)` |
|
|
66
|
+
| `(#a, #b)` | fallback chain |
|
|
67
|
+
| `$$name` / `##name` | the custom property _name_ (not its value) — inside `transition` |
|
|
68
|
+
| `$$name(…)` | call a CSS `@function` declared via `@function`, `useFunction`, or config |
|
|
69
69
|
|
|
70
70
|
- ❌ `#f5f5f5`, `rgb(0 0 0)`, `oklch(…)`, `okhsl(…)`, `red` → ✅ `#surface` (add the token to the config if it doesn't exist).
|
|
71
71
|
- ❌ `var(--gap)` → ✅ `$gap` · ❌ `$accent-color` → ✅ `#accent` · ❌ `transparent` → ✅ `#clear` · ❌ `currentColor` → ✅ `#current`.
|
|
72
72
|
- A `$name` must be declared as a `'$name': value` key in the same styles object, or in the config.
|
|
73
73
|
- Names are case-sensitive and start lowercase — `$myVar` → `--myVar`; a leading capital folds (`$Foo` → `--foo`). Prefer kebab-case.
|
|
74
74
|
- A `$name` reference is untyped: it fills the first free slot in a shorthand (`border: '1bw $my-style'` → the line style). Write colors as `#name`; `$name-color` is a fallback for pointing at a raw CSS custom property that holds a color.
|
|
75
|
-
- `preset` and `transition` take token
|
|
75
|
+
- `preset` and `transition` take token _names_, not values, so a `$name` cannot stand in for one (it warns in dev and is ignored).
|
|
76
76
|
|
|
77
77
|
### Units
|
|
78
78
|
|
|
@@ -96,25 +96,25 @@ Never use it. Tasty owns specificity through doubled selectors and state orderin
|
|
|
96
96
|
|
|
97
97
|
A value is `[values…] [modifiers…]`, and several groups can be comma-separated (later groups override earlier ones). A group that names **direction** modifiers takes a **single** value, applied to every direction it names — per-side values come from comma groups. A group naming no direction keeps plain CSS shorthand order (1–4 values). (`inset` + `dock` is the one exception: a second value insets the spanned sides.) Only the modifiers a property knows are valid:
|
|
98
98
|
|
|
99
|
-
| Property
|
|
100
|
-
|
|
101
|
-
| `padding`, `margin`, `inset`, `fade` | `top` `right` `bottom` `left`
|
|
102
|
-
| `border`
|
|
103
|
-
| `outline`
|
|
104
|
-
| `radius`
|
|
105
|
-
| `width`, `height`
|
|
106
|
-
| `flow`
|
|
107
|
-
| `overflow`
|
|
108
|
-
| `position`
|
|
109
|
-
| `shadow`
|
|
110
|
-
| `preset`
|
|
111
|
-
| box properties
|
|
99
|
+
| Property | Modifiers |
|
|
100
|
+
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
|
|
101
|
+
| `padding`, `margin`, `inset`, `fade` | `top` `right` `bottom` `left` |
|
|
102
|
+
| `border` | the four directions + `solid` `dashed` `dotted` `double` `groove` `ridge` `inset` `outset` `none` `hidden` |
|
|
103
|
+
| `outline` | the style keywords above |
|
|
104
|
+
| `radius` | `top` `right` `bottom` `left` + shapes `round` `ellipse` `leaf` `backleaf` |
|
|
105
|
+
| `width`, `height` | `min` `max` `fixed` |
|
|
106
|
+
| `flow` | `row` `column` `row-reverse` `column-reverse` `wrap` `nowrap` `dense` |
|
|
107
|
+
| `overflow` | `visible` `hidden` `scroll` `clip` `auto` `overlay` |
|
|
108
|
+
| `position` | `static` `relative` `absolute` `fixed` `sticky` |
|
|
109
|
+
| `shadow` | `inset` |
|
|
110
|
+
| `preset` | `name / strong` (or `bold`) `italic` `icon` `tight` |
|
|
111
|
+
| box properties | `longhand` — emit CSS longhands instead of the shorthand |
|
|
112
112
|
|
|
113
113
|
Directional modifiers beat placeholder zeros:
|
|
114
114
|
|
|
115
115
|
- ❌ `padding: '0 0 2x 0'` → ✅ `padding: '2x bottom'`
|
|
116
116
|
- ❌ `padding: '1x 1x 2x 1x'` → ✅ `padding: '1x, 2x bottom'`
|
|
117
|
-
- ❌ `border: '0 0 1bw 0'` — four tokens parse as
|
|
117
|
+
- ❌ `border: '0 0 1bw 0'` — four tokens parse as _one_ border value, so this renders no border at all → ✅ `border: '1bw bottom'`
|
|
118
118
|
- ❌ `padding: '2x 4x top right'` — a directional group takes one value, so `4x` is dropped → ✅ `padding: '2x top, 4x right'`
|
|
119
119
|
- ❌ `fade: '3x 1x top bottom'` → ✅ `fade: '3x top, 1x bottom'`
|
|
120
120
|
|
|
@@ -130,17 +130,17 @@ Use semantic names, not CSS property names: `fade` `fill` `color` `theme` `borde
|
|
|
130
130
|
|
|
131
131
|
A property value can be an object of `state: value`. Key order is priority — later keys win.
|
|
132
132
|
|
|
133
|
-
| Key
|
|
134
|
-
|
|
135
|
-
| `hovered`
|
|
136
|
-
| `theme=danger`
|
|
137
|
-
| `:hover`
|
|
138
|
-
| `.active`
|
|
139
|
-
| `[aria-expanded="true"]` | attribute selector
|
|
140
|
-
| `hovered & .active`
|
|
141
|
-
| `hovered \| focused`
|
|
142
|
-
| `!disabled`
|
|
143
|
-
| `hovered ^ focused`
|
|
133
|
+
| Key | Generated selector |
|
|
134
|
+
| ------------------------ | ----------------------------------------------- |
|
|
135
|
+
| `hovered` | `[data-hovered]` (boolean modifier from `mods`) |
|
|
136
|
+
| `theme=danger` | `[data-theme="danger"]` (value modifier) |
|
|
137
|
+
| `:hover` | pseudo-class |
|
|
138
|
+
| `.active` | class selector |
|
|
139
|
+
| `[aria-expanded="true"]` | attribute selector |
|
|
140
|
+
| `hovered & .active` | AND |
|
|
141
|
+
| `hovered \| focused` | OR (`,` also means OR) |
|
|
142
|
+
| `!disabled` | NOT |
|
|
143
|
+
| `hovered ^ focused` | XOR — exactly one (keep chains ≤ 4 operands) |
|
|
144
144
|
|
|
145
145
|
Precedence `!` > `^` > `|` > `&`; use parentheses to override.
|
|
146
146
|
|
|
@@ -148,9 +148,10 @@ Rules:
|
|
|
148
148
|
|
|
149
149
|
1. **`''` comes first.** The bare default is the lowest-priority state; placing it later would override everything above it.
|
|
150
150
|
2. **Every state map needs `''` or `_`** — except when extending (`tasty(Parent, …)`), where omitting `''` merges into the parent's states and including `''` replaces them wholesale.
|
|
151
|
-
3. **`_` is standalone-only** and always first (with `''` right after it, if present). `_` is a never-negated fallback floor for cases where a higher-priority branch may be
|
|
151
|
+
3. **`_` is standalone-only** and always first (with `''` right after it, if present). `_` is a never-negated fallback floor for cases where a higher-priority branch may be _unknown_ (`@supports`, container queries). If a map contains only `_` and `''`, drop the `''`.
|
|
152
152
|
4. **No nested maps:** ❌ `{ hovered: { pressed: 'x' } }` → ✅ `{ 'hovered & pressed': 'x' }`
|
|
153
153
|
5. **State keys never sit at the top level** of a styles object — `:hover`, `.active`, `[open]` belong inside a property value.
|
|
154
|
+
6. **Prefer automatic native states:** use `disabled` and `checked` in Tasty component styles instead of `[disabled]` and `[checked]`. The concise states track the corresponding native prop or attribute automatically.
|
|
154
155
|
|
|
155
156
|
```jsx
|
|
156
157
|
color: { '': '#text', hovered: '#accent', disabled: '#text.40' }
|
|
@@ -158,16 +159,16 @@ color: { '': '#text', hovered: '#accent', disabled: '#text.40' }
|
|
|
158
159
|
|
|
159
160
|
Advanced states:
|
|
160
161
|
|
|
161
|
-
| Prefix
|
|
162
|
-
|
|
163
|
-
| `@media(…)`
|
|
164
|
-
| `@(…)`
|
|
165
|
-
| `@supports(…)` | feature query; `$` first argument tests a selector
|
|
166
|
-
| `@root(…)`
|
|
167
|
-
| `@parent(…)`
|
|
168
|
-
| `@own(…)`
|
|
169
|
-
| `@starting`
|
|
170
|
-
| `@name`
|
|
162
|
+
| Prefix | Use | Example |
|
|
163
|
+
| -------------- | -------------------------------------------------------------------------------- | --------------------------------------------------- |
|
|
164
|
+
| `@media(…)` | media query; dimensions `w` `h`; types `@media:print` `:screen` `:all` `:speech` | `@media(w < 768px)`, `@media(600px <= w < 1200px)` |
|
|
165
|
+
| `@(…)` | container query; dimensions `w` `h` `is` `bs` | `@(layout, w >= 600px)`, `@($variant=primary)` |
|
|
166
|
+
| `@supports(…)` | feature query; `$` first argument tests a selector | `@supports(display: grid)`, `@supports($, :has(*))` |
|
|
167
|
+
| `@root(…)` | condition on `:root` | `@root(schema=dark)` |
|
|
168
|
+
| `@parent(…)` | condition on an ancestor; `, >` for the direct parent | `@parent(hovered, >)` |
|
|
169
|
+
| `@own(…)` | a sub-element's own state — **only inside sub-element styles** | `@own(:hover)` |
|
|
170
|
+
| `@starting` | `@starting-style` entry animation | `@starting` |
|
|
171
|
+
| `@name` | project state alias | `@mobile` |
|
|
171
172
|
|
|
172
173
|
- At root level write the selector directly: ❌ `'@own(:hover)'` → ✅ `':hover'`.
|
|
173
174
|
- `@name` aliases must exist in `states` in the config or be declared locally as an `'@name': '<state expression>'` key; alias keys start with `@` and their value must be a valid state expression.
|
|
@@ -187,21 +188,21 @@ styles: { Title: { preset: 'h3' }, Icon: { $: '>@:last-child', color: '#accent'
|
|
|
187
188
|
|
|
188
189
|
## 6. Special top-level keys
|
|
189
190
|
|
|
190
|
-
| Key
|
|
191
|
-
|
|
192
|
-
| `@keyframes`
|
|
193
|
-
| `@property`
|
|
194
|
-
| `@font-face`
|
|
195
|
-
| `@counter-style` | `{ name: descriptors }`
|
|
196
|
-
| `@function`
|
|
197
|
-
| `recipe`
|
|
191
|
+
| Key | Shape |
|
|
192
|
+
| ---------------- | ----------------------------------------------------------------------------------------------------------- |
|
|
193
|
+
| `@keyframes` | `{ name: { '0%': styles, … } }` |
|
|
194
|
+
| `@property` | `{ '$name': { syntax, inherits, initialValue } }` |
|
|
195
|
+
| `@font-face` | `{ 'Family Name': descriptors \| descriptors[] }` |
|
|
196
|
+
| `@counter-style` | `{ name: descriptors }` |
|
|
197
|
+
| `@function` | `{ '$$name': { args, returns?, result, '$local'? } }` |
|
|
198
|
+
| `recipe` | a **string** of configured recipe names: `'card elevated'`, `'reset input / autofill'`, `'none / disabled'` |
|
|
198
199
|
|
|
199
200
|
At-rule keys match the real CSS at-rule names, so they are kebab-case, not camelCase. Inside `@function`, the callable is `$$name` but its parameters and local variables are `$name`:
|
|
200
201
|
|
|
201
202
|
```jsx
|
|
202
203
|
styles: {
|
|
203
204
|
'@function': { $$negative: { args: ['$value'], result: '(-1 * $value)' } },
|
|
204
|
-
|
|
205
|
+
margin: '$$negative(2x) top',
|
|
205
206
|
}
|
|
206
207
|
```
|
|
207
208
|
|