@cube-dev/ui-kit 0.0.0-canary-8d79305 → 0.0.0-canary-ed0ffec
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.d.ts +5 -4
- package/dist/components/Root.js +1 -1
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +5 -2
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.d.ts +2 -4
- package/dist/components/actions/Button/Button.js +5 -8
- 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 +6 -8
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/Item/Item.d.ts +2 -2
- package/dist/components/content/Item/Item.js +11 -10
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.d.ts +2 -2
- package/dist/components/content/ItemBadge/ItemBadge.js +6 -8
- 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.js +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +12 -2
- package/dist/components/data/TableBase/column-tint.js.map +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.d.ts +1 -2
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.js +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-modes.js +1 -1
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +1 -2
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Modal/types.d.ts +0 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +0 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.d.ts +1 -1
- package/dist/data/item-themes.js +55 -141
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +9 -7
- package/dist/eslint-plugin/defaults.generated.js.map +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +1 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +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.js +1 -1
- package/dist/tokens/color-theme.d.ts +2 -1
- package/dist/tokens/color-theme.js +3 -2
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.js +3 -20
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/index.d.ts +1 -1
- package/dist/tokens/index.js +1 -1
- 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 +213 -171
- package/dist/tokens/palette-config.js +144 -59
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.js +45 -18
- package/dist/tokens/palette.js.map +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +2 -2
- package/docs/Theming.md +226 -134
- package/docs/Usage.md +2 -30
- package/docs/components/Root.md +1 -1
- package/docs/components/actions/Button.md +3 -9
- package/docs/components/actions/ItemAction.md +3 -3
- package/docs/components/content/Item.md +10 -10
- package/docs/components/content/ItemBadge.md +2 -2
- package/package.json +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
- package/dist/components/portal/PortalProvider.d.ts +0 -2
package/docs/Theming.md
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
# Theming
|
|
2
2
|
|
|
3
|
-
The whole palette is generated by [Glaze](https://github.com/tenphi/glaze) from a
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
The whole palette is generated by [Glaze](https://github.com/tenphi/glaze) from a handful
|
|
4
|
+
of seeds, one per **zone**: the accent, the base, and each of the four status themes.
|
|
5
|
+
Those seeds are tunable at runtime — change one and every token re-resolves, in light,
|
|
6
6
|
dark, and high-contrast schemes at once.
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
[
|
|
8
|
+
Every zone takes the same seed, and it comes in two forms: a **color**, which is usually
|
|
9
|
+
what you actually have, or the **numbers** behind one. Never both — a zone is seeded one
|
|
10
|
+
way or the other. See [One seed, two ways to spell it](#one-seed-two-ways-to-spell-it).
|
|
11
11
|
|
|
12
12
|
```ts
|
|
13
13
|
import { setPaletteConfig } from '@cube-dev/ui-kit';
|
|
14
14
|
|
|
15
15
|
setPaletteConfig({
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
accent: '#2F5BFF',
|
|
17
|
+
themes: { danger: '#b91c1c' },
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// The same shape, said in numbers.
|
|
21
|
+
setPaletteConfig({
|
|
22
|
+
accent: { hue: 210, saturation: 72 },
|
|
18
23
|
themes: { danger: { hue: 12 } },
|
|
19
24
|
});
|
|
20
25
|
```
|
|
@@ -25,20 +30,22 @@ value so this stays true.
|
|
|
25
30
|
|
|
26
31
|
## What is tunable
|
|
27
32
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
| `
|
|
33
|
-
| `
|
|
34
|
-
| `saturation`
|
|
35
|
-
| `
|
|
36
|
-
| `
|
|
37
|
-
| `
|
|
38
|
-
| `themes.<status
|
|
39
|
-
| `themes
|
|
40
|
-
| `
|
|
41
|
-
| `
|
|
33
|
+
Every zone below takes a `PaletteSeed`: either a color string, or `{ hue?, saturation? }`.
|
|
34
|
+
|
|
35
|
+
| Option | Scope | Default |
|
|
36
|
+
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------- |
|
|
37
|
+
| `accent` | The **accent** zone — the brand. Drives the `accent-*` family on every theme, `primary` / `purple` / `special`, and the brand-tinted `focus`, loading faces and disabled chip. | `{ hue: 280.3 }` |
|
|
38
|
+
| `accent` as a color | Contributes hue, chroma **and tone**, so the brand fill renders as the color you passed. Its chroma reaches the accent family through Glaze's `from`, not through the zone's seed. | unset |
|
|
39
|
+
| `accent.saturation` | Seed saturation (0–100) for the `default` theme, and the fallback every status theme inherits. Setting it **turns `pastel` off**, which is the path it belongs to. | `100` |
|
|
40
|
+
| `base` | The **base** zone — the neutral chrome: `surface` and its ladder, the `surface-text*` ramp, `border`, `placeholder`. Omit it and the zone follows the accent. | follows `accent` |
|
|
41
|
+
| `base` as a color | Contributes hue **and saturation**, clipped to 50; its tone is discarded. | unset |
|
|
42
|
+
| `base.saturation` | Seed saturation (0–100) of the base zone, on the same scale as the accent's. The shipped chrome is `12`. | `(accent's chroma) × 0.12` |
|
|
43
|
+
| `themes.<status>` | Seed for `success` / `danger` / `warning` / `note`. | `156.9` / `23.1` / `84.3` / `302.3` |
|
|
44
|
+
| `themes.<status>` as a color | All three components, and its chroma **does** become the theme's seed — unlike the accent's. See [Status themes](#status-themes). | unset |
|
|
45
|
+
| `themes.code.saturation` | Saturation for the `code-*` syntax family. Hues are fixed, it takes no color, and it does **not** inherit the accent's saturation nor track its default. | `80` |
|
|
46
|
+
| `surfaceMode` | Global. `'tinted'` moves the neutral surface ramp two tones off the end of the tone scale, which is what gives the base saturation room to reach the page surface. | `'neutral'` |
|
|
47
|
+
| `pastel` | Global. Relaxes the sRGB-safe chroma limit, and **pins the accent's saturation to 100**. Wins wherever both are set. Every theme except `code`. | `true` |
|
|
48
|
+
| `contrastLevel` | Global. `'auto'`, or a manual `0`–`100` level. | `'auto'` |
|
|
42
49
|
|
|
43
50
|
### The setter replaces
|
|
44
51
|
|
|
@@ -47,8 +54,8 @@ config you pass **is** the config, resolved against the shipped defaults. Nothin
|
|
|
47
54
|
accumulates, so removing a customization means removing it from the object:
|
|
48
55
|
|
|
49
56
|
```ts
|
|
50
|
-
setPaletteConfig({ hue: 200,
|
|
51
|
-
setPaletteConfig({ hue: 200 }); //
|
|
57
|
+
setPaletteConfig({ accent: { hue: 200 }, base: { hue: 60 } });
|
|
58
|
+
setPaletteConfig({ accent: { hue: 200 } }); // `base` is gone — follows accent again
|
|
52
59
|
```
|
|
53
60
|
|
|
54
61
|
That is what makes the config safe to keep in your own state and re-apply: the
|
|
@@ -60,9 +67,14 @@ pass an updater. It receives the config **as written**, sparse, so spreading it
|
|
|
60
67
|
preserves which fields are pinned and which still inherit:
|
|
61
68
|
|
|
62
69
|
```ts
|
|
63
|
-
|
|
70
|
+
// A zone holds ONE seed, so a one-field control spreads that seed too — writing a bare
|
|
71
|
+
// `{ hue }` would unpin the saturation beside it.
|
|
72
|
+
setPaletteConfig((config) => ({
|
|
73
|
+
...config,
|
|
74
|
+
accent: { ...config.accent, saturation: 55 },
|
|
75
|
+
}));
|
|
64
76
|
|
|
65
|
-
// Nested seeds need their own spread, or the other themes go with them.
|
|
77
|
+
// Nested seeds need their own spread as well, or the other themes go with them.
|
|
66
78
|
setPaletteConfig((config) => ({
|
|
67
79
|
...config,
|
|
68
80
|
themes: { ...config.themes, warning: { saturation: 95 } },
|
|
@@ -72,63 +84,84 @@ setPaletteConfig((config) => ({
|
|
|
72
84
|
`resetPaletteConfig()` drops all tuning at once — the same as
|
|
73
85
|
`setPaletteConfig({})`, just easier to read at a call site.
|
|
74
86
|
|
|
75
|
-
###
|
|
87
|
+
### One seed, two ways to spell it
|
|
76
88
|
|
|
77
|
-
|
|
89
|
+
Every zone takes the same `PaletteSeed`, and it comes in two forms:
|
|
78
90
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
`surface-text*` ramp, `border`, `placeholder`.
|
|
91
|
+
```ts
|
|
92
|
+
type PaletteSeed = string | { hue?: number; saturation?: number };
|
|
93
|
+
```
|
|
83
94
|
|
|
84
|
-
|
|
85
|
-
|
|
95
|
+
A string is a color — anything Glaze parses: hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()`,
|
|
96
|
+
`oklch()`. CSS color keywords (`rebeccapurple`) are not supported; an unparseable value
|
|
97
|
+
warns once and falls back to the numeric path.
|
|
98
|
+
|
|
99
|
+
**The union is the exclusivity.** A zone is seeded one way or the other — there is no
|
|
100
|
+
precedence rule to learn, and no way to write a hue that half-overrides a hex. A patch
|
|
101
|
+
that switches form therefore *replaces* rather than merges; layering happens within a
|
|
102
|
+
path:
|
|
86
103
|
|
|
87
104
|
```ts
|
|
88
|
-
setPaletteConfig({
|
|
105
|
+
setPaletteConfig({ accent: '#2F5BFF' });
|
|
106
|
+
// A number arriving next to that takes the zone over, tone and all.
|
|
107
|
+
setPaletteConfig((config) => ({ ...config, accent: { hue: 300 } }));
|
|
89
108
|
```
|
|
90
109
|
|
|
91
|
-
|
|
92
|
-
|
|
110
|
+
#### The zones
|
|
111
|
+
|
|
112
|
+
- **Accent** (`accent`) — the `accent-*` family on every theme, `primary` / `purple` /
|
|
113
|
+
`special`, plus `focus`, the loading faces and the disabled chip. Its saturation is
|
|
114
|
+
also the fallback every status theme inherits.
|
|
115
|
+
- **Base** (`base`) — the neutral chrome: `surface` and its ladder, the `surface-text*`
|
|
116
|
+
ramp, `border`, `placeholder`.
|
|
117
|
+
- **Status** (`themes.success` / `danger` / `warning` / `note`) — one seed each. See
|
|
118
|
+
[Status themes](#status-themes).
|
|
119
|
+
- **Syntax** (`themes.code`) — the exception: a saturation and nothing else. See
|
|
120
|
+
[The `code-*` family is the exception](#the-code--family-is-the-exception).
|
|
93
121
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
CSS color keywords (`rebeccapurple`) are not supported; an unparseable value warns and
|
|
97
|
-
falls back to the numeric seed.
|
|
122
|
+
Omit `base` and the chrome follows the accent, so out of the box the greys carry a faint
|
|
123
|
+
tint of the brand. Seed it to decouple them — a warm grey UI under a cool blue brand:
|
|
98
124
|
|
|
99
125
|
```ts
|
|
100
|
-
setPaletteConfig({
|
|
126
|
+
setPaletteConfig({ accent: { hue: 235 }, base: { hue: 60 } });
|
|
101
127
|
```
|
|
102
128
|
|
|
103
|
-
|
|
129
|
+
Only the `default` theme is affected. A colored theme's tinted `surface` deliberately
|
|
130
|
+
follows _its own_ hue, because a danger banner should read as red.
|
|
104
131
|
|
|
105
|
-
|
|
106
|
-
brand fill actually _be_ your color. Without it the fill is authored as a fixed tone
|
|
107
|
-
step off white, so every accent hue lands at roughly the same lightness — a yellow
|
|
108
|
-
brand comes out olive. The chroma reaches the accent family through Glaze's `from`
|
|
109
|
-
rather than through the `saturation` seed, which is what stops a brand from
|
|
110
|
-
re-chromatising the chrome and the status themes.
|
|
111
|
-
- `baseColor` contributes **hue and saturation**; its **tone** is discarded, because the
|
|
112
|
-
chrome's own lightness ladder is the design. A base color says which way the greys lean
|
|
113
|
-
and how far, not how dark they are.
|
|
132
|
+
#### What a color contributes, per zone
|
|
114
133
|
|
|
115
|
-
The
|
|
116
|
-
|
|
117
|
-
otherwise inherits — but a fully saturated chrome stops being chrome, and the base colors
|
|
118
|
-
begin to converge above 25 anyway (see [Tinted surfaces](#tinted-surfaces)). The tuner's
|
|
119
|
-
manual slider shares the same ceiling, so the two routes agree on what the top of the
|
|
120
|
-
range means.
|
|
134
|
+
The same string means slightly different things by zone, and the differences are the
|
|
135
|
+
point:
|
|
121
136
|
|
|
122
137
|
```ts
|
|
123
|
-
setPaletteConfig({
|
|
124
|
-
setPaletteConfig({ baseColor: '#FFD400' }); // saturation 100 in, clipped to 50
|
|
138
|
+
setPaletteConfig({ accent: '#2F5BFF', base: '#7A7269' });
|
|
125
139
|
```
|
|
126
140
|
|
|
127
|
-
|
|
128
|
-
color
|
|
141
|
+
- **Accent** — hue, chroma **and tone**. The tone is what makes the brand fill actually
|
|
142
|
+
_be_ your color. Without it the fill is authored as a fixed tone step off white, so
|
|
143
|
+
every accent hue lands at roughly the same lightness — a yellow brand comes out olive.
|
|
144
|
+
The chroma reaches the accent family through Glaze's `from` rather than through the
|
|
145
|
+
zone's seed, which is what stops a brand from re-chromatising the chrome and all four
|
|
146
|
+
status themes.
|
|
147
|
+
- **Base** — hue and saturation; the **tone is discarded**, because the chrome's own
|
|
148
|
+
lightness ladder is the design. A base color says which way the greys lean and how far,
|
|
149
|
+
not how dark they are.
|
|
150
|
+
- **Status** — hue, chroma and tone, and its chroma **does** become that theme's seed.
|
|
151
|
+
Nothing inherits from a status theme, so there is nothing to re-chromatise, and moving
|
|
152
|
+
the seed is what keeps the banner in proportion to the button.
|
|
153
|
+
|
|
154
|
+
The base color's saturation is **clipped to 50**. Naming a base color says "the chrome
|
|
155
|
+
_is_ this color", so it lands near it rather than at the 12% share it would otherwise
|
|
156
|
+
inherit — but a fully saturated chrome stops being chrome, and the base colors begin to
|
|
157
|
+
converge above 25 anyway (see [Tinted surfaces](#tinted-surfaces)). The tuner's manual
|
|
158
|
+
slider shares the same ceiling, so the two routes agree on what the top of the range
|
|
159
|
+
means. A base **number** is not clipped: a number is the more specific instruction.
|
|
129
160
|
|
|
130
161
|
```ts
|
|
131
|
-
setPaletteConfig({
|
|
162
|
+
setPaletteConfig({ base: '#6e7076' }); // near-grey in, near-grey chrome out
|
|
163
|
+
setPaletteConfig({ base: '#FFD400' }); // saturation 100 in, clipped to 50
|
|
164
|
+
setPaletteConfig({ base: { saturation: 100 }, pastel: false }); // 100 stays 100
|
|
132
165
|
```
|
|
133
166
|
|
|
134
167
|
### A color seed is a request
|
|
@@ -165,61 +198,66 @@ across hues, and it sits below where a saturated color would land, so under it a
|
|
|
165
198
|
seed can never resolve to itself: `#EF4444` renders `#c47069`. Under pastel the color
|
|
166
199
|
contributes its hue and its tone; turn pastel off to get its chroma too.
|
|
167
200
|
|
|
201
|
+
All of it applies per zone. A status color answers to the same two floors on its own
|
|
202
|
+
`#<theme>-accent-surface`, including the label cap — every `type="primary"` item on a
|
|
203
|
+
status theme paints `#white` on that fill too, so a pale `danger` color is pulled down
|
|
204
|
+
rather than shipped as a white label on white.
|
|
205
|
+
|
|
168
206
|
Read the result back from the tokens themselves — `#accent-surface` is the fill,
|
|
169
207
|
`#accent-text-soft` the rest link color — or watch the requested/resolved chips in the
|
|
170
208
|
[Theme builder](#theme-builder).
|
|
171
209
|
|
|
172
210
|
### One saturation scale per theme
|
|
173
211
|
|
|
174
|
-
Saturation is _not_ split per token, deliberately: `saturation` is
|
|
175
|
-
**seed**, and every color's own `saturation` is a 0–1 factor of it. `surface` sits
|
|
176
|
-
|
|
177
|
-
~`1.0`.
|
|
212
|
+
Saturation is _not_ split per token, deliberately: a zone's `saturation` is its theme's
|
|
213
|
+
**seed**, and every color's own `saturation` is a 0–1 factor of it. `surface` sits at
|
|
214
|
+
`0.12`, `border` at `0.175`, the text ramp at `0.2`, the accent family at ~`1.0`.
|
|
178
215
|
|
|
179
|
-
So
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
216
|
+
So a theme has one saturation _scale_, and everything on it keeps its proportions:
|
|
217
|
+
turning the seed down mutes the brand fills and the neutral tint together, in the ratios
|
|
218
|
+
the palette was designed around. That is the point — the relationship between a subtle
|
|
219
|
+
surface tint and a saturated accent is part of the design, not something to tune per
|
|
220
|
+
token. It is also why a status **color** takes over its theme's seed rather than reaching
|
|
221
|
+
only its fill: chroma arriving absolutely through `from` while the seed stayed put is
|
|
222
|
+
exactly how those ratios come apart.
|
|
184
223
|
|
|
185
|
-
The one seam is the **base zone**, and it is the same seam
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
choice between them:
|
|
224
|
+
The one seam is the **base zone**, and it is the same seam its own hue opens: the chrome
|
|
225
|
+
is the one family whose job is _not_ to look like the brand. `base.saturation` gives it
|
|
226
|
+
its own seed, on the same 0–100 scale, so a vivid accent over near-grey chrome — or a
|
|
227
|
+
muted accent over visibly warm chrome — is one number rather than a choice between them:
|
|
190
228
|
|
|
191
229
|
```ts
|
|
192
|
-
setPaletteConfig({
|
|
230
|
+
setPaletteConfig({ accent: { saturation: 90 }, base: { saturation: 3 } });
|
|
193
231
|
```
|
|
194
232
|
|
|
195
233
|
Unset, it takes `0.12` — `surface`'s own factor — of whatever the accent zone carries:
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
234
|
+
its seed saturation, or an accent color's own chroma when one is set. So leaving it alone
|
|
235
|
+
reproduces the shipped palette exactly, a muted accent still mutes the chrome along with
|
|
236
|
+
everything else, and a near-grey brand hex leaves near-grey chrome rather than 12% of a
|
|
237
|
+
saturation nobody asked for. A base color overrides all of that with its own, clipped to
|
|
238
|
+
50.
|
|
201
239
|
|
|
202
240
|
**The shipped value is `12`** — a faint tint is what a neutral surface _is_ — so the
|
|
203
241
|
interesting range is the low end. The base colors keep their proportions to one another
|
|
204
242
|
until the highest of them (`0.475`, `surface-inverse`) hits the top of the scale, around
|
|
205
243
|
`25`; past that they converge.
|
|
206
244
|
|
|
207
|
-
Note the asymmetry with
|
|
208
|
-
`pastel` off. How much hue the chrome carries says nothing about which chroma space
|
|
209
|
-
|
|
245
|
+
Note the asymmetry with the accent's saturation: writing the base's does **not** turn
|
|
246
|
+
`pastel` off. How much hue the chrome carries says nothing about which chroma space the
|
|
247
|
+
palette is in.
|
|
210
248
|
|
|
211
249
|
### Tinted surfaces
|
|
212
250
|
|
|
213
251
|
A neutral `surface` sits at the extreme of the tone scale — pure white in light,
|
|
214
252
|
the darkest step the dark tone window allows in dark. Chroma needs distance from
|
|
215
|
-
the extreme to exist at all, so on a light page `surface` is white whatever
|
|
216
|
-
|
|
253
|
+
the extreme to exist at all, so on a light page `surface` is white whatever the base
|
|
254
|
+
saturation asks for. The base seed reaches `surface-2`…`surface-4`, `border`,
|
|
217
255
|
`placeholder` and the text ramp, and stops at the page itself.
|
|
218
256
|
|
|
219
257
|
`surfaceMode: 'tinted'` moves the whole ramp two tones inward:
|
|
220
258
|
|
|
221
259
|
```ts
|
|
222
|
-
setPaletteConfig({ surfaceMode: 'tinted',
|
|
260
|
+
setPaletteConfig({ surfaceMode: 'tinted', base: { saturation: 25 } });
|
|
223
261
|
```
|
|
224
262
|
|
|
225
263
|
Two tones is not a lightness change you would name — it is _room_. Everything below
|
|
@@ -248,12 +286,15 @@ second scale on top of it would only undo the evenness. So there are two paths:
|
|
|
248
286
|
|
|
249
287
|
```ts
|
|
250
288
|
setPaletteConfig({ pastel: true }); // even across hues; saturation is 100, full stop
|
|
251
|
-
setPaletteConfig({ saturation: 65 }); // your scale, per-hue ceiling
|
|
289
|
+
setPaletteConfig({ accent: { saturation: 65 } }); // your scale, per-hue ceiling
|
|
252
290
|
```
|
|
253
291
|
|
|
254
|
-
Note the second line does not mention `pastel`. **Setting
|
|
255
|
-
off**, because tuning a saturation is the non-pastel path by definition — so you
|
|
256
|
-
path by asking for what you want from it, not by setting a flag first.
|
|
292
|
+
Note the second line does not mention `pastel`. **Setting the accent's `saturation` turns
|
|
293
|
+
pastel off**, because tuning a saturation is the non-pastel path by definition — so you
|
|
294
|
+
pick a path by asking for what you want from it, not by setting a flag first. A *color*
|
|
295
|
+
does not answer that question and does not turn pastel off: `accent: '#FFD400'` on its
|
|
296
|
+
own still resolves under the flat ceiling, contributing its hue and tone but not its
|
|
297
|
+
chroma.
|
|
257
298
|
|
|
258
299
|
State `pastel` only to override that. It is the coarser of the two choices — a color
|
|
259
300
|
space rather than a value on one — so it wins wherever both are set, and a saturation it
|
|
@@ -290,51 +331,60 @@ also why the pinned seed is a floor to respect rather than a number to tidy up.
|
|
|
290
331
|
|
|
291
332
|
### Inherited vs pinned
|
|
292
333
|
|
|
293
|
-
Every
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
334
|
+
Every zone's seed starts out **inheriting**: the base zone follows the accent until
|
|
335
|
+
something seeds it, and a status theme's saturation tracks the accent's. Moving the accent
|
|
336
|
+
hue therefore appears to move the base hue too — they are not linked, the base zone simply
|
|
337
|
+
has no value of its own yet.
|
|
297
338
|
|
|
298
|
-
Writing
|
|
299
|
-
again:
|
|
339
|
+
Writing a seed pins it; leaving it out of the config unpins it, so it inherits again:
|
|
300
340
|
|
|
301
341
|
```ts
|
|
302
|
-
setPaletteConfig({
|
|
303
|
-
setPaletteConfig((config) => ({ ...config, hue: 235 })); //
|
|
304
|
-
setPaletteConfig({ hue: 235 }); //
|
|
342
|
+
setPaletteConfig({ base: { hue: 60 } }); // pin
|
|
343
|
+
setPaletteConfig((config) => ({ ...config, accent: { hue: 235 } })); // base stays at 60
|
|
344
|
+
setPaletteConfig({ accent: { hue: 235 } }); // base dropped — follows again → 235
|
|
305
345
|
|
|
306
346
|
// Same thing from inside an updater, when the rest of the config must survive.
|
|
307
|
-
setPaletteConfig(({
|
|
347
|
+
setPaletteConfig(({ base, ...config }) => config);
|
|
308
348
|
```
|
|
309
349
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
controls is in charge:
|
|
350
|
+
A zone is therefore **three-state**, and one field answers all three: absent and it
|
|
351
|
+
inherits, an object and it is pinned to numbers, a string and it is derived from a color.
|
|
352
|
+
A settings UI reads the sparse config to know which of its own controls is in charge:
|
|
314
353
|
|
|
315
354
|
```ts
|
|
316
355
|
const input = getPaletteConfigInput();
|
|
317
|
-
const accentMode = input.
|
|
356
|
+
const accentMode = typeof input.accent === 'string' ? 'color' : 'numbers';
|
|
357
|
+
const baseIsOwn = input.base !== undefined;
|
|
318
358
|
```
|
|
319
359
|
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
360
|
+
`base: {}` and no `base` at all resolve to the same colors, but they are not the same
|
|
361
|
+
config — one has a seed of its own that pins nothing, the other has no seed. The two read
|
|
362
|
+
back differently and both count as changes, because that distinction is exactly what a
|
|
363
|
+
**Follow accent / Own** control is.
|
|
364
|
+
|
|
365
|
+
Swapping one form for the other counts as a change even when the numbers agree — an
|
|
366
|
+
`accent: { hue: 45 }` replaced by a color that derives hue 45 resolves identically, but
|
|
367
|
+
the UI still has to re-render to move its mode control. So does replacing one unparseable
|
|
368
|
+
string with another, which is why the colors are compared by value rather than by
|
|
369
|
+
presence.
|
|
323
370
|
|
|
324
|
-
An explicit `
|
|
371
|
+
An explicit `{ hue: undefined }` inside a seed is equivalent to omitting the field;
|
|
372
|
+
neither is a value.
|
|
325
373
|
|
|
326
|
-
`getPaletteConfig()` resolves everything, which loses that distinction — it cannot
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
as inherited and offer a way
|
|
374
|
+
`getPaletteConfig()` resolves everything, which loses that distinction — it cannot tell
|
|
375
|
+
you whether `100` was chosen or inherited, and it always reports flat numbers whichever
|
|
376
|
+
way a zone was seeded. `getPaletteConfigInput()` returns the sparse config as set, which
|
|
377
|
+
is what a settings UI needs to render an inherited value as inherited and offer a way
|
|
378
|
+
back:
|
|
330
379
|
|
|
331
380
|
```ts
|
|
332
|
-
const
|
|
381
|
+
const seed = getPaletteConfigInput().base;
|
|
382
|
+
const pinnedHue = typeof seed === 'object' ? seed.hue : undefined;
|
|
333
383
|
```
|
|
334
384
|
|
|
335
|
-
Pinning a field to the value it already inherited resolves to the same colors but
|
|
336
|
-
|
|
337
|
-
|
|
385
|
+
Pinning a field to the value it already inherited resolves to the same colors but still
|
|
386
|
+
counts as a change, so a UI reading the sparse config re-renders. Re-applying an _already
|
|
387
|
+
pinned_ value is a true no-op and costs nothing.
|
|
338
388
|
|
|
339
389
|
## Palette playground
|
|
340
390
|
|
|
@@ -353,8 +403,39 @@ Two things worth noticing while you tune:
|
|
|
353
403
|
|
|
354
404
|
## Status themes
|
|
355
405
|
|
|
356
|
-
Each status theme is a Glaze `extend()` of the default theme with its own
|
|
357
|
-
|
|
406
|
+
Each status theme is a Glaze `extend()` of the default theme with its own seed, so tuning
|
|
407
|
+
one moves only its own `#<theme>-*` family.
|
|
408
|
+
|
|
409
|
+
That seed is a `PaletteSeed` like any other, so `danger` can be the red your product
|
|
410
|
+
already ships rather than a hue you reverse-engineered from it:
|
|
411
|
+
|
|
412
|
+
```ts
|
|
413
|
+
setPaletteConfig({ themes: { danger: '#b91c1c', success: { hue: 150 } } });
|
|
414
|
+
```
|
|
415
|
+
|
|
416
|
+
A status color behaves like the brand's in the ways that matter — the light,
|
|
417
|
+
normal-contrast fill reproduces it, dark and high contrast adapt, and the softened APCA
|
|
418
|
+
floors apply instead of the white-anchored ladder's WCAG ones, including the cap that
|
|
419
|
+
keeps the `#white` label on a `type="primary"` button readable.
|
|
420
|
+
|
|
421
|
+
**One thing is deliberately different: its chroma becomes the theme's seed.** An accent
|
|
422
|
+
color's does not, because all four status themes inherit the accent's saturation and
|
|
423
|
+
raising it would re-chromatise every one of them. Nothing inherits from a status theme,
|
|
424
|
+
so there is nothing to protect — and moving the seed is what holds the rest of the theme
|
|
425
|
+
in proportion to the fill. The tinted banner surface, the border and the text ramp are
|
|
426
|
+
authored as factors of the seed (`0.2`, `0.3`, `0.25`), so with the seed left at `100`
|
|
427
|
+
beside a muted fill the banner would read as fully tinted under a washed-out button.
|
|
428
|
+
Moving it keeps the shipped `1.0 : 0.2 : 0.3 : 0.25` ratio exactly.
|
|
429
|
+
|
|
430
|
+
Two consequences worth stating. A vivid status color under a muted palette gives one
|
|
431
|
+
vivid theme beside muted siblings — that is the point of naming a color. And under
|
|
432
|
+
`pastel` the flat ceiling can hold the fill below the color's own chroma while the banner
|
|
433
|
+
still sits at `0.2` of it, so the ratio drifts slightly; turn pastel off for an exact
|
|
434
|
+
color, exactly as with the brand.
|
|
435
|
+
|
|
436
|
+
A muted seed *beside* an accent color is not expressible, because the zone is seeded one
|
|
437
|
+
way or the other: a color there leaves the inherited saturation at its default. Mute the
|
|
438
|
+
status themes individually if you want that.
|
|
358
439
|
|
|
359
440
|
## Contrast level
|
|
360
441
|
|
|
@@ -397,7 +478,7 @@ variant. Following is the default behaviour rather than a third choice.
|
|
|
397
478
|
|
|
398
479
|
On the theme side, the panel is grouped by **what a knob reaches** rather than by
|
|
399
480
|
what it is named after: **Global** for the ones that govern both zones — `pastel`,
|
|
400
|
-
|
|
481
|
+
the accent saturation, `surfaceMode` and `contrastLevel` — then **Accent** and **Base** for
|
|
401
482
|
the ones that do not. `surfaceMode` files under Global despite moving the *base*
|
|
402
483
|
surfaces, because the status themes' tinted surfaces follow it too, and so does the
|
|
403
484
|
mirrored surface the syntax palette solves against.
|
|
@@ -410,7 +491,7 @@ The **contrast level** needs no on/off switch: level `0` and `'auto'` are
|
|
|
410
491
|
output-identical, tier included, so the slider at rest _is_ the shipped palette.
|
|
411
492
|
|
|
412
493
|
Status themes are four chips on one line rather than eight sliders. Each chip is a
|
|
413
|
-
`
|
|
494
|
+
`type="current"` `Button` colored by its own theme with a
|
|
414
495
|
[ColorSwatch](./components/fields/ColorSwatch.md) of its accent, so the group answers
|
|
415
496
|
the question you actually have — do these four still read as four different
|
|
416
497
|
things — at a glance; press one to open its hue and saturation. The hue is not
|
|
@@ -423,7 +504,7 @@ The one button you reach for when an experiment goes wrong should not be behind
|
|
|
423
504
|
the controls that caused it. `Export` opens the config as a `setPaletteConfig()`
|
|
424
505
|
call to copy; `JSON` downloads `palette.json` on the press, with no intermediate
|
|
425
506
|
state worth a second click. Both carry the config _as written_ rather than the
|
|
426
|
-
resolved one, so an inherited `
|
|
507
|
+
resolved one, so an inherited `base` stays inherited instead of being frozen to
|
|
427
508
|
whatever the accent happened to be.
|
|
428
509
|
|
|
429
510
|
Every caveat on the panel is an **InfoBadge** beside the control it qualifies rather
|
|
@@ -439,7 +520,7 @@ it has selected:
|
|
|
439
520
|
| ------------ | ----------------------- | ------------------------------------ | ------------------------- |
|
|
440
521
|
| **Accent** | Hue | Hue + Saturation | Color (hue+chroma+tone) |
|
|
441
522
|
| **Base** | Hue, or _Follow accent_ | Hue + Saturation, or _Follow accent_ | Color, or _Follow accent_ |
|
|
442
|
-
| **Status** | Hue | Hue + Saturation |
|
|
523
|
+
| **Status** | Hue | Hue + Saturation | Color |
|
|
443
524
|
| **Syntax** | Saturation | Saturation | Saturation |
|
|
444
525
|
|
|
445
526
|
`Advanced` and `Color` are the **same chroma space** — the per-hue ceiling — and differ
|
|
@@ -470,7 +551,18 @@ is about whether the chrome has a seed at all, not about how a seed is spelled.
|
|
|
470
551
|
Every transition hands the incoming controls the values the outgoing ones were displaying,
|
|
471
552
|
so switching changes who is in charge without repainting on the way. Leaving `Color`
|
|
472
553
|
therefore pins each zone at what its color derived and drops the hex — including on the
|
|
473
|
-
way to `Pastel`, which cannot honour a color at all.
|
|
554
|
+
way to `Pastel`, which cannot honour a color at all. Status themes pin their **hue** only:
|
|
555
|
+
a saturation pinned on the way out would survive into `Pastel`, where it is inert but
|
|
556
|
+
still in effect, and that is not a state to manufacture on a tab press.
|
|
557
|
+
|
|
558
|
+
The two halves of the way *in* differ, and both are deliberate. The brand zones open on a
|
|
559
|
+
fixed sample hex, so the flip changes which control is in charge rather than reading the
|
|
560
|
+
page back to itself. The four status themes convert instead — each to the fill it is
|
|
561
|
+
already emitting — because four sample hexes would repaint every banner on a tab press,
|
|
562
|
+
and a status theme's identity is a *meaning* a sample color has no business overwriting.
|
|
563
|
+
Coming from `Advanced`, the same chroma space, that conversion lands the banner back where
|
|
564
|
+
it was; coming from `Pastel` the palette repaints regardless, since the tabs turn `pastel`
|
|
565
|
+
off and a change of chroma space is the one thing no hand-over can carry across.
|
|
474
566
|
|
|
475
567
|
In color mode the panel shows where the color actually landed — **Accent Fill** and
|
|
476
568
|
**Accent Text**, the two tokens the seed's tone reaches. The requested color is not
|
|
@@ -499,7 +591,7 @@ import { renderColorTokens, tasty } from '@cube-dev/ui-kit';
|
|
|
499
591
|
const Region = tasty({ styles: { fill: '#surface', color: '#surface-text' } });
|
|
500
592
|
|
|
501
593
|
const preview = useMemo(
|
|
502
|
-
() => renderColorTokens({ hue: 210, scheme: 'dark' }),
|
|
594
|
+
() => renderColorTokens({ accent: { hue: 210 }, scheme: 'dark' }),
|
|
503
595
|
[],
|
|
504
596
|
);
|
|
505
597
|
|
|
@@ -571,7 +663,7 @@ import {
|
|
|
571
663
|
// on change. `palette` is the resolved config; the updater's argument is sparse.
|
|
572
664
|
const [palette, setPalette] = usePaletteConfig();
|
|
573
665
|
|
|
574
|
-
setPalette((config) => ({ ...config, hue: 200 }));
|
|
666
|
+
setPalette((config) => ({ ...config, accent: { ...config.accent, hue: 200 } }));
|
|
575
667
|
|
|
576
668
|
// Outside React.
|
|
577
669
|
getPaletteConfig(); // every field resolved to a concrete value
|
|
@@ -590,7 +682,7 @@ it. `DEFAULT_PALETTE_CONFIG` is the shipped baseline in the same shape.
|
|
|
590
682
|
paint is already correct:
|
|
591
683
|
|
|
592
684
|
```tsx
|
|
593
|
-
<Root palette={{
|
|
685
|
+
<Root palette={{ accent: userBrandColor }}>
|
|
594
686
|
<App />
|
|
595
687
|
</Root>
|
|
596
688
|
```
|
|
@@ -626,10 +718,10 @@ therefore re-tunes nothing — a seed picked in one space lands somewhere else i
|
|
|
626
718
|
other, and the warm statuses move most. Re-tune the seeds alongside it, in whichever
|
|
627
719
|
direction you flip.
|
|
628
720
|
|
|
629
|
-
It also owns `saturation` outright — pinned to `100`, so a number passed
|
|
630
|
-
alongside_ it is inert and warned about (a number passed on its own turns
|
|
631
|
-
instead). And it caps
|
|
632
|
-
saturated color lands, so `#EF4444` resolves to `#c47069`. Both are visible in the
|
|
721
|
+
It also owns the accent's `saturation` outright — pinned to `100`, so a number passed
|
|
722
|
+
_explicitly alongside_ it is inert and warned about (a number passed on its own turns
|
|
723
|
+
pastel off instead). And it caps a color seed short of itself: the ceiling sits below
|
|
724
|
+
where a saturated color lands, so `#EF4444` resolves to `#c47069`. Both are visible in the
|
|
633
725
|
[Theme builder](#theme-builder), the first as a disabled slider and the second as the
|
|
634
726
|
requested/resolved chips.
|
|
635
727
|
|