@cube-dev/ui-kit 0.0.0-canary-d8e2a5f → 0.0.0-canary-d03ae24
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 +19 -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.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.js +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/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/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 +7 -7
- 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/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/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/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/intl.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/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 +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/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/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/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/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/FileTabs/FileTabs.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/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/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/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/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/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/colors.js +1 -2
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/palette.js +105 -105
- 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/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/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/glaze/api.md +510 -150
- package/docs/glaze/methodology.md +438 -213
- package/docs/glaze/migration.md +152 -14
- package/docs/glaze/okhst.md +308 -0
- package/package.json +4 -4
package/docs/glaze/migration.md
CHANGED
|
@@ -4,18 +4,117 @@ How to plug a Glaze palette into an existing app — exporting tokens in the rig
|
|
|
4
4
|
|
|
5
5
|
If you're starting from scratch, see [methodology.md](methodology.md) first — that's about *designing* the palette. This doc is about *consuming* it.
|
|
6
6
|
|
|
7
|
+
## Upgrading to the tone model (`lightness` → `tone`)
|
|
8
|
+
|
|
9
|
+
Glaze replaced OKHSL **lightness** with a contrast-uniform **tone** axis (OKHST). The Möbius dark-mode curve is gone — dark mode is now a single tone inversion remapped into a per-mode window. See [`docs/okhst.md`](okhst.md) for the model. This is a breaking change; here's what to update.
|
|
10
|
+
|
|
11
|
+
### Rename the authoring axis
|
|
12
|
+
|
|
13
|
+
`lightness` is gone. Replace it with `tone` everywhere:
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
// before
|
|
17
|
+
theme.colors({ surface: { lightness: 97 }, text: { base: 'surface', lightness: '-52' } });
|
|
18
|
+
// after
|
|
19
|
+
theme.colors({ surface: { tone: 97 }, text: { base: 'surface', tone: '-52' } });
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
The same applies to `glaze.color({ ..., lightness })` (structured form) → `tone`, and the `{ h, s, l }` value object is unchanged (still OKHSL) — but you can now also pass `{ h, s, t }` (OKHST) or an `okhst(H S% T%)` string.
|
|
23
|
+
|
|
24
|
+
Tone is **0–100** like the old lightness, but the *scale is contrast-uniform*, not perceptual-lightness-uniform. Numeric values won't land at the same OKHSL lightness — equal tone steps now give equal WCAG contrast. Re-eyeball absolute values (especially mid-range ones); relative deltas and contrast-floored tokens usually need no change because they were already contrast-driven.
|
|
25
|
+
|
|
26
|
+
### Config window shape
|
|
27
|
+
|
|
28
|
+
The lightness windows became tone windows, and `darkCurve` was removed (no curve to tune). The `[lo, hi]` tuple form carries over directly:
|
|
29
|
+
|
|
30
|
+
```ts
|
|
31
|
+
// before
|
|
32
|
+
glaze.configure({ lightLightness: [10, 100], darkLightness: [15, 95], darkCurve: 0.5 });
|
|
33
|
+
// after
|
|
34
|
+
glaze.configure({
|
|
35
|
+
lightTone: [10, 100],
|
|
36
|
+
darkTone: [15, 95],
|
|
37
|
+
// darkCurve removed
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`lightLightness`/`darkLightness` → `lightTone`/`darkTone`. The window value is `[lo, hi]` (reference eps — the common form), `{ lo, hi, eps }` (advanced: explicit render curvature), or `false` to disable clamping. `false` removes the *boundaries* (full `[0, 100]` range), not the contrast-uniform tone curve. Per-token `glaze.color(value, config)` overrides use the same shape.
|
|
42
|
+
|
|
43
|
+
### The `contrast` prop now selects a metric
|
|
44
|
+
|
|
45
|
+
A bare number or preset is still **WCAG** and needs no change. To use APCA or split a pair across the metric, use the object form:
|
|
46
|
+
|
|
47
|
+
```ts
|
|
48
|
+
contrast: 4.5 // unchanged — WCAG 4.5
|
|
49
|
+
contrast: { wcag: 6 } // explicit WCAG
|
|
50
|
+
contrast: { apca: 60 } // APCA Lc floor
|
|
51
|
+
contrast: { wcag: [4.5, 7] } // pair inside the metric
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Forcing extremes: `'max'` / `'min'`
|
|
55
|
+
|
|
56
|
+
For colors that should sit at the scheme's tone extreme (pure-white knockouts, near-black scrims, deliberately faint disabled chips), reach for `tone: 'max'` / `tone: 'min'` instead of a large absolute number or a low contrast floor standing in for "push it all the way". `'max'` resolves to author tone 100, `'min'` to 0, and both flow through scheme mapping (so they invert in dark under `mode: 'auto'`). No `base` required.
|
|
57
|
+
|
|
58
|
+
```ts
|
|
59
|
+
// before — low contrast as a proxy for "stay near the surface"
|
|
60
|
+
'disabled-text': { base: 'chip', tone: '+1', contrast: 1.51, mode: 'fixed' }
|
|
61
|
+
// after — say it directly with tone
|
|
62
|
+
'disabled-text': { base: 'chip', tone: '+18', saturation: 0.4, autoFlip: false }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### The `autoFlip` prop (previously `flip`)
|
|
66
|
+
|
|
67
|
+
The per-color configuration property `flip` has been renamed to `autoFlip` to align with the global `autoFlip` configuration option and to avoid confusion with dark-mode/scheme tone inversion (which is handled automatically by the system).
|
|
68
|
+
|
|
69
|
+
Relative `tone` offsets that overshoot `[0, 100]` now **mirror to the other side of the base by default** (controlled by the per-color `autoFlip`, which inherits the global `autoFlip`, default `true`). Previously such offsets always clamped to the boundary. If you relied on clamping — e.g. `tone: '+48'` to stack a color up to 100 — set `autoFlip: false` on that color (or `glaze.configure({ autoFlip: false })` globally) to restore the clamping behavior. `autoFlip` also governs the contrast solver's direction (its previous sole role).
|
|
70
|
+
|
|
71
|
+
### Resolved variants store tone
|
|
72
|
+
|
|
73
|
+
`ResolvedColorVariant` now exposes `t` (tone, 0–1) instead of `l`. If you read resolved internals, convert with `variantToOkhsl(variant).l`. Token/CSS/JSON output uses native formats by default (`oklch` for `tokens()` / `json()`, `okhsl` for `tasty()`); use `tasty({ format: 'okhsl' })` or `tasty({ format: 'okhst' })` for Glaze-native spaces.
|
|
74
|
+
|
|
75
|
+
### 0.16.0 — output format defaults and Tasty-only spaces
|
|
76
|
+
|
|
77
|
+
**Breaking changes in 0.16.0:**
|
|
78
|
+
|
|
79
|
+
| Export | Old default | New default |
|
|
80
|
+
|---|---|---|
|
|
81
|
+
| `tokens()` / `json()` (theme + palette) | `okhsl` | `oklch` |
|
|
82
|
+
| Standalone `.json()` | `okhsl` | `oklch` |
|
|
83
|
+
| `tasty()` | `okhsl` (unchanged) | `okhsl` |
|
|
84
|
+
|
|
85
|
+
`'okhsl'` and the new `'okhst'` output format are **Tasty-only**. Passing either to `css()`, `tailwind()`, `tokens()`, or `json()` throws. Migrate:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
// before
|
|
89
|
+
theme.tokens({ format: 'okhsl' })
|
|
90
|
+
theme.json()
|
|
91
|
+
|
|
92
|
+
// after — pick one
|
|
93
|
+
theme.tasty({ format: 'okhsl' }) // Tasty #name keys, okhsl strings
|
|
94
|
+
theme.tokens({ format: 'oklch' }) // native CSS (new default)
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
**New:** `splitHue` on `css()` / `tasty()` (theme + palette) and standalone `color.css()` emits hue as a separate custom property for runtime re-skinning. Requires `format: 'oklch'` and every color to be pastel. See [api.md → Hue channel splitting](api.md#hue-channel-splitting-splithue).
|
|
98
|
+
|
|
99
|
+
### Export snapshots
|
|
100
|
+
|
|
101
|
+
`theme.export()` / `color.export()` snapshots now carry `lightTone` / `darkTone` window objects (not `lightLightness` / `darkLightness`). Old exported JSON with the legacy keys will need its `config` block rewritten before `glaze.from()` / `glaze.colorFrom()`.
|
|
102
|
+
|
|
7
103
|
## Choosing an export
|
|
8
104
|
|
|
9
|
-
Glaze emits the same resolved colors in
|
|
105
|
+
Glaze emits the same resolved colors in six shapes. Pick one based on your renderer / tooling.
|
|
10
106
|
|
|
11
107
|
| Method | Output shape | Use it for |
|
|
12
108
|
|---|---|---|
|
|
13
109
|
| `palette.tasty(options?)` | `{ '#name': { '': value, '@dark': value, '@hc': value } }` | The [Tasty](https://tasty.style/docs) style system. Single object, state aliases keyed inside each token. |
|
|
14
110
|
| `palette.tokens(options?)` | `{ light: { name: value }, dark: { name: value }, ... }` | Most CSS-in-JS systems. Per-variant flat maps, easy to feed into a `:root { ... }` selector via your framework's globals. |
|
|
15
111
|
| `palette.css(options?)` | `{ light: '--name-color: rgb(...);', dark: '...', ... }` | Framework-free CSS / static stylesheets. Variant-grouped CSS custom property strings ready to wrap in `:root` and `prefers-color-scheme` queries. |
|
|
16
|
-
| `palette.json(options?)` | `{ themeName: { name: { light, dark, ... } } }` | Tooling, JSON pipelines
|
|
112
|
+
| `palette.json(options?)` | `{ themeName: { name: { light, dark, ... } } }` | Tooling, JSON pipelines. |
|
|
113
|
+
| `palette.dtcg(options?)` | `{ light: { name: { $type, $value } }, dark: { ... }, ... }` | W3C [DTCG 2025.10](https://www.designtokens.org/) `.tokens.json` — Figma, Tokens Studio, Style Dictionary, Terrazzo, Penpot. One document per scheme. |
|
|
114
|
+
| `palette.dtcgResolver(options?)` | `{ version, sets, modifiers, resolutionOrder }` | W3C DTCG **Resolver-Module** — a single document describing every scheme variant as `sets` + a `scheme` modifier with a context per variant. For resolver tools such as Dispersa. |
|
|
115
|
+
| `palette.tailwind(options?)` | `'@theme { --color-*: ... } .dark { ... } ...'` | Tailwind CSS v4. A single ready-to-paste `@theme` block plus dark / high-contrast overrides. |
|
|
17
116
|
|
|
18
|
-
|
|
117
|
+
`tasty()`, `tokens()`, `json()`, `dtcg()`, `dtcgResolver()`, and `tailwind()` accept `modes` (`{ dark, highContrast }`). `css()` always returns all four strings (`light`, `dark`, `lightContrast`, `darkContrast`). The CSS-string exports accept `format` (`'rgb' \| 'hsl' \| 'oklch'` on `tokens`/`json`/`css`/`tailwind`; `'okhsl' \| 'okhst'` on `tasty()` only); `dtcg()` and `dtcgResolver()` use `colorSpace` (`'srgb' \| 'oklch'`) instead. See [api.md → Palette](api.md#palette) for full options.
|
|
19
118
|
|
|
20
119
|
## Wiring exports into the app
|
|
21
120
|
|
|
@@ -94,9 +193,47 @@ const data = palette.json();
|
|
|
94
193
|
|
|
95
194
|
Feed into your tooling pipeline. Each color is grouped by theme name, then by token name, then by variant — no prefix logic to undo.
|
|
96
195
|
|
|
196
|
+
### W3C DTCG (`.tokens.json`)
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
import { writeFileSync } from 'node:fs';
|
|
200
|
+
const dtcg = palette.dtcg();
|
|
201
|
+
|
|
202
|
+
writeFileSync('tokens.light.tokens.json', JSON.stringify(dtcg.light, null, 2));
|
|
203
|
+
if (dtcg.dark) {
|
|
204
|
+
writeFileSync('tokens.dark.tokens.json', JSON.stringify(dtcg.dark, null, 2));
|
|
205
|
+
}
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Each document is a spec-conformant token tree. One file per scheme is the most tool-compatible convention — Style Dictionary treats them as themes, Tokens Studio as sets, and Figma as variable modes. Use `colorSpace: 'oklch'` for wide-gamut, Glaze-native values (no `hex`); the default `'srgb'` emits components plus a `hex` hint that every reader understands. Feed the files straight into Style Dictionary v4+, Tokens Studio, or any DTCG-compatible tool — no Glaze-specific transform needed.
|
|
209
|
+
|
|
210
|
+
### W3C DTCG Resolver-Module (single document)
|
|
211
|
+
|
|
212
|
+
When you want **one file** describing every scheme variant — for a resolver tool such as [Dispersa](https://github.com/dispersa-core/dispersa) — use `dtcgResolver()` instead of `dtcg()`:
|
|
213
|
+
|
|
214
|
+
```ts
|
|
215
|
+
import { writeFileSync } from 'node:fs';
|
|
216
|
+
const resolver = palette.dtcgResolver({ modes: { highContrast: true } });
|
|
217
|
+
|
|
218
|
+
writeFileSync('resolver.json', JSON.stringify(resolver, null, 2));
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The document places the light tokens in `sets.base.sources[0]` (the default context) and emits a single `scheme` modifier with a context per variant (`light` / `dark` / `lightContrast` / `darkContrast`). Each non-default context holds that variant's exact resolved tokens — Glaze resolves `darkContrast` independently, so the four-context shape keeps every value correct (two independent modifiers would compose additively and produce wrong dark + high-contrast values). Rename the set, modifier, or contexts via `setName` / `modifierName` / `contextNames` if your resolver expects different labels. Prefer `dtcg()` when you need maximum per-file tool compatibility; prefer `dtcgResolver()` when a resolver tool consumes the document for you.
|
|
222
|
+
|
|
223
|
+
### Tailwind CSS v4
|
|
224
|
+
|
|
225
|
+
```ts
|
|
226
|
+
const css = palette.tailwind();
|
|
227
|
+
// Write to your CSS entry, or paste into a `@import "tailwindcss"` stylesheet:
|
|
228
|
+
// @theme { --color-primary-surface: oklch(...); ... }
|
|
229
|
+
// .dark { --color-primary-surface: oklch(...); ... }
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
The `--color-*` namespace makes every color available as `bg-*` / `text-*` / `border-*`. Drive dark mode from the OS preference instead of a class with `darkSelector: '@media (prefers-color-scheme: dark)'` (it nests `:root` automatically). High-contrast overrides land under `.high-contrast` and `.dark.high-contrast` by default; both are omitted unless `modes.highContrast` is enabled.
|
|
233
|
+
|
|
97
234
|
## Prefix map strategies
|
|
98
235
|
|
|
99
|
-
`palette.tokens()` / `tasty()` / `css()` accept a `prefix` option:
|
|
236
|
+
`palette.tokens()` / `tasty()` / `css()` / `dtcg()` / `tailwind()` accept a `prefix` option:
|
|
100
237
|
|
|
101
238
|
| Value | Result |
|
|
102
239
|
|---|---|
|
|
@@ -176,15 +313,15 @@ Walk your current color system and bucket every token into one of these categori
|
|
|
176
313
|
- **Shadows / overlays** — elevation, scrims.
|
|
177
314
|
- **One-off colors** — syntax highlighting, charts, illustrations.
|
|
178
315
|
|
|
179
|
-
Each bucket maps cleanly to one of the patterns in [methodology.md](methodology.md). The bucket determines the *shape* of the Glaze definition (root vs dependent, `mode: 'auto'` vs `'fixed'`, contrast-floor vs absolute
|
|
316
|
+
Each bucket maps cleanly to one of the patterns in [methodology.md](methodology.md). The bucket determines the *shape* of the Glaze definition (root vs dependent, `mode: 'auto'` vs `'fixed'`, contrast-floor vs absolute tone), not the value.
|
|
180
317
|
|
|
181
318
|
### 2. Reproduce the existing values
|
|
182
319
|
|
|
183
|
-
Pick a Glaze definition shape that lands the new color *close to* the legacy hex in light mode. The methodology doc explains the shape per bucket; the API doc covers the levers (`
|
|
320
|
+
Pick a Glaze definition shape that lands the new color *close to* the legacy hex in light mode. The methodology doc explains the shape per bucket; the API doc covers the levers (`tone`, `saturation`, `contrast`, `mode`, `hue`).
|
|
184
321
|
|
|
185
322
|
Two tactics that make matching easier:
|
|
186
323
|
|
|
187
|
-
- **Anchor strong text at the edge** instead of solving for `'AAA'`. The contrast solver stops at the floor (cr=7), which usually leaves text noticeably softer than a legacy hex like `#1a1a1a`. An absolute `
|
|
324
|
+
- **Anchor strong text at the edge** instead of solving for `'AAA'`. The contrast solver stops at the floor (cr=7), which usually leaves text noticeably softer than a legacy hex like `#1a1a1a`. An absolute `tone: 2` (or wherever the legacy token sits) preserves the look.
|
|
188
325
|
- **Use numeric `contrast` ratios** for soft / accent / disabled tokens. Presets give you the WCAG floor and nothing more — for matching a designed palette you usually want a specific perceived weight, not the floor.
|
|
189
326
|
|
|
190
327
|
### 3. Keep the old token names
|
|
@@ -196,9 +333,9 @@ Use a custom `prefix` map (and theme aliases if needed) so the names your compon
|
|
|
196
333
|
// New: define them in Glaze, map the prefix so they emit unchanged.
|
|
197
334
|
|
|
198
335
|
defaultTheme.colors({
|
|
199
|
-
dark: { base: 'surface',
|
|
200
|
-
'dark-02': { base: 'surface',
|
|
201
|
-
'dark-03': { base: 'surface',
|
|
336
|
+
dark: { base: 'surface', tone: 2, saturation: 0.475 },
|
|
337
|
+
'dark-02': { base: 'surface', tone: '-1', saturation: 0.375, contrast: [9, 11] },
|
|
338
|
+
'dark-03': { base: 'surface', tone: '-1', saturation: 0.24, contrast: [4.5, 5.5] },
|
|
202
339
|
});
|
|
203
340
|
|
|
204
341
|
palette.tasty({ prefix: { default: '' } });
|
|
@@ -211,8 +348,8 @@ Once consumers are off the legacy names, rename the Glaze tokens to match your c
|
|
|
211
348
|
|
|
212
349
|
Glaze gives you light/dark/HC for free, but only the light mode is matched against the legacy palette. Before promoting the migration:
|
|
213
350
|
|
|
214
|
-
- Spot-check every surface, text, accent, and disabled pair in dark mode. The
|
|
215
|
-
- If the legacy system had no high-contrast mode, audit the HC variants Glaze emits. Anywhere the resolved cr is too low or the color blows out, add an HC pair (`
|
|
351
|
+
- Spot-check every surface, text, accent, and disabled pair in dark mode. The tone inversion plus per-color `mode` choices may produce results that *look right* in light but feel off in dark (typical fix: switch a brand color to `mode: 'fixed'`, or anchor a foreground to `surface` instead of the brand fill — see [methodology.md](methodology.md)).
|
|
352
|
+
- If the legacy system had no high-contrast mode, audit the HC variants Glaze emits. Anywhere the resolved cr is too low or the color blows out, add an HC pair (`tone: ['-7', '-20']`, `contrast: [4.5, 7]`, etc.).
|
|
216
353
|
- Run real screens, not just the token grid. The interaction of multiple Glaze tokens against each other (text on chip, hover bg vs. fill, disabled label on disabled chip) is where mismatches show up.
|
|
217
354
|
|
|
218
355
|
### 5. Trim what `extend()` doesn't need
|
|
@@ -224,9 +361,10 @@ After migration, mark every default-only token (borders, shadows, disabled chip,
|
|
|
224
361
|
| Symptom | Cause | Fix |
|
|
225
362
|
|---|---|---|
|
|
226
363
|
| Disabled state stops looking disabled in dark mode. | Alpha-tinted overlay on `surface-text` (which inverts), giving asymmetric perceived contrast. | Replace with a `mode: 'auto'` color anchored to `surface` with a numeric `contrast` (see [methodology.md → Disabled chip](methodology.md#disabled-chip-contrast-driven-for-scheme-symmetry)). |
|
|
227
|
-
| Brand color flips to its complement in dark mode. | Default `mode: 'auto'`
|
|
364
|
+
| Brand color flips to its complement in dark mode. | Default `mode: 'auto'` inverts the tone. | Set `mode: 'fixed'` so the tone is remapped (not inverted). |
|
|
228
365
|
| Brand text washes out against the dark surface. | Foreground was anchored to `accent-surface` (the brand fill), so contrast was only enforced against that fill — not the actual surface. | Anchor `accent-text` etc. to `surface` with `mode: 'auto'`. |
|
|
229
|
-
| Tokens look right in light, broken in HC. | The HC pass bypasses the
|
|
366
|
+
| Tokens look right in light, broken in HC. | The HC pass bypasses the tone window — solver runs over the full `[0, 100]` range. | Add explicit `[normal, hc]` pairs to `tone` / `contrast` for the affected tokens. |
|
|
367
|
+
| A relative `tone` like `'+48'` lands on the *wrong* (darker) side of its base. | Overshooting offsets now mirror to the other side of the base by default (`autoFlip` inherits `autoFlip`). | Set `autoFlip: false` on the color to clamp to the boundary instead, or use `tone: 'max'`/`'min'` to force the extreme. |
|
|
230
368
|
| `palette.tokens()` emits unexpected unprefixed names. | A `primary` was set on the palette (or per-call) and is duplicating the theme's tokens without prefix. | Pass `primary: false` to disable for that export, or rename `glaze.palette(themes, { primary })`. |
|
|
231
369
|
| `console.warn: token "foo" collides with theme "bar"`. | Two themes resolved to the same output key under your prefix config. | Adjust the prefix map so each token is unique, or accept the first-write-wins behavior. |
|
|
232
370
|
| `console.warn: color "X" cannot meet contrast`. | The requested contrast target is physically unreachable for the color's hue/saturation against its base. | Lower the floor, change the base, or accept the closest passing variant. Use the `name` override on standalone colors to make the warning identifiable. |
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
# OKHST — the contrast-uniform tone space
|
|
2
|
+
|
|
3
|
+
This is the canonical specification for the color model Glaze uses internally
|
|
4
|
+
and accepts as input. It is the source of truth that [api.md](api.md),
|
|
5
|
+
[methodology.md](methodology.md), and [migration.md](migration.md) reference.
|
|
6
|
+
|
|
7
|
+
## What OKHST is
|
|
8
|
+
|
|
9
|
+
**OKHST is OKHSL with its lightness axis replaced by a contrast-uniform _tone_
|
|
10
|
+
axis.** It shares OKHSL's hue (`h`, 0–360) and saturation (`s`, 0–1) verbatim;
|
|
11
|
+
only the third coordinate changes:
|
|
12
|
+
|
|
13
|
+
| Space | Coords | Third axis |
|
|
14
|
+
|---|---|---|
|
|
15
|
+
| OKHSL | `h, s, l` | `l` — perceptual lightness (toe-adjusted OKLab L) |
|
|
16
|
+
| OKHST | `h, s, t` | `t` — tone: a normalized log of luminance |
|
|
17
|
+
|
|
18
|
+
OKHST exists for one reason: in OKHSL, _equal lightness steps_ are perceptually
|
|
19
|
+
even but produce _uneven contrast_ (the ratio between adjacent steps drifts).
|
|
20
|
+
OKHST's tone axis is shaped so that _equal tone steps_ produce _even WCAG
|
|
21
|
+
contrast_ between steps. Authoring ramps in tone gives you contrast-even ladders
|
|
22
|
+
for free, and dark-mode inversion becomes a single subtraction (`100 - t`)
|
|
23
|
+
instead of a fitted curve.
|
|
24
|
+
|
|
25
|
+
OKHST is an **input space only**. It is parseable as an `okhst(H S% T%)` string
|
|
26
|
+
and an `{ h, s, t }` object, but it is **never emitted** — there is no CSS
|
|
27
|
+
`okhst()` function, so output formats stay `okhsl | rgb | hsl | oklch`.
|
|
28
|
+
|
|
29
|
+
## The tone transfer
|
|
30
|
+
|
|
31
|
+
For a gray (s = 0) at OKHSL lightness `l`, luminance is closed-form through the
|
|
32
|
+
OKHSL toe and OKLab cube:
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
Y = toeInv(l) ** 3 // OKLab L = toeInv(l); luminance ≈ L³
|
|
36
|
+
l = toe(cbrt(Y)) // exact inverse
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
(`toe` / `toeInv` already exist in [okhsl-color-math.ts](../src/okhsl-color-math.ts).)
|
|
40
|
+
|
|
41
|
+
Tone is a normalized natural-log of `Y`, offset by a small `eps`:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
toTone(Y, eps) = (ln(Y + eps) - ln(eps)) / (ln(1 + eps) - ln(eps)) * 100
|
|
45
|
+
fromTone(T, eps) = exp( (T / 100) * (ln(1 + eps) - ln(eps)) + ln(eps) ) - eps
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`toTone` and `fromTone` are exact analytic inverses, so a round-trip is lossless
|
|
49
|
+
to ~1e-15. `toTone(0) = 0` and `toTone(1) = 100` for any `eps`, so tone is always
|
|
50
|
+
a clean 0–100 scale.
|
|
51
|
+
|
|
52
|
+
### Why `eps ≈ 0.05` makes tone contrast-uniform
|
|
53
|
+
|
|
54
|
+
WCAG 2 contrast is `(Y_hi + 0.05) / (Y_lo + 0.05)`. Pick `eps = 0.05` and the
|
|
55
|
+
tone transfer becomes a normalized `ln(Y + 0.05)`. Two colors that differ by a
|
|
56
|
+
fixed tone delta `ΔT` then differ by a fixed _ratio_ of `(Y + 0.05)` — i.e. a
|
|
57
|
+
fixed WCAG contrast ratio — regardless of where on the scale they sit:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
cr(T2, T1) = (Y2 + 0.05) / (Y1 + 0.05)
|
|
61
|
+
= exp( (T2 - T1)/100 * (ln(1.05) - ln(0.05)) )
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Empirically (gray, `eps = 0.05`), each `+10` tone multiplies contrast-vs-black by
|
|
65
|
+
a near-constant factor:
|
|
66
|
+
|
|
67
|
+
| tone | cr vs black |
|
|
68
|
+
|---|---|
|
|
69
|
+
| 10 | 1.36 |
|
|
70
|
+
| 30 | 2.49 |
|
|
71
|
+
| 50 | 4.58 |
|
|
72
|
+
| 70 | 8.43 |
|
|
73
|
+
| 90 | 15.49 |
|
|
74
|
+
| 100 | 21.00 |
|
|
75
|
+
|
|
76
|
+
So a tone ramp `[20, 40, 60, 80]` has _constant_ contrast between adjacent
|
|
77
|
+
stops. That is the whole point.
|
|
78
|
+
|
|
79
|
+
## Core invariant: `T → L` is independent of `H` and `S`
|
|
80
|
+
|
|
81
|
+
`okhstToOkhsl({ h, s, t })` passes `h` and `s` through unchanged and sets
|
|
82
|
+
`l = fromTone(t)`. `fromTone` is a pure function of `(t, eps)`; OKHSL's
|
|
83
|
+
`l → OKLab L = toeInv(l)` map has no hue/saturation term — `h`/`s` enter only
|
|
84
|
+
the chroma/cusp math. Therefore:
|
|
85
|
+
|
|
86
|
+
> **A given tone yields the same OKHSL lightness for every hue and saturation.**
|
|
87
|
+
|
|
88
|
+
OKHST inherits OKHSL's gamut and reversibility exactly: every `(h, s, t)` is
|
|
89
|
+
realizable and round-trips.
|
|
90
|
+
|
|
91
|
+
**This uniformity is in lightness, not luminance.** Equal tone gives equal
|
|
92
|
+
OKHSL `L` for all `h`/`s`, but equal _WCAG/APCA contrast_ only for grays.
|
|
93
|
+
A saturated yellow and a saturated blue at the same tone share a lightness yet
|
|
94
|
+
differ in real luminance `Y`. This chromatic drift is the one honest
|
|
95
|
+
approximation in the design — see [§10 Verification](#verification-apca--wcag-drift).
|
|
96
|
+
The single deliberate exception to the invariant is the optional `contrast`
|
|
97
|
+
solver, which shifts a stop's tone per `h`/`s` to meet a luminance-based floor.
|
|
98
|
+
|
|
99
|
+
## Reference eps vs per-mode eps
|
|
100
|
+
|
|
101
|
+
Two distinct roles, kept separate on purpose:
|
|
102
|
+
|
|
103
|
+
- **Reference eps (`0.05`, fixed).** Defines the OKHST _color space_ and the
|
|
104
|
+
canonical stored tone. `okhst()` input, `{ h, s, t }` input, the internal
|
|
105
|
+
`ResolvedColorVariant.t`, relative `tone` offsets, and the contrast solver all
|
|
106
|
+
use the reference eps. This is what makes OKHST stable and scheme-independent.
|
|
107
|
+
- **Per-mode eps (`lightTone.eps`, `darkTone.eps`).** A _rendering_ curvature
|
|
108
|
+
knob per scheme. It only affects how authored tone is mapped through a scheme
|
|
109
|
+
window before the result is stored. Defaults to the reference value, so by
|
|
110
|
+
default the two coincide and there is nothing to reconcile.
|
|
111
|
+
|
|
112
|
+
When a mode's eps differs from the reference, `mapToneForScheme` maps using the
|
|
113
|
+
mode eps to land a final OKHSL `l`, then stores `toTone(l, REF_EPS)` so offsets
|
|
114
|
+
and contrast stay comparable across schemes.
|
|
115
|
+
|
|
116
|
+
## Scheme pipeline (no Möbius)
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
author tone T (0–100)
|
|
120
|
+
→ mode branch:
|
|
121
|
+
auto + dark : invert T' = 100 - T
|
|
122
|
+
fixed / light: keep T' = T
|
|
123
|
+
static : identity, skip window
|
|
124
|
+
→ window remap: T' into the scheme window [lo, hi] (tone units)
|
|
125
|
+
→ render curvature (mode eps) → OKHSL l
|
|
126
|
+
→ store canonical tone t = toTone(l, REF_EPS) // variant {h, s, t, alpha}
|
|
127
|
+
→ (edge only) fromTone(t, REF_EPS) → l → sRGB / luminance
|
|
128
|
+
optional: contrast floor (wcag/apca) searches in tone, overriding t
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
High-contrast is **not** a separate curve. It reuses the same math with the
|
|
132
|
+
window forced to the full range `[0, 100]`, keeping the mode's eps. There is no
|
|
133
|
+
`darkCurve` and no separate HC curve.
|
|
134
|
+
|
|
135
|
+
`fixed` mode remaps into the window but does **not** invert (brand colors stay
|
|
136
|
+
recognizable). `static` skips the window entirely (identity) so the same tone
|
|
137
|
+
renders in every scheme.
|
|
138
|
+
|
|
139
|
+
## Calibrated constants (defaults)
|
|
140
|
+
|
|
141
|
+
Chosen as clean defaults that keep light mode close to the previous pipeline
|
|
142
|
+
while the axis stays contrast-uniform (the old Möbius curve was intentionally
|
|
143
|
+
non-uniform, which is what we are replacing). The light floor sits at `lo = 10`
|
|
144
|
+
and the dark floor at `lo = 15`, so neither scheme bottoms out darker than the
|
|
145
|
+
legacy pipeline produced. `eps` is pinned to the reference value `0.05` so the
|
|
146
|
+
tone axis stays WCAG-uniform.
|
|
147
|
+
|
|
148
|
+
| Config | lo | hi | eps |
|
|
149
|
+
|---|---|---|---|
|
|
150
|
+
| `lightTone` | 10 | 100 | 0.05 |
|
|
151
|
+
| `darkTone` | 15 | 95 | 0.05 |
|
|
152
|
+
|
|
153
|
+
A window is authored as `[lo, hi]` (reference eps — the common form),
|
|
154
|
+
`{ lo, hi, eps }` (advanced: explicit per-mode render curvature), or `false`
|
|
155
|
+
to disable clamping. `false` is the full range `[0, 100]` at the reference eps —
|
|
156
|
+
it removes the **boundaries**, not the tone curve.
|
|
157
|
+
|
|
158
|
+
Other defaults: `darkDesaturation = 0.1` (unchanged),
|
|
159
|
+
`autoFlip = true`.
|
|
160
|
+
|
|
161
|
+
Reference: `REF_EPS = 0.05`.
|
|
162
|
+
|
|
163
|
+
## Contrast metric (unified)
|
|
164
|
+
|
|
165
|
+
`contrast` is a single prop with a pluggable metric:
|
|
166
|
+
|
|
167
|
+
```ts
|
|
168
|
+
type ContrastSpec =
|
|
169
|
+
| number // bare WCAG ratio
|
|
170
|
+
| ContrastPreset // 'AA' | 'AAA' | 'AA-large' | 'AAA-large' (WCAG)
|
|
171
|
+
| { wcag: HCPair<number | ContrastPreset> }
|
|
172
|
+
| { apca: HCPair<number | ApcaPreset> };
|
|
173
|
+
|
|
174
|
+
contrast?: HCPair<ContrastSpec>;
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
A bare number or preset means WCAG. The `[normal, highContrast]` pair may live at
|
|
178
|
+
the outer level (`[4.5, 7]`, `[{ wcag: 4.5 }, { wcag: 7 }]`) **or** inside the
|
|
179
|
+
metric (`{ wcag: [4.5, 7] }`, `{ apca: [45, 60] }`, `{ apca: ['content', 'body'] }`). `resolveContrastForMode`
|
|
180
|
+
peels the outer pair by mode, then the inner metric pair by the same mode, then
|
|
181
|
+
resolves presets, returning `{ metric, target }`.
|
|
182
|
+
|
|
183
|
+
The solver searches in **tone** (contrast-uniform → fast convergence and a
|
|
184
|
+
closed-form WCAG seed). For WCAG, the seed is the tone whose gray luminance hits
|
|
185
|
+
`Y = R·(Y_base + 0.05) − 0.05`; chromatic drift is then refined by binary search.
|
|
186
|
+
For APCA, it binary-searches tone against the APCA Lc target.
|
|
187
|
+
|
|
188
|
+
### APCA
|
|
189
|
+
|
|
190
|
+
`apcaContrast(yText, yBg)` implements SAPC/APCA Lc (soft-clamp of low luminances
|
|
191
|
+
plus the polarity exponents for normal vs reverse contrast), returning a signed
|
|
192
|
+
Lc whose magnitude the solver compares against the target. Its inputs are APCA
|
|
193
|
+
*screen* luminances `Ys = 0.2126·R^2.4 + 0.7152·G^2.4 + 0.0722·B^2.4` over the
|
|
194
|
+
gamma-encoded channels (`apcaLuminanceFromLinearRgb`), **not** WCAG relative
|
|
195
|
+
luminance — the soft-clamp constants are calibrated against `Ys`, so the solver
|
|
196
|
+
feeds it the matching basis. This is a faithful-but-simplified APCA (it omits
|
|
197
|
+
the spatial/font-size lookup that maps Lc to a usable text size).
|
|
198
|
+
|
|
199
|
+
#### Polarity (roles)
|
|
200
|
+
|
|
201
|
+
APCA is **asymmetric**: `|apcaContrast(a, b)| ≠ |apcaContrast(b, a)|`, because
|
|
202
|
+
the normal-polarity exponents (dark text on light bg) differ from the
|
|
203
|
+
reverse-polarity exponents (light text on dark bg). Glaze picks the argument
|
|
204
|
+
order from each color's semantic **role** against its base:
|
|
205
|
+
|
|
206
|
+
| Role | Polarity | Argument order | Aliases (name inference) |
|
|
207
|
+
| --------- | -------- | ------------------------------ | ------------------------------------------- |
|
|
208
|
+
| `text` | `fg` | `apcaContrast(candidate, base)`| `text`, `fg`, `foreground`, `content`, `ink`, `label`, `stroke` |
|
|
209
|
+
| `border` | `fg` | `apcaContrast(candidate, base)`| `border`, `divider`, `outline`, `separator`, `hairline`, `rule` |
|
|
210
|
+
| `surface` | `bg` | `apcaContrast(base, candidate)`| `surface`, `bg`, `background`, `fill`, `canvas`, `paper`, `layer` |
|
|
211
|
+
|
|
212
|
+
A color's role is resolved per the chain: explicit `role` → inferred from the
|
|
213
|
+
color name (last recognized token wins, so `button-text` → `text`,
|
|
214
|
+
`input-bg` → `surface`) → the opposite of the base's role → `'text'` (foreground)
|
|
215
|
+
default. Name inference is on by default (`config.inferRole: true`) and can be
|
|
216
|
+
disabled. WCAG is symmetric, so role never changes WCAG results — it only fixes
|
|
217
|
+
APCA argument order.
|
|
218
|
+
|
|
219
|
+
#### APCA presets
|
|
220
|
+
|
|
221
|
+
APCA targets may be a raw Lc number or a named preset (APCA Bronze Simple Mode
|
|
222
|
+
conformance levels), independent of role:
|
|
223
|
+
|
|
224
|
+
```ts
|
|
225
|
+
type ApcaPreset = 'preferred' | 'body' | 'content' | 'large' | 'non-text' | 'min';
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
| Preset | Lc | Use case |
|
|
229
|
+
| ------------- | --- | ---------------------------------------------------- |
|
|
230
|
+
| `'preferred'` | 90 | Preferred body / column text |
|
|
231
|
+
| `'body'` | 75 | Minimum body / column text |
|
|
232
|
+
| `'content'` | 60 | Readable non-body content (~WCAG AA 4.5:1) |
|
|
233
|
+
| `'large'` | 45 | Large/bold headlines; fine icons/outlines (~3:1) |
|
|
234
|
+
| `'non-text'` | 30 | Solid icons/controls; placeholder/disabled text |
|
|
235
|
+
| `'min'` | 15 | Dividers/decorative; APCA "point of invisibility" |
|
|
236
|
+
|
|
237
|
+
```ts
|
|
238
|
+
contrast: { apca: 'content' } // Lc 60
|
|
239
|
+
contrast: { apca: ['content', 'body'] } // HC pair: 60 normal, 75 high-contrast
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
#### Enhanced Level (high-contrast auto-boost)
|
|
243
|
+
|
|
244
|
+
When an APCA target is given as a **bare scalar** (no `[normal, hc]` pair at
|
|
245
|
+
either the outer `contrast` level or the inner `apca` level), Glaze
|
|
246
|
+
automatically applies the APCA-W3 "Enhanced Level" delta — **+15 Lc** — in
|
|
247
|
+
high-contrast mode, analogous to WCAG's AAA-over-AA step. This is on by
|
|
248
|
+
default; provide an explicit HC value via either pair to override it.
|
|
249
|
+
|
|
250
|
+
```ts
|
|
251
|
+
contrast: { apca: 60 } // Lc 60 normal, Lc 75 high-contrast (auto)
|
|
252
|
+
contrast: { apca: 'content' } // Lc 60 normal, Lc 75 high-contrast (auto)
|
|
253
|
+
contrast: { apca: [60, 90] } // Lc 60 normal, Lc 90 high-contrast (explicit)
|
|
254
|
+
contrast: [{ apca: 60 }, { apca: 90 }] // outer pair: explicit HC, no boost
|
|
255
|
+
contrast: { apca: 'preferred' } // Lc 90 normal, Lc 105 high-contrast (auto)
|
|
256
|
+
contrast: { apca: 100 } // Lc 100 normal, Lc 106 high-contrast (clamped)
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
The enhanced target is clamped to `APCA_MAX_LC` (106).
|
|
260
|
+
|
|
261
|
+
> **Large-text glare caveat.** APCA-W3 also defines Lc 90 as a *maximum* for
|
|
262
|
+
> very large/bold text (>36px bold) and large areas of color, to prevent
|
|
263
|
+
> excessive glare. The +15 HC boost can therefore push a high baseline (e.g.
|
|
264
|
+
> `preferred` Lc 90 → 105) past that glare ceiling. This is intentional for
|
|
265
|
+
> small/standard text in HC (low-vision readability trumps glare, and small
|
|
266
|
+
> fonts have no APCA maximum), but if your HC tokens serve large/bold text,
|
|
267
|
+
> pass an explicit HC pair (`{ apca: [90, 90] }`) to hold the glare ceiling.
|
|
268
|
+
> Glaze does not model font size, so it can't enforce the large-text cap
|
|
269
|
+
> automatically.
|
|
270
|
+
|
|
271
|
+
#### WCAG HC auto-promotion
|
|
272
|
+
|
|
273
|
+
A bare WCAG preset (no `[normal, hc]` pair at either the outer `contrast` or
|
|
274
|
+
inner `wcag` level) is automatically promoted to its spec-defined "Enhanced"
|
|
275
|
+
successor in high-contrast mode — WCAG SC 1.4.3 (Minimum) → SC 1.4.6
|
|
276
|
+
(Enhanced), the direct analog of APCA's Enhanced Level:
|
|
277
|
+
|
|
278
|
+
```ts
|
|
279
|
+
contrast: 'AA' // 4.5 normal, 7 high-contrast (auto -> AAA)
|
|
280
|
+
contrast: 'AA-large' // 3 normal, 4.5 high-contrast (auto -> AAA-large)
|
|
281
|
+
contrast: 'AAA' // 7 both modes (top tier, unchanged)
|
|
282
|
+
contrast: 'AAA-large' // 4.5 both modes (top tier, unchanged)
|
|
283
|
+
contrast: 5.5 // 5.5 both modes (bare number, no successor tier)
|
|
284
|
+
contrast: { wcag: ['AA', 'AA'] } // 4.5 both modes (explicit HC, no promotion)
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
`AAA` and `AAA-large` are already the top WCAG tier and are left unchanged; bare
|
|
288
|
+
numeric targets have no defined successor tier and are also left unchanged. An
|
|
289
|
+
explicit HC value via either pair overrides and skips the promotion.
|
|
290
|
+
|
|
291
|
+
## Verification (APCA / WCAG drift)
|
|
292
|
+
|
|
293
|
+
Because chromatic swatches inherit gray's tone-derived lightness but drift in
|
|
294
|
+
real luminance, a color resolved with a `base` + `contrast` may land slightly
|
|
295
|
+
under the contrast its tone implies. After resolving such a color, Glaze
|
|
296
|
+
computes the actual WCAG ratio and APCA Lc of the chromatic result against its
|
|
297
|
+
base and emits a deduped `console.warn` when it drifts below the gray-tone
|
|
298
|
+
expectation. This is advisory: it surfaces the one approximation rather than
|
|
299
|
+
hiding it. The dedupe cache is the existing 256-entry cache in
|
|
300
|
+
[warnings.ts](../src/warnings.ts).
|
|
301
|
+
|
|
302
|
+
## Migration from `lightness`
|
|
303
|
+
|
|
304
|
+
`lightness` (OKHSL `l`, 0–100) is replaced by `tone` (0–100). They are **not**
|
|
305
|
+
the same number — tone is the contrast-uniform reparameterization. To convert an
|
|
306
|
+
old absolute `lightness: L` to the equivalent `tone`, use
|
|
307
|
+
`toTone(L/100, 0.05)`. See [migration.md](migration.md) for the full guide and
|
|
308
|
+
a conversion table.
|
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-d03ae24",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "UIKit for Cube Projects",
|
|
6
6
|
"repository": {
|
|
@@ -78,8 +78,8 @@
|
|
|
78
78
|
"@react-types/shared": "^3.32.1",
|
|
79
79
|
"@tabler/icons-react": "^3.31.0",
|
|
80
80
|
"@tanstack/react-virtual": "^3.13.12",
|
|
81
|
-
"@tenphi/glaze": "0.
|
|
82
|
-
"@tenphi/tasty": "2.
|
|
81
|
+
"@tenphi/glaze": "0.18.0",
|
|
82
|
+
"@tenphi/tasty": "2.9.0",
|
|
83
83
|
"clipboard-copy": "^4.0.1",
|
|
84
84
|
"clsx": "^1.1.1",
|
|
85
85
|
"diff": "^8.0.3",
|
|
@@ -163,7 +163,7 @@
|
|
|
163
163
|
],
|
|
164
164
|
"license": "MIT",
|
|
165
165
|
"engines": {
|
|
166
|
-
"node": ">=
|
|
166
|
+
"node": ">=22.0.0",
|
|
167
167
|
"pnpm": "^10.0.0"
|
|
168
168
|
}
|
|
169
169
|
}
|