@cube-dev/ui-kit 0.0.0-canary-bacd3ad → 0.0.0-canary-549d257
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 +64 -0
- package/dist/README.md +64 -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 +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.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/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 +7 -7
- package/dist/components/content/Placeholder/Placeholder.js.map +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 -2
- package/dist/components/content/use-auto-tooltip.js.map +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 +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 +7 -7
- package/dist/components/data/TableBase/styled.js.map +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +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/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 +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/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 +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 +3 -6
- 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 +17 -175
- 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-context.js.map +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.js +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/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/themes.js +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.js +1 -1
- package/dist/precompile/index.d.ts +45 -0
- package/dist/precompile/index.js +52 -0
- package/dist/precompile/index.js.map +1 -0
- package/dist/precompiled/index.d.ts +1 -0
- package/dist/precompiled/index.js +2 -0
- package/dist/precompiled/manifest.d.ts +4 -0
- package/dist/precompiled/manifest.js +2944 -0
- package/dist/precompiled/manifest.json +2942 -0
- package/dist/precompiled/register.d.ts +1 -0
- package/dist/precompiled/register.js +4 -0
- package/dist/precompiled/report.json +1548 -0
- package/dist/precompiled/styles.css +3416 -0
- package/dist/precompiled/styles.d.ts +1 -0
- 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.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.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.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.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/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/useScheme.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.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/components/layout/Board.md +1 -7
- package/docs/tasty/README.md +3 -1
- package/docs/tasty/debug.md +17 -6
- package/docs/tasty/precompile.md +186 -0
- package/docs/tasty/runtime-benchmarks.md +10 -1
- package/docs/tasty/ssr.md +151 -31
- package/package.json +35 -5
- package/scripts/precompile-tasty-catalog.mjs +727 -0
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
# Precompiled Component Catalogs
|
|
2
|
+
|
|
3
|
+
Precompiled catalogs let a design system render a curated component matrix at
|
|
4
|
+
build time, publish the resulting CSS as a static asset, and teach Tasty which
|
|
5
|
+
classes and ancillary rules that asset already contains. Covered chunks then
|
|
6
|
+
return their existing class names without running the style pipeline or
|
|
7
|
+
inserting CSS. Uncovered runtime styles continue through the normal path.
|
|
8
|
+
|
|
9
|
+
This mode complements SSR and `tastyStatic()`:
|
|
10
|
+
|
|
11
|
+
- SSR collects the styles used by one request.
|
|
12
|
+
- `tastyStatic()` extracts explicitly static style calls through a build
|
|
13
|
+
transform.
|
|
14
|
+
- A precompiled catalog covers the stable runtime `tasty()` styles shared by
|
|
15
|
+
many applications, while retaining runtime props and overrides.
|
|
16
|
+
|
|
17
|
+
## Compile a Catalog
|
|
18
|
+
|
|
19
|
+
`@tenphi/tasty/precompile` is Node-only. Each case returns a React tree; Tasty
|
|
20
|
+
renders it inside the active style collector. The entry requires the optional
|
|
21
|
+
`react` and `react-dom` peers used by the component library.
|
|
22
|
+
|
|
23
|
+
```tsx
|
|
24
|
+
import { writeFile } from 'node:fs/promises';
|
|
25
|
+
import { precompileTastyStyles } from '@tenphi/tasty/precompile';
|
|
26
|
+
|
|
27
|
+
import { Button, Dialog } from './index.js';
|
|
28
|
+
|
|
29
|
+
const artifact = await precompileTastyStyles({
|
|
30
|
+
id: '@acme/ui',
|
|
31
|
+
cases: [
|
|
32
|
+
{
|
|
33
|
+
id: 'button/default',
|
|
34
|
+
render: () => <Button>Continue</Button>,
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
id: 'button/danger',
|
|
38
|
+
render: () => <Button variant="danger">Delete</Button>,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 'dialog/default',
|
|
42
|
+
render: () => (
|
|
43
|
+
<Dialog open title="Account">
|
|
44
|
+
Content
|
|
45
|
+
</Dialog>
|
|
46
|
+
),
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
await Promise.all([
|
|
52
|
+
writeFile('dist/precompiled.css', artifact.css),
|
|
53
|
+
writeFile(
|
|
54
|
+
'dist/precompiled.manifest.json',
|
|
55
|
+
JSON.stringify(artifact.manifest),
|
|
56
|
+
),
|
|
57
|
+
writeFile('dist/precompiled.report.json', JSON.stringify(artifact.report)),
|
|
58
|
+
]);
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Run the catalog with the same Tasty configuration and exact Tasty version that
|
|
62
|
+
the design system publishes. Generation rejects page-relative CSS resources
|
|
63
|
+
such as `url(font.woff2)` because their meaning changes when the stylesheet is
|
|
64
|
+
moved. Absolute, root-relative, and data URLs are accepted.
|
|
65
|
+
|
|
66
|
+
The output is deterministic for a deterministic catalog and configuration.
|
|
67
|
+
The report lists the classes and ordered collector artifacts first introduced
|
|
68
|
+
by each case; use it to remove cases that add no coverage.
|
|
69
|
+
|
|
70
|
+
The Node-only precompile entry renders each returned tree with React DOM's
|
|
71
|
+
`renderToStaticMarkup()` inside the collector context. Catalog cases only need
|
|
72
|
+
to construct their representative component tree, including any providers the
|
|
73
|
+
design system normally requires.
|
|
74
|
+
|
|
75
|
+
## Publish and Register
|
|
76
|
+
|
|
77
|
+
The production default is a static stylesheet plus manifest registration:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
// @acme/ui/precompiled
|
|
81
|
+
import { registerTastyPrecompiled } from '@tenphi/tasty/precompile/register';
|
|
82
|
+
import manifest from './precompiled.manifest.json';
|
|
83
|
+
import './precompiled.css';
|
|
84
|
+
|
|
85
|
+
registerTastyPrecompiled(manifest);
|
|
86
|
+
export * from './index.js';
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Mark this module and the CSS asset as side-effectful in the UI package. Keep the
|
|
90
|
+
normal entry unchanged so adoption is explicit. Applications that link the CSS
|
|
91
|
+
from HTML or a framework layout must still execute the registration module
|
|
92
|
+
before rendering Tasty components.
|
|
93
|
+
|
|
94
|
+
A static asset is preferred because the browser can load and cache it in
|
|
95
|
+
parallel with JavaScript, it is available for first paint, and it requires no
|
|
96
|
+
CSP nonce. Environments that must bundle CSS text can use the fallback:
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
import {
|
|
100
|
+
installTastyPrecompiled,
|
|
101
|
+
type TastyPrecompiledManifest,
|
|
102
|
+
} from '@tenphi/tasty/precompile/register';
|
|
103
|
+
import css from './precompiled.css?raw';
|
|
104
|
+
import manifestJSON from './precompiled.manifest.json';
|
|
105
|
+
|
|
106
|
+
installTastyPrecompiled({
|
|
107
|
+
css,
|
|
108
|
+
manifest: manifestJSON as TastyPrecompiledManifest,
|
|
109
|
+
});
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Call `installTastyPrecompiled()` before the first Tasty render. It appends one
|
|
113
|
+
`<style data-tasty-precompiled>` element, assigns `textContent` once, and does
|
|
114
|
+
not place the CSS in Tasty's normal rule lifecycle. An explicit nonce overrides
|
|
115
|
+
the nonce from `configure()`.
|
|
116
|
+
|
|
117
|
+
## What the Artifact Contains
|
|
118
|
+
|
|
119
|
+
The stylesheet contains only collector artifacts attributed to components:
|
|
120
|
+
|
|
121
|
+
- style chunks;
|
|
122
|
+
- component-local and standalone `@property`, `@keyframes`, `@font-face`,
|
|
123
|
+
`@counter-style`, and native `@function` rules;
|
|
124
|
+
- properties inferred from component declarations.
|
|
125
|
+
|
|
126
|
+
It excludes `configure()` internals, `useGlobalStyles()`, and `useRawCSS()`.
|
|
127
|
+
Tokens, palettes, body styles, and application globals therefore remain
|
|
128
|
+
dynamic. The asset is a base stylesheet: dynamic globals and uncovered chunks
|
|
129
|
+
are appended later and can override it. It intentionally does not use
|
|
130
|
+
`data-tasty-ssr`, which would incorrectly tell hydration that configured
|
|
131
|
+
globals were already emitted.
|
|
132
|
+
|
|
133
|
+
Dependency metadata seeds browser, SSR, and RSC caches as immutable external
|
|
134
|
+
definitions. Tasty neither inserts duplicate ancillary rules nor adds external
|
|
135
|
+
classes to its garbage-collected rule set. A `ShadowRoot` cannot see document
|
|
136
|
+
CSS, so all styles targeting a shadow root use the normal runtime path.
|
|
137
|
+
|
|
138
|
+
Registration is global across server module graphs and idempotent for the same
|
|
139
|
+
manifest ID and CSS hash. Tasty rejects incompatible versions, name prefixes,
|
|
140
|
+
or conflicting lookup mappings in development and safely falls back to runtime
|
|
141
|
+
generation.
|
|
142
|
+
|
|
143
|
+
## Catalog Policy for UI Kits
|
|
144
|
+
|
|
145
|
+
Use the smallest matrix that exposes every unique styled structure:
|
|
146
|
+
|
|
147
|
+
1. Render one default case for every public styled component.
|
|
148
|
+
2. Render every declared visual variant.
|
|
149
|
+
3. Add controlled states or props only when they change Tasty input or mount a
|
|
150
|
+
distinct styled subtree.
|
|
151
|
+
4. Use multiple items in collections and compound components only to expose
|
|
152
|
+
different internal styled primitives.
|
|
153
|
+
5. Do not add a clear or close case when it only reuses a shared action such as
|
|
154
|
+
`ItemAction` and adds no class or dependency.
|
|
155
|
+
6. Remove non-default cases whose report delta is empty unless a documented
|
|
156
|
+
structural reason requires them.
|
|
157
|
+
7. Catalog every public styled component or mark it runtime-only with a reason.
|
|
158
|
+
|
|
159
|
+
Consumer changes to parser functions, units, states, handlers, recipes, chunk
|
|
160
|
+
assignments, or other compilation-affecting configuration invalidate a shared
|
|
161
|
+
catalog. Such applications should use runtime generation or build a
|
|
162
|
+
project-specific artifact.
|
|
163
|
+
|
|
164
|
+
Chunk lookup is exact. A shared UI-kit catalog is most useful when applications
|
|
165
|
+
render those components close to their cataloged styles; frequent project
|
|
166
|
+
overrides can leave a large static asset mostly inactive while the expensive
|
|
167
|
+
custom chunks still run through the pipeline. Use `tastyDebug.summary()` to
|
|
168
|
+
compare active runtime and precompiled classes and to inspect distinct
|
|
169
|
+
precompiled classes used since metrics were reset. For heavily styled
|
|
170
|
+
applications, prefer a project-specific catalog that renders representative
|
|
171
|
+
application routes and states under the application's real Tasty
|
|
172
|
+
configuration. Do not load both the broad shared asset and a project-specific
|
|
173
|
+
asset containing the same coverage.
|
|
174
|
+
|
|
175
|
+
## Performance Verification
|
|
176
|
+
|
|
177
|
+
Catalog generation, registration, and stylesheet loading are startup work and
|
|
178
|
+
should stay outside render samples. `pnpm bench:injection` includes a
|
|
179
|
+
1,000-rule precompiled lookup case alongside cold generation and an
|
|
180
|
+
already-present CSS control. Use `pnpm bench`, `pnpm bench:overhead`, and
|
|
181
|
+
`pnpm bench:injection` in alternating runs on the same idle machine when
|
|
182
|
+
changing this path.
|
|
183
|
+
|
|
184
|
+
With no registered manifest, the registry does not allocate lookup maps and
|
|
185
|
+
`computeStyles()` performs only the disabled-path boolean check before
|
|
186
|
+
continuing through its existing cache and injection behavior.
|
|
@@ -7,7 +7,7 @@ different costs:
|
|
|
7
7
|
1. Style parsing and generation in Node.
|
|
8
8
|
2. The React overhead of an empty `tasty({})` wrapper.
|
|
9
9
|
3. Cold browser generation and injection compared with equivalent CSS that is
|
|
10
|
-
already on the page.
|
|
10
|
+
already on the page or registered as a precompiled catalog.
|
|
11
11
|
|
|
12
12
|
These are focused microbenchmarks, not page-load or interaction scores. Run
|
|
13
13
|
them several times on an otherwise idle machine and use a production profile
|
|
@@ -122,6 +122,13 @@ rules. Both paths perform the same class assignment, DOM commit, and
|
|
|
122
122
|
computed-style reads. Only the runtime path calls `computeStyles()` and inserts
|
|
123
123
|
the new rules.
|
|
124
124
|
|
|
125
|
+
The 1,000-rule workload also includes a precompiled Tasty case. Its catalog is
|
|
126
|
+
generated and registered, and its CSS is parsed in an isolated document,
|
|
127
|
+
before the timer starts. The timed work is the chunk-key lookup, class
|
|
128
|
+
assignment, DOM commit, and the same computed-style reads. This keeps CSS
|
|
129
|
+
delivery and registration out of render latency while preserving the real
|
|
130
|
+
runtime lookup path.
|
|
131
|
+
|
|
125
132
|
Preparation and cleanup happen outside the sample timer. Every runtime style
|
|
126
133
|
value is unique within a cycle, the relevant caches are cleared between cycles,
|
|
127
134
|
and a guard verifies that both paths resolve to the same color. React and the
|
|
@@ -170,6 +177,8 @@ They describe different paths:
|
|
|
170
177
|
rule.
|
|
171
178
|
- A genuinely new style pays generation and injection once, then becomes
|
|
172
179
|
reusable.
|
|
180
|
+
- A registered precompiled chunk skips declaration rendering and rule
|
|
181
|
+
insertion, while uncovered chunks in the same component remain dynamic.
|
|
173
182
|
- Browser style resolution, layout, and paint depend on the actual document and
|
|
174
183
|
need application-level profiling.
|
|
175
184
|
|
package/docs/tasty/ssr.md
CHANGED
|
@@ -86,6 +86,92 @@ export default function RootLayout({
|
|
|
86
86
|
|
|
87
87
|
That's it. All `tasty()` components inside the tree automatically get SSR support. No per-component changes needed.
|
|
88
88
|
|
|
89
|
+
### Optional shared globals stylesheet
|
|
90
|
+
|
|
91
|
+
By default, configured global CSS is included in the streamed Tasty style tag
|
|
92
|
+
for every route. `withTastyNext()` can move that stable CSS into one
|
|
93
|
+
content-hashed stylesheet shared by all routes while leaving component and hook
|
|
94
|
+
styles in the normal streaming path.
|
|
95
|
+
|
|
96
|
+
Keep the Tasty config in a side-effect-free module:
|
|
97
|
+
|
|
98
|
+
```ts
|
|
99
|
+
// app/tasty.config.ts
|
|
100
|
+
import type { TastyConfig } from '@tenphi/tasty';
|
|
101
|
+
|
|
102
|
+
const config: TastyConfig = {
|
|
103
|
+
tokens: { $gap: '8px', '#brand': 'rebeccapurple' },
|
|
104
|
+
globalStyles: { body: { margin: '0', color: '#brand' } },
|
|
105
|
+
fontFaces: {
|
|
106
|
+
Brand: { src: 'url("/fonts/brand.woff2") format("woff2")' },
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default config;
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Use it from the Next config:
|
|
114
|
+
|
|
115
|
+
```ts
|
|
116
|
+
// next.config.ts
|
|
117
|
+
import { withTastyNext } from '@tenphi/tasty/ssr/next-config';
|
|
118
|
+
import config from './app/tasty.config';
|
|
119
|
+
|
|
120
|
+
export default withTastyNext({
|
|
121
|
+
config,
|
|
122
|
+
})({
|
|
123
|
+
// your Next.js config
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
The runtime must receive the same config. Import and configure it before the
|
|
128
|
+
registry renders:
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
// app/tasty-registry.tsx
|
|
132
|
+
'use client';
|
|
133
|
+
|
|
134
|
+
import { configure } from '@tenphi/tasty';
|
|
135
|
+
import { TastyRegistry } from '@tenphi/tasty/ssr/next';
|
|
136
|
+
import config from './tasty.config';
|
|
137
|
+
|
|
138
|
+
configure(config);
|
|
139
|
+
|
|
140
|
+
export default function TastyStyleRegistry({ children }) {
|
|
141
|
+
return <TastyRegistry>{children}</TastyRegistry>;
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
The generated file contains eager configuration artifacts: built-in and custom
|
|
146
|
+
`@property` rules, tokens and presets, `@font-face`, `@counter-style`, native
|
|
147
|
+
CSS `@function` definitions, and `globalStyles`. Route-dependent component
|
|
148
|
+
rules and calls to `useGlobalStyles`, `useRawCSS`, `useKeyframes`,
|
|
149
|
+
`useProperty`, `useFontFace`, `useCounterStyle`, and `useFunction` remain
|
|
150
|
+
route-specific. Configured keyframes also remain lazy and are streamed only
|
|
151
|
+
when a route references them.
|
|
152
|
+
|
|
153
|
+
The default output directory is `public/_tasty`. The wrapper adds the generated
|
|
154
|
+
URL to `TastyRegistry`, respects `basePath`, preserves existing `env` and
|
|
155
|
+
`headers` config, and serves the content-hashed file with an immutable one-year
|
|
156
|
+
cache header on Next server deployments. Static exports keep the content-hashed
|
|
157
|
+
URL and leave cache headers to the hosting provider. Older hashes are not
|
|
158
|
+
deleted automatically, so rolling deployments cannot break pages from the
|
|
159
|
+
previous build; clean the generated directory as part of a clean deployment if
|
|
160
|
+
needed. Page-relative CSS resources such as
|
|
161
|
+
`url(../fonts/brand.woff2)` are rejected because moving them would change their
|
|
162
|
+
meaning; use root-relative, absolute, or data URLs.
|
|
163
|
+
|
|
164
|
+
`withTastyNext()` options:
|
|
165
|
+
|
|
166
|
+
| Option | Type | Default | Description |
|
|
167
|
+
| ------------ | ------------- | ------------------------- | ---------------------------------------------------------------------- |
|
|
168
|
+
| `config` | `TastyConfig` | — | Config object; takes precedence over `configFile` |
|
|
169
|
+
| `configFile` | `string` | — | Project-relative config module path; requires the optional `jiti` peer |
|
|
170
|
+
| `rootDir` | `string` | current directory | Next app root when the build runs from a monorepo root |
|
|
171
|
+
| `outputDir` | `string` | `public/_tasty` | Filesystem output directory |
|
|
172
|
+
| `publicPath` | `string` | inferred from `outputDir` | Root-relative URL; required when output is outside `public` |
|
|
173
|
+
| `enabled` | `boolean` | `true` | Disable generation without changing wrapper composition |
|
|
174
|
+
|
|
89
175
|
### How it works
|
|
90
176
|
|
|
91
177
|
- `TastyRegistry` is a `'use client'` component, but Next.js still server-renders it on initial page load. The `'use client'` boundary is required solely to access `useServerInsertedHTML` — **not** because `tasty()` components need the client.
|
|
@@ -130,13 +216,13 @@ The nonce is automatically applied to all `<style>` and `<script>` tags injected
|
|
|
130
216
|
|
|
131
217
|
Tasty offers several levels of Astro integration. Choose the one that matches your needs:
|
|
132
218
|
|
|
133
|
-
| Setup
|
|
134
|
-
|
|
|
135
|
-
| Zero setup
|
|
136
|
-
| `tastyIntegration({ islands: false })`
|
|
137
|
-
| `tastyIntegration()`
|
|
138
|
-
| `tastyIntegration({ css: { mode: 'extract' } })`
|
|
139
|
-
| `tastyIntegration({ islands: false, css: { mode: 'extract' } })` | One line
|
|
219
|
+
| Setup | Config needed | Deduplication | Hooks work | Client JS |
|
|
220
|
+
| ---------------------------------------------------------------- | ------------- | ------------------------- | ---------------------- | -------------- |
|
|
221
|
+
| Zero setup | None | Per render tree | Yes (within each tree) | None |
|
|
222
|
+
| `tastyIntegration({ islands: false })` | One line | Cross-tree | Yes | None |
|
|
223
|
+
| `tastyIntegration()` | One line | Cross-tree | Yes | Auto-hydration |
|
|
224
|
+
| `tastyIntegration({ css: { mode: 'extract' } })` | One line | Cross-tree and cross-page | Yes | Auto-hydration |
|
|
225
|
+
| `tastyIntegration({ islands: false, css: { mode: 'extract' } })` | One line | Cross-tree and cross-page | Yes | None |
|
|
140
226
|
|
|
141
227
|
### Zero setup (static pages)
|
|
142
228
|
|
|
@@ -235,8 +321,8 @@ This gives the same middleware deduplication and hook support, but ships zero cl
|
|
|
235
321
|
|
|
236
322
|
#### Build-wide CSS extraction
|
|
237
323
|
|
|
238
|
-
Static Astro builds can move
|
|
239
|
-
|
|
324
|
+
Static Astro builds can move Tasty CSS into content-hashed, browser-cacheable
|
|
325
|
+
shared and page assets:
|
|
240
326
|
|
|
241
327
|
```ts
|
|
242
328
|
export default defineConfig({
|
|
@@ -257,14 +343,38 @@ output. Extraction requires Astro 5 or newer and only applies to prerendered
|
|
|
257
343
|
production pages. Development, preview-time SSR, and on-demand routes continue
|
|
258
344
|
to receive the normal inline `<style data-tasty-ssr>` output.
|
|
259
345
|
|
|
260
|
-
Extraction
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
346
|
+
Extraction writes every artifact emitted by all styled pages to a shared
|
|
347
|
+
stylesheet. Each page's strict set difference is written to a separate page
|
|
348
|
+
stylesheet. The shared link comes first and the page link follows, so shared
|
|
349
|
+
styles form the base cascade and page-only styles can override them. A fully
|
|
350
|
+
shared page omits the empty page stylesheet. If generated pages have no common
|
|
351
|
+
artifacts, each page receives only its page stylesheet.
|
|
352
|
+
|
|
353
|
+
The shared-base/page-override order is the extraction-mode cascade contract.
|
|
354
|
+
It does not preserve an inline artifact order where a page-only rule originally
|
|
355
|
+
appeared before a shared rule. Use shared styles for defaults and page-only
|
|
356
|
+
styles for overrides.
|
|
357
|
+
|
|
358
|
+
Extracted CSS preserves resource URLs verbatim. Relative URLs in an inline
|
|
359
|
+
style resolve from the page, but in an extracted stylesheet they resolve from
|
|
360
|
+
the asset directory. Use absolute URLs or data URLs when extraction is enabled.
|
|
361
|
+
Root-relative URLs such as `url(/fonts/brand.woff2)` are also safe while the
|
|
362
|
+
stylesheet stays on the page's origin. The build fails with a clear error if an
|
|
363
|
+
artifact contains a page-relative or fragment-only URL, including URL strings
|
|
364
|
+
in `image-set()`, `image()`, `src()`, and `@import`.
|
|
365
|
+
|
|
366
|
+
Assets are written under Astro's configured `build.assets` directory (for
|
|
367
|
+
example, `/_astro/tasty.shared.a1b2c3.css` and
|
|
368
|
+
`/_astro/tasty.page.d4e5f6.css`). Links include the configured Astro `base`, so
|
|
369
|
+
nested routes do not need relative-path handling. Content hashes and output are
|
|
370
|
+
deterministic for identical builds. If `build.assetsPrefix` is configured,
|
|
371
|
+
Tasty uses its CSS-specific prefix (or `fallback`) just like Astro-generated
|
|
372
|
+
stylesheets. When that prefix points to a different origin, root-relative
|
|
373
|
+
resources would resolve against the asset origin rather than the page's origin,
|
|
374
|
+
so the build rejects them as well. Tasty compares the prefix with Astro's `site`
|
|
375
|
+
when it is configured; without `site`, an absolute or protocol-relative prefix
|
|
376
|
+
is treated conservatively as cross-origin. Use a fully absolute resource URL in
|
|
377
|
+
that configuration.
|
|
268
378
|
|
|
269
379
|
### Manual middleware (advanced)
|
|
270
380
|
|
|
@@ -300,12 +410,13 @@ Astro's `@astrojs/react` renderer calls `renderToString()` for each React compon
|
|
|
300
410
|
- The middleware reads the full response body, then injects the collected CSS into `</head>` before sending the final HTML.
|
|
301
411
|
- In extraction mode, prerendered responses also carry temporary structured
|
|
302
412
|
artifact metadata. `astro:build:done` uses those collector-provided
|
|
303
|
-
boundaries to write
|
|
304
|
-
the metadata.
|
|
413
|
+
boundaries to write shared and page assets and rewrite generated HTML, then
|
|
414
|
+
removes the metadata. Artifact boundaries are never inferred by splitting or
|
|
415
|
+
reparsing the generated CSS.
|
|
305
416
|
|
|
306
417
|
### CSP nonce
|
|
307
418
|
|
|
308
|
-
Call `configure({ nonce: '...' })` before any rendering happens. The middleware reads the nonce and applies it to injected `<style>` and `<script>` tags. In extraction mode,
|
|
419
|
+
Call `configure({ nonce: '...' })` before any rendering happens. The middleware reads the nonce and applies it to injected `<style>` and `<script>` tags. In extraction mode, the external stylesheet links retain the nonce.
|
|
309
420
|
|
|
310
421
|
---
|
|
311
422
|
|
|
@@ -388,12 +499,13 @@ const stream = await runWithCollector(collector, () =>
|
|
|
388
499
|
|
|
389
500
|
### Entry points
|
|
390
501
|
|
|
391
|
-
| Import path
|
|
392
|
-
|
|
|
393
|
-
| `@tenphi/tasty/ssr`
|
|
394
|
-
| `@tenphi/tasty/ssr/next`
|
|
395
|
-
| `@tenphi/tasty/ssr/
|
|
396
|
-
| `@tenphi/tasty/ssr/astro
|
|
502
|
+
| Import path | Description |
|
|
503
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
504
|
+
| `@tenphi/tasty/ssr` | Core SSR API: `ServerStyleCollector`, `createServerStyleCollector`, `runWithCollector`, `hydrateTastyClasses` |
|
|
505
|
+
| `@tenphi/tasty/ssr/next` | Next.js App Router: `TastyRegistry` component |
|
|
506
|
+
| `@tenphi/tasty/ssr/next-config` | Next.js config wrapper: shared, content-hashed global stylesheet |
|
|
507
|
+
| `@tenphi/tasty/ssr/astro` | Astro: `tastyIntegration`, `tastyMiddleware` |
|
|
508
|
+
| `@tenphi/tasty/ssr/astro-client` | Astro: client-side cache hydration (auto-injected by integration, or import manually) |
|
|
397
509
|
| `@tenphi/tasty/ssr/astro-middleware`<br>`@tenphi/tasty/ssr/astro-middleware-static`<br>`@tenphi/tasty/ssr/astro-middleware-extract`<br>`@tenphi/tasty/ssr/astro-middleware-extract-static` | Astro: the middleware entrypoints `tastyIntegration()` registers via `addMiddleware()`. Exported so Astro can resolve them by specifier; you should not import them. For manual setups use `tastyMiddleware()`. |
|
|
398
510
|
|
|
399
511
|
### `ServerStyleCollector`
|
|
@@ -414,7 +526,7 @@ Constructor: `new ServerStyleCollector(namePrefix?)`, or use the `createServerSt
|
|
|
414
526
|
| `allocateCounterStyleName(providedName?)` | Allocate a counter-style name. Returns `providedName` if given, otherwise generates one using `${namePrefix}c${counter}` (e.g. `tc0`, `tc1`, ...). |
|
|
415
527
|
| `collectGlobalStyles(key, css)` | Record global styles (from `useGlobalStyles`). Deduplicated by key. |
|
|
416
528
|
| `collectRawCSS(key, css)` | Record raw CSS text (from `useRawCSS`). Deduplicated by key. |
|
|
417
|
-
| `collectInternals()` | Collect
|
|
529
|
+
| `collectInternals()` | Collect eager configured globals: `@property`, `:root` tokens and presets, `@font-face`, `@counter-style`, `@function`, and `globalStyles`. Called automatically on first chunk collection; idempotent. |
|
|
418
530
|
| `getCSS()` | Get all collected CSS as a single string. For non-streaming SSR. |
|
|
419
531
|
| `flushCSS()` | Get only CSS collected since the last flush. For streaming SSR. |
|
|
420
532
|
| `getRenderedClassNames()` | Get the list of class names rendered so far. Serialized to `window.__TASTY__` for client hydration via `hydrateTastyClasses()`. |
|
|
@@ -423,10 +535,18 @@ Constructor: `new ServerStyleCollector(namePrefix?)`, or use the `createServerSt
|
|
|
423
535
|
|
|
424
536
|
Next.js App Router component. Props:
|
|
425
537
|
|
|
426
|
-
| Prop
|
|
427
|
-
|
|
|
428
|
-
| `children`
|
|
429
|
-
| `transferCache`
|
|
538
|
+
| Prop | Type | Default | Description |
|
|
539
|
+
| ------------------ | ----------------- | --------- | ------------------------------------------------------------------------- |
|
|
540
|
+
| `children` | `ReactNode` | required | Application tree |
|
|
541
|
+
| `transferCache` | `boolean` | `true` | Embed cache state script for zero-cost hydration |
|
|
542
|
+
| `sharedStylesheet` | `string \| false` | generated | Override the shared URL, or disable generated shared CSS for the registry |
|
|
543
|
+
|
|
544
|
+
### `withTastyNext(options)`
|
|
545
|
+
|
|
546
|
+
Next.js configuration wrapper exported from
|
|
547
|
+
`@tenphi/tasty/ssr/next-config`. It generates a shared stylesheet from eager
|
|
548
|
+
Tasty configuration artifacts and wires its URL and immutable cache header
|
|
549
|
+
into the Next config. Route-specific CSS continues through `TastyRegistry`.
|
|
430
550
|
|
|
431
551
|
### `tastyIntegration(options?)`
|
|
432
552
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cube-dev/ui-kit",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-549d257",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UIKit for Cube Projects",
|
|
6
6
|
"repository": {
|
|
@@ -9,7 +9,11 @@
|
|
|
9
9
|
},
|
|
10
10
|
"module": "./dist/index.js",
|
|
11
11
|
"types": "./dist/index.d.ts",
|
|
12
|
-
"sideEffects":
|
|
12
|
+
"sideEffects": [
|
|
13
|
+
"./dist/precompiled/index.js",
|
|
14
|
+
"./dist/precompiled/register.js",
|
|
15
|
+
"./dist/precompiled/styles.css"
|
|
16
|
+
],
|
|
13
17
|
"packageManager": "pnpm@10.34.5",
|
|
14
18
|
"exports": {
|
|
15
19
|
".": {
|
|
@@ -23,10 +27,32 @@
|
|
|
23
27
|
"./probe": {
|
|
24
28
|
"import": "./dist/probe/index.js",
|
|
25
29
|
"types": "./dist/probe/index.d.ts"
|
|
30
|
+
},
|
|
31
|
+
"./precompile": {
|
|
32
|
+
"import": "./dist/precompile/index.js",
|
|
33
|
+
"types": "./dist/precompile/index.d.ts"
|
|
34
|
+
},
|
|
35
|
+
"./precompiled-styles": {
|
|
36
|
+
"import": "./dist/precompiled/index.js",
|
|
37
|
+
"types": "./dist/precompiled/index.d.ts"
|
|
38
|
+
},
|
|
39
|
+
"./precompiled-styles/register": {
|
|
40
|
+
"import": "./dist/precompiled/register.js",
|
|
41
|
+
"types": "./dist/precompiled/register.d.ts"
|
|
42
|
+
},
|
|
43
|
+
"./precompiled-styles.css": {
|
|
44
|
+
"types": "./dist/precompiled/styles.d.ts",
|
|
45
|
+
"default": "./dist/precompiled/styles.css"
|
|
46
|
+
},
|
|
47
|
+
"./precompiled-styles/manifest": {
|
|
48
|
+
"import": "./dist/precompiled/manifest.js",
|
|
49
|
+
"types": "./dist/precompiled/manifest.d.ts"
|
|
26
50
|
}
|
|
27
51
|
},
|
|
28
52
|
"files": [
|
|
29
53
|
"dist/**/*.js",
|
|
54
|
+
"dist/**/*.css",
|
|
55
|
+
"dist/**/*.json",
|
|
30
56
|
"dist/**/*.d.ts",
|
|
31
57
|
"dist/**/*.map",
|
|
32
58
|
"dist/README.md",
|
|
@@ -35,16 +61,20 @@
|
|
|
35
61
|
"docs/tasty",
|
|
36
62
|
"docs/glaze",
|
|
37
63
|
"docs/*.md",
|
|
38
|
-
"tasty.config.ts"
|
|
64
|
+
"tasty.config.ts",
|
|
65
|
+
"scripts/precompile-tasty-catalog.mjs"
|
|
39
66
|
],
|
|
40
67
|
"scripts": {
|
|
41
68
|
"start": "pnpm storybook",
|
|
42
|
-
"build": "tsdown",
|
|
69
|
+
"build": "tsdown && pnpm precompile:tasty",
|
|
43
70
|
"watch": "tsdown --watch",
|
|
44
71
|
"test": "vitest run",
|
|
45
72
|
"test:browser": "vitest run --config vitest.browser.config.ts",
|
|
73
|
+
"test:precompiled": "pnpm build && vitest run --config vitest.precompiled.config.ts",
|
|
46
74
|
"probe": "node scripts/probe.mjs",
|
|
47
75
|
"probe:browser": "PROBE_TIER=browser node scripts/probe.mjs",
|
|
76
|
+
"precompile:tasty": "node scripts/precompile-tasty.mjs",
|
|
77
|
+
"bench:precompiled": "pnpm build && vitest bench --config vitest.browser.config.ts scripts/precompile-startup.bench.js",
|
|
48
78
|
"test-cover": "vitest run --coverage",
|
|
49
79
|
"test-watch": "vitest",
|
|
50
80
|
"prettier": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\" \"**/*.{md,mdx}\"",
|
|
@@ -96,7 +126,7 @@
|
|
|
96
126
|
"@tabler/icons-react": "^3.31.0",
|
|
97
127
|
"@tanstack/react-virtual": "^3.13.12",
|
|
98
128
|
"@tenphi/glaze": "2.0.0",
|
|
99
|
-
"@tenphi/tasty": "
|
|
129
|
+
"@tenphi/tasty": "0.0.0-snapshot.edd6af3",
|
|
100
130
|
"clipboard-copy": "^4.0.1",
|
|
101
131
|
"clsx": "^1.1.1",
|
|
102
132
|
"diff": "^8.0.3",
|