@cube-dev/ui-kit 0.163.0 → 0.165.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/CHANGELOG.md +394 -0
- package/dist/README.md +1 -1
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.d.ts +3 -2
- package/dist/components/Root.js +1 -1
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +2 -5
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.d.ts +3 -3
- package/dist/components/actions/Button/Button.js +8 -5
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.d.ts +2 -2
- package/dist/components/actions/ItemAction/ItemAction.js +15 -6
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.d.ts +14 -0
- package/dist/components/actions/ItemActionContext.js +2 -2
- package/dist/components/actions/ItemActionContext.js.map +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +56 -46
- package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.d.ts +13 -0
- package/dist/components/actions/Menu/MenuTrigger.js +27 -15
- package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.d.ts +10 -0
- package/dist/components/content/CopySnippet/CopySnippet.js +7 -4
- package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
- package/dist/components/content/Item/Item.d.ts +2 -2
- package/dist/components/content/Item/Item.js +13 -58
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.d.ts +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +7 -4
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.d.ts +6 -0
- package/dist/components/content/PrismCode/PrismCode.js +12 -3
- package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.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 +140 -21
- package/dist/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/components/data/DataTable/index.d.ts +1 -1
- package/dist/components/data/DataTable/types.d.ts +19 -4
- package/dist/components/data/ItemTable/ItemTable.js +169 -25
- package/dist/components/data/ItemTable/ItemTable.js.map +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/ItemTable/types.d.ts +7 -2
- 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 +30 -5
- package/dist/components/data/TableBase/TableRow.js.map +1 -1
- package/dist/components/data/TableBase/TableView.d.ts +2 -1
- package/dist/components/data/TableBase/TableView.js +299 -75
- package/dist/components/data/TableBase/TableView.js.map +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +12 -2
- package/dist/components/data/TableBase/column-tint.js.map +1 -1
- package/dist/components/data/TableBase/index.d.ts +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 +75 -2
- package/dist/components/data/TableBase/styled.js.map +1 -1
- package/dist/components/data/TableBase/table-tree.js +129 -0
- package/dist/components/data/TableBase/table-tree.js.map +1 -0
- package/dist/components/data/TableBase/types.d.ts +46 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/types.js.map +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +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 +4 -4
- package/dist/components/data/TableBase/use-table-search.js.map +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +124 -24
- package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +107 -0
- package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -0
- package/dist/components/data/index.d.ts +2 -2
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +12 -7
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +3 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.d.ts +8 -2
- package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.js +14 -6
- package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -0
- package/dist/components/fields/ColorSwatch/index.d.ts +2 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +2 -6
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +8 -25
- package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +32 -2
- package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +3 -2
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/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 +9 -6
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +2 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -6
- package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +18 -16
- package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/fields/Select/Select.js +3 -6
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +15 -2
- package/dist/components/fields/Slider/HueSlider.js.map +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +10 -29
- package/dist/components/fields/TextArea/TextArea.js.map +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +146 -0
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -0
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +4 -4
- package/dist/components/fields/color/color.js.map +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/fields/color/index.d.ts +0 -1
- package/dist/components/fields/index.d.ts +2 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.d.ts +38 -5
- package/dist/components/layout/Board/Board.js +11 -5
- package/dist/components/layout/Board/Board.js.map +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.d.ts +16 -1
- package/dist/components/layout/Board/Widget.js +3 -2
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +92 -17
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +5 -5
- package/dist/components/layout/Board/board-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.d.ts +1 -0
- package/dist/components/layout/Board/board-store.js +2 -2
- package/dist/components/layout/Board/board-store.js.map +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +186 -0
- package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -0
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +12 -2
- package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/grid-core/types.d.ts +19 -1
- package/dist/components/layout/Board/index.d.ts +2 -2
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/index.js.map +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +137 -47
- package/dist/components/layout/Board/use-board-registry.js.map +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +2 -29
- package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.d.ts +37 -0
- package/dist/components/other/NoDataIcon/NoDataIcon.js +56 -0
- package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -0
- package/dist/components/other/NoDataIcon/index.d.ts +2 -0
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +4 -3
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.d.ts +13 -0
- package/dist/components/overlays/Dialog/DialogTrigger.js +24 -5
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/context.js.map +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.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/LoadingAnimation/LoadingAnimation.js.map +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.d.ts +1 -1
- package/dist/data/item-themes.js +217 -46
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +41 -13
- package/dist/eslint-plugin/defaults.generated.js.map +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +2 -1
- package/dist/i18n/locales/en-US/uikit.js +2 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -0
- package/dist/i18n/locales/es-ES/uikit.js +2 -1
- package/dist/i18n/locales/es-MX/uikit.js +2 -1
- package/dist/i18n/locales/fr-FR/uikit.js +2 -1
- package/dist/i18n/locales/it-IT/uikit.js +2 -1
- package/dist/i18n/locales/ja-JP/uikit.js +2 -1
- package/dist/i18n/locales/nb-NO/uikit.js +2 -1
- package/dist/i18n/locales/pt-BR/uikit.js +2 -1
- package/dist/i18n/locales/pt-PT/uikit.js +2 -1
- package/dist/i18n/locales/sv-SE/uikit.js +2 -1
- package/dist/i18n/locales/vi-VN/uikit.js +2 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.d.ts +44 -0
- package/dist/tokens/color-seed.js +48 -0
- package/dist/tokens/color-seed.js.map +1 -0
- package/dist/tokens/color-theme.d.ts +9 -1
- package/dist/tokens/color-theme.js +20 -7
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.js +20 -3
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/index.d.ts +2 -1
- package/dist/tokens/index.js +3 -2
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.d.ts +304 -77
- package/dist/tokens/palette-config.js +188 -49
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.js +617 -163
- package/dist/tokens/palette.js.map +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +3 -3
- package/docs/Introduction.md +85 -97
- package/docs/Theming.md +471 -83
- package/docs/Usage.md +63 -2
- package/docs/components/Root.md +1 -1
- package/docs/components/actions/Button.md +9 -3
- package/docs/components/actions/ItemAction.md +3 -3
- package/docs/components/actions/MenuTrigger.md +54 -2
- package/docs/components/actions/SubMenuTrigger.md +2 -2
- package/docs/components/content/CopySnippet.md +5 -5
- package/docs/components/content/InlineInput.md +1 -1
- package/docs/components/content/Item.md +10 -10
- package/docs/components/content/ItemBadge.md +2 -2
- package/docs/components/content/PrismCode.md +1 -0
- package/docs/components/data/DataTable.md +110 -11
- package/docs/components/data/ItemTable.md +63 -1
- package/docs/components/fields/ColorSwatch.md +155 -0
- package/docs/components/layout/Board.md +21 -2
- package/docs/components/other/NoDataIcon.md +48 -0
- package/docs/components/overlays/DialogTrigger.md +3 -2
- package/docs/components/status/LoadingAnimation.md +12 -0
- package/docs/glaze/api.md +155 -47
- package/docs/glaze/methodology.md +15 -13
- package/docs/glaze/migration.md +36 -0
- package/docs/glaze/okhst.md +4 -0
- package/docs/tasty/ai-agents.md +3 -0
- package/docs/tasty/configuration.md +11 -6
- package/docs/tasty/dsl.md +99 -2
- package/docs/tasty/styles.md +3 -1
- package/package.json +3 -3
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
- package/dist/components/fields/color/ColorSwatch.js.map +0 -1
- package/dist/components/portal/PortalProvider.d.ts +0 -2
package/dist/tokens/palette.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
2
|
-
import { getPaletteConfig, getPaletteVersion, resolvePaletteConfig } from "./palette-config.js";
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
|
|
2
|
+
import { SURFACE_SATURATION_SHARE, getPaletteConfig, getPaletteVersion, resolvePaletteConfig } from "./palette-config.js";
|
|
3
3
|
import { lazyStyles } from "./lazy-styles.js";
|
|
4
|
-
import { glaze } from "@tenphi/glaze";
|
|
4
|
+
import { apcaContrast, glaze, okhslToLinearSrgb, variantToOkhsl } from "@tenphi/glaze";
|
|
5
5
|
|
|
6
6
|
//#region src/tokens/palette.ts
|
|
7
7
|
/**
|
|
@@ -30,12 +30,334 @@ const CODE_STRING_HUE = 280.3;
|
|
|
30
30
|
* Saturation factor of the neutral `surface`.
|
|
31
31
|
*
|
|
32
32
|
* Shared with the code theme, which mirrors `surface` to solve its contrast floors
|
|
33
|
-
* against the real page background — the two must not drift apart.
|
|
33
|
+
* against the real page background — the two must not drift apart. Shared with the
|
|
34
|
+
* config too, which needs it to work out the share of the accent zone's chroma the
|
|
35
|
+
* chrome takes when no base COLOR names one outright; it lives there because the
|
|
36
|
+
* config cannot import from here, and is re-exported under this name because that is
|
|
37
|
+
* what the recipe calls it.
|
|
34
38
|
*/
|
|
35
|
-
const SURFACE_SATURATION =
|
|
39
|
+
const SURFACE_SATURATION = SURFACE_SATURATION_SHARE;
|
|
36
40
|
const TINTED_SURFACE_SATURATION = .2;
|
|
37
41
|
const TINTED_SURFACE_TONE_OFFSET = 2;
|
|
38
42
|
/**
|
|
43
|
+
* How far `surfaceMode: 'tinted'` moves the neutral ramp off the end of the tone
|
|
44
|
+
* scale.
|
|
45
|
+
*
|
|
46
|
+
* Small on purpose. Two tones is below the threshold where a page reads as
|
|
47
|
+
* "grey" rather than "white", and it is not lightness this buys: chroma needs
|
|
48
|
+
* distance from the extreme to exist at all, so at tone 100 a light surface is
|
|
49
|
+
* white whatever saturation it asks for. Two tones is the cheapest room in which
|
|
50
|
+
* the base hue becomes visible.
|
|
51
|
+
*
|
|
52
|
+
* Everything under `surface` is positioned relative to it, so the shift carries
|
|
53
|
+
* the whole ladder — and the text ramp's contrast floors re-solve against the new
|
|
54
|
+
* background instead of drifting.
|
|
55
|
+
*/
|
|
56
|
+
const TINTED_SURFACE_TONE_SHIFT = 2;
|
|
57
|
+
/** Tone of the neutral `surface`, per {@link ResolvedPaletteConfig.surfaceMode}. */
|
|
58
|
+
function surfaceTone(config) {
|
|
59
|
+
return config.surfaceMode === "tinted" ? 100 - TINTED_SURFACE_TONE_SHIFT : 100;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Tone of a TINTED `surface` — a status theme's, or a runtime tint's —
|
|
63
|
+
* as `[light, highContrast]`.
|
|
64
|
+
*
|
|
65
|
+
* A tinted surface is a banner sitting *on* the page, so its tone is authored as
|
|
66
|
+
* an offset from the page's rather than as an absolute. Under
|
|
67
|
+
* `surfaceMode: 'tinted'` the page itself moves down to 98, which is exactly where
|
|
68
|
+
* these used to sit: a `note` banner would come out the same tone as the surface
|
|
69
|
+
* behind it and stop reading as a banner at all. Anchoring both on
|
|
70
|
+
* {@link surfaceTone} keeps the separation the offset was chosen for.
|
|
71
|
+
*
|
|
72
|
+
* The text ramps on these themes are relative (`base: 'surface'`), so they follow
|
|
73
|
+
* on their own — only the absolute tone needs the anchor.
|
|
74
|
+
*/
|
|
75
|
+
function tintedSurfaceTone(config) {
|
|
76
|
+
const page = surfaceTone(config);
|
|
77
|
+
return [page - TINTED_SURFACE_TONE_OFFSET, page - TINTED_SURFACE_TONE_OFFSET * 2];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Rescale the base-zone saturation factors onto the base zone's own seed.
|
|
81
|
+
*
|
|
82
|
+
* Every color's `saturation` is a 0–1 factor of its **theme's** seed, and the
|
|
83
|
+
* neutral family shares a theme instance with the accent one — it has to, since
|
|
84
|
+
* `accent-surface` is positioned against `surface`. A separate base seed therefore
|
|
85
|
+
* cannot be a second theme; it arrives as a scale over the authored factors.
|
|
86
|
+
*
|
|
87
|
+
* The scale is anchored on `surface`: dividing by `SURFACE_SATURATION` turns each
|
|
88
|
+
* factor into its share *of the surface's tint*, and multiplying by
|
|
89
|
+
* `baseSaturation / saturation` re-expresses that share against the base seed.
|
|
90
|
+
* `surface` therefore lands on exactly `baseSaturation` on the 0–100 scale, and
|
|
91
|
+
* every sibling keeps its proportion to it. At the shipped
|
|
92
|
+
* `baseSaturation = saturation × 0.12` the scale is `1` and nothing moves.
|
|
93
|
+
*
|
|
94
|
+
* Clamped because Glaze reads the factor as 0–1, which is also why the proportions
|
|
95
|
+
* converge at the top: `surface-inverse` (the highest at `0.475`) saturates first,
|
|
96
|
+
* around `baseSaturation: 25`.
|
|
97
|
+
*
|
|
98
|
+
* A palette seed of `0` leaves no chroma for any factor to scale, so the base zone
|
|
99
|
+
* is grey there whatever it asks for — the ceiling belongs to the theme instance,
|
|
100
|
+
* not to this scale.
|
|
101
|
+
*/
|
|
102
|
+
function baseSaturationScale(config) {
|
|
103
|
+
return config.saturation > 0 ? config.baseSaturation / (SURFACE_SATURATION * config.saturation) : 0;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* How far a pinned brand FILL has to separate from the page it sits on — APCA Lc 25, in
|
|
107
|
+
* both tiers.
|
|
108
|
+
*
|
|
109
|
+
* The base is `surface`, and `roleToPolarity('surface')` gives this the `bg` polarity,
|
|
110
|
+
* so Glaze solves `apcaContrast(surface, fill)`.
|
|
111
|
+
*
|
|
112
|
+
* **This number is page separation and nothing else**, and getting that wrong is what
|
|
113
|
+
* made the dark scheme unusable. It reads differently by scheme — in light `surface` IS
|
|
114
|
+
* white, so the same measurement happens to be the white-label pair, which invited the
|
|
115
|
+
* value to be set for the LABEL at Lc 45 (`large` text) with 60 in high contrast. In
|
|
116
|
+
* dark the page is near-black and the same number is a demand that a filled shape reach
|
|
117
|
+
* text-grade contrast against it. Nothing in the palette meets that: measured on the
|
|
118
|
+
* emitted tokens, the SHIPPED `accent-surface` — the white-anchored ladder every primary
|
|
119
|
+
* button used before color seeds existed — sits at **Lc 25.5** off the dark page, and at
|
|
120
|
+
* **Lc 19.3** in dark high contrast, where the ladder darkens the fill toward its label.
|
|
121
|
+
* So 45/60 held a color-seeded fill to 1.8x and 3.1x what the design system's own button
|
|
122
|
+
* achieves.
|
|
123
|
+
*
|
|
124
|
+
* Because a floor can only LIGHTEN in dark, that surplus flattened the tone axis: every
|
|
125
|
+
* seed below the floor solved to the same fill. Measured across the axis at one hue, the
|
|
126
|
+
* dark fill was pinned at tone 66 for every seed from 5 to 65 — a brand's whole dark half
|
|
127
|
+
* collapsed onto one lavender — and in dark high contrast the floor met
|
|
128
|
+
* {@link ACCENT_LABEL_LC}'s ceiling and left a window of a single value. At Lc 25 the
|
|
129
|
+
* same sweep tracks the seed from tone 47 up, and 47 is where the shipped fill sits in
|
|
130
|
+
* dark, so the floor now coincides with the palette's own reference point instead of
|
|
131
|
+
* overshooting it.
|
|
132
|
+
*
|
|
133
|
+
* The label is not left unguarded by this — it never depended on this number. The white
|
|
134
|
+
* `type="primary"` label is guaranteed by {@link accentToneCeiling}, which caps the seed
|
|
135
|
+
* against pure white across all four variants, with {@link ACCENT_LABEL_MARGIN} covering
|
|
136
|
+
* the lightening this floor can still add. A LOWER floor lightens less, so it makes that
|
|
137
|
+
* margin safer rather than riskier.
|
|
138
|
+
*
|
|
139
|
+
* What the floor cannot do is invent contrast that a dark page has no room for. A brand
|
|
140
|
+
* darker than the shipped fill's own dark tone still lands on the floor, because a fill
|
|
141
|
+
* beneath it is not a shape on that page. The fix is that the floor now sits where the
|
|
142
|
+
* design system already put it, not two tiers above.
|
|
143
|
+
*
|
|
144
|
+
* Still a FLOOR, not a target: a brand already past it is emitted exactly as given —
|
|
145
|
+
* which is why light is untouched by this change. A dark brand on a white page measures
|
|
146
|
+
* Lc 100+, so this never bound there; the ceiling is what light answers to.
|
|
147
|
+
*
|
|
148
|
+
* Why APCA and not a WCAG ratio. WCAG 2.x is polarity-blind, so one number means two
|
|
149
|
+
* very different things: the previous `3` measured Lc 56 in light but only Lc 23 in
|
|
150
|
+
* dark (12 hues, spread under 2 Lc — hue is not a factor, polarity is). That is 2.4x
|
|
151
|
+
* stricter in light than in dark, which is why light brands kept getting crushed while
|
|
152
|
+
* dark ones sailed through under the same rule. An Lc is one number that means one
|
|
153
|
+
* thing in both schemes.
|
|
154
|
+
*
|
|
155
|
+
* The pair is written out with BOTH entries equal, and that is the whole reason it is a
|
|
156
|
+
* pair: stating one level would let APCA's automatic +15 Lc enhancement fire in high
|
|
157
|
+
* contrast, which is the escalation this must not make. High contrast is a request for
|
|
158
|
+
* separation over brand, but not for separation from the PAGE — the same fill carries a
|
|
159
|
+
* white label, and driving it off the page drives the label off it. The shipped ladder
|
|
160
|
+
* makes the same trade and lands the other side of it, at Lc 19.3: *less* page separation
|
|
161
|
+
* in high contrast than in normal, because it darkens the fill toward its label. Here the
|
|
162
|
+
* label is protected by {@link accentToneCeiling} instead, which searches the
|
|
163
|
+
* high-contrast variants too, so the tier can leave this number alone.
|
|
164
|
+
*/
|
|
165
|
+
const ACCENT_FILL_CONTRAST = { apca: [25, 25] };
|
|
166
|
+
/**
|
|
167
|
+
* Floors for the two brand TEXT tokens: rest, then hover — APCA `content` and `body`.
|
|
168
|
+
*
|
|
169
|
+
* Also "from white", in the same sense as {@link ACCENT_FILL_CONTRAST}: both solve
|
|
170
|
+
* against `accent-selected-fill`, which is `oklch(0.975 0.0037 284.4)` in light — white
|
|
171
|
+
* for every practical purpose, and the surface these labels actually sit on. These are
|
|
172
|
+
* foreground spots, so they keep the default `fg` polarity and Glaze solves
|
|
173
|
+
* `apcaContrast(text, base)`.
|
|
174
|
+
*
|
|
175
|
+
* Lc 60 is APCA's `content` tier, the floor for ordinary body text, which is what a
|
|
176
|
+
* link is. The hover takes `body`/75 so the rest→hover intensify stays visible; one
|
|
177
|
+
* preset step apart is what keeps the two from solving onto the same color.
|
|
178
|
+
*
|
|
179
|
+
* The HC entries are spelled `85` and `92` rather than left to Glaze's +15, for the
|
|
180
|
+
* same reason as {@link ACCENT_FILL_CONTRAST}, and they stay apart so the rest→hover
|
|
181
|
+
* intensify survives the tier that needs it most. They replace the hand-measured
|
|
182
|
+
* `[4.5, 9]` pair, whose `9` existed only because a WCAG ratio that high is unreachable
|
|
183
|
+
* for a saturated hue against a chromatic base: `#FFD400` in dark high contrast used to
|
|
184
|
+
* pin to pure black and come out a hover link *less* readable than its rest state. An
|
|
185
|
+
* Lc target is reachable in both schemes because it is polarity-aware, so the
|
|
186
|
+
* pathological case has no equivalent here.
|
|
187
|
+
*/
|
|
188
|
+
const ACCENT_TEXT_CONTRAST = { apca: [60, 85] };
|
|
189
|
+
const ACCENT_TEXT_HOVER_CONTRAST = { apca: [75, 92] };
|
|
190
|
+
/**
|
|
191
|
+
* Tone steps of the brand fill ramp, measured from `accent-surface`.
|
|
192
|
+
*
|
|
193
|
+
* They reproduce the white-anchored `-49 / -52 / -55 / -58` ladder exactly once the
|
|
194
|
+
* fill is pinned, because those four deltas share an anchor and differ by 3 / 6 / 9.
|
|
195
|
+
*/
|
|
196
|
+
const ACCENT_RAMP = {
|
|
197
|
+
surface2: "-3",
|
|
198
|
+
surface3: "-6",
|
|
199
|
+
hover: "-9"
|
|
200
|
+
};
|
|
201
|
+
/**
|
|
202
|
+
* How far the hover brand text sits past the rest one, in tone.
|
|
203
|
+
*
|
|
204
|
+
* Both are pinned to the caller's tone otherwise, and a pair at the same tone behind
|
|
205
|
+
* the same floor resolves to one color — which would silently delete the rest→hover
|
|
206
|
+
* intensify that `accent-text` exists for. Tone is contrast-uniform, so one step is
|
|
207
|
+
* one step in either scheme.
|
|
208
|
+
*/
|
|
209
|
+
const ACCENT_TEXT_HOVER_STEP = 6;
|
|
210
|
+
/**
|
|
211
|
+
* The white label's own floor on the brand fill, as an APCA Lc.
|
|
212
|
+
*
|
|
213
|
+
* The same 45 as {@link ACCENT_FILL_CONTRAST}, and deliberately so: it is the same
|
|
214
|
+
* surface being constrained, just against the other thing that has to survive on it.
|
|
215
|
+
*
|
|
216
|
+
* Two floors rather than one because in dark they pull opposite ways, and dropping
|
|
217
|
+
* either one produces the mirror image of the other's failure. The fill has to be dark
|
|
218
|
+
* enough for the `#white` label every `type="primary"` item paints on it, and light
|
|
219
|
+
* enough to separate from a dark page. In light mode the page IS white, so both
|
|
220
|
+
* collapse into the single measurement Glaze already makes and this cap never fires.
|
|
221
|
+
*
|
|
222
|
+
* Measured, in dark, with only the page floor: `#FFFFFF` clears it at WCAG 14.4 while
|
|
223
|
+
* the label lands on **Lc 0** — the label is exactly its own fill. With only the white
|
|
224
|
+
* floor the failure mirrors: `#111827` puts the fill at **Lc 0.0 against the page**, a
|
|
225
|
+
* blazing white label on a shape that is not there. The border does not stand in for
|
|
226
|
+
* the fill here — it is deliberately low-contrast — so the fill has to carry it.
|
|
227
|
+
*/
|
|
228
|
+
const ACCENT_LABEL_LC = 45;
|
|
229
|
+
/**
|
|
230
|
+
* How far above {@link ACCENT_LABEL_LC} the ceiling actually searches.
|
|
231
|
+
*
|
|
232
|
+
* The ceiling is computed on the bare seed, but the emitted `accent-surface` then goes
|
|
233
|
+
* through the page floor, which can only LIGHTEN — and a lighter fill is a weaker white
|
|
234
|
+
* label, so the solve eats into the margin the ceiling just established. Measured worst
|
|
235
|
+
* case across 3072 hue/chroma/tone/scheme/tier combinations is 1.8 Lc, in dark high
|
|
236
|
+
* contrast where the page floor pushes hardest; 3 covers it with room.
|
|
237
|
+
*/
|
|
238
|
+
const ACCENT_LABEL_MARGIN = 3;
|
|
239
|
+
/**
|
|
240
|
+
* Keyed on the palette VERSION as well as the seed, because the search resolves
|
|
241
|
+
* through Glaze's global settings — the dark tone window among them. A caller that
|
|
242
|
+
* runs `glaze.configure(...)` and then `invalidatePaletteTokens()` has changed the
|
|
243
|
+
* answer without changing the seed, and a cache keyed on the color alone would hand
|
|
244
|
+
* back a cap computed against the old settings. Versioning it is what makes the
|
|
245
|
+
* invalidation API mean what it says.
|
|
246
|
+
*
|
|
247
|
+
* Bounded for the same reason `colorSeed`'s cache is: a color picker drag resolves a
|
|
248
|
+
* distinct seed per frame, and stale versions accumulate keys nobody reads again.
|
|
249
|
+
*/
|
|
250
|
+
const accentCapCache = /* @__PURE__ */ new Map();
|
|
251
|
+
const ACCENT_CAP_CACHE_LIMIT = 256;
|
|
252
|
+
/** APCA Lc of pure white on one resolved variant. */
|
|
253
|
+
function labelLcOf(variant) {
|
|
254
|
+
const { h, s, l } = variantToOkhsl(variant);
|
|
255
|
+
const gamma = (c) => c <= .0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - .055;
|
|
256
|
+
const y = (rgb) => {
|
|
257
|
+
const [r, g, b] = rgb.map((c) => Math.max(0, Math.min(1, gamma(c))));
|
|
258
|
+
return .2126 * r ** 2.4 + .7152 * g ** 2.4 + .0722 * b ** 2.4;
|
|
259
|
+
};
|
|
260
|
+
return Math.abs(apcaContrast(y([
|
|
261
|
+
1,
|
|
262
|
+
1,
|
|
263
|
+
1
|
|
264
|
+
]), y(okhslToLinearSrgb(h, s, l, false))));
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Pull a brand tone down until a white label survives on every variant of the fill.
|
|
268
|
+
*
|
|
269
|
+
* The search runs against Glaze's own fixed-mode resolution — the same mapping
|
|
270
|
+
* `accent-surface` goes through — rather than reimplementing the dark tone window, and
|
|
271
|
+
* checks all four variants so the cap is a property of the seed and not of one scheme.
|
|
272
|
+
*
|
|
273
|
+
* Only ever lowers, so a brand already dark enough comes back untouched.
|
|
274
|
+
*/
|
|
275
|
+
function capAccentTone(hue, saturation, tone) {
|
|
276
|
+
return Math.min(tone, accentToneCeiling(hue, saturation));
|
|
277
|
+
}
|
|
278
|
+
/**
|
|
279
|
+
* The lightest tone at this hue and chroma that a white label still survives on.
|
|
280
|
+
*
|
|
281
|
+
* A property of the hue/chroma pair alone, NOT of the tone being asked for — which is
|
|
282
|
+
* what makes it cacheable, and what the first cut got wrong: it only searched when the
|
|
283
|
+
* requested tone already failed, so a dark tone probed first cached "no ceiling" and
|
|
284
|
+
* every later light tone at the same hue escaped uncapped.
|
|
285
|
+
*/
|
|
286
|
+
function accentToneCeiling(hue, saturation) {
|
|
287
|
+
const key = `${hue}|${saturation}|${getPaletteVersion()}`;
|
|
288
|
+
const cached = accentCapCache.get(key);
|
|
289
|
+
if (cached !== void 0) return cached;
|
|
290
|
+
const labelLc = (candidate) => {
|
|
291
|
+
const resolved = glaze.color({
|
|
292
|
+
from: {
|
|
293
|
+
h: hue,
|
|
294
|
+
s: saturation / 100,
|
|
295
|
+
t: candidate / 100
|
|
296
|
+
},
|
|
297
|
+
mode: "fixed"
|
|
298
|
+
}).resolve();
|
|
299
|
+
return Math.min(labelLcOf(resolved.light), labelLcOf(resolved.dark), labelLcOf(resolved.lightContrast), labelLcOf(resolved.darkContrast));
|
|
300
|
+
};
|
|
301
|
+
let ceiling = 100;
|
|
302
|
+
const target = ACCENT_LABEL_LC + ACCENT_LABEL_MARGIN;
|
|
303
|
+
if (labelLc(100) < target) {
|
|
304
|
+
let low = 0;
|
|
305
|
+
let high = 100;
|
|
306
|
+
for (let i = 0; i < 24; i++) {
|
|
307
|
+
const mid = (low + high) / 2;
|
|
308
|
+
if (labelLc(mid) >= target) low = mid;
|
|
309
|
+
else high = mid;
|
|
310
|
+
}
|
|
311
|
+
ceiling = low;
|
|
312
|
+
}
|
|
313
|
+
if (accentCapCache.size >= ACCENT_CAP_CACHE_LIMIT) accentCapCache.clear();
|
|
314
|
+
accentCapCache.set(key, ceiling);
|
|
315
|
+
return ceiling;
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* A color seed as the three numbers Glaze consumes, with its tone capped.
|
|
319
|
+
*
|
|
320
|
+
* Takes the RESOLVED components rather than the caller's literal because the tone is
|
|
321
|
+
* capped — {@link capAccentTone} only ever lowers it — and a capped tone means rebuilding
|
|
322
|
+
* the color regardless. Passing `from: <the original string>` would emit the tone the
|
|
323
|
+
* white label cannot survive.
|
|
324
|
+
*
|
|
325
|
+
* Shared by the accent zone and by any status theme on the color path: they resolve their
|
|
326
|
+
* components differently, but a fill is a fill once the numbers are in hand.
|
|
327
|
+
*/
|
|
328
|
+
function cappedAccent(hue, saturation, tone) {
|
|
329
|
+
const capped = capAccentTone(hue, saturation, tone);
|
|
330
|
+
return {
|
|
331
|
+
color: {
|
|
332
|
+
h: hue,
|
|
333
|
+
s: saturation / 100,
|
|
334
|
+
t: capped / 100
|
|
335
|
+
},
|
|
336
|
+
tone: capped
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Opaque stand-in for the BASE selected fill used by outline / outline-2 / clear Item
|
|
341
|
+
* types (`#surface|#surface-2|#surface-3` + `#accent-surface.09`).
|
|
342
|
+
*
|
|
343
|
+
* Anchors the `accent-text*` contrast. `value: 9` matches the `.09` alpha overlay;
|
|
344
|
+
* `space: 'srgb'` approximates CSS two-layer compositing. Inherited so colored themes
|
|
345
|
+
* re-resolve against their own `surface` + `accent-surface` (default `surface-2` /
|
|
346
|
+
* `surface-3` are `inherit: false` and can't be the mix base). Primary's tinted
|
|
347
|
+
* `surface` makes this slightly harder than default clear-selected, covering
|
|
348
|
+
* outline / outline-2 selected fills as well.
|
|
349
|
+
*
|
|
350
|
+
* The same in both accent arrangements — it is defined by its two ends, and both of
|
|
351
|
+
* those move with the seed on their own.
|
|
352
|
+
*/
|
|
353
|
+
const ACCENT_SELECTED_FILL = { "accent-selected-fill": {
|
|
354
|
+
type: "mix",
|
|
355
|
+
base: "surface",
|
|
356
|
+
target: "accent-surface",
|
|
357
|
+
value: 9,
|
|
358
|
+
space: "srgb"
|
|
359
|
+
} };
|
|
360
|
+
/**
|
|
39
361
|
* Syntax highlighting for `PrismCode`, as its own theme.
|
|
40
362
|
*
|
|
41
363
|
* A small palette of *adaptive* colored tokens. Each one is anchored to `surface`
|
|
@@ -127,14 +449,14 @@ const CODE_COLORS = {
|
|
|
127
449
|
function buildCodeTheme(config, instanceConfig) {
|
|
128
450
|
const codeSaturation = config.themes.code.saturation;
|
|
129
451
|
const theme = glaze(config.hue, codeSaturation, instanceConfig);
|
|
130
|
-
let mirrorFactor =
|
|
452
|
+
let mirrorFactor = config.baseSaturation / codeSaturation;
|
|
131
453
|
if (mirrorFactor > 1) {
|
|
132
|
-
console.warn(`[cube-ui-kit] themes.code.saturation (${codeSaturation}) is too low for
|
|
454
|
+
console.warn(`[cube-ui-kit] themes.code.saturation (${codeSaturation}) is too low for baseSaturation ${config.baseSaturation}: the mirrored code surface would need a factor of ${mirrorFactor.toFixed(3)}. Clamped to 1; raise the code saturation to keep syntax contrast accurate.`);
|
|
133
455
|
mirrorFactor = 1;
|
|
134
456
|
}
|
|
135
457
|
theme.colors({
|
|
136
458
|
surface: {
|
|
137
|
-
tone:
|
|
459
|
+
tone: surfaceTone(config),
|
|
138
460
|
saturation: mirrorFactor
|
|
139
461
|
},
|
|
140
462
|
...CODE_COLORS
|
|
@@ -160,19 +482,17 @@ glaze.configure({
|
|
|
160
482
|
darkDesaturation: 0
|
|
161
483
|
});
|
|
162
484
|
/**
|
|
163
|
-
*
|
|
164
|
-
*
|
|
165
|
-
*
|
|
166
|
-
*
|
|
167
|
-
*
|
|
168
|
-
*
|
|
169
|
-
*
|
|
485
|
+
* The config-free half of a colored theme's overrides — everything anchored to
|
|
486
|
+
* the theme's own `surface` with a *relative* tone, so it follows wherever
|
|
487
|
+
* {@link tintedSurfaceTone} puts that surface.
|
|
488
|
+
*
|
|
489
|
+
* - `border` — bumped saturation so OUTLINE-variant borders pick up the theme
|
|
490
|
+
* hue (used by `#<theme>-border` in `item-themes.ts`). Mirrors the
|
|
491
|
+
* default-theme `border` shape (`base: 'surface'`, tone window) but with
|
|
492
|
+
* higher saturation. Glaze's `extend({ colors })` redefines each listed color
|
|
493
|
+
* from scratch, so we restate the full definition here.
|
|
170
494
|
*/
|
|
171
|
-
const
|
|
172
|
-
surface: {
|
|
173
|
-
tone: [100 - TINTED_SURFACE_TONE_OFFSET, 100 - TINTED_SURFACE_TONE_OFFSET * 2],
|
|
174
|
-
saturation: TINTED_SURFACE_SATURATION
|
|
175
|
-
},
|
|
495
|
+
const TINTED_SURFACE_RAMP = {
|
|
176
496
|
border: {
|
|
177
497
|
base: "surface",
|
|
178
498
|
tone: ["-10", "-30"],
|
|
@@ -198,13 +518,31 @@ const TINTED_SURFACE_OVERRIDE = {
|
|
|
198
518
|
}
|
|
199
519
|
};
|
|
200
520
|
/**
|
|
521
|
+
* Per-colored-theme overrides on top of the default theme: a `surface` bumped in
|
|
522
|
+
* saturation so the banner background is visibly tinted, plus
|
|
523
|
+
* {@link TINTED_SURFACE_RAMP}.
|
|
524
|
+
*
|
|
525
|
+
* A function of the config because the surface's tone is — see
|
|
526
|
+
* {@link tintedSurfaceTone}.
|
|
527
|
+
*/
|
|
528
|
+
function tintedSurfaceOverride(config) {
|
|
529
|
+
return {
|
|
530
|
+
surface: {
|
|
531
|
+
tone: tintedSurfaceTone(config),
|
|
532
|
+
saturation: TINTED_SURFACE_SATURATION
|
|
533
|
+
},
|
|
534
|
+
...TINTED_SURFACE_RAMP
|
|
535
|
+
};
|
|
536
|
+
}
|
|
537
|
+
/**
|
|
201
538
|
* A tinted surface, a banding step, and text guaranteed to read on both.
|
|
202
539
|
*
|
|
203
540
|
* The recipe behind {@link getColorTheme} in `./color-theme.ts`, which builds
|
|
204
541
|
* one-off themes at runtime from an arbitrary hue. It lives here so it shares
|
|
205
542
|
* `TINTED_SURFACE_SATURATION`, the tone offsets and the text ramp with
|
|
206
|
-
* {@link
|
|
207
|
-
* and a built-in theme's `surface` should be the same colour for the same hue
|
|
543
|
+
* {@link tintedSurfaceOverride} above rather than forking them — a runtime tint
|
|
544
|
+
* and a built-in theme's `surface` should be the same colour for the same hue,
|
|
545
|
+
* which also means both have to follow the page when `surfaceMode` moves it.
|
|
208
546
|
*
|
|
209
547
|
* Three colours, because that is what banded, readable table column needs:
|
|
210
548
|
* `surface` for even rows, `surface-2` one tone step down for odd rows and
|
|
@@ -216,29 +554,185 @@ const TINTED_SURFACE_OVERRIDE = {
|
|
|
216
554
|
* clears it on both bands. The neutral ramp's own `surface-2-text` is shaped the
|
|
217
555
|
* same way for the same reason.
|
|
218
556
|
*/
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
}
|
|
557
|
+
function tintRecipe(config) {
|
|
558
|
+
return {
|
|
559
|
+
surface: {
|
|
560
|
+
tone: tintedSurfaceTone(config),
|
|
561
|
+
saturation: TINTED_SURFACE_SATURATION
|
|
562
|
+
},
|
|
563
|
+
"surface-2": {
|
|
564
|
+
base: "surface",
|
|
565
|
+
tone: ["-2", "-4"],
|
|
566
|
+
saturation: TINTED_SURFACE_SATURATION
|
|
567
|
+
},
|
|
568
|
+
"surface-2-text": {
|
|
569
|
+
base: "surface-2",
|
|
570
|
+
tone: `${TEXT_TONE - TINTED_SURFACE_TONE_OFFSET - SURFACE_2_TEXT_OFFSET}`,
|
|
571
|
+
saturation: .25,
|
|
572
|
+
contrast: ["AA", "AAA"]
|
|
573
|
+
},
|
|
574
|
+
"surface-2-text-soft": {
|
|
575
|
+
base: "surface-2",
|
|
576
|
+
tone: `${TEXT_SOFT_TONE - TINTED_SURFACE_TONE_OFFSET - SURFACE_2_TEXT_OFFSET}`,
|
|
577
|
+
saturation: .25,
|
|
578
|
+
contrast: ["AA", "AAA"]
|
|
579
|
+
}
|
|
580
|
+
};
|
|
581
|
+
}
|
|
582
|
+
/**
|
|
583
|
+
* The brand family, in one of two arrangements.
|
|
584
|
+
*
|
|
585
|
+
* **`null`** — the shipped one, verbatim. Every fill hangs off a fixed white
|
|
586
|
+
* `accent-surface-text` at a relative tone delta behind an `['AA','AAA']` floor, and
|
|
587
|
+
* the text pair hangs off `accent-selected-fill` at `-49`. Those floors are
|
|
588
|
+
* load-bearing rather than decorative: relaxing them moves the shipped `accent-text`
|
|
589
|
+
* light tone from 38.76 to 48.63 and the `accent-surface` high-contrast tone from
|
|
590
|
+
* 36.08 to 51.00. Nothing on this path may change — `palette.test.ts` snapshots it.
|
|
591
|
+
*
|
|
592
|
+
* **A color** — the caller handed us one, and the job is to render *that*. Glaze's
|
|
593
|
+
* `from` takes the value directly: it supplies the hue, the tone, and an absolute
|
|
594
|
+
* saturation that does not answer to the theme seed, and it reproduces the value
|
|
595
|
+
* exactly in the light/normal-contrast variant. The floors drop to
|
|
596
|
+
* {@link ACCENT_FILL_CONTRAST} on top, because anchored the shipped way every accent
|
|
597
|
+
* lands at roughly tone 50 whatever went in, and a 4.5 floor then crushes anything
|
|
598
|
+
* light besides.
|
|
599
|
+
*
|
|
600
|
+
* Two details worth keeping straight:
|
|
601
|
+
*
|
|
602
|
+
* - **The ramp carries no floor.** Re-anchored onto the fill, an `['AA','AAA']` floor
|
|
603
|
+
* is measured against the *fill* rather than white and collapses all three steps to
|
|
604
|
+
* near-black. A plain tone step is what the relationship actually is.
|
|
605
|
+
* - **The text pair stays `mode: 'auto'`.** Link text has to invert on a dark page, so
|
|
606
|
+
* exactness belongs to the fill; the text is a brand-toned companion of it.
|
|
607
|
+
*/
|
|
608
|
+
function accentFillColors(accent) {
|
|
609
|
+
if (accent == null) return {
|
|
610
|
+
"accent-surface-text": {
|
|
611
|
+
tone: 100,
|
|
612
|
+
mode: "fixed"
|
|
613
|
+
},
|
|
614
|
+
"accent-surface": {
|
|
615
|
+
base: "accent-surface-text",
|
|
616
|
+
tone: "-49",
|
|
617
|
+
contrast: ["AA", "AAA"],
|
|
618
|
+
mode: "fixed"
|
|
619
|
+
},
|
|
620
|
+
"accent-surface-2": {
|
|
621
|
+
base: "accent-surface-text",
|
|
622
|
+
tone: "-52",
|
|
623
|
+
contrast: ["AA", "AAA"],
|
|
624
|
+
mode: "fixed"
|
|
625
|
+
},
|
|
626
|
+
"accent-surface-3": {
|
|
627
|
+
base: "accent-surface-text",
|
|
628
|
+
tone: "-55",
|
|
629
|
+
contrast: ["AA", "AAA"],
|
|
630
|
+
mode: "fixed"
|
|
631
|
+
},
|
|
632
|
+
"accent-surface-hover": {
|
|
633
|
+
base: "accent-surface-text",
|
|
634
|
+
tone: "-58",
|
|
635
|
+
contrast: ["AA", "AAA"],
|
|
636
|
+
mode: "fixed"
|
|
637
|
+
},
|
|
638
|
+
"accent-surface-border": {
|
|
639
|
+
base: "accent-surface",
|
|
640
|
+
tone: "+13",
|
|
641
|
+
mode: "fixed"
|
|
642
|
+
}
|
|
643
|
+
};
|
|
644
|
+
return {
|
|
645
|
+
"accent-surface-text": {
|
|
646
|
+
tone: 100,
|
|
647
|
+
mode: "fixed"
|
|
648
|
+
},
|
|
649
|
+
"accent-surface": {
|
|
650
|
+
from: accent.color,
|
|
651
|
+
base: "surface",
|
|
652
|
+
contrast: ACCENT_FILL_CONTRAST,
|
|
653
|
+
mode: "fixed"
|
|
654
|
+
},
|
|
655
|
+
"accent-surface-2": {
|
|
656
|
+
base: "accent-surface",
|
|
657
|
+
tone: ACCENT_RAMP.surface2,
|
|
658
|
+
mode: "fixed"
|
|
659
|
+
},
|
|
660
|
+
"accent-surface-3": {
|
|
661
|
+
base: "accent-surface",
|
|
662
|
+
tone: ACCENT_RAMP.surface3,
|
|
663
|
+
mode: "fixed"
|
|
664
|
+
},
|
|
665
|
+
"accent-surface-hover": {
|
|
666
|
+
base: "accent-surface",
|
|
667
|
+
tone: ACCENT_RAMP.hover,
|
|
668
|
+
mode: "fixed"
|
|
669
|
+
},
|
|
670
|
+
"accent-surface-border": {
|
|
671
|
+
base: "accent-surface",
|
|
672
|
+
tone: "+13",
|
|
673
|
+
mode: "fixed"
|
|
674
|
+
}
|
|
675
|
+
};
|
|
676
|
+
}
|
|
677
|
+
/**
|
|
678
|
+
* The brand FOREGROUNDS — text on a neutral surface, and the icon.
|
|
679
|
+
*
|
|
680
|
+
* Split from {@link accentFillColors} because the two have different audiences: the
|
|
681
|
+
* fill ramp is shared with the standalone `special` theme, which builds its own
|
|
682
|
+
* purpose-made subset and must not gain tokens it does not consume. Only the default
|
|
683
|
+
* theme (and the colored themes that inherit from it) takes these.
|
|
684
|
+
*
|
|
685
|
+
* These stay `mode: 'auto'` in both arrangements — a link has to invert on a dark page,
|
|
686
|
+
* so exactness belongs to the fill and these are its brand-toned companions.
|
|
687
|
+
*/
|
|
688
|
+
function accentTextColors(accent) {
|
|
689
|
+
if (accent == null) return {
|
|
690
|
+
...ACCENT_SELECTED_FILL,
|
|
691
|
+
"accent-text": {
|
|
692
|
+
base: "accent-selected-fill",
|
|
693
|
+
tone: "-49",
|
|
694
|
+
saturation: 1,
|
|
695
|
+
contrast: [6, 11]
|
|
696
|
+
},
|
|
697
|
+
"accent-text-soft": {
|
|
698
|
+
base: "accent-selected-fill",
|
|
699
|
+
tone: "-49",
|
|
700
|
+
saturation: 1,
|
|
701
|
+
contrast: ["AA", "AAA"]
|
|
702
|
+
},
|
|
703
|
+
"accent-icon": {
|
|
704
|
+
base: "surface",
|
|
705
|
+
tone: "-38",
|
|
706
|
+
saturation: .9375
|
|
707
|
+
}
|
|
708
|
+
};
|
|
709
|
+
return {
|
|
710
|
+
...ACCENT_SELECTED_FILL,
|
|
711
|
+
"accent-text": {
|
|
712
|
+
from: accent.color,
|
|
713
|
+
base: "accent-selected-fill",
|
|
714
|
+
tone: Math.max(0, accent.tone - ACCENT_TEXT_HOVER_STEP),
|
|
715
|
+
contrast: ACCENT_TEXT_HOVER_CONTRAST
|
|
716
|
+
},
|
|
717
|
+
"accent-text-soft": {
|
|
718
|
+
from: accent.color,
|
|
719
|
+
base: "accent-selected-fill",
|
|
720
|
+
contrast: ACCENT_TEXT_CONTRAST
|
|
721
|
+
},
|
|
722
|
+
"accent-icon": {
|
|
723
|
+
from: accent.color,
|
|
724
|
+
base: "surface",
|
|
725
|
+
contrast: ACCENT_TEXT_CONTRAST
|
|
726
|
+
}
|
|
727
|
+
};
|
|
728
|
+
}
|
|
729
|
+
/** Every accent token the default theme carries — fills, foregrounds, and the mix. */
|
|
730
|
+
function accentColors(accent) {
|
|
731
|
+
return {
|
|
732
|
+
...accentFillColors(accent),
|
|
733
|
+
...accentTextColors(accent)
|
|
734
|
+
};
|
|
735
|
+
}
|
|
242
736
|
/**
|
|
243
737
|
* Build the full palette from a resolved config.
|
|
244
738
|
*
|
|
@@ -248,7 +742,11 @@ const TINT_RECIPE = {
|
|
|
248
742
|
* seed and a `GlazePalette` has no mutation API, so re-seeding means rebuilding.
|
|
249
743
|
*/
|
|
250
744
|
function buildPalette(config, options = {}) {
|
|
251
|
-
const { hue, baseHue, saturation, pastel, themes, contrastLevel } = config;
|
|
745
|
+
const { hue, baseHue, saturation, accentColor, accentTone, accentSaturation, pastel, themes, contrastLevel } = config;
|
|
746
|
+
const accent = accentColor !== null && accentTone !== null && accentSaturation !== null ? cappedAccent(hue, accentSaturation, accentTone) : null;
|
|
747
|
+
const baseTone = surfaceTone(config);
|
|
748
|
+
const baseScale = baseSaturationScale(config);
|
|
749
|
+
const baseChroma = (factor) => Math.min(1, factor * baseScale);
|
|
252
750
|
const sharedOverrides = options.isolateContrastLevel ? { contrastLevel } : {};
|
|
253
751
|
const overrides = {
|
|
254
752
|
...sharedOverrides,
|
|
@@ -262,43 +760,43 @@ function buildPalette(config, options = {}) {
|
|
|
262
760
|
const defaultTheme = glaze(hue, saturation, instanceConfig);
|
|
263
761
|
defaultTheme.colors({
|
|
264
762
|
surface: {
|
|
265
|
-
tone:
|
|
266
|
-
saturation: SURFACE_SATURATION,
|
|
763
|
+
tone: baseTone,
|
|
764
|
+
saturation: baseChroma(SURFACE_SATURATION),
|
|
267
765
|
hue: baseHue
|
|
268
766
|
},
|
|
269
767
|
"surface-2": {
|
|
270
768
|
hue: baseHue,
|
|
271
769
|
base: "surface",
|
|
272
770
|
tone: ["-2", "-4"],
|
|
273
|
-
saturation: .1,
|
|
771
|
+
saturation: baseChroma(.1),
|
|
274
772
|
inherit: false
|
|
275
773
|
},
|
|
276
774
|
"surface-3": {
|
|
277
775
|
hue: baseHue,
|
|
278
776
|
base: "surface",
|
|
279
777
|
tone: ["-4", "-8"],
|
|
280
|
-
saturation: .1,
|
|
778
|
+
saturation: baseChroma(.1),
|
|
281
779
|
inherit: false
|
|
282
780
|
},
|
|
283
781
|
"surface-4": {
|
|
284
782
|
hue: baseHue,
|
|
285
783
|
base: "surface",
|
|
286
784
|
tone: ["-6", "-12"],
|
|
287
|
-
saturation: .1,
|
|
785
|
+
saturation: baseChroma(.1),
|
|
288
786
|
inherit: false
|
|
289
787
|
},
|
|
290
788
|
"surface-text": {
|
|
291
789
|
hue: baseHue,
|
|
292
790
|
base: "surface",
|
|
293
791
|
tone: `${TEXT_TONE - 2}`,
|
|
294
|
-
saturation: .2,
|
|
792
|
+
saturation: baseChroma(.2),
|
|
295
793
|
contrast: ["AA", "AAA"]
|
|
296
794
|
},
|
|
297
795
|
"surface-text-soft": {
|
|
298
796
|
hue: baseHue,
|
|
299
797
|
base: "surface",
|
|
300
798
|
tone: `${TEXT_SOFT_TONE - 2}`,
|
|
301
|
-
saturation: .2,
|
|
799
|
+
saturation: baseChroma(.2),
|
|
302
800
|
contrast: ["AA", "AAA"],
|
|
303
801
|
inherit: false
|
|
304
802
|
},
|
|
@@ -306,7 +804,7 @@ function buildPalette(config, options = {}) {
|
|
|
306
804
|
hue: baseHue,
|
|
307
805
|
base: "surface",
|
|
308
806
|
tone: `${TEXT_SOFT2_TONE - 2}`,
|
|
309
|
-
saturation: .2,
|
|
807
|
+
saturation: baseChroma(.2),
|
|
310
808
|
contrast: ["AA", "AAA"],
|
|
311
809
|
inherit: false
|
|
312
810
|
},
|
|
@@ -314,7 +812,7 @@ function buildPalette(config, options = {}) {
|
|
|
314
812
|
hue: baseHue,
|
|
315
813
|
base: "surface-2",
|
|
316
814
|
tone: `${TEXT_TONE + SURFACE_2_TEXT_OFFSET}`,
|
|
317
|
-
saturation: .2,
|
|
815
|
+
saturation: baseChroma(.2),
|
|
318
816
|
contrast: ["AA", "AAA"],
|
|
319
817
|
inherit: false
|
|
320
818
|
},
|
|
@@ -322,7 +820,7 @@ function buildPalette(config, options = {}) {
|
|
|
322
820
|
hue: baseHue,
|
|
323
821
|
base: "surface-2",
|
|
324
822
|
tone: `${TEXT_SOFT_TONE + SURFACE_2_TEXT_OFFSET}`,
|
|
325
|
-
saturation: .2,
|
|
823
|
+
saturation: baseChroma(.2),
|
|
326
824
|
contrast: ["AA", "AAA"],
|
|
327
825
|
inherit: false
|
|
328
826
|
},
|
|
@@ -330,7 +828,7 @@ function buildPalette(config, options = {}) {
|
|
|
330
828
|
hue: baseHue,
|
|
331
829
|
base: "surface-3",
|
|
332
830
|
tone: `${TEXT_TONE + SURFACE_3_TEXT_OFFSET}`,
|
|
333
|
-
saturation: .2,
|
|
831
|
+
saturation: baseChroma(.2),
|
|
334
832
|
contrast: ["AA", "AAA"],
|
|
335
833
|
inherit: false
|
|
336
834
|
},
|
|
@@ -338,7 +836,7 @@ function buildPalette(config, options = {}) {
|
|
|
338
836
|
hue: baseHue,
|
|
339
837
|
base: "surface-3",
|
|
340
838
|
tone: `${TEXT_SOFT_TONE + SURFACE_3_TEXT_OFFSET}`,
|
|
341
|
-
saturation: .2,
|
|
839
|
+
saturation: baseChroma(.2),
|
|
342
840
|
contrast: ["AA", "AAA"],
|
|
343
841
|
inherit: false
|
|
344
842
|
},
|
|
@@ -346,13 +844,13 @@ function buildPalette(config, options = {}) {
|
|
|
346
844
|
hue: baseHue,
|
|
347
845
|
base: "surface",
|
|
348
846
|
tone: ["-10", "-30"],
|
|
349
|
-
saturation: .175
|
|
847
|
+
saturation: baseChroma(.175)
|
|
350
848
|
},
|
|
351
849
|
placeholder: {
|
|
352
850
|
hue: baseHue,
|
|
353
851
|
base: "surface",
|
|
354
852
|
tone: "-33",
|
|
355
|
-
saturation: .175,
|
|
853
|
+
saturation: baseChroma(.175),
|
|
356
854
|
inherit: false
|
|
357
855
|
},
|
|
358
856
|
focus: {
|
|
@@ -370,7 +868,7 @@ function buildPalette(config, options = {}) {
|
|
|
370
868
|
hue: baseHue,
|
|
371
869
|
base: "surface",
|
|
372
870
|
tone: "-3.5",
|
|
373
|
-
saturation: .2,
|
|
871
|
+
saturation: baseChroma(.2),
|
|
374
872
|
inherit: false
|
|
375
873
|
},
|
|
376
874
|
"disabled-surface-text": {
|
|
@@ -382,67 +880,11 @@ function buildPalette(config, options = {}) {
|
|
|
382
880
|
"surface-inverse": {
|
|
383
881
|
hue: baseHue,
|
|
384
882
|
tone: 12,
|
|
385
|
-
saturation: .475,
|
|
883
|
+
saturation: baseChroma(.475),
|
|
386
884
|
mode: "fixed",
|
|
387
885
|
inherit: false
|
|
388
886
|
},
|
|
389
|
-
|
|
390
|
-
tone: 100,
|
|
391
|
-
mode: "fixed"
|
|
392
|
-
},
|
|
393
|
-
"accent-surface": {
|
|
394
|
-
base: "accent-surface-text",
|
|
395
|
-
tone: "-49",
|
|
396
|
-
contrast: ["AA", "AAA"],
|
|
397
|
-
mode: "fixed"
|
|
398
|
-
},
|
|
399
|
-
"accent-surface-2": {
|
|
400
|
-
base: "accent-surface-text",
|
|
401
|
-
tone: "-52",
|
|
402
|
-
contrast: ["AA", "AAA"],
|
|
403
|
-
mode: "fixed"
|
|
404
|
-
},
|
|
405
|
-
"accent-surface-3": {
|
|
406
|
-
base: "accent-surface-text",
|
|
407
|
-
tone: "-55",
|
|
408
|
-
contrast: ["AA", "AAA"],
|
|
409
|
-
mode: "fixed"
|
|
410
|
-
},
|
|
411
|
-
"accent-surface-hover": {
|
|
412
|
-
base: "accent-surface-text",
|
|
413
|
-
tone: "-58",
|
|
414
|
-
contrast: ["AA", "AAA"],
|
|
415
|
-
mode: "fixed"
|
|
416
|
-
},
|
|
417
|
-
"accent-surface-border": {
|
|
418
|
-
base: "accent-surface",
|
|
419
|
-
tone: "+13",
|
|
420
|
-
mode: "fixed"
|
|
421
|
-
},
|
|
422
|
-
"accent-selected-fill": {
|
|
423
|
-
type: "mix",
|
|
424
|
-
base: "surface",
|
|
425
|
-
target: "accent-surface",
|
|
426
|
-
value: 9,
|
|
427
|
-
space: "srgb"
|
|
428
|
-
},
|
|
429
|
-
"accent-text": {
|
|
430
|
-
base: "accent-selected-fill",
|
|
431
|
-
tone: "-49",
|
|
432
|
-
saturation: 1,
|
|
433
|
-
contrast: [6, 11]
|
|
434
|
-
},
|
|
435
|
-
"accent-text-soft": {
|
|
436
|
-
base: "accent-selected-fill",
|
|
437
|
-
tone: "-49",
|
|
438
|
-
saturation: 1,
|
|
439
|
-
contrast: ["AA", "AAA"]
|
|
440
|
-
},
|
|
441
|
-
"accent-icon": {
|
|
442
|
-
base: "surface",
|
|
443
|
-
tone: "-38",
|
|
444
|
-
saturation: .9375
|
|
445
|
-
},
|
|
887
|
+
...accentColors(accent),
|
|
446
888
|
"accent-disabled-surface": {
|
|
447
889
|
base: "surface",
|
|
448
890
|
tone: "-13",
|
|
@@ -455,22 +897,33 @@ function buildPalette(config, options = {}) {
|
|
|
455
897
|
saturation: .4,
|
|
456
898
|
mode: "fixed"
|
|
457
899
|
},
|
|
900
|
+
"accent-disabled-text": {
|
|
901
|
+
base: "surface",
|
|
902
|
+
tone: "-23",
|
|
903
|
+
saturation: .6
|
|
904
|
+
},
|
|
458
905
|
"loading-face-1": {
|
|
906
|
+
hue: baseHue,
|
|
459
907
|
base: "surface",
|
|
460
908
|
tone: "-2",
|
|
461
|
-
saturation: .
|
|
909
|
+
saturation: baseChroma(.2),
|
|
910
|
+
contrast: [1.2, 1.35],
|
|
462
911
|
inherit: false
|
|
463
912
|
},
|
|
464
913
|
"loading-face-2": {
|
|
914
|
+
hue: baseHue,
|
|
465
915
|
base: "surface",
|
|
466
|
-
tone: "-
|
|
467
|
-
saturation: .
|
|
916
|
+
tone: "-2",
|
|
917
|
+
saturation: baseChroma(.2),
|
|
918
|
+
contrast: [1.65, 2.1],
|
|
468
919
|
inherit: false
|
|
469
920
|
},
|
|
470
921
|
"loading-face-3": {
|
|
922
|
+
hue: baseHue,
|
|
471
923
|
base: "surface",
|
|
472
|
-
tone: "-
|
|
473
|
-
saturation: .
|
|
924
|
+
tone: "-2",
|
|
925
|
+
saturation: baseChroma(.2),
|
|
926
|
+
contrast: [2.4, 3.2],
|
|
474
927
|
inherit: false
|
|
475
928
|
},
|
|
476
929
|
"shadow-sm": {
|
|
@@ -501,26 +954,59 @@ function buildPalette(config, options = {}) {
|
|
|
501
954
|
hue: baseHue
|
|
502
955
|
}
|
|
503
956
|
});
|
|
504
|
-
const
|
|
957
|
+
const tintedSurface = tintedSurfaceOverride(config);
|
|
958
|
+
const primaryTheme = defaultTheme.extend({ colors: tintedSurface });
|
|
959
|
+
/**
|
|
960
|
+
* One status theme's overrides, on whichever path its own seed is on.
|
|
961
|
+
*
|
|
962
|
+
* **Its own color** — the family becomes that color, exactly as the accent zone's does,
|
|
963
|
+
* so the softened APCA floors in `accentColors`' color arm come with it rather than
|
|
964
|
+
* being restated here. The theme's Glaze seed is the color's chroma (see
|
|
965
|
+
* `ResolvedThemeSeed.saturation`), so the tinted surface, the border and the text ramp
|
|
966
|
+
* re-solve at their shipped factors OF that chroma — the banner keeps its proportion to
|
|
967
|
+
* the button instead of drifting relative to a fill whose chroma arrives absolute.
|
|
968
|
+
*
|
|
969
|
+
* **No color of its own, but the ACCENT has one** — the accent color's tone is taken
|
|
970
|
+
* back out. The tone is the brand's, and only the brand's. Inherited, a light brand
|
|
971
|
+
* would put `#danger-accent-surface` at tone 88 in a red hue — a pale pink danger
|
|
972
|
+
* button, which is not a danger button. A status theme carries a *meaning* its hue
|
|
973
|
+
* exists to signal, so absent an instruction of its own it keeps the white-anchored
|
|
974
|
+
* derivation that lands every hue at a comparable weight. `extend({ colors })`
|
|
975
|
+
* redefines each listed color from scratch, so restating the null arrangement is enough
|
|
976
|
+
* to undo it.
|
|
977
|
+
*
|
|
978
|
+
* **Neither** — the tinted-surface override itself, so the shipped palette is provably
|
|
979
|
+
* untouched.
|
|
980
|
+
*/
|
|
981
|
+
const statusColors = (theme) => {
|
|
982
|
+
if (theme.color !== null && theme.colorTone !== null) return {
|
|
983
|
+
...tintedSurface,
|
|
984
|
+
...accentColors(cappedAccent(theme.hue, theme.saturation, theme.colorTone))
|
|
985
|
+
};
|
|
986
|
+
return accent == null ? tintedSurface : {
|
|
987
|
+
...tintedSurface,
|
|
988
|
+
...accentColors(null)
|
|
989
|
+
};
|
|
990
|
+
};
|
|
505
991
|
const successTheme = defaultTheme.extend({
|
|
506
992
|
hue: themes.success.hue,
|
|
507
993
|
saturation: themes.success.saturation,
|
|
508
|
-
colors:
|
|
994
|
+
colors: statusColors(themes.success)
|
|
509
995
|
});
|
|
510
996
|
const dangerTheme = defaultTheme.extend({
|
|
511
997
|
hue: themes.danger.hue,
|
|
512
998
|
saturation: themes.danger.saturation,
|
|
513
|
-
colors:
|
|
999
|
+
colors: statusColors(themes.danger)
|
|
514
1000
|
});
|
|
515
1001
|
const warningTheme = defaultTheme.extend({
|
|
516
1002
|
hue: themes.warning.hue,
|
|
517
1003
|
saturation: themes.warning.saturation,
|
|
518
|
-
colors:
|
|
1004
|
+
colors: statusColors(themes.warning)
|
|
519
1005
|
});
|
|
520
1006
|
const noteTheme = defaultTheme.extend({
|
|
521
1007
|
hue: themes.note.hue,
|
|
522
1008
|
saturation: themes.note.saturation,
|
|
523
|
-
colors:
|
|
1009
|
+
colors: statusColors(themes.note)
|
|
524
1010
|
});
|
|
525
1011
|
const specialTheme = glaze(hue, saturation, instanceConfig);
|
|
526
1012
|
specialTheme.colors({
|
|
@@ -529,39 +1015,7 @@ function buildPalette(config, options = {}) {
|
|
|
529
1015
|
saturation: .475,
|
|
530
1016
|
mode: "fixed"
|
|
531
1017
|
},
|
|
532
|
-
|
|
533
|
-
tone: 100,
|
|
534
|
-
mode: "fixed"
|
|
535
|
-
},
|
|
536
|
-
"accent-surface": {
|
|
537
|
-
base: "accent-surface-text",
|
|
538
|
-
tone: "-49",
|
|
539
|
-
contrast: ["AA", "AAA"],
|
|
540
|
-
mode: "fixed"
|
|
541
|
-
},
|
|
542
|
-
"accent-surface-2": {
|
|
543
|
-
base: "accent-surface-text",
|
|
544
|
-
tone: "-52",
|
|
545
|
-
contrast: ["AA", "AAA"],
|
|
546
|
-
mode: "fixed"
|
|
547
|
-
},
|
|
548
|
-
"accent-surface-3": {
|
|
549
|
-
base: "accent-surface-text",
|
|
550
|
-
tone: "-55",
|
|
551
|
-
contrast: ["AA", "AAA"],
|
|
552
|
-
mode: "fixed"
|
|
553
|
-
},
|
|
554
|
-
"accent-surface-border": {
|
|
555
|
-
base: "accent-surface",
|
|
556
|
-
tone: "+13",
|
|
557
|
-
mode: "fixed"
|
|
558
|
-
},
|
|
559
|
-
"accent-surface-hover": {
|
|
560
|
-
base: "accent-surface-text",
|
|
561
|
-
tone: "-58",
|
|
562
|
-
contrast: ["AA", "AAA"],
|
|
563
|
-
mode: "fixed"
|
|
564
|
-
},
|
|
1018
|
+
...accentFillColors(accent),
|
|
565
1019
|
"accent-text": {
|
|
566
1020
|
base: "accent-surface-text",
|
|
567
1021
|
tone: "-58",
|
|
@@ -750,5 +1204,5 @@ function renderPaletteTokens(options = {}) {
|
|
|
750
1204
|
const PALETTE_TOKENS = lazyStyles(getPaletteTokens);
|
|
751
1205
|
|
|
752
1206
|
//#endregion
|
|
753
|
-
export { PALETTE_TOKENS,
|
|
1207
|
+
export { PALETTE_TOKENS, getCodeTheme, getPalette, getPaletteTokens, renderPaletteTokens, tintRecipe };
|
|
754
1208
|
//# sourceMappingURL=palette.js.map
|