@cube-dev/ui-kit 0.0.0-canary-a9d94d7 → 0.0.0-canary-a1aba4f
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_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 +4 -4
- 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 +1 -1
- package/dist/components/actions/Button/Button.d.ts +0 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.d.ts +1 -2
- 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.d.ts +0 -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 +2 -3
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +2 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +39 -23
- 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/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/index.d.ts +0 -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 +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -2
- 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 +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +2 -15
- 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/{ColorSwatch → color}/ColorSwatch.d.ts +2 -8
- package/dist/components/fields/{ColorSwatch → color}/ColorSwatch.js +6 -14
- package/dist/components/fields/color/ColorSwatch.js.map +1 -0
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/fields/color/index.d.ts +1 -0
- package/dist/components/fields/index.d.ts +1 -2
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.js +1 -1
- package/dist/components/layout/Board/WidgetHost.js +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-store.js +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +13 -43
- package/dist/components/other/Calendar/Calendar.js.map +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +10 -30
- package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +9 -5
- package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +61 -0
- package/dist/components/other/Calendar/CalendarHeader.js.map +1 -0
- package/dist/components/other/Calendar/CalendarPanel.js +195 -0
- package/dist/components/other/Calendar/CalendarPanel.js.map +1 -0
- package/dist/components/other/Calendar/PeriodCalendar.js +160 -196
- package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +144 -0
- package/dist/components/other/Calendar/PeriodGrid.js.map +1 -0
- package/dist/components/other/Calendar/RangeCalendar.js +11 -40
- package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
- package/dist/components/other/Calendar/styled.js +64 -0
- package/dist/components/other/Calendar/styled.js.map +1 -0
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +1 -2
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +0 -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/Modal/types.d.ts +0 -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.d.ts +0 -2
- 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/index.d.ts +0 -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/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +15 -2
- package/dist/i18n/locales/en-US/uikit.js +15 -2
- package/dist/i18n/locales/en-US/uikit.json.d.ts +14 -1
- package/dist/i18n/locales/es-ES/uikit.js +15 -2
- package/dist/i18n/locales/es-MX/uikit.js +15 -2
- package/dist/i18n/locales/fr-FR/uikit.js +15 -2
- package/dist/i18n/locales/it-IT/uikit.js +15 -2
- package/dist/i18n/locales/ja-JP/uikit.js +15 -2
- package/dist/i18n/locales/nb-NO/uikit.js +15 -2
- package/dist/i18n/locales/pt-BR/uikit.js +15 -2
- package/dist/i18n/locales/pt-PT/uikit.js +15 -2
- package/dist/i18n/locales/sv-SE/uikit.js +15 -2
- package/dist/i18n/locales/vi-VN/uikit.js +15 -2
- 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 +3 -4
- package/dist/index.js +3 -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-theme.d.ts +1 -8
- package/dist/tokens/color-theme.js +7 -19
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.d.ts +1 -2
- package/dist/tokens/index.js +1 -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 +9 -139
- package/dist/tokens/palette-config.js +10 -46
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.js +157 -397
- 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 +2 -2
- package/docs/Theming.md +30 -257
- package/docs/components/fields/PeriodPicker.md +44 -4
- package/docs/components/other/Calendar.md +189 -0
- package/docs/glaze/api.md +38 -117
- package/docs/glaze/methodology.md +13 -15
- package/docs/glaze/okhst.md +0 -4
- package/package.json +2 -2
- package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +0 -1
- package/dist/components/fields/ColorSwatch/index.d.ts +0 -2
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
- package/dist/components/portal/PortalProvider.d.ts +0 -2
- package/dist/tokens/color-seed.d.ts +0 -44
- package/dist/tokens/color-seed.js +0 -48
- package/dist/tokens/color-seed.js.map +0 -1
- package/docs/components/fields/ColorSwatch.md +0 -148
package/docs/glaze/api.md
CHANGED
|
@@ -411,9 +411,9 @@ promotion for that color.
|
|
|
411
411
|
|
|
412
412
|
## Manual contrast level
|
|
413
413
|
|
|
414
|
-
`contrastLevel`
|
|
415
|
-
|
|
416
|
-
|
|
414
|
+
`contrastLevel` turns contrast from a two-tier switch into a `0–100` slider.
|
|
415
|
+
It is a config field, so it works globally, per theme, per token, and through
|
|
416
|
+
`extend()`:
|
|
417
417
|
|
|
418
418
|
```ts
|
|
419
419
|
glaze.configure({ contrastLevel: 60 });
|
|
@@ -421,17 +421,12 @@ const theme = glaze(280, 80, { contrastLevel: 60 });
|
|
|
421
421
|
glaze.color('#26fcb2', { contrastLevel: 60 });
|
|
422
422
|
```
|
|
423
423
|
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
|
430
|
-
| ---------------- | -------------------------------------------------------------------------- |
|
|
431
|
-
| `'auto'` | Default. The normal variants take the authored normal entries as-is. |
|
|
432
|
-
| `0` | The same thing, reached through the slider — output-identical to `'auto'`. |
|
|
433
|
-
| `100` | The normal variants *are* the high-contrast ones, so the tier is dropped. |
|
|
434
|
-
| anything between | The normal variants are resolved *at* that level. |
|
|
424
|
+
| Value | Meaning |
|
|
425
|
+
| ---------------- | -------------------------------------------------------------------- |
|
|
426
|
+
| `'auto'` | Default. The two-tier model: normal variants plus a high-contrast tier. |
|
|
427
|
+
| `0` | Normal contrast, with **no** high-contrast tier. |
|
|
428
|
+
| `100` | The high-contrast scheme as the only scheme. |
|
|
429
|
+
| anything between | Resolved *at* that level. |
|
|
435
430
|
|
|
436
431
|
Levels `0` and `100` reproduce the classic `light` / `dark` and
|
|
437
432
|
`lightContrast` / `darkContrast` output **bit for bit**.
|
|
@@ -451,9 +446,6 @@ The interpolated values are then fed through the ordinary resolve, so a
|
|
|
451
446
|
contrast floor at any level is **solved**, not approximated, and `autoFlip`
|
|
452
447
|
decides once per level.
|
|
453
448
|
|
|
454
|
-
These feed the two **normal** passes only. The high-contrast passes bypass the
|
|
455
|
-
level entirely, so the tier resolves exactly as it does in `'auto'` mode.
|
|
456
|
-
|
|
457
449
|
Everything that does not vary by high contrast today — hue, saturation,
|
|
458
450
|
`darkDesaturation`, `opacity`, `pastel` — is unaffected by the level.
|
|
459
451
|
|
|
@@ -503,35 +495,24 @@ directly.
|
|
|
503
495
|
|
|
504
496
|
### High-contrast output
|
|
505
497
|
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
-
|
|
514
|
-
|
|
498
|
+
A manual level already carries the contrast preference, so there is no second
|
|
499
|
+
tier to emit:
|
|
500
|
+
|
|
501
|
+
- `resolve()` still returns four variants, but `lightContrast` / `darkContrast`
|
|
502
|
+
**mirror** `light` / `dark`.
|
|
503
|
+
- A **global** level turns high-contrast output off outright, so
|
|
504
|
+
`tokens()` / `tasty()` / `json()` / `dtcg()` / `dtcgResolver()` / `tailwind()`
|
|
505
|
+
emit no high-contrast tier. `modes.highContrast` goes inert — it reads as
|
|
506
|
+
"emit a separate high-contrast set *when* contrast is automatic" — so leaving
|
|
507
|
+
`highContrast: true` set in a build config while a user switches their
|
|
508
|
+
preference from auto to manual is fine, and silent.
|
|
515
509
|
- `css()` always returns four strings and ignores `modes`, so its
|
|
516
|
-
`lightContrast` / `darkContrast` strings
|
|
517
|
-
|
|
518
|
-
|
|
510
|
+
`lightContrast` / `darkContrast` strings repeat the normal declarations —
|
|
511
|
+
an existing `@media (prefers-contrast: more)` block keeps matching the base
|
|
512
|
+
block as the level changes, with nothing to rewire.
|
|
519
513
|
- A level on a **single theme or token** does not change which modes are
|
|
520
|
-
emitted
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
| `contrastLevel` | `modes.highContrast: false` (default) | `modes.highContrast: true` |
|
|
524
|
-
| ----------------- | ------------------------------------- | ---------------------------------------- |
|
|
525
|
-
| `'auto'` / `0` | `light`, `dark` | + `lightContrast`, `darkContrast` |
|
|
526
|
-
| `1`–`99` | `light`, `dark` at the level | + the tier, unchanged by the level |
|
|
527
|
-
| `100` (global) | `light`, `dark` = the HC values | same — the tier is dropped as a duplicate |
|
|
528
|
-
|
|
529
|
-
That last row is the one exception. At level 100 the normal variants *are* the
|
|
530
|
-
high-contrast ones, so a separate tier would be an exact duplicate: a global
|
|
531
|
-
level of 100 emits a single light/dark set, and even an explicit
|
|
532
|
-
`modes: { highContrast: true }` on the call is suppressed, because it has nothing
|
|
533
|
-
different left to ask for. A level of 100 on a single theme or token still
|
|
534
|
-
reports into the tier, with values equal to its own normal ones.
|
|
514
|
+
emitted. Sibling themes in a palette keep their real high-contrast tier, and
|
|
515
|
+
the manual one reports its own resolved values there.
|
|
535
516
|
|
|
536
517
|
### Driving it at runtime
|
|
537
518
|
|
|
@@ -545,9 +526,8 @@ slider.oninput = () => {
|
|
|
545
526
|
};
|
|
546
527
|
```
|
|
547
528
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
those values.
|
|
529
|
+
Because a manual level skips the two high-contrast passes, a manual resolve is
|
|
530
|
+
also half the work of an `'auto'` one.
|
|
551
531
|
|
|
552
532
|
### Clearing it, exporting it, base links
|
|
553
533
|
|
|
@@ -560,9 +540,7 @@ those values.
|
|
|
560
540
|
matches how `modes` and `states` are treated.
|
|
561
541
|
- **Set the level globally, or on both sides of a base link.** A per-token level
|
|
562
542
|
on a dependent but not on its base anchors the two at different levels — the
|
|
563
|
-
same caveat as a per-instance `lightTone` override.
|
|
564
|
-
high-contrast tier too, since a dependent's high-contrast variant reads its
|
|
565
|
-
base's high-contrast slots (and at level 100, the base's mirrored normal ones).
|
|
543
|
+
same caveat as a per-instance `lightTone` override.
|
|
566
544
|
|
|
567
545
|
`resolveContrastForLevel(spec, level, polarity?)` is exported for advanced use;
|
|
568
546
|
see [Contrast solver](#contrast-solver).
|
|
@@ -581,9 +559,8 @@ type ColorDef = RegularColorDef | ShadowColorDef | MixColorDef;
|
|
|
581
559
|
|
|
582
560
|
| Field | Type | Description |
|
|
583
561
|
| ------------ | ------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
584
|
-
| `
|
|
585
|
-
| `
|
|
586
|
-
| `saturation` | `number` | Saturation factor applied to the seed saturation (0–1). Default: `1`. With `from`, setting it overrides the color's absolute saturation and reverts to a factor of the seed. |
|
|
562
|
+
| `tone` | `HCPair<ToneValue>` | Number = absolute (0–100). `'+N'`/`'-N'` = a signed **tone delta** from the base (requires `base`). `'max'`/`'min'` = forced to the scheme's tone extreme (no `base`). Optional HC pair `[normal, hc]`. |
|
|
563
|
+
| `saturation` | `number` | Saturation factor applied to the seed saturation (0–1). Default: `1`. |
|
|
587
564
|
| `hue` | `number \| RelativeValue` | Number = absolute (0–360). String (`'+N'`/`'-N'`) = relative to the **theme seed hue** (never to a base color). |
|
|
588
565
|
| `darkHue` | `number \| RelativeValue` | Dark-scheme hue. Number = absolute (0–360). String = relative to the **theme dark seed hue**. Falls back to `hue`. See [Dark seed](#dark-seed-darkhue--darksaturation). |
|
|
589
566
|
| `darkSaturation` | `number` | Dark-scheme saturation factor (0–1) over the dark seed saturation. Falls back to `saturation`. When set, the global `darkDesaturation` reduction is **not** applied on top. |
|
|
@@ -596,61 +573,6 @@ type ColorDef = RegularColorDef | ShadowColorDef | MixColorDef;
|
|
|
596
573
|
| `role` | `RoleInput` | Semantic role against `base` (`'text'` / `'surface'` / `'border'` or an alias). Fixes APCA contrast polarity. Resolved via: explicit `role` → name inference → opposite of the base's role → `'text'`. See [Roles](#roles). |
|
|
597
574
|
| `inherit` | `boolean` | Whether this color is inherited by child themes via `extend()`. Default: `true`. Set to `false` to make the color local to the current theme. |
|
|
598
575
|
|
|
599
|
-
#### `from` (a literal color)
|
|
600
|
-
|
|
601
|
-
Most of Glaze answers the question "design me a palette". `from` answers the
|
|
602
|
-
other one: **"honor this color."** White-label products, multi-tenant branding
|
|
603
|
-
and imported design tokens all arrive with a value already chosen, and it is a
|
|
604
|
-
contract rather than a starting point.
|
|
605
|
-
|
|
606
|
-
```ts
|
|
607
|
-
const theme = glaze(280, 80);
|
|
608
|
-
|
|
609
|
-
theme.colors({
|
|
610
|
-
surface: { tone: 100, saturation: 0.12 },
|
|
611
|
-
brand: { from: '#2f5bff', base: 'surface', contrast: 3 },
|
|
612
|
-
});
|
|
613
|
-
```
|
|
614
|
-
|
|
615
|
-
It accepts the same values as [`glaze.color()`](#input-forms) and supplies three
|
|
616
|
-
things at once: `hue`, `tone`, and — uniquely among theme colors — an
|
|
617
|
-
**absolute saturation**.
|
|
618
|
-
|
|
619
|
-
That last one is the point. Every other color's `saturation` is a 0–1 factor of
|
|
620
|
-
the theme seed, so the seed is a ceiling: without `from`, the only way to place
|
|
621
|
-
a color more saturated than its theme is to re-seed the whole theme, dragging
|
|
622
|
-
every sibling along. A `from` color carries its own chroma and is unaffected by
|
|
623
|
-
the seed:
|
|
624
|
-
|
|
625
|
-
```ts
|
|
626
|
-
// Identical output at every seed saturation — the color is the color.
|
|
627
|
-
for (const seed of [5, 50, 100]) {
|
|
628
|
-
glaze(280, seed).colors({ brand: { from: '#2f5bff' } }); // → #2f5bff
|
|
629
|
-
}
|
|
630
|
-
```
|
|
631
|
-
|
|
632
|
-
**What "exactly" covers.** The **light, normal-contrast** variant reproduces the
|
|
633
|
-
value (a local `lightTone: false`, the same default the value-shorthand form of
|
|
634
|
-
`glaze.color()` applies). Dark and high contrast adapt as usual. That asymmetry
|
|
635
|
-
is deliberate: those are the variants a reader reaches for when the normal one
|
|
636
|
-
does not work for them, so readability outranks fidelity there — and a color
|
|
637
|
-
pinned across all four would just be a worse `mode: 'static'`.
|
|
638
|
-
|
|
639
|
-
A `contrast` floor still applies in every scheme and is still a floor, not a
|
|
640
|
-
target: a value that already clears it is emitted untouched, and one that misses
|
|
641
|
-
moves only as far as the floor. Because the floor is solved per scheme, which
|
|
642
|
-
scheme comes out exact depends on the color — a light brand cannot clear 3:1 on
|
|
643
|
-
a white page but clears it easily on a dark one.
|
|
644
|
-
|
|
645
|
-
Sibling fields win over what the value supplied, so `{ from: '#2f5bff', hue: 300 }`
|
|
646
|
-
keeps the saturation and tone and rotates the hue. Note that a `saturation`
|
|
647
|
-
written alongside `from` reverts to its usual meaning — a factor of the seed,
|
|
648
|
-
not of the color.
|
|
649
|
-
|
|
650
|
-
A `from` color needs no `base` and no `tone`: it is placed absolutely, so it
|
|
651
|
-
stands as a root on its own. Add `base` + `contrast` when it has to stay legible
|
|
652
|
-
against something.
|
|
653
|
-
|
|
654
576
|
#### Tone values
|
|
655
577
|
|
|
656
578
|
`tone` (0–100) replaces authored OKHSL lightness with a contrast-shaped axis.
|
|
@@ -677,7 +599,7 @@ delta is kept and clamped on the authored side.
|
|
|
677
599
|
|
|
678
600
|
**Extreme tone** (`'max'` / `'min'`) forces the color to the scheme's tone extreme without a contrast hack or a magic number. `'max'` resolves to author tone 100 and `'min'` to 0. Without a `base`, both flow through scheme mapping like an absolute tone, so under `mode: 'auto'` they invert in dark (`'max'` is lightest in light, darkest in dark). Use `mode: 'static'` to pin the same extreme across schemes, or `mode: 'fixed'` to keep the same end without inverting. No `base` required.
|
|
679
601
|
|
|
680
|
-
**Extreme tone with a `base`** keeps the pair's contrast across schemes. The tone windows are asymmetric by default (`lightTone: [10, 100]`, `darkTone: [15, 95]`), so re-mapping the extreme through the dark window would squeeze the base-to-extreme span and cost contrast. Instead Glaze measures the tone shift the light scheme applied between the base and the extreme, then replays it against the base's resolved dark tone — mirrored under `mode: 'auto'` (both ends invert), same-signed under `'fixed'`. The result is clamped to `[0, 100]` only, so it may cross the `darkTone` window edge; that is intentional, since the author asked for the extreme. When the shift does not fit above or below the dark base, the color pins at tone 100 / 0. `mode: 'static'` is unaffected
|
|
602
|
+
**Extreme tone with a `base`** keeps the pair's contrast across schemes. The tone windows are asymmetric by default (`lightTone: [10, 100]`, `darkTone: [15, 95]`), so re-mapping the extreme through the dark window would squeeze the base-to-extreme span and cost contrast. Instead Glaze measures the tone shift the light scheme applied between the base and the extreme, then replays it against the base's resolved dark tone — mirrored under `mode: 'auto'` (both ends invert), same-signed under `'fixed'`. The result is clamped to `[0, 100]` only, so it may cross the `darkTone` window edge; that is intentional, since the author asked for the extreme. When the shift does not fit above or below the dark base, the color pins at tone 100 / 0. `mode: 'static'` is unaffected, and high-contrast variants already use the full range.
|
|
681
603
|
|
|
682
604
|
```ts
|
|
683
605
|
theme.colors({
|
|
@@ -1789,11 +1711,11 @@ boundaries, not the tone transfer.
|
|
|
1789
1711
|
| `states.dark` | `'@media(prefers-color-scheme: dark)'` | State alias for dark mode tokens ([Tasty](https://tasty.style) export). Defaults to a media query so tokens react to the OS preference without registering custom states. |
|
|
1790
1712
|
| `states.highContrast` | `'@media(prefers-contrast: more)'` | State alias for HC tokens ([Tasty](https://tasty.style) export). |
|
|
1791
1713
|
| `modes.dark` | `true` | Include dark variants in exports. |
|
|
1792
|
-
| `modes.highContrast` | `false` | Include HC variants.
|
|
1714
|
+
| `modes.highContrast` | `false` | Include HC variants. Inert while a global [`contrastLevel`](#manual-contrast-level) is set — a manual level has no separate HC tier, so this reads as "emit HC variants when contrast is automatic". |
|
|
1793
1715
|
| `shadowTuning` | `undefined` | Default tuning for all shadow colors. Per-color tuning merges field-by-field. |
|
|
1794
1716
|
| `autoFlip` | `true` | Default for each color's `autoFlip`. When solving `contrast` (or applying a relative `tone` that overshoots `[0, 100]`), allow crossing to the opposite side instead of clamping. With `false`, only the requested direction is considered; unmet contrasts pin the tone to that direction's extreme (and emit a warning) and overshooting offsets clamp to the boundary. Override per color via [`autoFlip`](#autoflip). |
|
|
1795
1717
|
| `inferRole` | `true` | Infer each color's [`role`](#roles) from its name when no explicit `role` is set. Set to `false` to opt out of name-based inference (the base-opposite and foreground-default fallbacks still apply). |
|
|
1796
|
-
| `contrastLevel` | `'auto'` | Manual contrast level, `0`–`100`,
|
|
1718
|
+
| `contrastLevel` | `'auto'` | Manual contrast level, `0`–`100`, replacing the two-tier high-contrast model with a slider. `0` reproduces the normal output and `100` the high-contrast output, bit for bit. See [Manual contrast level](#manual-contrast-level). |
|
|
1797
1719
|
|
|
1798
1720
|
| Method | Description |
|
|
1799
1721
|
| ------------------------- | ----------------------------------------------------------------------------------- |
|
|
@@ -1801,7 +1723,7 @@ boundaries, not the tone transfer.
|
|
|
1801
1723
|
| `glaze.getConfig()` | Snapshot the current resolved config (shallow copy). |
|
|
1802
1724
|
| `glaze.resetConfig()` | Reset to defaults (also bumps the version counter). |
|
|
1803
1725
|
|
|
1804
|
-
Themes and standalone color tokens keep a sparse local `GlazeConfigOverride` and merge the live global at resolve time for omitted fields. Authoring `.export(override?)` freezes the effective merge at call time; restored instances pin that freeze. `pastel` is instance-only (theme/token override or per-color) — not set via `configure()`. `contrastLevel` is the one field the freeze treats as a live preference: only an instance-authored level is written to the snapshot ([why](#
|
|
1726
|
+
Themes and standalone color tokens keep a sparse local `GlazeConfigOverride` and merge the live global at resolve time for omitted fields. Authoring `.export(override?)` freezes the effective merge at call time; restored instances pin that freeze. `pastel` is instance-only (theme/token override or per-color) — not set via `configure()`. `contrastLevel` is the one field the freeze treats as a live preference: only an instance-authored level is written to the snapshot ([why](#two-rules-worth-knowing)).
|
|
1805
1727
|
|
|
1806
1728
|
---
|
|
1807
1729
|
|
|
@@ -1823,10 +1745,9 @@ palette.tokens({ modes: { dark: true, highContrast: true } });
|
|
|
1823
1745
|
|
|
1824
1746
|
Resolution priority (highest first):
|
|
1825
1747
|
|
|
1826
|
-
1. A global [`contrastLevel`](#manual-contrast-level)
|
|
1827
|
-
`highContrast: false`, since
|
|
1828
|
-
|
|
1829
|
-
`highContrast` alone.
|
|
1748
|
+
1. A global [`contrastLevel`](#manual-contrast-level) — pins
|
|
1749
|
+
`highContrast: false`, since a manual level leaves no separate high-contrast
|
|
1750
|
+
tier to emit. `highContrast` is inert while it is set.
|
|
1830
1751
|
2. Per-call `modes` option on `tokens` / `tasty` / `json`.
|
|
1831
1752
|
3. `glaze.configure({ modes })` — global config.
|
|
1832
1753
|
4. Built-in default: `{ dark: true, highContrast: false }`.
|
|
@@ -1987,6 +1908,6 @@ Exported constants: `APCA_PRESETS`, `APCA_HC_ENHANCEMENT` (`15`, the Enhanced Le
|
|
|
1987
1908
|
| `maxIterations` | `18` | Max binary-search iterations per branch. |
|
|
1988
1909
|
| `initialDirection` | higher-contrast side | Direction to search first (`'lighter'` or `'darker'`). |
|
|
1989
1910
|
| `flip` | `false` | When `true`, try the opposite direction if the initial one doesn't meet the target. When `false`, only the initial direction is searched — unmet contrasts pin the result to that direction's extreme. |
|
|
1990
|
-
| `preferInitial` | `false` | With `flip` on and **both** directions meeting the target, keep `initialDirection` instead of taking whichever result lands nearer `preferredTone`. Makes the chosen side independent of the target — what [`contrastLevel`](#manual-contrast-level) uses to keep a color on one side of its base across the ramp
|
|
1911
|
+
| `preferInitial` | `false` | With `flip` on and **both** directions meeting the target, keep `initialDirection` instead of taking whichever result lands nearer `preferredTone`. Makes the chosen side independent of the target — what [`contrastLevel`](#manual-contrast-level) uses to keep a color on one side of its base across the ramp. The flip fallback is unaffected. |
|
|
1991
1912
|
|
|
1992
1913
|
Result: `{ tone, contrast, met, branch: 'lighter' | 'darker' | 'preferred', flipped? }`. `flipped: true` indicates the initial direction failed and the opposite direction satisfied the target.
|
|
@@ -642,26 +642,24 @@ In HC variants, Glaze bypasses the normal tone window and uses the full
|
|
|
642
642
|
`[0, 100]` range. Edge tones can reach the edge; contrast floors have more room
|
|
643
643
|
to solve.
|
|
644
644
|
|
|
645
|
-
### A slider
|
|
645
|
+
### A slider instead of a tier
|
|
646
646
|
|
|
647
647
|
The two-tier model assumes contrast is a binary OS preference. When contrast is
|
|
648
648
|
instead a setting *your users* control, set
|
|
649
|
-
[`contrastLevel`](api.md#manual-contrast-level) to a number and
|
|
650
|
-
|
|
651
|
-
|
|
649
|
+
[`contrastLevel`](api.md#manual-contrast-level) to a number and the HC tier
|
|
650
|
+
becomes a `0–100` ramp: level `0` is your normal palette, `100` is the HC
|
|
651
|
+
palette you already authored, and everything between is resolved at that level.
|
|
652
652
|
|
|
653
653
|
The authoring work is the same — the HC pairs above are what the slider ramps
|
|
654
|
-
toward, so a palette tuned for high contrast needs no new fields. Two
|
|
655
|
-
worth planning for:
|
|
656
|
-
|
|
657
|
-
- The
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
- `contrastLevel: 0` is the natural rest position for a slider you ship but
|
|
664
|
-
default off — it reproduces the `'auto'` output bit for bit.
|
|
654
|
+
toward, so a palette tuned for high contrast needs no new fields. Two
|
|
655
|
+
consequences worth planning for:
|
|
656
|
+
|
|
657
|
+
- The separate HC tier stops being emitted, so wire the level itself into your
|
|
658
|
+
build or runtime rather than a `prefers-contrast: more` block. Existing
|
|
659
|
+
media-query wiring keeps working; it just receives the same values as the base
|
|
660
|
+
block.
|
|
661
|
+
- `contrastLevel: 0` is a useful state in its own right: normal contrast with no
|
|
662
|
+
HC tier at all, for products that ship the slider but default it off.
|
|
665
663
|
|
|
666
664
|
## Checklist
|
|
667
665
|
|
package/docs/glaze/okhst.md
CHANGED
|
@@ -98,10 +98,6 @@ hi(f) = hi + (100 - hi) * f
|
|
|
98
98
|
`[15, 95] → [0, 100]`. The render `eps` is not interpolated, and a `false` window
|
|
99
99
|
is already the full range and therefore level-invariant.
|
|
100
100
|
|
|
101
|
-
This continuous form applies to the normal variants only. High-contrast variants
|
|
102
|
-
are already at the full range, so the level does not widen them further — the
|
|
103
|
-
bypass above is what makes the high-contrast tier level-independent.
|
|
104
|
-
|
|
105
101
|
## Scheme adaptation
|
|
106
102
|
|
|
107
103
|
Each regular color has an adaptation `mode`:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cube-dev/ui-kit",
|
|
3
|
-
"version": "0.0.0-canary-
|
|
3
|
+
"version": "0.0.0-canary-a1aba4f",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UIKit for Cube Projects",
|
|
6
6
|
"repository": {
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
"@react-types/shared": "^3.32.1",
|
|
91
91
|
"@tabler/icons-react": "^3.31.0",
|
|
92
92
|
"@tanstack/react-virtual": "^3.13.12",
|
|
93
|
-
"@tenphi/glaze": "1.
|
|
93
|
+
"@tenphi/glaze": "1.3.0",
|
|
94
94
|
"@tenphi/tasty": "^3.0.0",
|
|
95
95
|
"clipboard-copy": "^4.0.1",
|
|
96
96
|
"clsx": "^1.1.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ColorSwatch.js","names":[],"sources":["../../../../src/components/fields/ColorSwatch/ColorSwatch.tsx"],"sourcesContent":["import {\n BASE_STYLES,\n BaseProps,\n BaseStyleProps,\n BLOCK_STYLES,\n BlockStyleProps,\n DIMENSION_STYLES,\n DimensionStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { ForwardedRef, forwardRef } from 'react';\n\nimport { extractStyles } from '../../../utils/styles';\nimport { ColorValue, parseColor, toHex } from '../color/color';\n\nconst STYLE_PROPS = [\n ...BASE_STYLES,\n ...OUTER_STYLES,\n ...BLOCK_STYLES,\n ...DIMENSION_STYLES,\n];\n\nconst SwatchElement = tasty({\n qa: 'ColorSwatch',\n styles: {\n display: 'block',\n\n /**\n * The control the swatch sits in, when there is one.\n *\n * `Item`, `Button` and `TextInputBase` all publish their own height as\n * `$size`, and a custom property reaches any descendant — so a swatch in an\n * icon, prefix or suffix slot reads the host's height without either side\n * knowing about the other. `$swatch-host` is the fallback chain: an explicit\n * `size` pins it, and outside a control the medium default stands in.\n *\n * The named sizes are stated as the *host* they would fit, not as the swatch\n * itself, so the `- 1x` below is the single place the inset is expressed.\n */\n '$swatch-host': {\n // `var(--size, 4x)` — a host wins, and 32px is a medium control.\n '': '($size, 4x)',\n // An explicit size ignores the host: these are 28/32/36, one `1x` above\n // the 20/24/28 the swatch ends up at.\n 'size=small': '3.5x',\n 'size=medium': '4x',\n 'size=large': '4.5x',\n },\n '$swatch-size': '($swatch-host - 1x)',\n\n width: '$swatch-size $swatch-size',\n height: '$swatch-size $swatch-size',\n radius: '1r',\n fill: {\n '': '(#color-picker, #clear)',\n empty: '#clear',\n },\n shadow: 'inset 0 0 0 1bw #dark.15',\n // A single diagonal stroke is the conventional \"no color\" swatch.\n image: {\n '': false,\n empty:\n 'linear-gradient(to bottom right, #clear 46%, #danger 46%, #danger 54%, #clear 54%)',\n },\n },\n});\n\nexport interface CubeColorSwatchProps\n extends BaseProps,\n BaseStyleProps,\n OuterStyleProps,\n BlockStyleProps,\n DimensionStyleProps {\n /** The color to show. Anything the color inputs accept; `null` shows the empty state. */\n color?: string | ColorValue | null;\n /**\n * The edge of the swatch: 20px, 24px or 28px. Left unset, the swatch tracks\n * the control around it — `1x` inside its height — and falls back to `medium`\n * where there is no control.\n */\n size?: 'small' | 'medium' | 'large' | (string & {});\n styles?: Styles;\n}\n\n/**\n * A square of color. Decorative on its own — pair it with the value as text, or\n * with a control that names it.\n *\n * The color travels as an inline custom property rather than through `styles`,\n * so the swatch keeps a single cached style rule however often it changes.\n */\nexport const ColorSwatch = forwardRef(function ColorSwatch(\n props: CubeColorSwatchProps,\n ref: ForwardedRef<HTMLDivElement>,\n) {\n const { color, mods, qa, size } = props;\n const styles = extractStyles(props, STYLE_PROPS);\n\n const resolved =\n typeof color === 'string' ? parseColor(color) : color ?? null;\n\n return (\n <SwatchElement\n ref={ref}\n qa={qa}\n data-size={size}\n mods={{ empty: !resolved, ...mods }}\n styles={styles}\n style={resolved ? { '--color-picker-color': toHex(resolved) } : undefined}\n />\n );\n});\n"],"mappings":";;;;;;;;AAkBA,MAAM,cAAc;CAClB,GAAG;CACH,GAAG;CACH,GAAG;CACH,GAAG;CACJ;AAED,MAAM,gBAAgB,MAAM;CAC1B,IAAI;CACJ,QAAQ;EACN,SAAS;EAcT,gBAAgB;GAEd,IAAI;GAGJ,cAAc;GACd,eAAe;GACf,cAAc;GACf;EACD,gBAAgB;EAEhB,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,MAAM;GACJ,IAAI;GACJ,OAAO;GACR;EACD,QAAQ;EAER,OAAO;GACL,IAAI;GACJ,OACE;GACH;EACF;CACF,CAAC;;;;;;;;AA0BF,MAAa,cAAc,WAAW,SAAS,YAC7C,OACA,KACA;CACA,MAAM,EAAE,OAAO,MAAM,IAAI,SAAS;CAClC,MAAM,SAAS,cAAc,OAAO,YAAY;CAEhD,MAAM,WACJ,OAAO,UAAU,WAAW,WAAW,MAAM,GAAG,SAAS;AAE3D,QACE,oBAAC;EACM;EACD;EACJ,aAAW;EACX,MAAM;GAAE,OAAO,CAAC;GAAU,GAAG;GAAM;EAC3B;EACR,OAAO,WAAW,EAAE,wBAAwB,MAAM,SAAS,EAAE,GAAG;GAChE;EAEJ"}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
//#region src/tokens/color-seed.d.ts
|
|
3
|
-
/**
|
|
4
|
-
* Turns a colour into the three numbers the palette is seeded from.
|
|
5
|
-
*
|
|
6
|
-
* A deliberate LEAF: it imports Glaze and nothing else. `./palette-config` reads it
|
|
7
|
-
* from inside `resolveConfig`, and `./palette-config` is the one module the token
|
|
8
|
-
* graph is not allowed to have a cycle through — so anything this file imported
|
|
9
|
-
* would become a `palette-config` dependency too. Glaze has no edge back into the
|
|
10
|
-
* token modules, so it is safe; `./palette` (which owns `TINT_RECIPE` and the global
|
|
11
|
-
* `glaze.configure`) is not.
|
|
12
|
-
*
|
|
13
|
-
* There is no ordering hazard either, even though `./palette` runs
|
|
14
|
-
* `glaze.configure()` at module scope and this file may be called before that
|
|
15
|
-
* happens. A bare-string colour token defaults to `lightTone: false`, so its light
|
|
16
|
-
* variant preserves the input tone exactly and its hue and saturation come straight
|
|
17
|
-
* off the parse — all three readings are independent of the global config.
|
|
18
|
-
*/
|
|
19
|
-
/** Hue, saturation and tone read off a colour, on the palette's own scales. */
|
|
20
|
-
interface ColorSeed {
|
|
21
|
-
/** 0–360. */
|
|
22
|
-
hue: number;
|
|
23
|
-
/** 0–100 — the palette's seed scale, not Glaze's 0–1 factor. */
|
|
24
|
-
saturation: number;
|
|
25
|
-
/** 0–100 on the OKHST tone axis. */
|
|
26
|
-
tone: number;
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Read a colour's hue, saturation and tone.
|
|
30
|
-
*
|
|
31
|
-
* Accepts anything Glaze parses — hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()`,
|
|
32
|
-
* `oklch()`. CSS colour keywords (`rebeccapurple`) are **not** supported.
|
|
33
|
-
*
|
|
34
|
-
* Returns `null` on anything unparseable, having warned once, so a caller can fall
|
|
35
|
-
* back to its numeric seed instead of throwing on a typo in a settings field.
|
|
36
|
-
*
|
|
37
|
-
* ```ts
|
|
38
|
-
* colorSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19, tone: 65.78 }
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
declare function colorSeed(value: string): ColorSeed | null;
|
|
42
|
-
//#endregion
|
|
43
|
-
export { ColorSeed, colorSeed };
|
|
44
|
-
//# sourceMappingURL=color-seed.d.ts.map
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-a9d94d7 | 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
|
|
@@ -1 +0,0 @@
|
|
|
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"}
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
# ColorSwatch
|
|
2
|
-
|
|
3
|
-
A square of color. It is the smallest piece of the color family —
|
|
4
|
-
[ColorPicker](./ColorPicker.md),
|
|
5
|
-
[ColorInput](./ColorInput.md) and
|
|
6
|
-
[ColorSwatchGroup](./ColorSwatchGroup.md) all draw one, and it is
|
|
7
|
-
exported so a legend, a list row or a table cell can draw the same one.
|
|
8
|
-
|
|
9
|
-
It is decorative on its own: it carries no text and no accessible name. Pair it
|
|
10
|
-
with the value written out, or put it in a control that names it.
|
|
11
|
-
|
|
12
|
-
## When to Use
|
|
13
|
-
|
|
14
|
-
- Next to a color value in a list, a table or a chart legend
|
|
15
|
-
- In the `icon` / `rightIcon` / `prefix` / `suffix` slot of an `Item` or `Button`
|
|
16
|
-
- As the color part of a custom control built on top of the color fields
|
|
17
|
-
|
|
18
|
-
## Component
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
### Properties
|
|
23
|
-
|
|
24
|
-
- **`color`** `string | ColorValue | null` — The color to show. Anything the color fields accept — `#7a4dbf`, `rgb(122 77 191)`, `oklch(…)`. `null`, or a string that cannot be parsed, shows the empty state
|
|
25
|
-
- **`size`** `'small' | 'medium' | 'large'` — The edge of the swatch: `20px`, `24px` or `28px`. Left unset, the swatch tracks the control around it (see below)
|
|
26
|
-
|
|
27
|
-
### Base Properties
|
|
28
|
-
|
|
29
|
-
Supports [Base properties](../../BaseProperties.md)
|
|
30
|
-
|
|
31
|
-
### Styling Properties
|
|
32
|
-
|
|
33
|
-
#### styles
|
|
34
|
-
|
|
35
|
-
Customizes the swatch itself. `width` and `height` set here win over both the
|
|
36
|
-
`size` prop and the automatic sizing.
|
|
37
|
-
|
|
38
|
-
### Style Properties
|
|
39
|
-
|
|
40
|
-
These properties allow direct style application without using the `styles` prop:
|
|
41
|
-
|
|
42
|
-
- **Base:** `display`, `font`, `preset`, `hide`, `whiteSpace`, `opacity`, `transition`
|
|
43
|
-
- **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `scrollMargin`
|
|
44
|
-
- **Dimension:** `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
|
|
45
|
-
- **Block:** `border`, `radius`, `shadow`, `outline`, `padding`, `paddingInline`, `paddingBlock`, `overflow`, `scrollbar`, `textAlign`
|
|
46
|
-
|
|
47
|
-
### Modifiers
|
|
48
|
-
|
|
49
|
-
The `mods` property accepts the following modifiers you can override:
|
|
50
|
-
|
|
51
|
-
| Modifier | Type | Description |
|
|
52
|
-
| -------- | --------- | -------------------------------------------------------------- |
|
|
53
|
-
| `empty` | `boolean` | No color to show — drawn as the conventional diagonal stroke |
|
|
54
|
-
|
|
55
|
-
## Sizes
|
|
56
|
-
|
|
57
|
-
- `small` — `20px`
|
|
58
|
-
- `medium` — `24px`
|
|
59
|
-
- `large` — `28px`
|
|
60
|
-
|
|
61
|
-
### Sizing inside a control
|
|
62
|
-
|
|
63
|
-
Leave `size` off and the swatch sizes itself to whatever it sits in. `Item`,
|
|
64
|
-
`Button` and the text inputs publish their own height as the `$size` custom
|
|
65
|
-
property, and the swatch reads it and lands `8px` inside — `20px` in a `small`
|
|
66
|
-
control, `24px` in a `medium` one, `32px` in a `large` one. Nothing has to be
|
|
67
|
-
passed between the two, so a control that changes size takes its swatch with it.
|
|
68
|
-
|
|
69
|
-
Outside a control there is nothing to read, and the swatch falls back to
|
|
70
|
-
`medium`.
|
|
71
|
-
|
|
72
|
-
## Examples
|
|
73
|
-
|
|
74
|
-
### Basic Usage
|
|
75
|
-
|
|
76
|
-
```jsx
|
|
77
|
-
<ColorSwatch color="#7a4dbf" />
|
|
78
|
-
```
|
|
79
|
-
|
|
80
|
-
### In a control
|
|
81
|
-
|
|
82
|
-
```jsx
|
|
83
|
-
<Button icon={<ColorSwatch color={color} />}>{color}</Button>
|
|
84
|
-
|
|
85
|
-
<Item icon={<ColorSwatch color={color} />} suffix={<ColorSwatch color={hover} />}>
|
|
86
|
-
Accent
|
|
87
|
-
</Item>
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### With the value spelled out
|
|
91
|
-
|
|
92
|
-
The swatch has no accessible name of its own, so the text beside it is what a
|
|
93
|
-
screen reader announces.
|
|
94
|
-
|
|
95
|
-
```jsx
|
|
96
|
-
<Space gap="1x" placeItems="center start">
|
|
97
|
-
<ColorSwatch color={value} />
|
|
98
|
-
<Text>{value}</Text>
|
|
99
|
-
</Space>
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
### A fixed size
|
|
103
|
-
|
|
104
|
-
```jsx
|
|
105
|
-
<ColorSwatch size="large" color="#26fcb2" />
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### Any other shape
|
|
109
|
-
|
|
110
|
-
```jsx
|
|
111
|
-
<ColorSwatch color="#26fcb2" radius="round" width="6x" height="6x" />
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Accessibility
|
|
115
|
-
|
|
116
|
-
`ColorSwatch` renders a plain `div` with no role and no name — a color on its
|
|
117
|
-
own is not information a screen reader can use, and an announced hex is rarely
|
|
118
|
-
what the user wants to hear.
|
|
119
|
-
|
|
120
|
-
- **Do** put the value, or the name of the thing the color belongs to, next to it
|
|
121
|
-
- **Do** rely on the surrounding control's `aria-label` when the swatch is its icon
|
|
122
|
-
- **Don't** use color as the only way to tell two rows apart
|
|
123
|
-
|
|
124
|
-
## Best Practices
|
|
125
|
-
|
|
126
|
-
1. **Do**: let a swatch inside a control size itself
|
|
127
|
-
|
|
128
|
-
```jsx
|
|
129
|
-
<Button size="small" icon={<ColorSwatch color={color} />}>
|
|
130
|
-
{color}
|
|
131
|
-
</Button>
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
2. **Don't**: hand-tune the box to match a control
|
|
135
|
-
|
|
136
|
-
```jsx
|
|
137
|
-
<Button size="small" icon={<ColorSwatch color={color} width="2.5x" height="2.5x" />}>
|
|
138
|
-
{color}
|
|
139
|
-
</Button>
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
3. **Accessibility**: never let the swatch be the only carrier of the meaning
|
|
143
|
-
|
|
144
|
-
## Related Components
|
|
145
|
-
|
|
146
|
-
- [ColorPicker](./ColorPicker.md) — a swatch that opens the color popover
|
|
147
|
-
- [ColorInput](./ColorInput.md) — the color as editable text, with a swatch inside
|
|
148
|
-
- [ColorSwatchGroup](./ColorSwatchGroup.md) — a selectable grid of swatches
|