@cube-dev/ui-kit 0.163.0 → 0.164.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 +377 -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 +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.d.ts +3 -2
- package/dist/components/Root.js +1 -1
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +2 -5
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.d.ts +3 -2
- package/dist/components/actions/Button/Button.js +8 -5
- package/dist/components/actions/Button/Button.js.map +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.d.ts +2 -2
- package/dist/components/actions/ItemAction/ItemAction.js +15 -6
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.d.ts +14 -0
- package/dist/components/actions/ItemActionContext.js +2 -2
- package/dist/components/actions/ItemActionContext.js.map +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +56 -46
- package/dist/components/actions/ItemButton/ItemButton.js.map +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.d.ts +13 -0
- package/dist/components/actions/Menu/MenuTrigger.js +27 -15
- package/dist/components/actions/Menu/MenuTrigger.js.map +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.d.ts +10 -0
- package/dist/components/content/CopySnippet/CopySnippet.js +7 -4
- package/dist/components/content/CopySnippet/CopySnippet.js.map +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/InlineInput/InlineInput.js.map +1 -1
- package/dist/components/content/Item/Item.d.ts +2 -2
- package/dist/components/content/Item/Item.js +13 -58
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.d.ts +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +7 -4
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +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.d.ts +6 -0
- package/dist/components/content/PrismCode/PrismCode.js +12 -3
- package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/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 +12 -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.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- 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/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 +12 -7
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +3 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.d.ts +8 -2
- package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.js +14 -6
- package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -0
- package/dist/components/fields/ColorSwatch/index.d.ts +2 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +2 -6
- package/dist/components/fields/ComboBox/ComboBox.js.map +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 +32 -2
- package/dist/components/fields/DatePicker/DatePickerButton.js.map +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 +3 -2
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +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/FilterPicker/FilterPicker.js.map +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/listNavigation.js +1 -1
- 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 +9 -6
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +2 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -6
- package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +18 -16
- package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/fields/Select/Select.js +3 -6
- 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 +15 -2
- package/dist/components/fields/Slider/HueSlider.js.map +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +4 -4
- package/dist/components/fields/color/color.js.map +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/fields/color/index.d.ts +0 -1
- package/dist/components/fields/index.d.ts +2 -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.d.ts +35 -5
- package/dist/components/layout/Board/Board.js +11 -5
- 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.d.ts +16 -1
- package/dist/components/layout/Board/Widget.js +3 -2
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +92 -17
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +5 -5
- package/dist/components/layout/Board/board-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.d.ts +1 -0
- package/dist/components/layout/Board/board-store.js +2 -2
- package/dist/components/layout/Board/board-store.js.map +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +183 -0
- package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -0
- 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 +12 -2
- package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/grid-core/types.d.ts +17 -1
- package/dist/components/layout/Board/index.d.ts +2 -2
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/index.js.map +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 +57 -9
- package/dist/components/layout/Board/use-board-registry.js.map +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 +2 -29
- package/dist/components/navigation/Tabs/TabButton.js.map +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.d.ts +37 -0
- package/dist/components/other/NoDataIcon/NoDataIcon.js +56 -0
- package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -0
- package/dist/components/other/NoDataIcon/index.d.ts +2 -0
- 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 +4 -3
- package/dist/components/overlays/Dialog/Dialog.js.map +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.d.ts +13 -0
- package/dist/components/overlays/Dialog/DialogTrigger.js +24 -5
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/context.js.map +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/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/LoadingAnimation/LoadingAnimation.js.map +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.d.ts +1 -1
- package/dist/data/item-themes.js +217 -46
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +29 -13
- package/dist/eslint-plugin/defaults.generated.js.map +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 +8 -5
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- 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/base.js +1 -1
- package/dist/tokens/color-seed.d.ts +44 -0
- package/dist/tokens/color-seed.js +48 -0
- package/dist/tokens/color-seed.js.map +1 -0
- package/dist/tokens/color-theme.d.ts +9 -1
- package/dist/tokens/color-theme.js +20 -7
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.js +20 -3
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/index.d.ts +2 -1
- package/dist/tokens/index.js +3 -2
- package/dist/tokens/index.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 +304 -77
- package/dist/tokens/palette-config.js +188 -49
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.js +617 -163
- package/dist/tokens/palette.js.map +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/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/Theming.md +471 -83
- package/docs/Usage.md +37 -2
- package/docs/components/Root.md +1 -1
- package/docs/components/actions/Button.md +9 -3
- package/docs/components/actions/ItemAction.md +3 -3
- package/docs/components/actions/MenuTrigger.md +54 -2
- package/docs/components/actions/SubMenuTrigger.md +2 -2
- package/docs/components/content/CopySnippet.md +5 -5
- package/docs/components/content/InlineInput.md +1 -1
- package/docs/components/content/Item.md +10 -10
- package/docs/components/content/ItemBadge.md +2 -2
- package/docs/components/content/PrismCode.md +1 -0
- package/docs/components/fields/ColorSwatch.md +155 -0
- package/docs/components/layout/Board.md +20 -2
- package/docs/components/other/NoDataIcon.md +48 -0
- package/docs/components/overlays/DialogTrigger.md +3 -2
- package/docs/components/status/LoadingAnimation.md +12 -0
- package/docs/glaze/api.md +155 -47
- package/docs/glaze/methodology.md +15 -13
- package/docs/glaze/migration.md +36 -0
- package/docs/glaze/okhst.md +4 -0
- package/docs/tasty/ai-agents.md +3 -0
- package/docs/tasty/configuration.md +1 -0
- package/package.json +3 -3
- package/dist/components/fields/color/ColorSwatch.js.map +0 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.164.0 | Cube Dev Team */
|
|
2
|
+
import { glaze } from "@tenphi/glaze";
|
|
3
|
+
|
|
4
|
+
//#region src/tokens/color-seed.ts
|
|
5
|
+
/**
|
|
6
|
+
* A colour picker being dragged emits a distinct string per frame, and
|
|
7
|
+
* `resolveConfig` runs on every `setPaletteConfig` *and* every
|
|
8
|
+
* `resolvePaletteConfig` preview. One resolve is only ~3µs, so this is insurance
|
|
9
|
+
* against a drag rather than a hot path — hence a cap and a clear rather than an
|
|
10
|
+
* LRU.
|
|
11
|
+
*/
|
|
12
|
+
const CACHE_LIMIT = 256;
|
|
13
|
+
const cache = /* @__PURE__ */ new Map();
|
|
14
|
+
/**
|
|
15
|
+
* Read a colour's hue, saturation and tone.
|
|
16
|
+
*
|
|
17
|
+
* Accepts anything Glaze parses — hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()`,
|
|
18
|
+
* `oklch()`. CSS colour keywords (`rebeccapurple`) are **not** supported.
|
|
19
|
+
*
|
|
20
|
+
* Returns `null` on anything unparseable, having warned once, so a caller can fall
|
|
21
|
+
* back to its numeric seed instead of throwing on a typo in a settings field.
|
|
22
|
+
*
|
|
23
|
+
* ```ts
|
|
24
|
+
* colorSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19, tone: 65.78 }
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
function colorSeed(value) {
|
|
28
|
+
const cached = cache.get(value);
|
|
29
|
+
if (cached !== void 0) return cached;
|
|
30
|
+
let seed = null;
|
|
31
|
+
try {
|
|
32
|
+
const { h, s, t } = glaze.color(value).resolve().light;
|
|
33
|
+
seed = {
|
|
34
|
+
hue: h,
|
|
35
|
+
saturation: s * 100,
|
|
36
|
+
tone: t * 100
|
|
37
|
+
};
|
|
38
|
+
} catch {
|
|
39
|
+
console.warn(`[cube-ui-kit] could not parse palette colour ${JSON.stringify(value)}; keeping the numeric seed. Accepted: hex, rgb(), hsl(), okhsl(), okhst(), oklch() — CSS colour keywords are not supported.`);
|
|
40
|
+
}
|
|
41
|
+
if (cache.size >= CACHE_LIMIT) cache.clear();
|
|
42
|
+
cache.set(value, seed);
|
|
43
|
+
return seed;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
//#endregion
|
|
47
|
+
export { colorSeed };
|
|
48
|
+
//# sourceMappingURL=color-seed.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"color-seed.js","names":[],"sources":["../../src/tokens/color-seed.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\n\n/**\n * Turns a colour into the three numbers the palette is seeded from.\n *\n * A deliberate LEAF: it imports Glaze and nothing else. `./palette-config` reads it\n * from inside `resolveConfig`, and `./palette-config` is the one module the token\n * graph is not allowed to have a cycle through — so anything this file imported\n * would become a `palette-config` dependency too. Glaze has no edge back into the\n * token modules, so it is safe; `./palette` (which owns `TINT_RECIPE` and the global\n * `glaze.configure`) is not.\n *\n * There is no ordering hazard either, even though `./palette` runs\n * `glaze.configure()` at module scope and this file may be called before that\n * happens. A bare-string colour token defaults to `lightTone: false`, so its light\n * variant preserves the input tone exactly and its hue and saturation come straight\n * off the parse — all three readings are independent of the global config.\n */\n\n/** Hue, saturation and tone read off a colour, on the palette's own scales. */\nexport interface ColorSeed {\n /** 0–360. */\n hue: number;\n /** 0–100 — the palette's seed scale, not Glaze's 0–1 factor. */\n saturation: number;\n /** 0–100 on the OKHST tone axis. */\n tone: number;\n}\n\n/**\n * A colour picker being dragged emits a distinct string per frame, and\n * `resolveConfig` runs on every `setPaletteConfig` *and* every\n * `resolvePaletteConfig` preview. One resolve is only ~3µs, so this is insurance\n * against a drag rather than a hot path — hence a cap and a clear rather than an\n * LRU.\n */\nconst CACHE_LIMIT = 256;\nconst cache = new Map<string, ColorSeed | null>();\n\n/**\n * Read a colour's hue, saturation and tone.\n *\n * Accepts anything Glaze parses — hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()`,\n * `oklch()`. CSS colour keywords (`rebeccapurple`) are **not** supported.\n *\n * Returns `null` on anything unparseable, having warned once, so a caller can fall\n * back to its numeric seed instead of throwing on a typo in a settings field.\n *\n * ```ts\n * colorSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19, tone: 65.78 }\n * ```\n */\nexport function colorSeed(value: string): ColorSeed | null {\n const cached = cache.get(value);\n\n // `null` is a cached FAILURE, not a miss — which is also what dedupes the\n // warning, so a bad value in a re-rendered config does not fill the console.\n if (cached !== undefined) return cached;\n\n let seed: ColorSeed | null = null;\n\n try {\n const { h, s, t } = glaze.color(value).resolve().light;\n\n // Glaze reports saturation and tone as 0–1 factors; the palette's are 0–100.\n seed = { hue: h, saturation: s * 100, tone: t * 100 };\n } catch {\n console.warn(\n `[cube-ui-kit] could not parse palette colour ${JSON.stringify(value)}; ` +\n `keeping the numeric seed. Accepted: hex, rgb(), hsl(), okhsl(), okhst(), ` +\n `oklch() — CSS colour keywords are not supported.`,\n );\n }\n\n if (cache.size >= CACHE_LIMIT) cache.clear();\n cache.set(value, seed);\n\n return seed;\n}\n"],"mappings":";;;;;;;;;;;AAoCA,MAAM,cAAc;AACpB,MAAM,wBAAQ,IAAI,KAA+B;;;;;;;;;;;;;;AAejD,SAAgB,UAAU,OAAiC;CACzD,MAAM,SAAS,MAAM,IAAI,MAAM;AAI/B,KAAI,WAAW,OAAW,QAAO;CAEjC,IAAI,OAAyB;AAE7B,KAAI;EACF,MAAM,EAAE,GAAG,GAAG,MAAM,MAAM,MAAM,MAAM,CAAC,SAAS,CAAC;AAGjD,SAAO;GAAE,KAAK;GAAG,YAAY,IAAI;GAAK,MAAM,IAAI;GAAK;SAC/C;AACN,UAAQ,KACN,gDAAgD,KAAK,UAAU,MAAM,CAAC,6HAGvE;;AAGH,KAAI,MAAM,QAAQ,YAAa,OAAM,OAAO;AAC5C,OAAM,IAAI,OAAO,KAAK;AAEtB,QAAO"}
|
|
@@ -17,7 +17,7 @@ interface ColorThemeConfig {
|
|
|
17
17
|
saturation?: number;
|
|
18
18
|
pastel?: boolean;
|
|
19
19
|
/**
|
|
20
|
-
* Extra colour definitions, merged over {@link
|
|
20
|
+
* Extra colour definitions, merged over {@link tintRecipe}. Anything Glaze's
|
|
21
21
|
* `theme.colors()` accepts, including `contrast` floors against a sibling.
|
|
22
22
|
*/
|
|
23
23
|
colors?: ColorMap;
|
|
@@ -45,6 +45,14 @@ interface ColorTheme {
|
|
|
45
45
|
* ```ts
|
|
46
46
|
* colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }
|
|
47
47
|
* ```
|
|
48
|
+
*
|
|
49
|
+
* The tone {@link colorSeed} also reads is dropped here on purpose: a tint theme
|
|
50
|
+
* re-derives its lightness per scheme, which is what makes it adaptive. The palette's
|
|
51
|
+
* The palette's accent zone keeps the tone, because a brand fill has to *be* the
|
|
52
|
+
* colour.
|
|
53
|
+
*
|
|
54
|
+
* An unparseable value falls back to the shipped seed rather than throwing — a hue
|
|
55
|
+
* typed into a settings field should not take the render down.
|
|
48
56
|
*/
|
|
49
57
|
declare function colorThemeSeed(value: string): {
|
|
50
58
|
hue: number;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.164.0 | Cube Dev Team */
|
|
2
|
+
import { colorSeed } from "./color-seed.js";
|
|
3
|
+
import { DEFAULT_HUE, DEFAULT_SATURATION, getPaletteConfig, getPaletteVersion, usePaletteVersion } from "./palette-config.js";
|
|
4
|
+
import { tintRecipe } from "./palette.js";
|
|
4
5
|
import { useGlobalStyles } from "@tenphi/tasty";
|
|
5
6
|
import { glaze } from "@tenphi/glaze";
|
|
6
7
|
|
|
@@ -50,12 +51,24 @@ function stableStringify(value) {
|
|
|
50
51
|
* ```ts
|
|
51
52
|
* colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }
|
|
52
53
|
* ```
|
|
54
|
+
*
|
|
55
|
+
* The tone {@link colorSeed} also reads is dropped here on purpose: a tint theme
|
|
56
|
+
* re-derives its lightness per scheme, which is what makes it adaptive. The palette's
|
|
57
|
+
* The palette's accent zone keeps the tone, because a brand fill has to *be* the
|
|
58
|
+
* colour.
|
|
59
|
+
*
|
|
60
|
+
* An unparseable value falls back to the shipped seed rather than throwing — a hue
|
|
61
|
+
* typed into a settings field should not take the render down.
|
|
53
62
|
*/
|
|
54
63
|
function colorThemeSeed(value) {
|
|
55
|
-
const
|
|
64
|
+
const seed = colorSeed(value);
|
|
65
|
+
if (!seed) return {
|
|
66
|
+
hue: DEFAULT_HUE,
|
|
67
|
+
saturation: DEFAULT_SATURATION
|
|
68
|
+
};
|
|
56
69
|
return {
|
|
57
|
-
hue:
|
|
58
|
-
saturation:
|
|
70
|
+
hue: seed.hue,
|
|
71
|
+
saturation: seed.saturation
|
|
59
72
|
};
|
|
60
73
|
}
|
|
61
74
|
/**
|
|
@@ -98,7 +111,7 @@ function getColorTheme(config) {
|
|
|
98
111
|
};
|
|
99
112
|
const theme = glaze(hue, saturation, Object.keys(overrides).length ? overrides : void 0);
|
|
100
113
|
theme.colors({
|
|
101
|
-
...
|
|
114
|
+
...tintRecipe(paletteConfig),
|
|
102
115
|
...config.colors
|
|
103
116
|
});
|
|
104
117
|
const raw = theme.tasty({ format: "oklch" });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-theme.js","names":[],"sources":["../../src/tokens/color-theme.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\nimport { useGlobalStyles } from '@tenphi/tasty';\n\n// Imported for its SIDE EFFECT as much as for `TINT_RECIPE`.\n//\n// `palette.ts` runs `glaze.configure({ states: { dark: '@dark', highContrast:\n// '@hc' }, modes: …, darkTone: … })` at module scope, and that global config is\n// what makes a theme emit `'@dark'` / `'@hc'` keys at all. Without this import\n// a runtime theme falls back to Glaze's defaults — `@media(prefers-color-scheme:\n// dark)` keys and NO high-contrast tier — which still renders, so the failure is\n// silent. `color-theme.test.ts` asserts the `'@hc'` key exists to catch it.\nimport { TINT_RECIPE } from './palette';\nimport {\n DEFAULT_SATURATION,\n getPaletteConfig,\n getPaletteVersion,\n usePaletteVersion,\n} from './palette-config';\n\nimport type { ColorMap, GlazeConfigOverride } from '@tenphi/glaze';\nimport type { Styles } from '@tenphi/tasty';\n\nexport interface ColorThemeConfig {\n /**\n * A hue in 0–360, or any colour Glaze parses — hex, `rgb()`, `hsl()`,\n * `okhsl()`, `okhst()`, `oklch()`.\n *\n * From a colour only the HUE and SATURATION are taken; the lightness is\n * discarded and re-derived per scheme. That is what makes the result adaptive\n * rather than a value that happens to work in one theme.\n */\n hue: number | string;\n /** 0–100. @default the palette's own saturation seed */\n saturation?: number;\n pastel?: boolean;\n /**\n * Extra colour definitions, merged over {@link TINT_RECIPE}. Anything Glaze's\n * `theme.colors()` accepts, including `contrast` floors against a sibling.\n */\n colors?: ColorMap;\n}\n\nexport interface ColorTheme {\n /**\n * A hash of the config, and the token prefix — `'tint-1a2b3c'`.\n *\n * Content-addressed rather than positional so two components asking for the\n * same colour name the same theme, and therefore share one injection. Also\n * makes it safe to stamp on the DOM as an identifier.\n */\n name: string;\n /**\n * Tasty token declarations, one state map per colour:\n * `{ '#tint-1a2b3c-surface': { '': …, '@dark': …, '@hc': …, '@dark & @hc': … } }`\n */\n tokens: Styles;\n /** Token references by their unprefixed name — `{ surface: '#tint-1a2b3c-surface' }`. */\n colors: Record<string, string>;\n}\n\n/**\n * FNV-1a, base36. Short, stable and dependency-free.\n *\n * These hashes name CSS custom properties and land in DOM attributes, so they\n * have to be deterministic across processes (SSR and the client must agree) and\n * safe as identifiers — but not cryptographic.\n */\nexport function hashString(input: string): string {\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n // >>> 0 keeps it an unsigned 32-bit int; `Math.imul` is the 32-bit multiply.\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n\n return hash.toString(36);\n}\n\n/**\n * Hashes the RESOLVED seed, not the config as written.\n *\n * `{ hue: '#0ea5e9' }` and `{ hue: 237.32, saturation: 98.19 }` are the same\n * colour said two ways; hashing the input would give them two names, two\n * injections and two sets of generated rules. Rounded, because a seed that\n * differs in the twelfth decimal is the same colour to every eye and every\n * renderer — and an unrounded float would defeat the deduplication it is here to\n * provide.\n */\nfunction hashSeed(seed: ResolvedSeed): string {\n return `tint-${hashString(\n JSON.stringify([\n seed.hue.toFixed(4),\n seed.saturation.toFixed(4),\n seed.pastel,\n seed.colors ? stableStringify(seed.colors) : null,\n ]),\n )}`;\n}\n\ninterface ResolvedSeed {\n hue: number;\n saturation: number;\n pastel: boolean;\n colors?: ColorMap;\n}\n\n/** Key order must not change the hash, or two identical configs get two slots. */\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n\n return `{${entries\n .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`)\n .join(',')}}`;\n}\n\n/**\n * The hue and saturation of a colour, for use as a theme seed.\n *\n * ```ts\n * colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }\n * ```\n */\nexport function colorThemeSeed(value: string): {\n hue: number;\n saturation: number;\n} {\n const light = glaze.color(value).resolve().light;\n\n // Glaze reports saturation as a 0–1 factor; the palette's seeds are 0–100.\n return { hue: light.h, saturation: light.s * 100 };\n}\n\n/**\n * Cached by `${paletteVersion}:${name}`.\n *\n * The palette version is in the KEY rather than triggering a clear, so a stale\n * entry is simply unreachable. `lastVersion` still clears the map on a change,\n * or repeated `setPaletteConfig` calls would grow it without bound.\n */\nconst cache = new Map<string, ColorTheme>();\nlet lastVersion = -1;\n\n/**\n * Build (or reuse) an adaptive theme from a hue.\n *\n * Pure and memoized: the same config returns the same object identity until the\n * palette is re-seeded. Registering the tokens is {@link useColorTheme}'s job —\n * this only computes them, so it is safe to call while rendering or from a test.\n */\nexport function getColorTheme(config: ColorThemeConfig): ColorTheme {\n const version = getPaletteVersion();\n\n if (version !== lastVersion) {\n cache.clear();\n lastVersion = version;\n }\n\n const paletteConfig = getPaletteConfig();\n const parsed =\n typeof config.hue === 'string' ? colorThemeSeed(config.hue) : null;\n const seed: ResolvedSeed = {\n hue: parsed ? parsed.hue : (config.hue as number),\n saturation:\n config.saturation ??\n parsed?.saturation ??\n paletteConfig.saturation ??\n DEFAULT_SATURATION,\n pastel: config.pastel ?? paletteConfig.pastel ?? false,\n colors: config.colors,\n };\n\n const name = hashSeed(seed);\n const cached = cache.get(name);\n\n if (cached) return cached;\n\n const { hue, saturation } = seed;\n\n // `pastel` and `contrastLevel` are instance-level in Glaze, not settable\n // through `glaze.configure`, so a runtime theme has to carry them itself or it\n // would ignore a pastel palette. Omitted entirely when off, so the default\n // output is provably the same as passing nothing.\n const overrides: GlazeConfigOverride = {\n ...(paletteConfig.contrastLevel != null\n ? { contrastLevel: paletteConfig.contrastLevel }\n : null),\n ...(seed.pastel ? { pastel: true } : null),\n };\n\n const theme = glaze(\n hue,\n saturation,\n Object.keys(overrides).length ? overrides : undefined,\n );\n\n theme.colors({ ...TINT_RECIPE, ...config.colors });\n\n // `prefix` is a palette-only option, so the keys are renamed here. `oklch`\n // because that is what the palette emits; tasty converts to the configured\n // colour space on the way out either way.\n const raw = theme.tasty({ format: 'oklch' }) as Record<string, unknown>;\n const tokens: Styles = {};\n const colors: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(raw)) {\n // Only the `#colour` entries are renamed; `splitHue` is off, so there are no\n // `$…-hue` companions to worry about, but a future one must not be mangled.\n if (!key.startsWith('#')) {\n (tokens as Record<string, unknown>)[key] = value;\n continue;\n }\n\n const bare = key.slice(1);\n const token = `#${name}-${bare}`;\n\n (tokens as Record<string, unknown>)[token] = value;\n colors[bare] = token;\n }\n\n const result: ColorTheme = { name, tokens, colors };\n\n cache.set(name, result);\n\n return result;\n}\n\n/**\n * Register an adaptive theme's tokens once per document, and get it back.\n *\n * The tokens land on `body` under a slot keyed by the theme's name, which is a\n * hash of the config — so every component asking for the same colour shares one\n * injection no matter how many of them there are. Tasty's global-style slots are\n * also permanent, which is what makes that safe: one component unmounting cannot\n * strip tokens another is still referencing.\n *\n * `body` rather than `:root`, which emits nothing at all — the same selector\n * `GlobalStyles` uses for the palette's own tokens. Custom properties inherit, so\n * anything rendered inside the document sees them; the one thing this cannot\n * reach is content portalled outside `<body>`, which nothing does.\n *\n * Because the slot id hashes the CONFIG rather than the resolved values,\n * re-seeding the palette replaces the same slot instead of leaking a new one.\n *\n * ```tsx\n * const theme = useColorTheme({ hue: '#0ea5e9' });\n * // theme.colors.surface → '#tint-1a2b3c-surface'\n * ```\n */\nexport function useColorTheme(config: ColorThemeConfig): ColorTheme {\n // Subscribes this component to a re-seed. `getColorTheme` reads the version\n // itself for its cache, so the value is unused here — the subscription is the\n // point, and it is what makes the tokens below re-inject.\n usePaletteVersion();\n\n const theme = getColorTheme(config);\n\n useGlobalStyles('body', theme.tokens, {\n id: `cube-color-theme-${theme.name}`,\n });\n\n return theme;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"color-theme.js","names":[],"sources":["../../src/tokens/color-theme.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\nimport { useGlobalStyles } from '@tenphi/tasty';\n\n// Imported for its SIDE EFFECT as much as for `tintRecipe`.\n//\n// `palette.ts` runs `glaze.configure({ states: { dark: '@dark', highContrast:\n// '@hc' }, modes: …, darkTone: … })` at module scope, and that global config is\n// what makes a theme emit `'@dark'` / `'@hc'` keys at all. Without this import\n// a runtime theme falls back to Glaze's defaults — `@media(prefers-color-scheme:\n// dark)` keys and NO high-contrast tier — which still renders, so the failure is\n// silent. `color-theme.test.ts` asserts the `'@hc'` key exists to catch it.\nimport { colorSeed } from './color-seed';\nimport { tintRecipe } from './palette';\nimport {\n DEFAULT_HUE,\n DEFAULT_SATURATION,\n getPaletteConfig,\n getPaletteVersion,\n usePaletteVersion,\n} from './palette-config';\n\nimport type { ColorMap, GlazeConfigOverride } from '@tenphi/glaze';\nimport type { Styles } from '@tenphi/tasty';\n\nexport interface ColorThemeConfig {\n /**\n * A hue in 0–360, or any colour Glaze parses — hex, `rgb()`, `hsl()`,\n * `okhsl()`, `okhst()`, `oklch()`.\n *\n * From a colour only the HUE and SATURATION are taken; the lightness is\n * discarded and re-derived per scheme. That is what makes the result adaptive\n * rather than a value that happens to work in one theme.\n */\n hue: number | string;\n /** 0–100. @default the palette's own saturation seed */\n saturation?: number;\n pastel?: boolean;\n /**\n * Extra colour definitions, merged over {@link tintRecipe}. Anything Glaze's\n * `theme.colors()` accepts, including `contrast` floors against a sibling.\n */\n colors?: ColorMap;\n}\n\nexport interface ColorTheme {\n /**\n * A hash of the config, and the token prefix — `'tint-1a2b3c'`.\n *\n * Content-addressed rather than positional so two components asking for the\n * same colour name the same theme, and therefore share one injection. Also\n * makes it safe to stamp on the DOM as an identifier.\n */\n name: string;\n /**\n * Tasty token declarations, one state map per colour:\n * `{ '#tint-1a2b3c-surface': { '': …, '@dark': …, '@hc': …, '@dark & @hc': … } }`\n */\n tokens: Styles;\n /** Token references by their unprefixed name — `{ surface: '#tint-1a2b3c-surface' }`. */\n colors: Record<string, string>;\n}\n\n/**\n * FNV-1a, base36. Short, stable and dependency-free.\n *\n * These hashes name CSS custom properties and land in DOM attributes, so they\n * have to be deterministic across processes (SSR and the client must agree) and\n * safe as identifiers — but not cryptographic.\n */\nexport function hashString(input: string): string {\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n // >>> 0 keeps it an unsigned 32-bit int; `Math.imul` is the 32-bit multiply.\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n\n return hash.toString(36);\n}\n\n/**\n * Hashes the RESOLVED seed, not the config as written.\n *\n * `{ hue: '#0ea5e9' }` and `{ hue: 237.32, saturation: 98.19 }` are the same\n * colour said two ways; hashing the input would give them two names, two\n * injections and two sets of generated rules. Rounded, because a seed that\n * differs in the twelfth decimal is the same colour to every eye and every\n * renderer — and an unrounded float would defeat the deduplication it is here to\n * provide.\n */\nfunction hashSeed(seed: ResolvedSeed): string {\n return `tint-${hashString(\n JSON.stringify([\n seed.hue.toFixed(4),\n seed.saturation.toFixed(4),\n seed.pastel,\n seed.colors ? stableStringify(seed.colors) : null,\n ]),\n )}`;\n}\n\ninterface ResolvedSeed {\n hue: number;\n saturation: number;\n pastel: boolean;\n colors?: ColorMap;\n}\n\n/** Key order must not change the hash, or two identical configs get two slots. */\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n\n return `{${entries\n .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`)\n .join(',')}}`;\n}\n\n/**\n * The hue and saturation of a colour, for use as a theme seed.\n *\n * ```ts\n * colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }\n * ```\n *\n * The tone {@link colorSeed} also reads is dropped here on purpose: a tint theme\n * re-derives its lightness per scheme, which is what makes it adaptive. The palette's\n * The palette's accent zone keeps the tone, because a brand fill has to *be* the\n * colour.\n *\n * An unparseable value falls back to the shipped seed rather than throwing — a hue\n * typed into a settings field should not take the render down.\n */\nexport function colorThemeSeed(value: string): {\n hue: number;\n saturation: number;\n} {\n const seed = colorSeed(value);\n\n if (!seed) return { hue: DEFAULT_HUE, saturation: DEFAULT_SATURATION };\n\n return { hue: seed.hue, saturation: seed.saturation };\n}\n\n/**\n * Cached by `${paletteVersion}:${name}`.\n *\n * The palette version is in the KEY rather than triggering a clear, so a stale\n * entry is simply unreachable. `lastVersion` still clears the map on a change,\n * or repeated `setPaletteConfig` calls would grow it without bound.\n */\nconst cache = new Map<string, ColorTheme>();\nlet lastVersion = -1;\n\n/**\n * Build (or reuse) an adaptive theme from a hue.\n *\n * Pure and memoized: the same config returns the same object identity until the\n * palette is re-seeded. Registering the tokens is {@link useColorTheme}'s job —\n * this only computes them, so it is safe to call while rendering or from a test.\n */\nexport function getColorTheme(config: ColorThemeConfig): ColorTheme {\n const version = getPaletteVersion();\n\n if (version !== lastVersion) {\n cache.clear();\n lastVersion = version;\n }\n\n const paletteConfig = getPaletteConfig();\n const parsed =\n typeof config.hue === 'string' ? colorThemeSeed(config.hue) : null;\n const seed: ResolvedSeed = {\n hue: parsed ? parsed.hue : (config.hue as number),\n saturation:\n config.saturation ??\n parsed?.saturation ??\n paletteConfig.saturation ??\n DEFAULT_SATURATION,\n pastel: config.pastel ?? paletteConfig.pastel ?? false,\n colors: config.colors,\n };\n\n const name = hashSeed(seed);\n const cached = cache.get(name);\n\n if (cached) return cached;\n\n const { hue, saturation } = seed;\n\n // `pastel` and `contrastLevel` are instance-level in Glaze, not settable\n // through `glaze.configure`, so a runtime theme has to carry them itself or it\n // would ignore a pastel palette. Omitted entirely when off, so the default\n // output is provably the same as passing nothing.\n const overrides: GlazeConfigOverride = {\n ...(paletteConfig.contrastLevel != null\n ? { contrastLevel: paletteConfig.contrastLevel }\n : null),\n ...(seed.pastel ? { pastel: true } : null),\n };\n\n const theme = glaze(\n hue,\n saturation,\n Object.keys(overrides).length ? overrides : undefined,\n );\n\n // The recipe follows the palette's `surfaceMode`, so a runtime tint sits the same\n // distance off the page as a built-in status theme does. Safe to read here rather\n // than hash into the seed: the cache is cleared on every palette version change,\n // and `surfaceMode` is one of the fields that bumps it.\n theme.colors({ ...tintRecipe(paletteConfig), ...config.colors });\n\n // `prefix` is a palette-only option, so the keys are renamed here. `oklch`\n // because that is what the palette emits; tasty converts to the configured\n // colour space on the way out either way.\n const raw = theme.tasty({ format: 'oklch' }) as Record<string, unknown>;\n const tokens: Styles = {};\n const colors: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(raw)) {\n // Only the `#colour` entries are renamed; `splitHue` is off, so there are no\n // `$…-hue` companions to worry about, but a future one must not be mangled.\n if (!key.startsWith('#')) {\n (tokens as Record<string, unknown>)[key] = value;\n continue;\n }\n\n const bare = key.slice(1);\n const token = `#${name}-${bare}`;\n\n (tokens as Record<string, unknown>)[token] = value;\n colors[bare] = token;\n }\n\n const result: ColorTheme = { name, tokens, colors };\n\n cache.set(name, result);\n\n return result;\n}\n\n/**\n * Register an adaptive theme's tokens once per document, and get it back.\n *\n * The tokens land on `body` under a slot keyed by the theme's name, which is a\n * hash of the config — so every component asking for the same colour shares one\n * injection no matter how many of them there are. Tasty's global-style slots are\n * also permanent, which is what makes that safe: one component unmounting cannot\n * strip tokens another is still referencing.\n *\n * `body` rather than `:root`, which emits nothing at all — the same selector\n * `GlobalStyles` uses for the palette's own tokens. Custom properties inherit, so\n * anything rendered inside the document sees them; the one thing this cannot\n * reach is content portalled outside `<body>`, which nothing does.\n *\n * Because the slot id hashes the CONFIG rather than the resolved values,\n * re-seeding the palette replaces the same slot instead of leaking a new one.\n *\n * ```tsx\n * const theme = useColorTheme({ hue: '#0ea5e9' });\n * // theme.colors.surface → '#tint-1a2b3c-surface'\n * ```\n */\nexport function useColorTheme(config: ColorThemeConfig): ColorTheme {\n // Subscribes this component to a re-seed. `getColorTheme` reads the version\n // itself for its cache, so the value is unused here — the subscription is the\n // point, and it is what makes the tokens below re-inject.\n usePaletteVersion();\n\n const theme = getColorTheme(config);\n\n useGlobalStyles('body', theme.tokens, {\n id: `cube-color-theme-${theme.name}`,\n });\n\n return theme;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAqEA,SAAgB,WAAW,OAAuB;CAChD,IAAI,OAAO;AAEX,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAQ,MAAM,WAAW,EAAE;AAE3B,SAAO,KAAK,KAAK,MAAM,SAAW,KAAK;;AAGzC,QAAO,KAAK,SAAS,GAAG;;;;;;;;;;;;AAa1B,SAAS,SAAS,MAA4B;AAC5C,QAAO,QAAQ,WACb,KAAK,UAAU;EACb,KAAK,IAAI,QAAQ,EAAE;EACnB,KAAK,WAAW,QAAQ,EAAE;EAC1B,KAAK;EACL,KAAK,SAAS,gBAAgB,KAAK,OAAO,GAAG;EAC9C,CAAC,CACH;;;AAWH,SAAS,gBAAgB,OAAwB;AAC/C,KAAI,UAAU,QAAQ,OAAO,UAAU,SAAU,QAAO,KAAK,UAAU,MAAM;AAE7E,KAAI,MAAM,QAAQ,MAAM,CACtB,QAAO,IAAI,MAAM,IAAI,gBAAgB,CAAC,KAAK,IAAI,CAAC;AAOlD,QAAO,IAJS,OAAO,QAAQ,MAAiC,CAAC,MAC9D,CAAC,IAAI,CAAC,OAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,EACzC,CAGE,KAAK,CAAC,KAAK,UAAU,GAAG,KAAK,UAAU,IAAI,CAAC,GAAG,gBAAgB,KAAK,GAAG,CACvE,KAAK,IAAI,CAAC;;;;;;;;;;;;;;;;;AAkBf,SAAgB,eAAe,OAG7B;CACA,MAAM,OAAO,UAAU,MAAM;AAE7B,KAAI,CAAC,KAAM,QAAO;EAAE,KAAK;EAAa,YAAY;EAAoB;AAEtE,QAAO;EAAE,KAAK,KAAK;EAAK,YAAY,KAAK;EAAY;;;;;;;;;AAUvD,MAAM,wBAAQ,IAAI,KAAyB;AAC3C,IAAI,cAAc;;;;;;;;AASlB,SAAgB,cAAc,QAAsC;CAClE,MAAM,UAAU,mBAAmB;AAEnC,KAAI,YAAY,aAAa;AAC3B,QAAM,OAAO;AACb,gBAAc;;CAGhB,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,SACJ,OAAO,OAAO,QAAQ,WAAW,eAAe,OAAO,IAAI,GAAG;CAChE,MAAM,OAAqB;EACzB,KAAK,SAAS,OAAO,MAAO,OAAO;EACnC,YACE,OAAO,cACP,QAAQ,cACR,cAAc,cACd;EACF,QAAQ,OAAO,UAAU,cAAc,UAAU;EACjD,QAAQ,OAAO;EAChB;CAED,MAAM,OAAO,SAAS,KAAK;CAC3B,MAAM,SAAS,MAAM,IAAI,KAAK;AAE9B,KAAI,OAAQ,QAAO;CAEnB,MAAM,EAAE,KAAK,eAAe;CAM5B,MAAM,YAAiC;EACrC,GAAI,cAAc,iBAAiB,OAC/B,EAAE,eAAe,cAAc,eAAe,GAC9C;EACJ,GAAI,KAAK,SAAS,EAAE,QAAQ,MAAM,GAAG;EACtC;CAED,MAAM,QAAQ,MACZ,KACA,YACA,OAAO,KAAK,UAAU,CAAC,SAAS,YAAY,OAC7C;AAMD,OAAM,OAAO;EAAE,GAAG,WAAW,cAAc;EAAE,GAAG,OAAO;EAAQ,CAAC;CAKhE,MAAM,MAAM,MAAM,MAAM,EAAE,QAAQ,SAAS,CAAC;CAC5C,MAAM,SAAiB,EAAE;CACzB,MAAM,SAAiC,EAAE;AAEzC,MAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,EAAE;AAG9C,MAAI,CAAC,IAAI,WAAW,IAAI,EAAE;AACxB,GAAC,OAAmC,OAAO;AAC3C;;EAGF,MAAM,OAAO,IAAI,MAAM,EAAE;EACzB,MAAM,QAAQ,IAAI,KAAK,GAAG;AAE1B,EAAC,OAAmC,SAAS;AAC7C,SAAO,QAAQ;;CAGjB,MAAM,SAAqB;EAAE;EAAM;EAAQ;EAAQ;AAEnD,OAAM,IAAI,MAAM,OAAO;AAEvB,QAAO;;;;;;;;;;;;;;;;;;;;;;;;AAyBT,SAAgB,cAAc,QAAsC;AAIlE,oBAAmB;CAEnB,MAAM,QAAQ,cAAc,OAAO;AAEnC,iBAAgB,QAAQ,MAAM,QAAQ,EACpC,IAAI,oBAAoB,MAAM,QAC/B,CAAC;AAEF,QAAO"}
|
package/dist/tokens/colors.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.164.0 | Cube Dev Team */
|
|
2
2
|
import { getPaletteVersion } from "./palette-config.js";
|
|
3
3
|
import { BASE_TOKENS } from "./base.js";
|
|
4
4
|
import { lazyStyles } from "./lazy-styles.js";
|
|
@@ -92,7 +92,22 @@ const LEGACY_ALIASES = {
|
|
|
92
92
|
"#note-disabled": "#disabled"
|
|
93
93
|
};
|
|
94
94
|
/**
|
|
95
|
-
*
|
|
95
|
+
* Context hooks — tokens a CONTAINER sets to steer a component that cannot
|
|
96
|
+
* resolve the color on its own.
|
|
97
|
+
*
|
|
98
|
+
* Declared with a default rather than read as `var(--x, fallback)` at every use
|
|
99
|
+
* site, for two reasons: the default is stated once instead of repeated (and so
|
|
100
|
+
* cannot drift), and a declared token gets its components companion for free —
|
|
101
|
+
* which is the only way `#current-fill.5` can fade whatever the container
|
|
102
|
+
* offered rather than the fallback.
|
|
103
|
+
*
|
|
104
|
+
* Included by reference in {@link renderColorTokens} alongside the legacy
|
|
105
|
+
* aliases, so a region preview re-resolves the default against that region's own
|
|
106
|
+
* `#surface` instead of freezing the outer theme's.
|
|
107
|
+
*/
|
|
108
|
+
const CONTEXT_TOKENS = { "#current-fill": "#surface" };
|
|
109
|
+
/**
|
|
110
|
+
* Combined color token map: Glaze-generated palette + legacy aliases + context hooks.
|
|
96
111
|
*
|
|
97
112
|
* Memoized against the palette config version, so a runtime `setPaletteConfig()`
|
|
98
113
|
* invalidates it while repeated reads stay free. Prefer {@link getColorTokens}
|
|
@@ -108,7 +123,8 @@ function getColorTokens() {
|
|
|
108
123
|
if (!colorTokensCache || cachedVersion !== version) {
|
|
109
124
|
colorTokensCache = {
|
|
110
125
|
...getPaletteTokens(),
|
|
111
|
-
...LEGACY_ALIASES
|
|
126
|
+
...LEGACY_ALIASES,
|
|
127
|
+
...CONTEXT_TOKENS
|
|
112
128
|
};
|
|
113
129
|
cachedVersion = version;
|
|
114
130
|
}
|
|
@@ -171,6 +187,7 @@ function renderColorTokens(options) {
|
|
|
171
187
|
return {
|
|
172
188
|
...renderPaletteTokens(options),
|
|
173
189
|
...LEGACY_ALIASES,
|
|
190
|
+
...CONTEXT_TOKENS,
|
|
174
191
|
...COLOR_DEPENDENT_TOKENS
|
|
175
192
|
};
|
|
176
193
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors.js","names":[],"sources":["../../src/tokens/colors.ts"],"sourcesContent":["import { BASE_TOKENS } from './base';\nimport { lazyStyles } from './lazy-styles';\nimport { getPaletteTokens, renderPaletteTokens } from './palette';\nimport { getPaletteVersion } from './palette-config';\nimport { SHADOW_TOKENS } from './shadows';\n\nimport type { Styles, Tokens } from '@tenphi/tasty';\nimport type { RenderPaletteOptions } from './palette';\n\n/**\n * Color tokens with `#` prefix for tasty color definitions.\n *\n * The base values come from the Glaze-generated palette (`palette.ts`):\n * `#surface`, `#surface-text*`, `#border`, `#focus`, `#disabled`, `#pink`,\n * `#shadow-*`, `#overlay`, the unprefixed `#accent-*` family, and the per-theme\n * `#primary-*` / `#purple-*` / `#success-*` / `#danger-*` / `#warning-*` /\n * `#note-*` families.\n *\n * Each Glaze token is a state map (`{ '': '...', '@dark': '...', '@hc': '...' }`),\n * giving us light, dark, and high-contrast variants for free. The `@dark` /\n * `@hc` predefined states are wired up globally in `src/components/Root.tsx`.\n *\n * The aliases below preserve backward compatibility with every legacy\n * `#name` used across components, stories, and tests. Each alias resolves\n * to a current Glaze token via tasty's `#token` reference syntax.\n */\n\nconst LEGACY_ALIASES: Styles = {\n // ---- Neutral text scale (legacy `#dark*`) ----\n '#text': '#surface-text-soft',\n '#dark': '#surface-text',\n '#dark-01': '#surface-text',\n '#dark-02': '#surface-text-soft',\n '#dark-03': '#surface-text-soft-2',\n '#dark-04': '#placeholder',\n '#dark-05': '#border',\n\n // Fixed-mode counterpart to `#dark`. Resolves to the same L≈12 surface\n // but uses Glaze `mode: 'fixed'` so it does NOT invert in dark schemes.\n // Use this whenever the design intentionally pins a dark color regardless\n // of scheme. Points at `#special-surface` (`mode: 'fixed'`, L=12),\n // emitted by the standalone `specialTheme` in `palette.ts` — the canonical\n // source of fixed-mode color tokens for `special`-variant components.\n '#fixed-dark': '#special-surface',\n\n // Fixed-mode counterpart to `#primary-text`. `#primary-text` is anchored\n // to `surface` with `mode: 'auto'`, so it flips to a *light* purple in\n // dark schemes (correct on body content, which also inverts). When the\n // local fill is a fixed color instead (an always-white pill, etc.), the\n // adaptive text loses contrast (light purple on white) in dark mode.\n // Points at `#special-accent-text` (`mode: 'fixed'`, cr 6–8.5 vs fixed\n // white) — a dark purple readable on a white surface that stays put\n // across schemes.\n '#fixed-primary-text': '#special-accent-text',\n\n // ---- Misc neutral ----\n '#minor': '#surface-text-soft.65',\n '#shadow': '#shadow-md',\n '#light': '#surface-3',\n '#dark-bg': '#surface-2',\n '#clear': 'transparent',\n\n // Pink: independent hue, scheme-static (no Glaze adaptation). Kept as a raw\n // literal rather than folded into a theme — nothing in the palette emits this\n // hue as a standalone token, and it is a documented public alias (see\n // `Usage.docs.mdx`, `tasty.config.ts`, and the `pink` key in\n // `tasty-augment.d.ts`), so dropping it would silently break consumer styles\n // while the types still advertised it.\n '#pink': 'okhsl(5 100% 67%)',\n\n // ---- Disabled state aliases ----\n // `#disabled-surface` and `#disabled-surface-text` are emitted directly by\n // the Glaze palette (`palette.ts`) as scheme-symmetric, contrast-driven\n // tokens — no alias needed here. `#disabled` stays as a brand-tinted\n // backwards-compat anchor for the per-theme `#<theme>-disabled` aliases below.\n\n // ---- Primary / Purple legacy ----\n '#primary': '#primary-accent-surface',\n '#primary-text': '#primary-accent-text',\n '#primary-text-soft': '#primary-accent-text-soft',\n '#primary-bg': '#primary-surface',\n '#primary-icon': '#primary-accent-icon',\n '#primary-hover': '#primary-accent-surface-hover',\n '#primary-desaturated': '#primary-accent-surface-2',\n '#primary-disabled': '#disabled',\n\n '#purple': '#purple-accent-surface',\n '#purple-text': '#purple-accent-text',\n '#purple-text-soft': '#purple-accent-text-soft',\n '#purple-bg': '#purple-surface',\n '#purple-icon': '#purple-accent-icon',\n '#purple-hover': '#purple-accent-surface-hover',\n '#purple-disabled': '#disabled',\n\n // Purple scale (gradient/accent shades) — mapped to the accent-surface ramp.\n '#purple-01': '#purple-accent-surface',\n '#purple-02': '#purple-accent-surface-2',\n '#purple-03': '#purple-accent-surface-3',\n '#purple-04': '#purple-surface',\n\n // ---- Danger ----\n '#danger': '#danger-accent-surface',\n '#danger-text': '#danger-accent-text',\n '#danger-text-soft': '#danger-accent-text-soft',\n '#danger-bg': '#danger-surface',\n '#danger-icon': '#danger-accent-icon',\n '#danger-hover': '#danger-accent-surface-hover',\n '#danger-desaturated': '#danger-accent-surface-2',\n '#danger-disabled': '#disabled',\n\n // ---- Success ----\n '#success': '#success-accent-surface',\n '#success-text': '#success-accent-text',\n '#success-text-soft': '#success-accent-text-soft',\n '#success-bg': '#success-surface',\n '#success-icon': '#success-accent-icon',\n '#success-hover': '#success-accent-surface-hover',\n '#success-desaturated': '#success-accent-surface-2',\n '#success-disabled': '#disabled',\n\n // ---- Warning ----\n '#warning': '#warning-accent-surface',\n '#warning-text': '#warning-accent-text',\n '#warning-text-soft': '#warning-accent-text-soft',\n '#warning-bg': '#warning-surface',\n '#warning-icon': '#warning-accent-icon',\n '#warning-hover': '#warning-accent-surface-hover',\n '#warning-desaturated': '#warning-accent-surface-2',\n '#warning-disabled': '#disabled',\n\n // ---- Note ----\n '#note': '#note-accent-surface',\n '#note-text': '#note-accent-text',\n '#note-text-soft': '#note-accent-text-soft',\n '#note-bg': '#note-surface',\n '#note-icon': '#note-accent-icon',\n '#note-hover': '#note-accent-surface-hover',\n '#note-desaturated': '#note-accent-surface-2',\n '#note-disabled': '#disabled',\n};\n\n/**\n * Combined color token map: Glaze-generated palette + legacy aliases.\n *\n * Memoized against the palette config version, so a runtime `setPaletteConfig()`\n * invalidates it while repeated reads stay free. Prefer {@link getColorTokens}\n * in new code.\n *\n * `#white` and `#black` are intentionally omitted — they are built-in\n * tasty named colors and resolve automatically.\n */\nlet colorTokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\nexport function getColorTokens(): Styles {\n const version = getPaletteVersion();\n\n if (!colorTokensCache || cachedVersion !== version) {\n colorTokensCache = {\n ...getPaletteTokens(),\n ...LEGACY_ALIASES,\n };\n cachedVersion = version;\n }\n return colorTokensCache;\n}\n\nexport const COLOR_TOKENS: Styles = lazyStyles(getColorTokens);\n\n/**\n * Tokens that live outside the palette but whose *values* reference a palette\n * color, so a region preview has to re-declare them. Kept by reference, exactly\n * as `<Root>` declares them — see {@link renderColorTokens}.\n *\n * Sourced from `./shadows` and the scrollbar block of `./base`; if either grows a\n * new colour-referencing token, add it here too.\n */\nconst COLOR_DEPENDENT_TOKENS: Styles = {\n ...SHADOW_TOKENS,\n '#scrollbar-thumb': BASE_TOKENS['#scrollbar-thumb'],\n '#scrollbar-outline': BASE_TOKENS['#scrollbar-outline'],\n '#scrollbar-bg': BASE_TOKENS['#scrollbar-bg'],\n '#scrollbar-corner': BASE_TOKENS['#scrollbar-corner'],\n};\n\n/**\n * Render every UI Kit color for one config and one scheme, as flat literal\n * values ready to apply to a **region** via a tasty `tokens` prop.\n *\n * ```tsx\n * const preview = useMemo(\n * () => renderColorTokens({ hue: 210, scheme: 'dark' }),\n * [],\n * );\n *\n * <Block tokens={preview} fill=\"#surface\" color=\"#surface-text\">\n * …renders in the previewed theme, inside a light page…\n * </Block>\n * ```\n *\n * Config fields merge over the *current* palette config, so\n * `renderColorTokens({ scheme: 'dark' })` previews the active theme in dark\n * without restating it. Nothing is applied globally — the live palette is\n * untouched.\n *\n * The legacy aliases are included **by reference** (`'#dark': '#surface-text'`),\n * not resolved: tasty re-declares them on the region, so each `var()` resolves\n * against that region's own overridden value. Resolving them here would instead\n * freeze them to the outer theme's colors.\n *\n * The shadow tokens and the scrollbar colors come along for the same reason: their\n * values embed a palette color (`$card-shadow` → `#shadow-md`, `#scrollbar-thumb`\n * → `#text.5`). They are declared on `<Root>`, so CSS has already substituted the\n * outer theme's colors into them by the time a region inherits — re-declaring them\n * here is what lets them re-resolve.\n *\n * Not included: typography, spacing, sizes and layout. Nothing in their values\n * references a color, so a region inherits them from `<Root>` unchanged.\n *\n * The result is memoized for the last config rendered, but callers driving this\n * from state should still `useMemo` — a rebuild resolves the whole palette.\n */\nexport function renderColorTokens(options?: RenderPaletteOptions): Tokens {\n return {\n ...renderPaletteTokens(options),\n ...(LEGACY_ALIASES as Tokens),\n ...(COLOR_DEPENDENT_TOKENS as Tokens),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,iBAAyB;CAE7B,SAAS;CACT,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CAQZ,eAAe;CAUf,uBAAuB;CAGvB,UAAU;CACV,WAAW;CACX,UAAU;CACV,YAAY;CACZ,UAAU;CAQV,SAAS;CAST,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CAErB,WAAW;CACX,gBAAgB;CAChB,qBAAqB;CACrB,cAAc;CACd,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CAGpB,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CAGd,WAAW;CACX,gBAAgB;CAChB,qBAAqB;CACrB,cAAc;CACd,gBAAgB;CAChB,iBAAiB;CACjB,uBAAuB;CACvB,oBAAoB;CAGpB,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CAGrB,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CAGrB,SAAS;CACT,cAAc;CACd,mBAAmB;CACnB,YAAY;CACZ,cAAc;CACd,eAAe;CACf,qBAAqB;CACrB,kBAAkB;CACnB;;;;;;;;;;;AAYD,IAAI,mBAAkC;AACtC,IAAI,gBAAgB;AAEpB,SAAgB,iBAAyB;CACvC,MAAM,UAAU,mBAAmB;AAEnC,KAAI,CAAC,oBAAoB,kBAAkB,SAAS;AAClD,qBAAmB;GACjB,GAAG,kBAAkB;GACrB,GAAG;GACJ;AACD,kBAAgB;;AAElB,QAAO;;AAGT,MAAa,eAAuB,WAAW,eAAe;;;;;;;;;AAU9D,MAAM,yBAAiC;CACrC,GAAG;CACH,oBAAoB,YAAY;CAChC,sBAAsB,YAAY;CAClC,iBAAiB,YAAY;CAC7B,qBAAqB,YAAY;CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCD,SAAgB,kBAAkB,SAAwC;AACxE,QAAO;EACL,GAAG,oBAAoB,QAAQ;EAC/B,GAAI;EACJ,GAAI;EACL"}
|
|
1
|
+
{"version":3,"file":"colors.js","names":[],"sources":["../../src/tokens/colors.ts"],"sourcesContent":["import { BASE_TOKENS } from './base';\nimport { lazyStyles } from './lazy-styles';\nimport { getPaletteTokens, renderPaletteTokens } from './palette';\nimport { getPaletteVersion } from './palette-config';\nimport { SHADOW_TOKENS } from './shadows';\n\nimport type { Styles, Tokens } from '@tenphi/tasty';\nimport type { RenderPaletteOptions } from './palette';\n\n/**\n * Color tokens with `#` prefix for tasty color definitions.\n *\n * The base values come from the Glaze-generated palette (`palette.ts`):\n * `#surface`, `#surface-text*`, `#border`, `#focus`, `#disabled`, `#pink`,\n * `#shadow-*`, `#overlay`, the unprefixed `#accent-*` family, and the per-theme\n * `#primary-*` / `#purple-*` / `#success-*` / `#danger-*` / `#warning-*` /\n * `#note-*` families.\n *\n * Each Glaze token is a state map (`{ '': '...', '@dark': '...', '@hc': '...' }`),\n * giving us light, dark, and high-contrast variants for free. The `@dark` /\n * `@hc` predefined states are wired up globally in `src/components/Root.tsx`.\n *\n * The aliases below preserve backward compatibility with every legacy\n * `#name` used across components, stories, and tests. Each alias resolves\n * to a current Glaze token via tasty's `#token` reference syntax.\n */\n\nconst LEGACY_ALIASES: Styles = {\n // ---- Neutral text scale (legacy `#dark*`) ----\n '#text': '#surface-text-soft',\n '#dark': '#surface-text',\n '#dark-01': '#surface-text',\n '#dark-02': '#surface-text-soft',\n '#dark-03': '#surface-text-soft-2',\n '#dark-04': '#placeholder',\n '#dark-05': '#border',\n\n // Fixed-mode counterpart to `#dark`. Resolves to the same L≈12 surface\n // but uses Glaze `mode: 'fixed'` so it does NOT invert in dark schemes.\n // Use this whenever the design intentionally pins a dark color regardless\n // of scheme. Points at `#special-surface` (`mode: 'fixed'`, L=12),\n // emitted by the standalone `specialTheme` in `palette.ts` — the canonical\n // source of fixed-mode color tokens for `special`-variant components.\n '#fixed-dark': '#special-surface',\n\n // Fixed-mode counterpart to `#primary-text`. `#primary-text` is anchored\n // to `surface` with `mode: 'auto'`, so it flips to a *light* purple in\n // dark schemes (correct on body content, which also inverts). When the\n // local fill is a fixed color instead (an always-white pill, etc.), the\n // adaptive text loses contrast (light purple on white) in dark mode.\n // Points at `#special-accent-text` (`mode: 'fixed'`, cr 6–8.5 vs fixed\n // white) — a dark purple readable on a white surface that stays put\n // across schemes.\n '#fixed-primary-text': '#special-accent-text',\n\n // ---- Misc neutral ----\n '#minor': '#surface-text-soft.65',\n '#shadow': '#shadow-md',\n '#light': '#surface-3',\n '#dark-bg': '#surface-2',\n '#clear': 'transparent',\n\n // Pink: independent hue, scheme-static (no Glaze adaptation). Kept as a raw\n // literal rather than folded into a theme — nothing in the palette emits this\n // hue as a standalone token, and it is a documented public alias (see\n // `Usage.docs.mdx`, `tasty.config.ts`, and the `pink` key in\n // `tasty-augment.d.ts`), so dropping it would silently break consumer styles\n // while the types still advertised it.\n '#pink': 'okhsl(5 100% 67%)',\n\n // ---- Disabled state aliases ----\n // `#disabled-surface` and `#disabled-surface-text` are emitted directly by\n // the Glaze palette (`palette.ts`) as scheme-symmetric, contrast-driven\n // tokens — no alias needed here. `#disabled` stays as a brand-tinted\n // backwards-compat anchor for the per-theme `#<theme>-disabled` aliases below.\n\n // ---- Primary / Purple legacy ----\n '#primary': '#primary-accent-surface',\n '#primary-text': '#primary-accent-text',\n '#primary-text-soft': '#primary-accent-text-soft',\n '#primary-bg': '#primary-surface',\n '#primary-icon': '#primary-accent-icon',\n '#primary-hover': '#primary-accent-surface-hover',\n '#primary-desaturated': '#primary-accent-surface-2',\n '#primary-disabled': '#disabled',\n\n '#purple': '#purple-accent-surface',\n '#purple-text': '#purple-accent-text',\n '#purple-text-soft': '#purple-accent-text-soft',\n '#purple-bg': '#purple-surface',\n '#purple-icon': '#purple-accent-icon',\n '#purple-hover': '#purple-accent-surface-hover',\n '#purple-disabled': '#disabled',\n\n // Purple scale (gradient/accent shades) — mapped to the accent-surface ramp.\n '#purple-01': '#purple-accent-surface',\n '#purple-02': '#purple-accent-surface-2',\n '#purple-03': '#purple-accent-surface-3',\n '#purple-04': '#purple-surface',\n\n // ---- Danger ----\n '#danger': '#danger-accent-surface',\n '#danger-text': '#danger-accent-text',\n '#danger-text-soft': '#danger-accent-text-soft',\n '#danger-bg': '#danger-surface',\n '#danger-icon': '#danger-accent-icon',\n '#danger-hover': '#danger-accent-surface-hover',\n '#danger-desaturated': '#danger-accent-surface-2',\n '#danger-disabled': '#disabled',\n\n // ---- Success ----\n '#success': '#success-accent-surface',\n '#success-text': '#success-accent-text',\n '#success-text-soft': '#success-accent-text-soft',\n '#success-bg': '#success-surface',\n '#success-icon': '#success-accent-icon',\n '#success-hover': '#success-accent-surface-hover',\n '#success-desaturated': '#success-accent-surface-2',\n '#success-disabled': '#disabled',\n\n // ---- Warning ----\n '#warning': '#warning-accent-surface',\n '#warning-text': '#warning-accent-text',\n '#warning-text-soft': '#warning-accent-text-soft',\n '#warning-bg': '#warning-surface',\n '#warning-icon': '#warning-accent-icon',\n '#warning-hover': '#warning-accent-surface-hover',\n '#warning-desaturated': '#warning-accent-surface-2',\n '#warning-disabled': '#disabled',\n\n // ---- Note ----\n '#note': '#note-accent-surface',\n '#note-text': '#note-accent-text',\n '#note-text-soft': '#note-accent-text-soft',\n '#note-bg': '#note-surface',\n '#note-icon': '#note-accent-icon',\n '#note-hover': '#note-accent-surface-hover',\n '#note-desaturated': '#note-accent-surface-2',\n '#note-disabled': '#disabled',\n};\n\n/**\n * Context hooks — tokens a CONTAINER sets to steer a component that cannot\n * resolve the color on its own.\n *\n * Declared with a default rather than read as `var(--x, fallback)` at every use\n * site, for two reasons: the default is stated once instead of repeated (and so\n * cannot drift), and a declared token gets its components companion for free —\n * which is the only way `#current-fill.5` can fade whatever the container\n * offered rather than the fallback.\n *\n * Included by reference in {@link renderColorTokens} alongside the legacy\n * aliases, so a region preview re-resolves the default against that region's own\n * `#surface` instead of freezing the outer theme's.\n */\nconst CONTEXT_TOKENS: Styles = {\n // The label color `current.primary` punches out of its `currentcolor` chip —\n // read by nothing else. That flavour fills with the color it INHERITS, so its\n // label has to contrast with an arbitrary color, and the page only manages\n // that while the inherited color sits away from the page. A container\n // whose own text color IS the page breaks it: a `Banner` labels itself\n // `#white`, and `#surface` is white in light mode, so label and chip collapse\n // to cr 1.00.\n //\n // Such a container sets this to a color that contrasts with its own fill —\n // usually its own surface — and the label, the rim and the icon slots all\n // follow. See `CURRENT_PRIMARY_STYLES` in `src/data/item-themes.ts`.\n '#current-fill': '#surface',\n};\n\n/**\n * Combined color token map: Glaze-generated palette + legacy aliases + context hooks.\n *\n * Memoized against the palette config version, so a runtime `setPaletteConfig()`\n * invalidates it while repeated reads stay free. Prefer {@link getColorTokens}\n * in new code.\n *\n * `#white` and `#black` are intentionally omitted — they are built-in\n * tasty named colors and resolve automatically.\n */\nlet colorTokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\nexport function getColorTokens(): Styles {\n const version = getPaletteVersion();\n\n if (!colorTokensCache || cachedVersion !== version) {\n colorTokensCache = {\n ...getPaletteTokens(),\n ...LEGACY_ALIASES,\n ...CONTEXT_TOKENS,\n };\n cachedVersion = version;\n }\n return colorTokensCache;\n}\n\nexport const COLOR_TOKENS: Styles = lazyStyles(getColorTokens);\n\n/**\n * Tokens that live outside the palette but whose *values* reference a palette\n * color, so a region preview has to re-declare them. Kept by reference, exactly\n * as `<Root>` declares them — see {@link renderColorTokens}.\n *\n * Sourced from `./shadows` and the scrollbar block of `./base`; if either grows a\n * new colour-referencing token, add it here too.\n */\nconst COLOR_DEPENDENT_TOKENS: Styles = {\n ...SHADOW_TOKENS,\n '#scrollbar-thumb': BASE_TOKENS['#scrollbar-thumb'],\n '#scrollbar-outline': BASE_TOKENS['#scrollbar-outline'],\n '#scrollbar-bg': BASE_TOKENS['#scrollbar-bg'],\n '#scrollbar-corner': BASE_TOKENS['#scrollbar-corner'],\n};\n\n/**\n * Render every UI Kit color for one config and one scheme, as flat literal\n * values ready to apply to a **region** via a tasty `tokens` prop.\n *\n * ```tsx\n * const preview = useMemo(\n * () => renderColorTokens({ hue: 210, scheme: 'dark' }),\n * [],\n * );\n *\n * <Block tokens={preview} fill=\"#surface\" color=\"#surface-text\">\n * …renders in the previewed theme, inside a light page…\n * </Block>\n * ```\n *\n * Config fields merge over the *current* palette config, so\n * `renderColorTokens({ scheme: 'dark' })` previews the active theme in dark\n * without restating it. Nothing is applied globally — the live palette is\n * untouched.\n *\n * The legacy aliases are included **by reference** (`'#dark': '#surface-text'`),\n * not resolved: tasty re-declares them on the region, so each `var()` resolves\n * against that region's own overridden value. Resolving them here would instead\n * freeze them to the outer theme's colors.\n *\n * The shadow tokens and the scrollbar colors come along for the same reason: their\n * values embed a palette color (`$card-shadow` → `#shadow-md`, `#scrollbar-thumb`\n * → `#text.5`). They are declared on `<Root>`, so CSS has already substituted the\n * outer theme's colors into them by the time a region inherits — re-declaring them\n * here is what lets them re-resolve.\n *\n * Not included: typography, spacing, sizes and layout. Nothing in their values\n * references a color, so a region inherits them from `<Root>` unchanged.\n *\n * The result is memoized for the last config rendered, but callers driving this\n * from state should still `useMemo` — a rebuild resolves the whole palette.\n */\nexport function renderColorTokens(options?: RenderPaletteOptions): Tokens {\n return {\n ...renderPaletteTokens(options),\n ...(LEGACY_ALIASES as Tokens),\n ...(CONTEXT_TOKENS as Tokens),\n ...(COLOR_DEPENDENT_TOKENS as Tokens),\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAM,iBAAyB;CAE7B,SAAS;CACT,SAAS;CACT,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CACZ,YAAY;CAQZ,eAAe;CAUf,uBAAuB;CAGvB,UAAU;CACV,WAAW;CACX,UAAU;CACV,YAAY;CACZ,UAAU;CAQV,SAAS;CAST,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CAErB,WAAW;CACX,gBAAgB;CAChB,qBAAqB;CACrB,cAAc;CACd,gBAAgB;CAChB,iBAAiB;CACjB,oBAAoB;CAGpB,cAAc;CACd,cAAc;CACd,cAAc;CACd,cAAc;CAGd,WAAW;CACX,gBAAgB;CAChB,qBAAqB;CACrB,cAAc;CACd,gBAAgB;CAChB,iBAAiB;CACjB,uBAAuB;CACvB,oBAAoB;CAGpB,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CAGrB,YAAY;CACZ,iBAAiB;CACjB,sBAAsB;CACtB,eAAe;CACf,iBAAiB;CACjB,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CAGrB,SAAS;CACT,cAAc;CACd,mBAAmB;CACnB,YAAY;CACZ,cAAc;CACd,eAAe;CACf,qBAAqB;CACrB,kBAAkB;CACnB;;;;;;;;;;;;;;;AAgBD,MAAM,iBAAyB,EAY7B,iBAAiB,YAClB;;;;;;;;;;;AAYD,IAAI,mBAAkC;AACtC,IAAI,gBAAgB;AAEpB,SAAgB,iBAAyB;CACvC,MAAM,UAAU,mBAAmB;AAEnC,KAAI,CAAC,oBAAoB,kBAAkB,SAAS;AAClD,qBAAmB;GACjB,GAAG,kBAAkB;GACrB,GAAG;GACH,GAAG;GACJ;AACD,kBAAgB;;AAElB,QAAO;;AAGT,MAAa,eAAuB,WAAW,eAAe;;;;;;;;;AAU9D,MAAM,yBAAiC;CACrC,GAAG;CACH,oBAAoB,YAAY;CAChC,sBAAsB,YAAY;CAClC,iBAAiB,YAAY;CAC7B,qBAAqB,YAAY;CAClC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCD,SAAgB,kBAAkB,SAAwC;AACxE,QAAO;EACL,GAAG,oBAAoB,QAAQ;EAC/B,GAAI;EACJ,GAAI;EACJ,GAAI;EACL"}
|
package/dist/tokens/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
import { DEFAULT_PALETTE_CONFIG, PaletteCodeSeed, PaletteConfig,
|
|
2
|
+
import { DEFAULT_PALETTE_CONFIG, MAX_BASE_SATURATION, PaletteCodeSeed, PaletteConfig, PaletteNumericSeed, PaletteSeed, PaletteThemeName, ResolvedPaletteConfig, ResolvedThemeSeed, SurfaceMode, getPaletteConfig, getPaletteConfigInput, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion } from "./palette-config.js";
|
|
3
3
|
import { SIZES, SIZE_NAME_TO_KEY, SIZE_TOKENS, SizeKey, SizeName } from "./sizes.js";
|
|
4
4
|
import { PALETTE_TOKENS, RenderPaletteOptions, getCodeTheme, getPalette, getPaletteTokens, renderPaletteTokens } from "./palette.js";
|
|
5
5
|
import { COLOR_TOKENS, getColorTokens, renderColorTokens } from "./colors.js";
|
|
6
|
+
import { ColorSeed, colorSeed } from "./color-seed.js";
|
|
6
7
|
import { ColorTheme, ColorThemeConfig, colorThemeSeed, getColorTheme, useColorTheme } from "./color-theme.js";
|
|
7
8
|
import { SPACE_TOKENS } from "./spacing.js";
|
|
8
9
|
import { SHADOW_TOKENS } from "./shadows.js";
|
package/dist/tokens/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import {
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.164.0 | Cube Dev Team */
|
|
2
|
+
import { colorSeed } from "./color-seed.js";
|
|
3
|
+
import { DEFAULT_PALETTE_CONFIG, MAX_BASE_SATURATION, getPaletteConfig, getPaletteConfigInput, getPaletteVersion, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion } from "./palette-config.js";
|
|
3
4
|
import { BASE_TOKENS } from "./base.js";
|
|
4
5
|
import { lazyStyles } from "./lazy-styles.js";
|
|
5
6
|
import { PALETTE_TOKENS, getCodeTheme, getPalette, getPaletteTokens, renderPaletteTokens } from "./palette.js";
|
package/dist/tokens/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/tokens/index.ts"],"sourcesContent":["/**\n * Design tokens for the Cube UI Kit.\n *\n * This module exports all design tokens used throughout the design system.\n * All token keys use $ prefix for CSS custom properties.\n *\n * Categories:\n * - Colors: Base color palette with -color and -color-rgb variants\n * - Typography: Font presets for headings, text, paragraphs, etc.\n * - Sizes: Component size values (XS, SM, MD, LG, XL)\n * - Spacing: Space tokens using gap multipliers\n * - Shadows: Shadow definitions for elevation\n * - Layout: Common layout dimensions\n * - Base: Core design system values\n */\n\nimport { generateTypographyTokens } from '@tenphi/tasty';\n\nimport { BASE_TOKENS } from './base';\nimport { getColorTokens } from './colors';\nimport { LAYOUT_TOKENS } from './layout';\nimport { lazyStyles } from './lazy-styles';\nimport { getPaletteVersion } from './palette-config';\nimport { SHADOW_TOKENS } from './shadows';\nimport { SIZE_TOKENS } from './sizes';\nimport { SPACE_TOKENS } from './spacing';\nimport { TYPOGRAPHY_PRESETS } from './typography';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { SizeKey, SizeName } from './sizes';\n\n/**\n * All design tokens combined into a single Styles object.\n * Keys use $ prefix for CSS custom properties.\n *\n * Color tokens resolve against the current palette config (see\n * {@link getColorTokens}), and this map is memoized against that config's\n * version so `setPaletteConfig()` invalidates it. Prefer this over the lazy\n * {@link TOKENS} proxy when applying styles from React (`GlobalStyles`).\n *\n * Includes:\n * - Base tokens ($gap, $radius, etc.)\n * - Space tokens ($space-xs, $space-sm, etc.)\n * - Size tokens ($size-xs, $size-sm, etc.)\n * - Shadow tokens ($shadow, $item-shadow, etc.)\n * - Layout tokens ($max-content-width, $topbar-height, etc.)\n * - Typography tokens ($h1-font-size, $t3-line-height, etc.)\n * - Color tokens ($purple-color, $purple-color-rgb, etc.)\n */\nlet tokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\nexport function getTokens(): Styles {\n const version = getPaletteVersion();\n\n if (!tokensCache || cachedVersion !== version) {\n tokensCache = {\n ...BASE_TOKENS,\n ...SPACE_TOKENS,\n ...SIZE_TOKENS,\n ...SHADOW_TOKENS,\n ...LAYOUT_TOKENS,\n ...generateTypographyTokens(TYPOGRAPHY_PRESETS),\n ...getColorTokens(),\n };\n cachedVersion = version;\n }\n return tokensCache;\n}\n\n/** Lazy proxy of {@link getTokens}. Prefer `getTokens()` in new code. */\nexport const TOKENS: Styles = lazyStyles(getTokens);\n\n// Re-export category modules for direct access\nexport { COLOR_TOKENS, getColorTokens, renderColorTokens } from './colors';\n// Adaptive one-off themes built at runtime from an arbitrary hue, named by a\n// hash of their config so identical requests share one injection.\nexport { colorThemeSeed, getColorTheme, useColorTheme } from './color-theme';\nexport type { ColorTheme, ColorThemeConfig } from './color-theme';\nexport {\n getCodeTheme,\n getPalette,\n getPaletteTokens,\n PALETTE_TOKENS,\n renderPaletteTokens,\n} from './palette';\nexport type { RenderPaletteOptions } from './palette';\nexport {\n DEFAULT_PALETTE_CONFIG,\n getPaletteConfig,\n getPaletteConfigInput,\n invalidatePaletteTokens,\n resetPaletteConfig,\n resolvePaletteConfig,\n setPaletteConfig,\n subscribePaletteConfig,\n usePaletteConfig,\n usePaletteVersion,\n} from './palette-config';\nexport type {\n PaletteCodeSeed,\n PaletteConfig,\n
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/tokens/index.ts"],"sourcesContent":["/**\n * Design tokens for the Cube UI Kit.\n *\n * This module exports all design tokens used throughout the design system.\n * All token keys use $ prefix for CSS custom properties.\n *\n * Categories:\n * - Colors: Base color palette with -color and -color-rgb variants\n * - Typography: Font presets for headings, text, paragraphs, etc.\n * - Sizes: Component size values (XS, SM, MD, LG, XL)\n * - Spacing: Space tokens using gap multipliers\n * - Shadows: Shadow definitions for elevation\n * - Layout: Common layout dimensions\n * - Base: Core design system values\n */\n\nimport { generateTypographyTokens } from '@tenphi/tasty';\n\nimport { BASE_TOKENS } from './base';\nimport { getColorTokens } from './colors';\nimport { LAYOUT_TOKENS } from './layout';\nimport { lazyStyles } from './lazy-styles';\nimport { getPaletteVersion } from './palette-config';\nimport { SHADOW_TOKENS } from './shadows';\nimport { SIZE_TOKENS } from './sizes';\nimport { SPACE_TOKENS } from './spacing';\nimport { TYPOGRAPHY_PRESETS } from './typography';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { SizeKey, SizeName } from './sizes';\n\n/**\n * All design tokens combined into a single Styles object.\n * Keys use $ prefix for CSS custom properties.\n *\n * Color tokens resolve against the current palette config (see\n * {@link getColorTokens}), and this map is memoized against that config's\n * version so `setPaletteConfig()` invalidates it. Prefer this over the lazy\n * {@link TOKENS} proxy when applying styles from React (`GlobalStyles`).\n *\n * Includes:\n * - Base tokens ($gap, $radius, etc.)\n * - Space tokens ($space-xs, $space-sm, etc.)\n * - Size tokens ($size-xs, $size-sm, etc.)\n * - Shadow tokens ($shadow, $item-shadow, etc.)\n * - Layout tokens ($max-content-width, $topbar-height, etc.)\n * - Typography tokens ($h1-font-size, $t3-line-height, etc.)\n * - Color tokens ($purple-color, $purple-color-rgb, etc.)\n */\nlet tokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\nexport function getTokens(): Styles {\n const version = getPaletteVersion();\n\n if (!tokensCache || cachedVersion !== version) {\n tokensCache = {\n ...BASE_TOKENS,\n ...SPACE_TOKENS,\n ...SIZE_TOKENS,\n ...SHADOW_TOKENS,\n ...LAYOUT_TOKENS,\n ...generateTypographyTokens(TYPOGRAPHY_PRESETS),\n ...getColorTokens(),\n };\n cachedVersion = version;\n }\n return tokensCache;\n}\n\n/** Lazy proxy of {@link getTokens}. Prefer `getTokens()` in new code. */\nexport const TOKENS: Styles = lazyStyles(getTokens);\n\n// Re-export category modules for direct access\nexport { COLOR_TOKENS, getColorTokens, renderColorTokens } from './colors';\n// Reads hue / saturation / tone off a colour — what the palette's `accentColor` and\n// `baseColor` seeds are resolved through.\nexport { colorSeed } from './color-seed';\nexport type { ColorSeed } from './color-seed';\n// Adaptive one-off themes built at runtime from an arbitrary hue, named by a\n// hash of their config so identical requests share one injection.\nexport { colorThemeSeed, getColorTheme, useColorTheme } from './color-theme';\nexport type { ColorTheme, ColorThemeConfig } from './color-theme';\nexport {\n getCodeTheme,\n getPalette,\n getPaletteTokens,\n PALETTE_TOKENS,\n renderPaletteTokens,\n} from './palette';\nexport type { RenderPaletteOptions } from './palette';\nexport {\n DEFAULT_PALETTE_CONFIG,\n getPaletteConfig,\n getPaletteConfigInput,\n invalidatePaletteTokens,\n MAX_BASE_SATURATION,\n resetPaletteConfig,\n resolvePaletteConfig,\n setPaletteConfig,\n subscribePaletteConfig,\n usePaletteConfig,\n usePaletteVersion,\n} from './palette-config';\nexport type {\n PaletteCodeSeed,\n PaletteConfig,\n PaletteNumericSeed,\n PaletteSeed,\n PaletteThemeName,\n ResolvedPaletteConfig,\n ResolvedThemeSeed,\n SurfaceMode,\n} from './palette-config';\nexport { SIZES, SIZE_NAME_TO_KEY, SIZE_TOKENS } from './sizes';\nexport type { SizeKey, SizeName } from './sizes';\nexport { SPACE_TOKENS } from './spacing';\nexport { SHADOW_TOKENS } from './shadows';\nexport { LAYOUT_TOKENS } from './layout';\nexport { BASE_TOKENS } from './base';\nexport { TYPOGRAPHY_PRESETS } from './typography';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,IAAI,cAA6B;AACjC,IAAI,gBAAgB;AAEpB,SAAgB,YAAoB;CAClC,MAAM,UAAU,mBAAmB;AAEnC,KAAI,CAAC,eAAe,kBAAkB,SAAS;AAC7C,gBAAc;GACZ,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG,yBAAyB,mBAAmB;GAC/C,GAAG,gBAAgB;GACpB;AACD,kBAAgB;;AAElB,QAAO;;;AAIT,MAAa,SAAiB,WAAW,UAAU"}
|
package/dist/tokens/layout.js
CHANGED