@cube-dev/ui-kit 0.0.0-canary-4499da7 → 0.0.0-canary-996a50a
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.js +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +13 -7
- 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 +16 -6
- 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 -5
- 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 +10 -11
- 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 +14 -6
- 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.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.d.ts +1 -2
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +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/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/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 +201 -49
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +7 -9
- 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/index.d.ts +0 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +1 -2
- package/dist/index.js +2 -3
- 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.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +11 -12
- 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 +1 -1
- package/docs/Usage.md +1 -6
- package/docs/components/actions/Button.md +10 -3
- package/docs/components/actions/ItemAction.md +3 -3
- package/docs/components/content/Item.md +11 -10
- package/docs/components/content/ItemBadge.md +2 -2
- package/docs/components/status/LoadingAnimation.md +0 -12
- 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/dist/icons/NoDataIcon.d.ts +0 -30
- package/dist/icons/NoDataIcon.js +0 -50
- package/dist/icons/NoDataIcon.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"item-themes.js","names":[],"sources":["../../src/data/item-themes.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\nexport const VALIDATION_STYLES: Styles = {\n border: {\n invalid: '#danger-accent-text',\n valid: '#success-accent-text',\n } as Record<string, string>,\n} as const;\n\n// Base styles shared between ItemAction and ItemBadge\nexport const ITEM_ACTION_BASE_STYLES: Styles = {\n display: 'inline-grid',\n flow: 'column',\n placeItems: 'center',\n placeContent: 'center',\n gap: 0,\n position: 'relative',\n margin: {\n '': '0 1bw 0 1bw',\n ':last-child & !:first-child': '0 $side-padding 0 0',\n '!:last-child & :first-child': '0 0 0 $side-padding',\n ':last-child & :first-child': '0 $side-padding',\n context: '0',\n },\n padding: 0,\n radius: '(1r - 1bw)',\n transition: 'theme',\n flexShrink: 0,\n textDecoration: 'none',\n boxSizing: 'border-box',\n whiteSpace: 'nowrap',\n border: 0,\n height: '$action-size',\n width: {\n '': '$action-size',\n 'has-label': 'auto',\n },\n placeSelf: 'center',\n\n // Side padding for the action buttons\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n // Size using custom property\n '$action-size':\n 'min(max((2x + 2bw), (($size, $size-md) - 1x - 2bw)), (3x - 2bw))',\n\n // Icon styles\n Icon: {\n $: '>',\n display: 'grid',\n placeItems: 'center',\n height: '($action-size - 2bw) ($action-size - 2bw)',\n width: '($action-size - 2bw) ($action-size - 2bw)',\n opacity: {\n '': 1,\n 'checkmark & selected': 1,\n 'checkmark & !selected': 0,\n 'checkmark & !selected & hovered': 0.4,\n },\n },\n} as const;\n\n// ---------- DEFAULT THEME ----------\nexport const DEFAULT_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#primary-accent-surface-border',\n pressed: '#primary-accent-surface-border',\n disabled: 'transparent',\n },\n // All states share the same `#surface` base layer (opaque). Only the\n // *overlay* varies between brand color, hover shade, and disabled chip.\n // Keeping the layer shape identical (always two layers, same base, same\n // gradient overlay slot) lets `background-color`, `background-image` and\n // `--tasty-second-fill-color` all interpolate smoothly during the CSS\n // transition — without it, the gradient overlay would snap on/off and the\n // bg-color would briefly show through (the \"surface flash\" on form submit).\n //\n // The brand ramp `accent-surface` → `-2` → `-3` gives a monotonically\n // increasing contrast against `#surface` (cr ≈ 4.5 → 4.8 → 5.2 in light,\n // similar in dark), so hover and pressed read visibly *darker* than the\n // default state in both schemes. Disabled uses the brand-tinted,\n // scheme-symmetric chip (`accent-disabled-surface` cr ≈ 1.4 vs surface)\n // so the muted state stays identifiable as a brand color.\n fill: {\n '': '#surface #primary-accent-surface',\n hovered: '#surface #primary-accent-surface-2',\n pressed: '#surface #primary-accent-surface-3',\n disabled: '#surface #primary-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#primary-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DEFAULT_OUTLINE_STYLES: Styles = {\n // Non-selected = old OUTLINE: neutral border + surface fill.\n // Selected (= old SECONDARY): brand-tinted fill + brand border.\n // Selected BORDER uses the OPAQUE `#primary-border` token (the neutral\n // `border` ramp re-resolved at `saturation: 0.5` per primary-theme — see\n // `TINTED_SURFACE_OVERRIDE` in `palette.ts`). It replaces an alpha-blended\n // brand-text border so adjacent borders in grouped layouts (e.g.\n // `RadioGroup type=\"button\"`) don't double up at their overlap into a\n // darker stripe. Selected FILL anchors to the *fixed* `#primary-accent-surface`\n // brand: anchoring to the adaptive `#primary-accent-text` would drift the\n // bg toward the text lightness in dark mode and collapse label↔bg contrast\n // below AA. Selected label mirrors LINK: soft `#primary-accent-text-soft` at\n // rest, intensifying to `#primary-accent-text` on hover. Both are solved in\n // `palette.ts` for AA against the BASE selected fill (`accent-selected-fill`).\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': true,\n selected: '#primary-border',\n disabled: '#border',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n // Every state uses a two-layer fill: `#surface-2` (opaque base) + a tint\n // overlay. Keeping the layer shape identical across non-selected, selected\n // and disabled states lets the tint, base color, and gradient slot all\n // interpolate smoothly during the CSS transition. Selected states paint the\n // brand tint on top of `#surface-2` (slightly darker base than a\n // body-composited single-layer `#primary-accent-surface.X` would be, but\n // visually almost identical and free of the overlay-snap flash on click).\n // Disabled paints the neutral `#disabled-surface` chip on top of the same\n // base — or, when selected, the brand-tinted `accent-disabled-surface` one, so\n // a disabled segmented control still shows which option is active (CUB-3912).\n // Every `selected & disabled` entry in this file exists for that reason.\n fill: {\n '': '#surface-2 #surface-text.0',\n hovered: '#surface-2 #surface-text.03',\n pressed: '#surface-2 #surface-text.09',\n selected: '#surface-2 #primary-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #primary-accent-surface.12',\n 'selected & pressed': '#surface-2 #primary-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #primary-accent-disabled-surface',\n },\n color: {\n '': '#surface-text-soft',\n hovered: '#surface-text-soft',\n pressed: '#surface-text',\n selected: '#primary-accent-text-soft',\n 'selected & hovered': '#primary-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#primary-accent-disabled-surface-text',\n },\n} as const;\n\n// Identical to DEFAULT_OUTLINE_STYLES but uses `#surface-3` as the fill base,\n// designed to sit on `#surface-2` containers without blending in.\nexport const DEFAULT_OUTLINE_2_STYLES: Styles = {\n ...DEFAULT_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #surface-text.0',\n hovered: '#surface-3 #surface-text.03',\n pressed: '#surface-3 #surface-text.09',\n selected: '#surface-3 #primary-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #primary-accent-surface.12',\n 'selected & pressed': '#surface-3 #primary-accent-surface.15',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #primary-accent-disabled-surface',\n },\n} as const;\n\nexport const DEFAULT_CLEAR_STYLES: Styles = {\n // Non-selected = old NEUTRAL: transparent / dark-tinted neutral look.\n // Selected = old CLEAR: brand-tinted overlay over the surface.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#primary-accent-surface.09',\n 'selected & (hovered | focused)': '#primary-accent-surface.12',\n 'selected & pressed': '#primary-accent-surface.18',\n disabled: 'transparent',\n 'selected & disabled': '#primary-accent-disabled-surface',\n },\n // Selected label mirrors LINK: soft at rest, `#primary-accent-text` on\n // hover. See DEFAULT_OUTLINE_STYLES.\n color: {\n '': '#surface-text-soft',\n hovered: '#surface-text-soft',\n 'pressed & !selected': '#surface-text',\n selected: '#primary-accent-text-soft',\n 'selected & hovered': '#primary-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#primary-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DEFAULT_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#surface-text.09',\n 'selected & (hovered | focused)': '#surface-text.12',\n 'selected & pressed': '#surface-text.15',\n disabled: 'transparent',\n },\n color: {\n '': '#surface-text-soft',\n hovered: '#surface-text-soft',\n selected: '#surface-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const DEFAULT_LINK_STYLES: Styles = {\n // Default sits at `#primary-accent-text-soft` and intensifies on hover to the\n // stronger `#primary-accent-text`. Both are solved in `palette.ts` for AA\n // against `accent-selected-fill` (the BASE selected Item fill), so they also\n // clear AA on plain surfaces; both are adaptive across light/dark/HC.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: '0',\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#primary-accent-text-soft',\n 'hovered & !pressed': '#primary-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\n// ---------- DANGER THEME ----------\nexport const DANGER_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#danger-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #danger-accent-surface',\n hovered: '#surface #danger-accent-surface-2',\n pressed: '#surface #danger-accent-surface-3',\n disabled: '#surface #danger-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#danger-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DANGER_OUTLINE_STYLES: Styles = {\n // Non-selected = old DANGER OUTLINE; selected = old DANGER SECONDARY.\n // Border uses the OPAQUE `#danger-border` token (the neutral `border` ramp\n // re-resolved at `saturation: 0.5` per danger-theme — see\n // `TINTED_SURFACE_OVERRIDE` in `palette.ts`). It replaces an alpha-blended\n // brand-text border so adjacent borders in grouped layouts don't double up\n // at their overlap into a darker stripe.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#danger-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #danger-accent-surface.0',\n hovered: '#surface-2 #danger-accent-surface.03',\n pressed: '#surface-2 #danger-accent-surface.09',\n selected: '#surface-2 #danger-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #danger-accent-surface.12',\n 'selected & pressed': '#surface-2 #danger-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #danger-accent-disabled-surface',\n },\n color: {\n '': '#danger-accent-text-soft',\n selected: '#danger-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#danger-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DANGER_OUTLINE_2_STYLES: Styles = {\n ...DANGER_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #danger-accent-surface.0',\n hovered: '#surface-3 #danger-accent-surface.03',\n pressed: '#surface-3 #danger-accent-surface.09',\n selected: '#surface-3 #danger-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #danger-accent-surface.12',\n 'selected & pressed': '#surface-3 #danger-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #danger-accent-disabled-surface',\n },\n} as const;\n\nexport const DANGER_CLEAR_STYLES: Styles = {\n // Non-selected = old DANGER NEUTRAL: dark-tinted overlay; pressed switches\n // text to `#danger-accent-text` (matches old neutral).\n // Selected = old DANGER CLEAR: danger-text-tinted overlay.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#danger-accent-text.09',\n 'selected & (hovered | focused)': '#danger-accent-text.12',\n 'selected & pressed': '#danger-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#danger-accent-disabled-surface',\n },\n color: {\n '': '#danger-accent-text-soft',\n selected: '#danger-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#danger-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DANGER_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#danger-accent-text-soft',\n 'hovered & !pressed': '#danger-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const DANGER_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#danger-accent-text.0',\n 'hovered | focused': '#danger-accent-text.03',\n selected: '#danger-accent-text.09',\n 'selected & (hovered | focused)': '#danger-accent-text.12',\n pressed: '#danger-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#danger-accent-text',\n hovered: '#danger-accent-text',\n pressed: '#danger-accent-text',\n disabled: '#danger-accent-text.4',\n },\n} as const;\n\n// ---------- SUCCESS THEME ----------\nexport const SUCCESS_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#success-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #success-accent-surface',\n hovered: '#surface #success-accent-surface-2',\n pressed: '#surface #success-accent-surface-3',\n disabled: '#surface #success-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#success-accent-disabled-surface-text',\n },\n} as const;\n\nexport const SUCCESS_OUTLINE_STYLES: Styles = {\n // Non-selected = old SUCCESS OUTLINE; selected = old SUCCESS SECONDARY.\n // See DANGER_OUTLINE_STYLES for the border-anchor rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#success-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #success-accent-surface.0',\n hovered: '#surface-2 #success-accent-surface.03',\n pressed: '#surface-2 #success-accent-surface.09',\n selected: '#surface-2 #success-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #success-accent-surface.12',\n 'selected & pressed': '#surface-2 #success-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #success-accent-disabled-surface',\n },\n color: {\n '': '#success-accent-text-soft',\n selected: '#success-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#success-accent-disabled-surface-text',\n },\n} as const;\n\nexport const SUCCESS_OUTLINE_2_STYLES: Styles = {\n ...SUCCESS_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #success-accent-surface.0',\n hovered: '#surface-3 #success-accent-surface.03',\n pressed: '#surface-3 #success-accent-surface.09',\n selected: '#surface-3 #success-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #success-accent-surface.12',\n 'selected & pressed': '#surface-3 #success-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #success-accent-disabled-surface',\n },\n} as const;\n\nexport const SUCCESS_CLEAR_STYLES: Styles = {\n // Non-selected = old SUCCESS NEUTRAL; selected = old SUCCESS CLEAR.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#success-accent-text.09',\n 'selected & (hovered | focused)': '#success-accent-text.12',\n 'selected & pressed': '#success-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#success-accent-disabled-surface',\n },\n color: {\n '': '#success-accent-text-soft',\n selected: '#success-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#success-accent-disabled-surface-text',\n },\n} as const;\n\nexport const SUCCESS_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#success-accent-text-soft',\n 'hovered & !pressed': '#success-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const SUCCESS_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#success-accent-text.0',\n 'hovered | focused': '#success-accent-text.03',\n selected: '#success-accent-text.09',\n 'selected & (hovered | focused)': '#success-accent-text.12',\n pressed: '#success-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#success-accent-text',\n hovered: '#success-accent-text',\n pressed: '#success-accent-text',\n disabled: '#success-accent-text.4',\n },\n} as const;\n\n// ---------- WARNING THEME ----------\nexport const WARNING_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#warning-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #warning-accent-surface',\n hovered: '#surface #warning-accent-surface-2',\n pressed: '#surface #warning-accent-surface-3',\n disabled: '#surface #warning-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#warning-accent-disabled-surface-text',\n },\n} as const;\n\nexport const WARNING_OUTLINE_STYLES: Styles = {\n // Non-selected = old WARNING OUTLINE; selected = old WARNING SECONDARY.\n // See DANGER_OUTLINE_STYLES for the border-anchor rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#warning-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #warning-accent-surface.0',\n hovered: '#surface-2 #warning-accent-surface.03',\n pressed: '#surface-2 #warning-accent-surface.09',\n selected: '#surface-2 #warning-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #warning-accent-surface.12',\n 'selected & pressed': '#surface-2 #warning-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #warning-accent-disabled-surface',\n },\n color: {\n '': '#warning-accent-text-soft',\n selected: '#warning-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#warning-accent-disabled-surface-text',\n },\n} as const;\n\nexport const WARNING_OUTLINE_2_STYLES: Styles = {\n ...WARNING_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #warning-accent-surface.0',\n hovered: '#surface-3 #warning-accent-surface.03',\n pressed: '#surface-3 #warning-accent-surface.09',\n selected: '#surface-3 #warning-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #warning-accent-surface.12',\n 'selected & pressed': '#surface-3 #warning-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #warning-accent-disabled-surface',\n },\n} as const;\n\nexport const WARNING_CLEAR_STYLES: Styles = {\n // Non-selected = old WARNING NEUTRAL; selected = old WARNING CLEAR.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#warning-accent-text.09',\n 'selected & (hovered | focused)': '#warning-accent-text.12',\n 'selected & pressed': '#warning-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#warning-accent-disabled-surface',\n },\n color: {\n '': '#warning-accent-text-soft',\n selected: '#warning-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#warning-accent-disabled-surface-text',\n },\n} as const;\n\nexport const WARNING_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#warning-accent-text-soft',\n 'hovered & !pressed': '#warning-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const WARNING_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#warning-accent-text.0',\n 'hovered | focused': '#warning-accent-text.03',\n selected: '#warning-accent-text.09',\n 'selected & (hovered | focused)': '#warning-accent-text.12',\n pressed: '#warning-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#warning-accent-text',\n hovered: '#warning-accent-text',\n pressed: '#warning-accent-text',\n disabled: '#warning-accent-text.4',\n },\n} as const;\n\n// ---------- NOTE THEME ----------\nexport const NOTE_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#note-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #note-accent-surface',\n hovered: '#surface #note-accent-surface-2',\n pressed: '#surface #note-accent-surface-3',\n disabled: '#surface #note-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#note-accent-disabled-surface-text',\n },\n} as const;\n\nexport const NOTE_OUTLINE_STYLES: Styles = {\n // Non-selected = old NOTE OUTLINE; selected = old NOTE SECONDARY.\n // See DANGER_OUTLINE_STYLES for the border-anchor rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#note-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #note-accent-surface.0',\n hovered: '#surface-2 #note-accent-surface.03',\n pressed: '#surface-2 #note-accent-surface.09',\n selected: '#surface-2 #note-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #note-accent-surface.12',\n 'selected & pressed': '#surface-2 #note-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #note-accent-disabled-surface',\n },\n color: {\n '': '#note-accent-text-soft',\n selected: '#note-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#note-accent-disabled-surface-text',\n },\n} as const;\n\nexport const NOTE_OUTLINE_2_STYLES: Styles = {\n ...NOTE_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #note-accent-surface.0',\n hovered: '#surface-3 #note-accent-surface.03',\n pressed: '#surface-3 #note-accent-surface.09',\n selected: '#surface-3 #note-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #note-accent-surface.12',\n 'selected & pressed': '#surface-3 #note-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #note-accent-disabled-surface',\n },\n} as const;\n\nexport const NOTE_CLEAR_STYLES: Styles = {\n // Non-selected = old NOTE NEUTRAL; selected = old NOTE CLEAR.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#note-accent-text.09',\n 'selected & (hovered | focused)': '#note-accent-text.12',\n 'selected & pressed': '#note-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#note-accent-disabled-surface',\n },\n color: {\n '': '#note-accent-text-soft',\n selected: '#note-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#note-accent-disabled-surface-text',\n },\n} as const;\n\nexport const NOTE_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#note-accent-text-soft',\n 'hovered & !pressed': '#note-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const NOTE_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#note-accent-text.0',\n 'hovered | focused': '#note-accent-text.03',\n selected: '#note-accent-text.09',\n 'selected & (hovered | focused)': '#note-accent-text.12',\n pressed: '#note-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#note-accent-text',\n hovered: '#note-accent-text',\n pressed: '#note-accent-text',\n disabled: '#note-accent-text.4',\n },\n} as const;\n\n// ---------- SPECIAL THEME ----------\n// Every color here resolves to a fixed-mode value (built-in `#white`, the\n// standalone `#special-*` theme in `src/tokens/palette.ts`, or `transparent`).\n// `mode: 'fixed'` makes the resolved OKHSL identical in light, dark, and\n// high-contrast, so the special theme renders the same regardless of scheme.\n// The only intentionally adaptive colors are `VALIDATION_STYLES.border`\n// (`#danger-accent-text` / `#success-accent-text`) — validation state is allowed to follow\n// the active scheme.\nexport const SPECIAL_PRIMARY_STYLES: Styles = {\n // Focus ring uses `#special-accent-text` — a fixed-mode dark-purple that\n // stays identical across light/dark/HC, matching the special theme's\n // \"intentionally non-inverting\" identity. Picked over `#primary-accent-text`\n // (the cross-theme default) which is `mode: 'auto'` and would shift in dark.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': '#special-accent-surface-border',\n pressed: '#special-accent-surface-border',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n // The base layer is `#white` (matching the rest of the special theme's\n // anchor) instead of `#surface`, but the same monotonic `-1`/`-2`/`-3`\n // ramp gives the brand fill a visibly darker hover and pressed state.\n fill: {\n '': '#white #special-accent-surface',\n hovered: '#white #special-accent-surface-2',\n pressed: '#white #special-accent-surface-3',\n disabled: '#white #special-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#special-accent-disabled-surface-text',\n },\n} as const;\n\nexport const SPECIAL_OUTLINE_STYLES: Styles = {\n // Non-selected = old SPECIAL OUTLINE; selected = old SPECIAL SECONDARY.\n // Special is anchored on `#special-surface` (a fixed dark-purple base), so\n // contrast is added by *whitening* the overlay rather than darkening it.\n // The same default → hover → pressed monotonic-contrast pattern as the\n // light themes is preserved, just with white-alpha steps that are tuned\n // to read against the dark base.\n //\n // IMPORTANT: every alpha step within a single state-map must be a unique\n // value string. Tasty's `mergeEntriesByValue` pass coalesces entries that\n // share a serialized value into a single OR-condition entry whose priority\n // is the *max* of the merged group. If `hovered` and `disabled` were both\n // `#white.12`, the merged entry would sit at the higher priority and\n // negate against the `selected & (hovered | focused)` rule below, making\n // the latter resolve to FALSE for `selected & hovered`. Keeping every\n // alpha distinct sidesteps the collision.\n //\n // Focus ring uses the fixed-mode `#special-accent-text` so the indicator\n // stays scheme-invariant alongside the rest of the special theme — see\n // `SPECIAL_PRIMARY_STYLES.outline` for the full rationale.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': '#white.15',\n selected: '#white.2',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n fill: {\n '': '#special-surface #white.0',\n hovered: '#special-surface #white.06',\n pressed: '#special-surface #white.12',\n selected: '#special-surface #white.18',\n 'selected & (hovered | focused)': '#special-surface #white.24',\n 'selected & pressed': '#special-surface #white.3',\n disabled: '#special-surface #white.04',\n // Stays in the white-alpha register: the base here is a fixed dark tone.\n 'selected & disabled': '#special-surface #white.09',\n },\n // Mirrors the colored-theme soft→opaque pattern (`*-accent-text-soft` →\n // `*-accent-text`) using white-alpha steps: default is slightly muted so\n // that selected reads as the more prominent state.\n color: {\n '': '#white.8',\n selected: '#white',\n disabled: '#white.4',\n 'selected & disabled': '#white.55',\n },\n} as const;\n\nexport const SPECIAL_CLEAR_STYLES: Styles = {\n // Non-selected = old SPECIAL NEUTRAL: transparent / white-tinted overlay\n // on the dark base.\n // Selected INVERTS the surface — the fill flips to a solid white pill with\n // dark accent-text on top. To express \"increasing contrast on press\" in\n // this inverted layout we go the *other* direction: pure white at rest →\n // slightly tinted on hover → more tinted on press, i.e. progressively\n // letting the dark base bleed through. This keeps the monotonic-contrast\n // pattern semantically (hover < pressed) while preserving the inversion.\n //\n // IMPORTANT: every alpha step within a single state-map must be a unique\n // value string. Tasty's `mergeEntriesByValue` pass coalesces entries that\n // share a serialized value into a single OR-condition entry whose priority\n // is the *max* of the merged group, which then negates against lower-\n // priority rules. If `'hovered | focused'` and `'selected & disabled'`\n // both used `#white.12`, the merged entry would sit at priority 7 and\n // negate against `'selected & (hovered | focused)'` (priority 4), making\n // it resolve to FALSE for `selected & hovered` — which is exactly the\n // \"selected-hover stays dark\" bug. `'selected & disabled'` therefore uses\n // a slightly different alpha (.16) that's visually similar but a distinct\n // value string. The default `''` and `disabled` may share `#white.0`\n // because Tasty keeps the TRUE/default entry separate from non-defaults\n // during merging.\n //\n // Focus ring uses the fixed-mode `#special-accent-text` so the indicator\n // stays scheme-invariant alongside the rest of the special theme — see\n // `SPECIAL_PRIMARY_STYLES.outline` for the full rationale.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': 'transparent',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n fill: {\n '': '#white.0',\n 'hovered | focused': '#white.12',\n pressed: '#white.18',\n selected: '#white',\n 'selected & (hovered | focused)': '#white.94',\n 'selected & pressed': '#white.88',\n disabled: '#white.0',\n 'selected & disabled': '#white.16',\n },\n // Non-selected mirrors the colored-theme soft→opaque pattern with\n // white-alpha steps. Selected keeps its inverted look — dark accent-text\n // on a white pill — so the soft/opaque transition only applies to the\n // non-selected variant.\n color: {\n '': '#white.8',\n selected: '#special-accent-text',\n disabled: '#white.4',\n },\n} as const;\n\nexport const SPECIAL_LINK_STYLES: Styles = {\n // See `SPECIAL_PRIMARY_STYLES.outline` for why we use the fixed-mode\n // `#special-accent-text` here instead of the cross-theme `#primary-accent-text`.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: '0',\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#white',\n 'hovered & !pressed': '#white.9',\n disabled: '#white.4',\n },\n} as const;\n\nexport const SPECIAL_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#white.0',\n hovered: '#white.12',\n 'pressed | (selected & !hovered)': '#white.18',\n },\n color: {\n '': '#white',\n disabled: '#white.4',\n },\n} as const;\n\n// ---------- CURRENT TYPE ----------\n// Every color is derived from the *inherited* text color (`#current` →\n// `currentcolor`), so the element adopts whatever color its context paints\n// with: a colored Alert, a dark banner, an image overlay, a chart tooltip. That\n// makes the type theme-agnostic — a single style object registered under\n// `default.current`, with the host component forcing the theme to `default`.\n//\n// `color: '#current'` compiles to `color: currentcolor`, which CSS resolves as\n// `color: inherit` — so the label stays fully opaque and, crucially, the\n// element's own `currentcolor` (used by `fill`/`border` below) is the INHERITED\n// color rather than a faded one. The alpha steps are then mixed off that same\n// color, which is why the whole ramp tracks the context automatically.\n//\n// There are two flavours, mirroring the two shapes the neutral types take:\n// `CURRENT_ITEM_STYLES` follows `*_ITEM_STYLES` (borderless, invisible at rest,\n// for list rows) and `CURRENT_BUTTON_STYLES` follows the standalone button types\n// (a resting chip with a border). Both keep the monotonic-contrast pattern of\n// their neutral counterparts: default < hover < pressed, and the same again one\n// level up when selected.\n//\n// IMPORTANT: every alpha step within one state-map must be a unique value\n// string — Tasty's `mergeEntriesByValue` pass coalesces equal values into one\n// OR-entry at the group's max priority, which then negates against\n// lower-priority rules. So no two steps in one map may share an alpha. See\n// `SPECIAL_OUTLINE_STYLES` for the full explanation.\n//\n// A note on `disabled`: fading the label also fades the element's own\n// `currentcolor`, so every other alpha is multiplied by .4 on that state.\n// Disabled `fill`/`border` are therefore written PRE-MULTIPLIED where they need\n// to stay visible.\n\n// The alpha ramp for the item flavour, held in custom properties rather than\n// written inline in `fill`. Two reasons:\n//\n// 1. Unlike the brand tokens, `#current` alphas do NOT adapt to the color\n// scheme: a 4% tint of a dark label on a light surface reads far stronger\n// than a 4% tint of a light label on a dark one, so one ramp cannot serve\n// both. Each step therefore carries a per-surface value — the base entry for\n// the light scheme, `@dark` for the dark scheme, and `theme=special` for the\n// special theme's dark-purple surface. Special is *static* (identical in\n// light, dark and HC by design — see the SPECIAL section above), so it needs\n// a single ramp rather than a light/dark pair. `theme=special` resolves\n// against the element's own `data-theme`, which `ItemAction` sets from the\n// surrounding `ItemActionProvider`.\n// 2. Writing three ramps straight into one `fill` map would put ~18 alpha\n// values in a single state-map, and Tasty's `mergeEntriesByValue` pass\n// coalesces any two equal value strings into one OR-entry at the group's max\n// priority, which then negates against lower-priority rules. Giving each\n// step its own 3-entry map keeps every value string unique by construction —\n// the constraint that `SPECIAL_OUTLINE_STYLES` documents the hard way.\n//\n// The special steps run higher than the light ones because they resolve against\n// a `#white.8` label: an authored `.15` nets roughly the `.12` that\n// `SPECIAL_CLEAR_STYLES` uses on the same base.\n//\n// SELECTED steps jump well clear of the interaction steps rather than continuing\n// them. Every other type marks selection with a brand *hue* — an accent-tinted\n// fill under an accent label — and `current` has exactly one color to work with,\n// so it cannot. Alpha is the only channel left, and a step that merely continued\n// the hover/press ramp (the original `.04 → .06 → .09`) read as a slightly dirty\n// background rather than an \"on\" state. Selection is a persistent state, not a\n// transient one, so it earns the bigger jump; hover and press stay subtle so an\n// unselected row full of actions does not look busy.\n// Only the LIGHT ramp can spend freely. There the chip is a pale tint and the\n// label stays opaque and dark, so contrast barely moves (.30 still measures\n// 5.66:1). On a dark surface the same construction inverts: the chip is a light\n// tint climbing toward an equally light label, so it swallows it. Both dark\n// surfaces hit the AA floor (4.5:1) for their label at exactly `.24` — measured,\n// not guessed — which is the ceiling every dark step below is written under, and\n// why `selected` there is a smaller jump than in light. `SPECIAL_CLEAR_STYLES`\n// escaped the same ceiling by INVERTING selected to a white pill with dark text;\n// a single inherited color cannot do that.\nconst CURRENT_ITEM_RAMP: Styles = {\n '$current-hover': {\n '': '#current.04',\n '@dark': '#current.07',\n 'theme=special': '#current.08',\n },\n '$current-press': {\n '': '#current.06',\n '@dark': '#current.11',\n 'theme=special': '#current.12',\n },\n '$current-selected': {\n '': '#current.18',\n '@dark': '#current.16',\n 'theme=special': '#current.17',\n },\n '$current-selected-hover': {\n '': '#current.24',\n '@dark': '#current.19',\n 'theme=special': '#current.21',\n },\n '$current-selected-press': {\n '': '#current.3',\n '@dark': '#current.22',\n 'theme=special': '#current.24',\n },\n} as const;\n\n// Item flavour — the `current` counterpart of `*_ITEM_STYLES`: no border,\n// nothing painted at rest, the fill appearing only on interaction. Used for\n// list rows (`Item`, `ItemButton`) and, as the default type, the actions inside\n// them — where a resting chip on every row would read as noise. Like the other\n// `*_ITEM_STYLES` it leaves the focus ring to the base styles (the collection\n// that owns the row indicates focus), and only steps the fill. `ItemAction`\n// adds a ring of its own on top, since a focusable action is not a list row.\nexport const CURRENT_ITEM_STYLES: Styles = {\n ...CURRENT_ITEM_RAMP,\n border: 'transparent',\n fill: {\n '': '#current.0',\n 'hovered | focused': 'var(--current-hover)',\n pressed: 'var(--current-press)',\n selected: 'var(--current-selected)',\n 'selected & (hovered | focused)': 'var(--current-selected-hover)',\n 'selected & pressed': 'var(--current-selected-press)',\n disabled: 'transparent',\n },\n color: {\n '': '#current',\n // Only fade when this element is disabled ON ITS OWN. `#current` is the\n // color it inherits, and a disabled host has already faded that color to\n // `#disabled-surface-text` — so fading again multiplies the two and the label\n // washes out (an action inside a disabled row measured `.4` of an already\n // muted token, roughly `rgb(224,225,228)` on white, against the row's own\n // `rgb(178,181,205)`). Inheriting the host's faded color unchanged is both\n // correct and what the neutral types did. `ItemAction` sets\n // `inherit-disabled` when its disabled state came from the surrounding\n // `ItemActionProvider` rather than its own prop; nothing else sets the mod, so\n // `Item` keeps fading itself as before.\n 'disabled & !inherit-disabled': '#current.4',\n },\n} as const;\n\n// Button flavour — a standalone control, so it carries its own weight: a\n// resting `#current.03` chip inside a `#current.08` border. `.03` is enough to\n// separate the button from a flat background without reading as a filled\n// surface, while leaving room for four distinguishable steps above it.\n// Disabled `fill`/`border` are pre-multiplied (`.06`/`.12` → an effective\n// `.024`/`.048`) so the chip stays a muted version of itself instead of\n// vanishing.\nexport const CURRENT_BUTTON_STYLES: Styles = {\n // The focus ring is the one color NOT taken from `#current`: every type in\n // this file uses `#primary-accent-text` (the special theme swapping in its\n // fixed-mode counterpart), so the focus indicator stays the same wherever it\n // appears.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#current.08',\n 'hovered | focused': '#current.15',\n pressed: '#current.25',\n selected: '#current.3',\n 'selected & pressed': '#current.4',\n disabled: '#current.12',\n 'selected & disabled': '#current.35',\n },\n fill: {\n '': '#current.03',\n 'hovered | focused': '#current.07',\n pressed: '#current.1',\n selected: '#current.12',\n 'selected & (hovered | focused)': '#current.16',\n 'selected & pressed': '#current.2',\n disabled: '#current.06',\n // Alpha step rather than a brand token — `current` inherits `currentcolor`.\n // Authored high because the disabled label already dims `currentcolor` to\n // `.4`, and these alphas resolve against it: `.18` renders as ~.07.\n 'selected & disabled': '#current.18',\n },\n color: {\n '': '#current',\n disabled: '#current.4',\n },\n} as const;\n\n// ---------- CARD TYPE STYLES ----------\n// Card type only supports: default, success, danger, note themes\n\nexport const DEFAULT_CARD_STYLES: Styles = {\n border: '#surface-text.20',\n fill: '#surface-3',\n color: '#surface-text-soft',\n} as const;\n\nexport const SUCCESS_CARD_STYLES: Styles = {\n border: '#success-accent-surface.20',\n fill: '#success-surface',\n color: '#success-accent-text',\n} as const;\n\nexport const DANGER_CARD_STYLES: Styles = {\n border: '#danger-accent-surface.20',\n fill: '#danger-surface',\n color: '#danger-accent-text',\n} as const;\n\nexport const WARNING_CARD_STYLES: Styles = {\n border: '#warning-accent-surface.20',\n fill: '#warning-surface',\n color: '#warning-accent-text',\n} as const;\n\nexport const NOTE_CARD_STYLES: Styles = {\n border: '#note-accent-surface.20',\n fill: '#note-surface',\n color: '#note-accent-text',\n} as const;\n\nexport type ItemVariant =\n // The `current` type derives every color from the inherited `currentcolor`,\n // so it has no per-theme flavours — see `CURRENT_ITEM_STYLES`.\n | 'default.current'\n | 'default.primary'\n | 'default.outline'\n | 'default.outline-2'\n | 'default.clear'\n | 'default.link'\n | 'default.item'\n | 'default.card'\n | 'danger.primary'\n | 'danger.outline'\n | 'danger.outline-2'\n | 'danger.clear'\n | 'danger.link'\n | 'danger.item'\n | 'danger.card'\n | 'success.primary'\n | 'success.outline'\n | 'success.outline-2'\n | 'success.clear'\n | 'success.link'\n | 'success.item'\n | 'success.card'\n | 'warning.primary'\n | 'warning.outline'\n | 'warning.outline-2'\n | 'warning.clear'\n | 'warning.link'\n | 'warning.item'\n | 'warning.card'\n | 'note.primary'\n | 'note.outline'\n | 'note.outline-2'\n | 'note.clear'\n | 'note.link'\n | 'note.item'\n | 'note.card'\n | 'special.primary'\n | 'special.outline'\n | 'special.clear'\n | 'special.link'\n | 'special.item';\n\n// The single `theme.type` → styles map. Exported so `Item` and the projections\n// below cannot drift apart: `ITEM_RESTING_COLOR_VARIANTS` is derived from this\n// object rather than restating the palette.\nexport const ITEM_VARIANTS: Record<ItemVariant, Styles> = {\n // Inherited-color type — theme-agnostic, see `CURRENT_ITEM_STYLES`\n 'default.current': CURRENT_ITEM_STYLES,\n // Default theme\n 'default.primary': DEFAULT_PRIMARY_STYLES,\n 'default.outline': DEFAULT_OUTLINE_STYLES,\n 'default.outline-2': DEFAULT_OUTLINE_2_STYLES,\n 'default.clear': DEFAULT_CLEAR_STYLES,\n 'default.link': DEFAULT_LINK_STYLES,\n 'default.item': DEFAULT_ITEM_STYLES,\n 'default.card': DEFAULT_CARD_STYLES,\n // Danger theme\n 'danger.primary': DANGER_PRIMARY_STYLES,\n 'danger.outline': DANGER_OUTLINE_STYLES,\n 'danger.outline-2': DANGER_OUTLINE_2_STYLES,\n 'danger.clear': DANGER_CLEAR_STYLES,\n 'danger.link': DANGER_LINK_STYLES,\n 'danger.item': DANGER_ITEM_STYLES,\n 'danger.card': DANGER_CARD_STYLES,\n // Success theme\n 'success.primary': SUCCESS_PRIMARY_STYLES,\n 'success.outline': SUCCESS_OUTLINE_STYLES,\n 'success.outline-2': SUCCESS_OUTLINE_2_STYLES,\n 'success.clear': SUCCESS_CLEAR_STYLES,\n 'success.link': SUCCESS_LINK_STYLES,\n 'success.item': SUCCESS_ITEM_STYLES,\n 'success.card': SUCCESS_CARD_STYLES,\n // Warning theme\n 'warning.primary': WARNING_PRIMARY_STYLES,\n 'warning.outline': WARNING_OUTLINE_STYLES,\n 'warning.outline-2': WARNING_OUTLINE_2_STYLES,\n 'warning.clear': WARNING_CLEAR_STYLES,\n 'warning.link': WARNING_LINK_STYLES,\n 'warning.item': WARNING_ITEM_STYLES,\n 'warning.card': WARNING_CARD_STYLES,\n // Note theme\n 'note.primary': NOTE_PRIMARY_STYLES,\n 'note.outline': NOTE_OUTLINE_STYLES,\n 'note.outline-2': NOTE_OUTLINE_2_STYLES,\n 'note.clear': NOTE_CLEAR_STYLES,\n 'note.link': NOTE_LINK_STYLES,\n 'note.item': NOTE_ITEM_STYLES,\n 'note.card': NOTE_CARD_STYLES,\n // Special theme\n 'special.primary': SPECIAL_PRIMARY_STYLES,\n 'special.outline': SPECIAL_OUTLINE_STYLES,\n 'special.clear': SPECIAL_CLEAR_STYLES,\n 'special.link': SPECIAL_LINK_STYLES,\n 'special.item': SPECIAL_ITEM_STYLES,\n};\n\n// Resolve a `theme` + `type` pair to the variant key that actually exists in\n// `ITEM_VARIANTS`. Three of the combinations users can write have no entry of\n// their own and are folded onto one that does.\n//\n// Shared rather than inlined because more than one component has to arrive at\n// the same answer: `Item` renders the row, and `ItemButton` repeats the lookup on\n// the wrapper that carries the row color to actions rendered outside it. Those\n// two drifted the moment they were written separately — the `special` fallback\n// below was missed, which silently resolved to a nonexistent\n// `special.outline-2`, left the wrapper with no color, and handed sibling actions\n// the page's `currentcolor` on a dark surface.\nexport function resolveItemVariant(\n theme: string | undefined,\n type: string | undefined,\n): ItemVariant {\n // The `special` theme has no `outline-2` variant (it paints over\n // `#special-surface`, not `#surface-2`/`#surface-3`); fall back to `outline`\n // so the item still renders.\n const effectiveType =\n theme === 'special' && type === 'outline-2' ? 'outline' : type;\n\n // `header` reuses the `item` visuals, and both `header` and `current` are\n // theme-agnostic — `current` paints from the inherited `currentcolor`.\n const variantType = effectiveType === 'header' ? 'item' : effectiveType;\n const variantTheme =\n effectiveType === 'header' || effectiveType === 'current'\n ? 'default'\n : theme;\n\n return `${variantTheme}.${variantType}` as ItemVariant;\n}\n\n// Each variant reduced to the label colors an actions wrapper has to reproduce.\n//\n// The `current` type paints from `currentcolor`, which only reaches an action\n// that is a DOM *descendant* of the row. `Item` renders its actions inside the\n// row element, so they inherit the row color for free — but `ItemButton` renders\n// them as a sibling of the button (deliberately, so the actions stay reachable\n// and are not nested inside a `<button>`), where `currentcolor` would inherit\n// from the page instead. Painting these colors on that wrapper restores the link.\n//\n// Resting AND disabled, and the second one is not optional. `ItemAction`\n// suppresses its own `.4` fade when the disabled state was inherited from the\n// host, on the grounds that the host has already faded the color it paints from —\n// which is only true if the wrapper actually reproduces the host's *disabled*\n// color. With resting alone, a disabled `ItemButton` rendered full-strength\n// actions next to its own faded label.\n//\n// The other states are still skipped: the wrapper is not the interactive element,\n// so it never carries `hovered` / `pressed` / `selected` and those entries could\n// never match there. `disabled` is different only because `ItemButton` passes it\n// down explicitly.\nexport const ITEM_RESTING_COLOR_VARIANTS: Record<ItemVariant, Styles> =\n Object.fromEntries(\n Object.entries(ITEM_VARIANTS).map(([variant, styles]) => {\n const color = styles.color;\n\n if (!color || typeof color !== 'object') {\n return [variant, { color }];\n }\n\n const map = color as Record<string, string>;\n // Only a plain `disabled` key is usable. `default.current` states it as\n // `disabled & !inherit-disabled`, which is deliberately not matched here:\n // that variant paints from `currentcolor` and has no fixed color to hand\n // down, so the wrapper leaves its resting value in place.\n const disabled = map.disabled;\n\n return [\n variant,\n { color: disabled ? { '': map[''], disabled } : map[''] },\n ];\n }),\n ) as Record<ItemVariant, Styles>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"item-themes.js","names":[],"sources":["../../src/data/item-themes.ts"],"sourcesContent":["import type { Styles } from '@tenphi/tasty';\n\nexport const VALIDATION_STYLES: Styles = {\n border: {\n invalid: '#danger-accent-text',\n valid: '#success-accent-text',\n } as Record<string, string>,\n} as const;\n\n// Base styles shared between ItemAction and ItemBadge\nexport const ITEM_ACTION_BASE_STYLES: Styles = {\n display: 'inline-grid',\n flow: 'column',\n placeItems: 'center',\n placeContent: 'center',\n gap: 0,\n position: 'relative',\n margin: {\n '': '0 1bw 0 1bw',\n ':last-child & !:first-child': '0 $side-padding 0 0',\n '!:last-child & :first-child': '0 0 0 $side-padding',\n ':last-child & :first-child': '0 $side-padding',\n context: '0',\n },\n padding: 0,\n radius: '(1r - 1bw)',\n transition: 'theme',\n flexShrink: 0,\n textDecoration: 'none',\n boxSizing: 'border-box',\n whiteSpace: 'nowrap',\n border: 0,\n height: '$action-size',\n width: {\n '': '$action-size',\n 'has-label': 'auto',\n },\n placeSelf: 'center',\n\n // Side padding for the action buttons\n '$side-padding': '(($size - $action-size - 2bw) / 2)',\n // Size using custom property\n '$action-size':\n 'min(max((2x + 2bw), (($size, $size-md) - 1x - 2bw)), (3x - 2bw))',\n\n // Icon styles\n Icon: {\n $: '>',\n display: 'grid',\n placeItems: 'center',\n height: '($action-size - 2bw) ($action-size - 2bw)',\n width: '($action-size - 2bw) ($action-size - 2bw)',\n opacity: {\n '': 1,\n 'checkmark & selected': 1,\n 'checkmark & !selected': 0,\n 'checkmark & !selected & hovered': 0.4,\n },\n },\n} as const;\n\n// ---------- DEFAULT THEME ----------\nexport const DEFAULT_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#primary-accent-surface-border',\n pressed: '#primary-accent-surface-border',\n disabled: 'transparent',\n },\n // All states share the same `#surface` base layer (opaque). Only the\n // *overlay* varies between brand color, hover shade, and disabled chip.\n // Keeping the layer shape identical (always two layers, same base, same\n // gradient overlay slot) lets `background-color`, `background-image` and\n // `--tasty-second-fill-color` all interpolate smoothly during the CSS\n // transition — without it, the gradient overlay would snap on/off and the\n // bg-color would briefly show through (the \"surface flash\" on form submit).\n //\n // The brand ramp `accent-surface` → `-2` → `-3` gives a monotonically\n // increasing contrast against `#surface` (cr ≈ 4.5 → 4.8 → 5.2 in light,\n // similar in dark), so hover and pressed read visibly *darker* than the\n // default state in both schemes. Disabled uses the brand-tinted,\n // scheme-symmetric chip (`accent-disabled-surface` cr ≈ 1.4 vs surface)\n // so the muted state stays identifiable as a brand color.\n fill: {\n '': '#surface #primary-accent-surface',\n hovered: '#surface #primary-accent-surface-2',\n pressed: '#surface #primary-accent-surface-3',\n disabled: '#surface #primary-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#primary-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DEFAULT_OUTLINE_STYLES: Styles = {\n // Non-selected = old OUTLINE: neutral border + surface fill.\n // Selected (= old SECONDARY): brand-tinted fill + brand border.\n // Selected BORDER uses the OPAQUE `#primary-border` token (the neutral\n // `border` ramp re-resolved at `saturation: 0.5` per primary-theme — see\n // `TINTED_SURFACE_OVERRIDE` in `palette.ts`). It replaces an alpha-blended\n // brand-text border so adjacent borders in grouped layouts (e.g.\n // `RadioGroup type=\"button\"`) don't double up at their overlap into a\n // darker stripe. Selected FILL anchors to the *fixed* `#primary-accent-surface`\n // brand: anchoring to the adaptive `#primary-accent-text` would drift the\n // bg toward the text lightness in dark mode and collapse label↔bg contrast\n // below AA. Selected label mirrors LINK: soft `#primary-accent-text-soft` at\n // rest, intensifying to `#primary-accent-text` on hover. Both are solved in\n // `palette.ts` for AA against the BASE selected fill (`accent-selected-fill`).\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': true,\n selected: '#primary-border',\n disabled: '#border',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n // Every state uses a two-layer fill: `#surface-2` (opaque base) + a tint\n // overlay. Keeping the layer shape identical across non-selected, selected\n // and disabled states lets the tint, base color, and gradient slot all\n // interpolate smoothly during the CSS transition. Selected states paint the\n // brand tint on top of `#surface-2` (slightly darker base than a\n // body-composited single-layer `#primary-accent-surface.X` would be, but\n // visually almost identical and free of the overlay-snap flash on click).\n // Disabled paints the neutral `#disabled-surface` chip on top of the same\n // base. When SELECTED it keeps the enabled selected chip instead and fades\n // only the LABEL, to `#accent-disabled-text` — so a disabled segmented\n // control still shows which option is active (CUB-3912) without the chip\n // changing weight at all. Every `selected & disabled` entry in this file\n // exists for that reason.\n //\n // Fading the label alone is what keeps the state honest. The chip is the\n // thing that says \"this one is on\", and a disabled control has no business\n // saying that more loudly than a live one — which is exactly what happened\n // while the state borrowed `accent-disabled-surface`: the mid-tone pill a\n // PRIMARY button steps DOWN to is a step UP from a 9% tint, and its\n // `tone: 'max'` label resolved to literal white in light mode. Building the\n // chip from the neutral disabled tone at brand chroma fixed the weight but\n // read over-saturated next to the enabled selected chips it sits beside.\n //\n // The `.08` is `selected`'s own `.09` minus a hair, and the difference is\n // deliberately imperceptible: the two entries must not serialize to the SAME\n // string. Tasty's `mergeEntriesByValue` pass coalesces equal values into one\n // OR-entry at the group's max priority, so a literal reuse of `.09` would\n // merge `selected` into `selected & disabled` and then negate against\n // `selected & (hovered | focused)` — the \"selected-hover stays dark\" bug that\n // `SPECIAL_CLEAR_STYLES` documents at length, which escapes it the same way.\n fill: {\n '': '#surface-2 #surface-text.0',\n hovered: '#surface-2 #surface-text.03',\n pressed: '#surface-2 #surface-text.09',\n selected: '#surface-2 #primary-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #primary-accent-surface.12',\n 'selected & pressed': '#surface-2 #primary-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #primary-accent-surface.08',\n },\n color: {\n '': '#surface-text-soft',\n hovered: '#surface-text-soft',\n pressed: '#surface-text',\n selected: '#primary-accent-text-soft',\n 'selected & hovered': '#primary-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#primary-accent-disabled-text',\n },\n} as const;\n\n// Identical to DEFAULT_OUTLINE_STYLES but uses `#surface-3` as the fill base,\n// designed to sit on `#surface-2` containers without blending in.\nexport const DEFAULT_OUTLINE_2_STYLES: Styles = {\n ...DEFAULT_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #surface-text.0',\n hovered: '#surface-3 #surface-text.03',\n pressed: '#surface-3 #surface-text.09',\n selected: '#surface-3 #primary-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #primary-accent-surface.12',\n 'selected & pressed': '#surface-3 #primary-accent-surface.15',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #primary-accent-surface.08',\n },\n} as const;\n\nexport const DEFAULT_CLEAR_STYLES: Styles = {\n // Non-selected = old NEUTRAL: transparent / dark-tinted neutral look.\n // Selected = old CLEAR: brand-tinted overlay over the surface.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#primary-accent-surface.09',\n 'selected & (hovered | focused)': '#primary-accent-surface.12',\n 'selected & pressed': '#primary-accent-surface.18',\n disabled: 'transparent',\n 'selected & disabled': '#primary-accent-surface.08',\n },\n // Selected label mirrors LINK: soft at rest, `#primary-accent-text` on\n // hover. See DEFAULT_OUTLINE_STYLES.\n color: {\n '': '#surface-text-soft',\n hovered: '#surface-text-soft',\n 'pressed & !selected': '#surface-text',\n selected: '#primary-accent-text-soft',\n 'selected & hovered': '#primary-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#primary-accent-disabled-text',\n },\n} as const;\n\nexport const DEFAULT_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#surface-text.09',\n 'selected & (hovered | focused)': '#surface-text.12',\n 'selected & pressed': '#surface-text.15',\n disabled: 'transparent',\n },\n color: {\n '': '#surface-text-soft',\n hovered: '#surface-text-soft',\n selected: '#surface-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const DEFAULT_LINK_STYLES: Styles = {\n // Default sits at `#primary-accent-text-soft` and intensifies on hover to the\n // stronger `#primary-accent-text`. Both are solved in `palette.ts` for AA\n // against `accent-selected-fill` (the BASE selected Item fill), so they also\n // clear AA on plain surfaces; both are adaptive across light/dark/HC.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: '0',\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#primary-accent-text-soft',\n 'hovered & !pressed': '#primary-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\n// ---------- DANGER THEME ----------\nexport const DANGER_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#danger-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #danger-accent-surface',\n hovered: '#surface #danger-accent-surface-2',\n pressed: '#surface #danger-accent-surface-3',\n disabled: '#surface #danger-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#danger-accent-disabled-surface-text',\n },\n} as const;\n\nexport const DANGER_OUTLINE_STYLES: Styles = {\n // Non-selected = old DANGER OUTLINE; selected = old DANGER SECONDARY.\n // Border uses the OPAQUE `#danger-border` token (the neutral `border` ramp\n // re-resolved at `saturation: 0.5` per danger-theme — see\n // `TINTED_SURFACE_OVERRIDE` in `palette.ts`). It replaces an alpha-blended\n // brand-text border so adjacent borders in grouped layouts don't double up\n // at their overlap into a darker stripe.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#danger-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #danger-accent-surface.0',\n hovered: '#surface-2 #danger-accent-surface.03',\n pressed: '#surface-2 #danger-accent-surface.09',\n selected: '#surface-2 #danger-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #danger-accent-surface.12',\n 'selected & pressed': '#surface-2 #danger-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #danger-accent-surface.08',\n },\n color: {\n '': '#danger-accent-text-soft',\n selected: '#danger-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#danger-accent-disabled-text',\n },\n} as const;\n\nexport const DANGER_OUTLINE_2_STYLES: Styles = {\n ...DANGER_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #danger-accent-surface.0',\n hovered: '#surface-3 #danger-accent-surface.03',\n pressed: '#surface-3 #danger-accent-surface.09',\n selected: '#surface-3 #danger-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #danger-accent-surface.12',\n 'selected & pressed': '#surface-3 #danger-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #danger-accent-surface.08',\n },\n} as const;\n\nexport const DANGER_CLEAR_STYLES: Styles = {\n // Non-selected = old DANGER NEUTRAL: dark-tinted overlay; pressed switches\n // text to `#danger-accent-text` (matches old neutral).\n // Selected = old DANGER CLEAR: danger-text-tinted overlay.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#danger-accent-text.09',\n 'selected & (hovered | focused)': '#danger-accent-text.12',\n 'selected & pressed': '#danger-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#danger-accent-text.08',\n },\n color: {\n '': '#danger-accent-text-soft',\n selected: '#danger-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#danger-accent-disabled-text',\n },\n} as const;\n\nexport const DANGER_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#danger-accent-text-soft',\n 'hovered & !pressed': '#danger-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const DANGER_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#danger-accent-text.0',\n 'hovered | focused': '#danger-accent-text.03',\n selected: '#danger-accent-text.09',\n 'selected & (hovered | focused)': '#danger-accent-text.12',\n pressed: '#danger-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#danger-accent-text',\n hovered: '#danger-accent-text',\n pressed: '#danger-accent-text',\n disabled: '#danger-accent-text.4',\n },\n} as const;\n\n// ---------- SUCCESS THEME ----------\nexport const SUCCESS_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#success-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #success-accent-surface',\n hovered: '#surface #success-accent-surface-2',\n pressed: '#surface #success-accent-surface-3',\n disabled: '#surface #success-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#success-accent-disabled-surface-text',\n },\n} as const;\n\nexport const SUCCESS_OUTLINE_STYLES: Styles = {\n // Non-selected = old SUCCESS OUTLINE; selected = old SUCCESS SECONDARY.\n // See DANGER_OUTLINE_STYLES for the border-anchor rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#success-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #success-accent-surface.0',\n hovered: '#surface-2 #success-accent-surface.03',\n pressed: '#surface-2 #success-accent-surface.09',\n selected: '#surface-2 #success-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #success-accent-surface.12',\n 'selected & pressed': '#surface-2 #success-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #success-accent-surface.08',\n },\n color: {\n '': '#success-accent-text-soft',\n selected: '#success-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#success-accent-disabled-text',\n },\n} as const;\n\nexport const SUCCESS_OUTLINE_2_STYLES: Styles = {\n ...SUCCESS_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #success-accent-surface.0',\n hovered: '#surface-3 #success-accent-surface.03',\n pressed: '#surface-3 #success-accent-surface.09',\n selected: '#surface-3 #success-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #success-accent-surface.12',\n 'selected & pressed': '#surface-3 #success-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #success-accent-surface.08',\n },\n} as const;\n\nexport const SUCCESS_CLEAR_STYLES: Styles = {\n // Non-selected = old SUCCESS NEUTRAL; selected = old SUCCESS CLEAR.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#success-accent-text.09',\n 'selected & (hovered | focused)': '#success-accent-text.12',\n 'selected & pressed': '#success-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#success-accent-text.08',\n },\n color: {\n '': '#success-accent-text-soft',\n selected: '#success-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#success-accent-disabled-text',\n },\n} as const;\n\nexport const SUCCESS_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#success-accent-text-soft',\n 'hovered & !pressed': '#success-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const SUCCESS_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#success-accent-text.0',\n 'hovered | focused': '#success-accent-text.03',\n selected: '#success-accent-text.09',\n 'selected & (hovered | focused)': '#success-accent-text.12',\n pressed: '#success-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#success-accent-text',\n hovered: '#success-accent-text',\n pressed: '#success-accent-text',\n disabled: '#success-accent-text.4',\n },\n} as const;\n\n// ---------- WARNING THEME ----------\nexport const WARNING_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#warning-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #warning-accent-surface',\n hovered: '#surface #warning-accent-surface-2',\n pressed: '#surface #warning-accent-surface-3',\n disabled: '#surface #warning-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#warning-accent-disabled-surface-text',\n },\n} as const;\n\nexport const WARNING_OUTLINE_STYLES: Styles = {\n // Non-selected = old WARNING OUTLINE; selected = old WARNING SECONDARY.\n // See DANGER_OUTLINE_STYLES for the border-anchor rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#warning-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #warning-accent-surface.0',\n hovered: '#surface-2 #warning-accent-surface.03',\n pressed: '#surface-2 #warning-accent-surface.09',\n selected: '#surface-2 #warning-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #warning-accent-surface.12',\n 'selected & pressed': '#surface-2 #warning-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #warning-accent-surface.08',\n },\n color: {\n '': '#warning-accent-text-soft',\n selected: '#warning-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#warning-accent-disabled-text',\n },\n} as const;\n\nexport const WARNING_OUTLINE_2_STYLES: Styles = {\n ...WARNING_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #warning-accent-surface.0',\n hovered: '#surface-3 #warning-accent-surface.03',\n pressed: '#surface-3 #warning-accent-surface.09',\n selected: '#surface-3 #warning-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #warning-accent-surface.12',\n 'selected & pressed': '#surface-3 #warning-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #warning-accent-surface.08',\n },\n} as const;\n\nexport const WARNING_CLEAR_STYLES: Styles = {\n // Non-selected = old WARNING NEUTRAL; selected = old WARNING CLEAR.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#warning-accent-text.09',\n 'selected & (hovered | focused)': '#warning-accent-text.12',\n 'selected & pressed': '#warning-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#warning-accent-text.08',\n },\n color: {\n '': '#warning-accent-text-soft',\n selected: '#warning-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#warning-accent-disabled-text',\n },\n} as const;\n\nexport const WARNING_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#warning-accent-text-soft',\n 'hovered & !pressed': '#warning-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const WARNING_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#warning-accent-text.0',\n 'hovered | focused': '#warning-accent-text.03',\n selected: '#warning-accent-text.09',\n 'selected & (hovered | focused)': '#warning-accent-text.12',\n pressed: '#warning-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#warning-accent-text',\n hovered: '#warning-accent-text',\n pressed: '#warning-accent-text',\n disabled: '#warning-accent-text.4',\n },\n} as const;\n\n// ---------- NOTE THEME ----------\nexport const NOTE_PRIMARY_STYLES: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#white.2',\n pressed: '#note-accent-text',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n fill: {\n '': '#surface #note-accent-surface',\n hovered: '#surface #note-accent-surface-2',\n pressed: '#surface #note-accent-surface-3',\n disabled: '#surface #note-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#note-accent-disabled-surface-text',\n },\n} as const;\n\nexport const NOTE_OUTLINE_STYLES: Styles = {\n // Non-selected = old NOTE OUTLINE; selected = old NOTE SECONDARY.\n // See DANGER_OUTLINE_STYLES for the border-anchor rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': '#note-border',\n disabled: '#border',\n },\n fill: {\n '': '#surface-2 #note-accent-surface.0',\n hovered: '#surface-2 #note-accent-surface.03',\n pressed: '#surface-2 #note-accent-surface.09',\n selected: '#surface-2 #note-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-2 #note-accent-surface.12',\n 'selected & pressed': '#surface-2 #note-accent-surface.18',\n disabled: '#surface-2 #disabled-surface',\n 'selected & disabled': '#surface-2 #note-accent-surface.08',\n },\n color: {\n '': '#note-accent-text-soft',\n selected: '#note-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#note-accent-disabled-text',\n },\n} as const;\n\nexport const NOTE_OUTLINE_2_STYLES: Styles = {\n ...NOTE_OUTLINE_STYLES,\n fill: {\n '': '#surface-3 #note-accent-surface.0',\n hovered: '#surface-3 #note-accent-surface.03',\n pressed: '#surface-3 #note-accent-surface.09',\n selected: '#surface-3 #note-accent-surface.09',\n 'selected & (hovered | focused)': '#surface-3 #note-accent-surface.12',\n 'selected & pressed': '#surface-3 #note-accent-surface.18',\n disabled: '#surface-3 #disabled-surface',\n 'selected & disabled': '#surface-3 #note-accent-surface.08',\n },\n} as const;\n\nexport const NOTE_CLEAR_STYLES: Styles = {\n // Non-selected = old NOTE NEUTRAL; selected = old NOTE CLEAR.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: {\n '': 'transparent',\n },\n fill: {\n '': '#surface-text.0',\n 'hovered | focused': '#surface-text.04',\n pressed: '#surface-text.06',\n selected: '#note-accent-text.09',\n 'selected & (hovered | focused)': '#note-accent-text.12',\n 'selected & pressed': '#note-accent-text.18',\n disabled: 'transparent',\n 'selected & disabled': '#note-accent-text.08',\n },\n color: {\n '': '#note-accent-text-soft',\n selected: '#note-accent-text',\n disabled: '#disabled-surface-text',\n 'selected & disabled': '#note-accent-disabled-text',\n },\n} as const;\n\nexport const NOTE_LINK_STYLES: Styles = {\n // See DEFAULT_LINK_STYLES for the soft→strong rationale.\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#note-accent-text-soft',\n 'hovered & !pressed': '#note-accent-text',\n disabled: '#disabled-surface-text',\n },\n} as const;\n\nexport const NOTE_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#note-accent-text.0',\n 'hovered | focused': '#note-accent-text.03',\n selected: '#note-accent-text.09',\n 'selected & (hovered | focused)': '#note-accent-text.12',\n pressed: '#note-accent-text.09',\n disabled: 'transparent',\n },\n color: {\n '': '#note-accent-text',\n hovered: '#note-accent-text',\n pressed: '#note-accent-text',\n disabled: '#note-accent-text.4',\n },\n} as const;\n\n// ---------- SPECIAL THEME ----------\n// Every color here resolves to a fixed-mode value (built-in `#white`, the\n// standalone `#special-*` theme in `src/tokens/palette.ts`, or `transparent`).\n// `mode: 'fixed'` makes the resolved OKHSL identical in light, dark, and\n// high-contrast, so the special theme renders the same regardless of scheme.\n// The only intentionally adaptive colors are `VALIDATION_STYLES.border`\n// (`#danger-accent-text` / `#success-accent-text`) — validation state is allowed to follow\n// the active scheme.\nexport const SPECIAL_PRIMARY_STYLES: Styles = {\n // Focus ring uses `#special-accent-text` — a fixed-mode dark-purple that\n // stays identical across light/dark/HC, matching the special theme's\n // \"intentionally non-inverting\" identity. Picked over `#primary-accent-text`\n // (the cross-theme default) which is `mode: 'auto'` and would shift in dark.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': '#special-accent-surface-border',\n pressed: '#special-accent-surface-border',\n disabled: 'transparent',\n },\n // See `DEFAULT_PRIMARY_STYLES.fill` for the layer-shape + ramp rationale.\n // The base layer is `#white` (matching the rest of the special theme's\n // anchor) instead of `#surface`, but the same monotonic `-1`/`-2`/`-3`\n // ramp gives the brand fill a visibly darker hover and pressed state.\n fill: {\n '': '#white #special-accent-surface',\n hovered: '#white #special-accent-surface-2',\n pressed: '#white #special-accent-surface-3',\n disabled: '#white #special-accent-disabled-surface',\n },\n color: {\n '': '#white',\n disabled: '#special-accent-disabled-surface-text',\n },\n} as const;\n\nexport const SPECIAL_OUTLINE_STYLES: Styles = {\n // Non-selected = old SPECIAL OUTLINE; selected = old SPECIAL SECONDARY.\n // Special is anchored on `#special-surface` (a fixed dark-purple base), so\n // contrast is added by *whitening* the overlay rather than darkening it.\n // The same default → hover → pressed monotonic-contrast pattern as the\n // light themes is preserved, just with white-alpha steps that are tuned\n // to read against the dark base.\n //\n // IMPORTANT: every alpha step within a single state-map must be a unique\n // value string. Tasty's `mergeEntriesByValue` pass coalesces entries that\n // share a serialized value into a single OR-condition entry whose priority\n // is the *max* of the merged group. If `hovered` and `disabled` were both\n // `#white.12`, the merged entry would sit at the higher priority and\n // negate against the `selected & (hovered | focused)` rule below, making\n // the latter resolve to FALSE for `selected & hovered`. Keeping every\n // alpha distinct sidesteps the collision.\n //\n // Focus ring uses the fixed-mode `#special-accent-text` so the indicator\n // stays scheme-invariant alongside the rest of the special theme — see\n // `SPECIAL_PRIMARY_STYLES.outline` for the full rationale.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': '#white.15',\n selected: '#white.2',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n fill: {\n '': '#special-surface #white.0',\n hovered: '#special-surface #white.06',\n pressed: '#special-surface #white.12',\n selected: '#special-surface #white.18',\n 'selected & (hovered | focused)': '#special-surface #white.24',\n 'selected & pressed': '#special-surface #white.3',\n disabled: '#special-surface #white.04',\n // Stays in the white-alpha register: the base here is a fixed dark tone.\n // Like the colored themes, a disabled SELECTED control keeps the chip it\n // has when enabled and fades only the label — `.17` rather than a literal\n // reuse of `selected`'s `.18` so the two do not serialize identically and\n // trip `mergeEntriesByValue`, exactly as `SPECIAL_CLEAR_STYLES` documents.\n 'selected & disabled': '#special-surface #white.17',\n },\n // Mirrors the colored-theme soft→opaque pattern (`*-accent-text-soft` →\n // `*-accent-text`) using white-alpha steps: default is slightly muted so\n // that selected reads as the more prominent state.\n //\n // Both disabled labels are solved for cr ≈ 2.0 against the chip they sit on\n // — the house figure for a disabled label, which `disabled-surface-text`\n // hits against `surface` and which this theme's own `primary` disabled pair\n // hits at 1.73. They used to measure 3.24 and 4.21: not only too legible for\n // a dead control, but INVERTED, since the selected one out-read the plain\n // one. The two alphas differ because they resolve against different chips\n // (`.04` and `.17`), which lands them on the same contrast rather than the\n // same opacity.\n color: {\n '': '#white.8',\n selected: '#white',\n disabled: '#white.23',\n 'selected & disabled': '#white.28',\n },\n} as const;\n\nexport const SPECIAL_CLEAR_STYLES: Styles = {\n // Non-selected = old SPECIAL NEUTRAL: transparent / white-tinted overlay\n // on the dark base.\n // Selected INVERTS the surface — the fill flips to a solid white pill with\n // dark accent-text on top. To express \"increasing contrast on press\" in\n // this inverted layout we go the *other* direction: pure white at rest →\n // slightly tinted on hover → more tinted on press, i.e. progressively\n // letting the dark base bleed through. This keeps the monotonic-contrast\n // pattern semantically (hover < pressed) while preserving the inversion.\n //\n // IMPORTANT: every alpha step within a single state-map must be a unique\n // value string. Tasty's `mergeEntriesByValue` pass coalesces entries that\n // share a serialized value into a single OR-condition entry whose priority\n // is the *max* of the merged group, which then negates against lower-\n // priority rules. If `'hovered | focused'` and `'selected & disabled'`\n // both used `#white.12`, the merged entry would sit at priority 7 and\n // negate against `'selected & (hovered | focused)'` (priority 4), making\n // it resolve to FALSE for `selected & hovered` — which is exactly the\n // \"selected-hover stays dark\" bug. `'selected & disabled'` therefore uses\n // `#white.98` rather than a literal reuse of `selected`'s `#white`: the 2%\n // of dark base bleeding through is invisible, and the string is distinct.\n // The default `''` and `disabled` may share `#white.0` because Tasty keeps\n // the TRUE/default entry separate from non-defaults during merging.\n //\n // Disabling a SELECTED control keeps the inverted pill and fades only the\n // label, the same rule the rest of this file follows — the chip is what says\n // \"this one is on\". Here that means fading the DARK label toward the pill\n // rather than a white one toward the base, so the disabled label is\n // `#special-accent-text` at `.45`: cr 1.95 against the pill, the same figure\n // the white-alpha variants are solved for.\n //\n // Focus ring uses the fixed-mode `#special-accent-text` so the indicator\n // stays scheme-invariant alongside the rest of the special theme — see\n // `SPECIAL_PRIMARY_STYLES.outline` for the full rationale.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': 'transparent',\n ...(VALIDATION_STYLES.border as Record<string, string>),\n },\n fill: {\n '': '#white.0',\n 'hovered | focused': '#white.12',\n pressed: '#white.18',\n selected: '#white',\n 'selected & (hovered | focused)': '#white.94',\n 'selected & pressed': '#white.88',\n disabled: '#white.0',\n 'selected & disabled': '#white.98',\n },\n // Non-selected mirrors the colored-theme soft→opaque pattern with\n // white-alpha steps. Selected keeps its inverted look — dark accent-text\n // on a white pill — so the soft/opaque transition only applies to the\n // non-selected variant.\n color: {\n '': '#white.8',\n selected: '#special-accent-text',\n // Solved for cr ≈ 2.0 against what each one sits on — the bare surface, and\n // the inverted white pill. See `SPECIAL_OUTLINE_STYLES.color`.\n disabled: '#white.23',\n 'selected & disabled': '#special-accent-text.45',\n },\n} as const;\n\nexport const SPECIAL_LINK_STYLES: Styles = {\n // See `SPECIAL_PRIMARY_STYLES.outline` for why we use the fixed-mode\n // `#special-accent-text` here instead of the cross-theme `#primary-accent-text`.\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: '0',\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#white',\n 'hovered & !pressed': '#white.9',\n disabled: '#white.23',\n },\n} as const;\n\nexport const SPECIAL_ITEM_STYLES: Styles = {\n border: 'transparent',\n fill: {\n '': '#white.0',\n hovered: '#white.12',\n 'pressed | (selected & !hovered)': '#white.18',\n },\n color: {\n '': '#white',\n disabled: '#white.23',\n },\n} as const;\n\n// ---------- CURRENT THEME ----------\n// Every color is derived from the *inherited* text color (`#current` →\n// `currentcolor`), so the element adopts whatever color its context paints\n// with: a colored Alert, a dark banner, an image overlay, a chart tooltip.\n//\n// That makes it a THEME rather than a type. The other themes each pick a brand\n// ramp and let `type` decide the shape (filled, outlined, borderless, textual);\n// `current` picks the inherited color and lets `type` decide the same shapes.\n// Every type therefore has a flavour here, and the `theme` axis is what a host\n// component switches — `type` keeps meaning what it means everywhere else.\n//\n// `color: '#current'` compiles to `color: currentcolor`, which CSS resolves as\n// `color: inherit` — so the label stays fully opaque and, crucially, the\n// element's own `currentcolor` (used by `fill`/`border` below) is the INHERITED\n// color rather than a faded one. The alpha steps are then mixed off that same\n// color, which is why the whole ramp tracks the context automatically.\n//\n// IMPORTANT: every alpha step within one state-map must be a unique value\n// string — Tasty's `mergeEntriesByValue` pass coalesces equal values into one\n// OR-entry at the group's max priority, which then negates against\n// lower-priority rules. So no two steps in one map may share an alpha. See\n// `SPECIAL_OUTLINE_STYLES` for the full explanation.\n//\n// A note on `disabled`: fading the label also fades the element's own\n// `currentcolor`, so every other alpha is multiplied by .4 on that state.\n// Disabled `fill`/`border` are therefore written PRE-MULTIPLIED where they need\n// to stay visible.\n//\n// A note on what a single color cannot do: `primary` in every other theme is an\n// opaque brand fill under a `#white` label. There is no second color here to\n// punch the label out with — the inherited one is the only thing on hand, and\n// the surface behind it is unknown — so `current.primary` escalates on alpha\n// instead: the same construction as `outline`, at the strongest step the\n// contrast budget below allows. It reads as filled, not as inverted.\n\n// The alpha ramp for the item flavour, held in custom properties rather than\n// written inline in `fill`. Two reasons:\n//\n// 1. Unlike the brand tokens, `#current` alphas do NOT adapt to the color\n// scheme: a 4% tint of a dark label on a light surface reads far stronger\n// than a 4% tint of a light label on a dark one, so one ramp cannot serve\n// both. Each step therefore carries a per-surface value — the base entry for\n// the light scheme, `@dark` for the dark scheme, and `surface=special` for\n// the special theme's dark-purple surface. Special is *static* (identical in\n// light, dark and HC by design — see the SPECIAL section above), so it needs\n// a single ramp rather than a light/dark pair. `surface=special` resolves\n// against `data-surface`, which `ItemAction` and `ItemBadge` set from the\n// surrounding `ItemActionProvider`: it names the surface the element is\n// painted ON, which is a different question from its own `theme` now that\n// `current` occupies that axis.\n// 2. Writing three ramps straight into one `fill` map would put ~18 alpha\n// values in a single state-map, and Tasty's `mergeEntriesByValue` pass\n// coalesces any two equal value strings into one OR-entry at the group's max\n// priority, which then negates against lower-priority rules. Giving each\n// step its own 3-entry map keeps every value string unique by construction —\n// the constraint that `SPECIAL_OUTLINE_STYLES` documents the hard way.\n//\n// The special steps run higher than the light ones because they resolve against\n// a `#white.8` label: an authored `.15` nets roughly the `.12` that\n// `SPECIAL_CLEAR_STYLES` uses on the same base.\n//\n// SELECTED steps jump well clear of the interaction steps rather than continuing\n// them. Every other theme marks selection with a brand *hue* — an accent-tinted\n// fill under an accent label — and `current` has exactly one color to work with,\n// so it cannot. Alpha is the only channel left, and a step that merely continued\n// the hover/press ramp (the original `.04 → .06 → .09`) read as a slightly dirty\n// background rather than an \"on\" state. Selection is a persistent state, not a\n// transient one, so it earns the bigger jump; hover and press stay subtle so an\n// unselected row full of actions does not look busy.\n// Only the LIGHT ramp can spend freely. There the chip is a pale tint and the\n// label stays opaque and dark, so contrast barely moves (.30 still measures\n// 5.66:1). On a dark surface the same construction inverts: the chip is a light\n// tint climbing toward an equally light label, so it swallows it. Both dark\n// surfaces hit the AA floor (4.5:1) for their label at exactly `.24` — measured,\n// not guessed — which is the ceiling every dark step below is written under, and\n// why `selected` there is a smaller jump than in light. `SPECIAL_CLEAR_STYLES`\n// escaped the same ceiling by INVERTING selected to a white pill with dark text;\n// a single inherited color cannot do that.\nconst CURRENT_ITEM_RAMP: Styles = {\n '$current-hover': {\n '': '#current.04',\n '@dark': '#current.07',\n 'surface=special': '#current.08',\n },\n '$current-press': {\n '': '#current.06',\n '@dark': '#current.11',\n 'surface=special': '#current.12',\n },\n '$current-selected': {\n '': '#current.18',\n '@dark': '#current.16',\n 'surface=special': '#current.17',\n },\n '$current-selected-hover': {\n '': '#current.24',\n '@dark': '#current.19',\n 'surface=special': '#current.21',\n },\n '$current-selected-press': {\n '': '#current.3',\n '@dark': '#current.22',\n 'surface=special': '#current.24',\n },\n} as const;\n\n// The focus ring is the one color NOT taken from `#current`: every theme in this\n// file uses `#primary-accent-text` (the special theme swapping in its fixed-mode\n// counterpart), so the focus indicator stays the same wherever it appears.\nconst CURRENT_FOCUS_RING: Styles = {\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n} as const;\n\n// Item flavour — the `current` counterpart of `*_ITEM_STYLES`: no border,\n// nothing painted at rest, the fill appearing only on interaction. Used for\n// list rows (`Item`, `ItemButton`), where a resting chip on every row would read\n// as noise. Like the other `*_ITEM_STYLES` it leaves the focus ring to the base\n// styles (the collection that owns the row indicates focus), and only steps the\n// fill.\nexport const CURRENT_ITEM_STYLES: Styles = {\n ...CURRENT_ITEM_RAMP,\n border: 'transparent',\n fill: {\n '': '#current.0',\n 'hovered | focused': 'var(--current-hover)',\n pressed: 'var(--current-press)',\n selected: 'var(--current-selected)',\n 'selected & (hovered | focused)': 'var(--current-selected-hover)',\n 'selected & pressed': 'var(--current-selected-press)',\n disabled: 'transparent',\n },\n color: {\n '': '#current',\n // Fade exactly once per subtree, and only where nothing above has faded\n // already. `#current` is the color this element INHERITS, so a second `.4`\n // multiplies against the first and the label washes out — an action inside a\n // disabled row measured `.4` of an already muted token, roughly\n // `rgb(224,225,228)` on white, against the row's own `rgb(178,181,205)`.\n //\n // Two mods say \"someone above already did it\", and both are set by exactly\n // one caller:\n //\n // `inherit-disabled` `ItemAction`, when its disabled state came from the\n // surrounding `ItemActionProvider` rather than its own\n // prop — the host row already faded the color it paints\n // from.\n // `inside-wrapper` `ItemButton`, on the row it renders inside\n // `ActionsWrapper`. The wrapper reproduces this same\n // disabled color (see `ITEM_RESTING_COLOR_VARIANTS`) so\n // that actions rendered as SIBLINGS of the row inherit\n // a faded `currentcolor` too; the row is a descendant\n // of that wrapper, so it is already faded when it\n // arrives here.\n //\n // Neither mod is set on a standalone `Item` or on `Button`, so both keep\n // fading themselves exactly as before. Every `current` flavour states the\n // gate identically — a flavour that spelled it `disabled` alone would fade a\n // second time in both of those nestings.\n 'disabled & !inherit-disabled & !inside-wrapper': '#current.4',\n },\n} as const;\n\n// Clear flavour — the item ramp on a focusable control. `*_CLEAR_STYLES` and\n// `*_ITEM_STYLES` differ by exactly this in every other theme too: same\n// borderless shape, same interaction fill, plus the ring a standalone control\n// needs. It is the default flavour for `ItemAction` and `ItemBadge`.\nexport const CURRENT_CLEAR_STYLES: Styles = {\n ...CURRENT_ITEM_STYLES,\n ...CURRENT_FOCUS_RING,\n fill: {\n ...(CURRENT_ITEM_STYLES.fill as Record<string, string>),\n // The one entry `clear` adds to the item ramp, and the same split the\n // colored themes make: `*_ITEM_STYLES` let a disabled row fall back to a\n // bare `transparent`, while `*_CLEAR_STYLES` keep a chip so a disabled\n // segmented control still shows which option is active. Without it a\n // disabled selected `clear` rendered nothing at all — the state was\n // indistinguishable from an unselected one.\n //\n // `.18` is `CURRENT_OUTLINE_STYLES`' own disabled selected chip, so the two\n // differ by exactly the border, and it is authored high for the same reason\n // documented there: the disabled label dims `currentcolor` to `.4`, and\n // this alpha resolves against it, rendering as ~`.07`.\n 'selected & disabled': '#current.18',\n },\n} as const;\n\n// Outline flavour — a standalone control, so it carries its own weight: a\n// resting `#current.03` chip inside a `#current.08` border. `.03` is enough to\n// separate the button from a flat background without reading as a filled\n// surface, while leaving room for four distinguishable steps above it.\n// Disabled `fill`/`border` are pre-multiplied (`.06`/`.12` → an effective\n// `.024`/`.048`) so the chip stays a muted version of itself instead of\n// vanishing.\nexport const CURRENT_OUTLINE_STYLES: Styles = {\n ...CURRENT_FOCUS_RING,\n border: {\n '': '#current.08',\n 'hovered | focused': '#current.15',\n pressed: '#current.25',\n selected: '#current.3',\n 'selected & pressed': '#current.4',\n disabled: '#current.12',\n 'selected & disabled': '#current.35',\n },\n fill: {\n '': '#current.03',\n 'hovered | focused': '#current.07',\n pressed: '#current.1',\n selected: '#current.12',\n 'selected & (hovered | focused)': '#current.16',\n 'selected & pressed': '#current.2',\n disabled: '#current.06',\n // Alpha step rather than a brand token — `current` inherits `currentcolor`.\n // Authored high because the disabled label already dims `currentcolor` to\n // `.4`, and these alphas resolve against it: `.18` renders as ~.07.\n 'selected & disabled': '#current.18',\n },\n color: {\n '': '#current',\n // See `CURRENT_ITEM_STYLES.color` for why this is gated rather than a bare\n // `disabled`: both mods mark a color that something above already faded.\n 'disabled & !inherit-disabled & !inside-wrapper': '#current.4',\n },\n} as const;\n\n// Outline-2 flavour — `outline` for a container that is already painting\n// something. In the brand themes the difference is the opaque base (`#surface-3`\n// instead of `#surface-2`); `current` has no opaque base to swap, since every\n// step is a translucent tint over whatever is behind it. The same intent —\n// \"stay legible one rung further up the surface ladder\" — is therefore carried\n// by a heavier tint at every step: roughly double `outline`'s resting chip, so\n// the control still separates from a tinted or busy container.\nexport const CURRENT_OUTLINE_2_STYLES: Styles = {\n ...CURRENT_FOCUS_RING,\n border: {\n '': '#current.14',\n 'hovered | focused': '#current.22',\n pressed: '#current.3',\n selected: '#current.36',\n 'selected & pressed': '#current.45',\n disabled: '#current.2',\n 'selected & disabled': '#current.5',\n },\n fill: {\n '': '#current.06',\n 'hovered | focused': '#current.11',\n pressed: '#current.15',\n selected: '#current.17',\n 'selected & (hovered | focused)': '#current.21',\n // `.24` is the measured AA ceiling for a full-strength label on a dark\n // surface (see the ramp comment above) — the top step stops there rather\n // than continuing the interval.\n 'selected & pressed': '#current.24',\n disabled: '#current.1',\n 'selected & disabled': '#current.26',\n },\n color: {\n '': '#current',\n // See `CURRENT_ITEM_STYLES.color` for why this is gated rather than a bare\n // `disabled`: both mods mark a color that something above already faded.\n 'disabled & !inherit-disabled & !inside-wrapper': '#current.4',\n },\n} as const;\n\n// Primary flavour — the high-emphasis control, and the only `current` flavour\n// that INVERTS: the fill is the inherited color at full opacity and the label\n// is punched out of it with `#surface`, exactly as every other\n// theme's `primary` paints `#white` on an opaque brand fill.\n//\n// The states are the second fill layer. There is no lighter or darker sibling\n// of an arbitrary inherited color to step to — the brand ramps walk\n// `accent-surface` → `-2` → `-3` — so hover and pressed lay a translucent\n// `#black` over the same base instead, which darkens in both schemes and so\n// keeps the same monotonic direction the brand primaries have.\n//\n// The label CANNOT go through `color`. `#current` compiles to the literal\n// `currentcolor`, which in `fill` resolves against the element's OWN `color`,\n// so setting `color: '#surface'` would make the fill resolve to the\n// label color and paint a white pill with a white label. Tasty's `--current-color`\n// is no escape either: the `color` handler rewrites it on the same element.\n// `-webkit-text-fill-color` paints the glyphs without touching `color`, so\n// `currentcolor` keeps meaning the INHERITED color for `fill` and `border`.\n// Icons are SVG painted with `fill=\"currentColor\"`, which that property does not\n// reach, so they take the label color through the `Icon` sub-element.\nexport const CURRENT_PRIMARY_STYLES: Styles = {\n ...CURRENT_FOCUS_RING,\n // Every other `primary` rims its fill with a lighter sibling\n // (`accent-surface-border` over `accent-surface`, cr 1.48 against it in both\n // schemes). An arbitrary inherited color has no such sibling, so the rim comes\n // from the same token the label does — the one color guaranteed to sit on the\n // opposite side of the fill in either scheme. `.25` measures cr 1.82 in light\n // and 1.55 in dark against the fill: the brand rim's presence, a shade more so\n // in light, where `current` has no other edge cue.\n //\n // Disabled swaps to the neutral text color, and has to. The chip there is a\n // `.4` tint sitting close to the page, so a `#surface` rim washes into the\n // page rather than defining the chip; `#surface-text` goes the other way and\n // holds cr ~1.5 against the chip AND 2.8–3.7 against the page. It is also\n // immune to the `.4` fade below, which `#current` is not — a `#current` rim on\n // a disabled chip resolves to the fill's own color and disappears.\n border: {\n '': '#surface.25',\n disabled: '#surface-text.2',\n },\n fill: {\n '': '#current',\n 'hovered | focused': '#current #black.08',\n pressed: '#current #black.16',\n },\n // Disabled is expressed HERE and nowhere else, and that is the whole trick.\n // `fill` and `border` resolve `currentcolor` against this element's own\n // `color`, so fading it once fades the chip with it: their default entries\n // still read `#current`, which under `disabled` is already the `.4` color,\n // and the chip lands at exactly `.4`. Writing `.4` in all three would apply\n // the fade twice and land it at `.16` — the pre-multiply trap the other\n // `current` ramps document at length.\n //\n // It has to fade rather than stay put, because descendants read it too: an\n // action inside a disabled row suppresses its OWN fade on the grounds that\n // the host already muted the color it paints from (see\n // `CURRENT_ITEM_STYLES.color`), so a host that stayed at full strength would\n // hand it a live color next to a dead chip.\n color: {\n '': '#current',\n // See `CURRENT_ITEM_STYLES.color` for why this is gated rather than a bare\n // `disabled`: both mods mark a color that something above already faded.\n 'disabled & !inherit-disabled & !inside-wrapper': '#current.4',\n },\n // The label, and the same `--current-accent` hook `CURRENT_INVERT_STYLES`\n // reads — the property means \"the color to write with when the inherited one\n // will not do\", and this is the other flavour that cannot always write with\n // it. Here the pill IS `currentcolor`, so the label has to contrast with an\n // arbitrary color, and `#surface` only manages that while the inherited color\n // sits away from the page. A container that INVERTS the surface breaks it: a\n // dark banner paints `#white`, so the pill is white and a `#surface` label is\n // white too in light mode — cr 1.00, the button reads as a blank chip.\n //\n // Such a container has the answer to hand: its own fill contrasts with its own\n // text by construction, and the pill is that text. Offering `--current-accent`\n // is therefore the fix, and unset the fallback is the `#surface` this always\n // used, so nothing else moves.\n '-webkit-text-fill-color': {\n '': 'var(--current-accent, var(--surface-color))',\n disabled:\n 'color-mix(in oklab, var(--current-accent, var(--surface-color)) 50%, transparent)',\n },\n // Every icon-bearing slot, not just the leading one. `-webkit-text-fill-color`\n // paints glyphs and inherits into the text slots for free, but icons are SVG\n // stroked with `currentColor`, which it does not reach — so an un-recolored\n // slot would keep the inherited color and vanish into the fill it matches.\n ...Object.fromEntries(\n ['Icon', 'RightIcon', 'Prefix', 'Suffix'].map((slot) => [\n slot,\n {\n // Icons are SVG stroked with `currentColor`, which\n // `-webkit-text-fill-color` never reaches, so each slot repeats the\n // label color — accent hook included.\n color: {\n '': 'var(--current-accent, var(--surface-color))',\n disabled:\n 'color-mix(in oklab, var(--current-accent, var(--surface-color)) 50%, transparent)',\n },\n },\n ]),\n ),\n} as const;\n\n// Link flavour — no chip at all, only the label. The brand themes intensify from\n// `accent-text-soft` at rest to `accent-text` on hover; with one color to work\n// with, \"soft\" is that color at `.8` and \"strong\" is it at full opacity.\nexport const CURRENT_LINK_STYLES: Styles = {\n ...CURRENT_FOCUS_RING,\n border: 0,\n fill: {\n '': 'transparent',\n },\n color: {\n '': '#current.8',\n 'hovered & !pressed': '#current',\n // See `CURRENT_ITEM_STYLES.color`.\n 'disabled & !inherit-disabled & !inside-wrapper': '#current.4',\n },\n} as const;\n\n// Card flavour — the `current` counterpart of `*_CARD_STYLES`: a static,\n// non-interactive panel. The label stays at full opacity so the tint and border\n// resolve against the inherited color rather than a faded one.\nexport const CURRENT_CARD_STYLES: Styles = {\n border: '#current.2',\n fill: '#current.05',\n color: '#current',\n} as const;\n\n// ---------- INVERT TYPE ----------\n// The page and its text, swapped. The fill is the theme's `accent-text` — the\n// color that is normally PAINTED on the page — and the label is `#surface`, the\n// page itself. That makes the control sit on the opposite side of the page in\n// either scheme, which is what \"invert\" means and what separates it from\n// `primary`: `primary` pins a fixed `#white` label on a brand SURFACE, so it\n// reads the same weight in light and dark; `invert` follows the scheme.\n//\n// page fill (accent-text) label (#surface)\n// light L 1.00 L 0.47 (dark) L 1.00 (white)\n// dark L 0.24 L 0.76 (light) L 0.24 (near-black)\n//\n// The label is `#surface` and NOT `#surface-text`, which is the trap this pairing\n// invites: `surface-text` is the color painted ON the page, so it sits on the\n// SAME side of the fill as `accent-text` does and the two collapse — measured\n// cr 2.60 in light and 1.91 in dark, against 6.96 / 7.52 for `#surface`.\n//\n// Hover and pressed darken through a second fill layer rather than stepping to a\n// darker sibling, because `accent-text` has none: its `-soft` counterpart is\n// LIGHTER. A `#black` overlay darkens in both schemes, so the monotonic\n// default → hover → pressed direction survives the scheme flip. Every entry\n// keeps the same two-layer shape so the overlay interpolates instead of snapping\n// — see `DEFAULT_PRIMARY_STYLES.fill`.\n//\n// Disabled hands over to the brand-tinted pair `primary` already uses, so the\n// two filled types mute identically and the alphas stay calibrated in one place.\n// It rides on THIS type's base layer (`accent-text`) rather than `primary`'s\n// (`#surface`), which changes nothing at rest — `accent-disabled-surface` is an\n// opaque glaze tone, so it hides whatever is under it — but keeps the base\n// constant across all four states. Swapping the base on `disabled` alone would\n// animate `background-color` from the fill color to the page while the overlay\n// is still part-transparent, which is the surface flash `DEFAULT_PRIMARY_STYLES`\n// keeps its own base pinned to avoid.\n//\n// Written through a factory rather than seven near-identical objects on purpose.\n// The only thing that varies is the theme prefix, and hand-copying that is\n// exactly how `selected & disabled` ended up on the wrong token for four themes\n// earlier in this PR.\nconst invertStyles = (accent: string): Styles => ({\n outline: {\n '': '0 #primary-accent-text.0',\n focused: '1bw #primary-accent-text',\n },\n // No lighter sibling of `accent-text` exists to rim with, so the rim is the\n // label token at low alpha — guaranteed to sit opposite the fill in either\n // scheme. cr ~1.8 in light and ~1.6 in dark against the fill, against the 1.48\n // that `accent-surface-border` measures on `primary`.\n border: {\n '': '#surface.25',\n disabled: 'transparent',\n },\n fill: {\n '': `#${accent}-accent-text #black.0`,\n hovered: `#${accent}-accent-text #black.08`,\n pressed: `#${accent}-accent-text #black.16`,\n disabled: `#${accent}-accent-text #${accent}-accent-disabled-surface`,\n },\n color: {\n '': '#surface',\n disabled: `#${accent}-accent-disabled-surface-text`,\n },\n});\n\nexport const DEFAULT_INVERT_STYLES: Styles = invertStyles('primary');\nexport const DANGER_INVERT_STYLES: Styles = invertStyles('danger');\nexport const SUCCESS_INVERT_STYLES: Styles = invertStyles('success');\nexport const WARNING_INVERT_STYLES: Styles = invertStyles('warning');\nexport const NOTE_INVERT_STYLES: Styles = invertStyles('note');\n\n// The special theme inverts against its OWN surface rather than the page: that\n// surface is a fixed dark purple, so the inverted control is a white pill with\n// the theme's dark accent on it — the same figure `SPECIAL_CLEAR_STYLES` strikes\n// when selected. Both tokens are fixed-mode, so this stays scheme-invariant like\n// the rest of the theme, where a `#surface` label would not.\n//\n// The fill base is `#white` in every state, disabled included — the same pin\n// `SPECIAL_PRIMARY_STYLES` holds, and for the same reason. See the note on the\n// factory above.\nexport const SPECIAL_INVERT_STYLES: Styles = {\n outline: {\n '': '0 #special-accent-text.0',\n focused: '1bw #special-accent-text',\n },\n border: {\n '': '#white.25',\n disabled: 'transparent',\n },\n fill: {\n '': '#white #black.0',\n hovered: '#white #black.08',\n pressed: '#white #black.16',\n disabled: '#white #special-accent-disabled-surface',\n },\n color: {\n '': '#special-accent-text',\n disabled: '#special-accent-disabled-surface-text',\n },\n} as const;\n\n// The `current` theme is the one special case, because it has no `accent-text`\n// to fill with — it has exactly one color, the one it inherits. So `invert` here\n// is literally `CURRENT_PRIMARY_STYLES` with its two colors swapped:\n//\n// fill label\n// primary #current #surface — paint the color, punch the page out of it\n// invert #surface #current — paint the page, write the color on it\n//\n// That is the same swap `special` makes between its own two filled types (a\n// brand surface under `#white`, against a white pill under the dark accent), so\n// the pairing reads the same way on every theme even though the tokens differ.\n//\n// Swapping the colors also removes the machinery `primary` needs. There,\n// `#current` is BOTH the fill and the value `currentcolor` resolves against, so\n// the label has to be painted with `-webkit-text-fill-color` to keep `color`\n// free — and every icon slot has to be recolored by hand, because SVG stroked\n// with `currentColor` does not see that property. Here the fill is `#surface`,\n// an absolute token that never consults `color`, so `color` is just the label\n// and icons inherit it for free. That is also what makes the `--current-accent`\n// hook below possible: with `color` free, a container can redirect it.\nexport const CURRENT_INVERT_STYLES: Styles = {\n ...CURRENT_FOCUS_RING,\n // The rim is the inherited color at `primary`'s own `.25`, and it needs no\n // disabled entry: `#current` resolves against this element's `color`, which\n // the fade below already moved, so the rim fades with the label. That is the\n // pre-multiply trap the rest of this section documents, used deliberately —\n // it is only a trap when a value is faded twice on purpose.\n border: '#current.25',\n // The overlay tints TOWARDS the inherited color rather than darkening with\n // `#black` the way the brand `invert` ramps do. On a white page that reads as\n // a darkening and on a dark one as a lightening, so the step is visible in\n // both schemes — where a fixed `#black` over a near-black `#surface` would\n // barely move. Same two-layer shape in every state so the overlay\n // interpolates; see `DEFAULT_PRIMARY_STYLES.fill`.\n fill: {\n '': '#surface #current.0',\n 'hovered | focused': '#surface #current.08',\n pressed: '#surface #current.16',\n // Half-strength page color lets the container show through, so a dead\n // control stops reading as a solid chip. The label and rim fade with the\n // color below.\n disabled: '#surface.5 #current.0',\n },\n // The one place a container can intervene. `--current-accent` names a color a\n // container OFFERS to the `current` theme, for the case the theme cannot solve\n // on its own: this flavour writes its label on a `#surface` pill, so it breaks\n // wherever the inherited color IS `#surface`. A `Banner` is exactly that — it\n // labels itself `#white` in both schemes, and `#surface` is white in light, so\n // an unaided `current.invert` inside one measures cr 1.00.\n //\n // Unset it and the fallback is `currentcolor`, which is what `#current`\n // compiled to before, so nothing outside such a container changes.\n //\n // The contract for a container that sets it: OWN THAT COLOR IN EVERY STATE,\n // the disabled one included. The fade below is gated on `!inherit-disabled`\n // because something above is expected to have faded the color this element\n // paints from — automatic when that color is inherited, but an offered accent\n // is not inherited, so the offer has to carry its own muted entry. A\n // container that offers only a live accent leaves a full-strength label on a\n // dead chip. See `BANNER_ACTION_ACCENT`, which pairs each entry with a `.4`\n // counterpart, and the test that pins the pairing.\n //\n // Only `color` reads it, and everything else follows for free: `#current`\n // compiles to `currentcolor`, which in `border` and `fill` resolves against\n // this element's OWN `color` — so the rim and the hover/pressed overlays all\n // re-aim at the offered accent without naming it twice. Deliberately NOT read\n // by the other `current` flavours: they paint their chip ON the container\n // rather than on a pill, so the inherited color is already the right one and\n // an offered accent would only lower their contrast — a `#danger-accent-text`\n // dismiss icon on a danger banner measures 1.53, against the 4.62 `#white` gets.\n //\n // The disabled entry spells the mix out rather than writing `#current.4`,\n // which would compile to `color-mix(… currentcolor …)` — and `currentcolor`\n // inside the `color` property means the INHERITED value, so it would fade the\n // container's color instead of the accent.\n color: {\n '': 'var(--current-accent, currentcolor)',\n // See `CURRENT_ITEM_STYLES.color` for why this is gated rather than a bare\n // `disabled`: both mods mark a color that something above already faded.\n 'disabled & !inherit-disabled & !inside-wrapper':\n 'color-mix(in oklab, var(--current-accent, currentcolor) 40%, transparent)',\n },\n} as const;\n\n// ---------- CARD TYPE STYLES ----------\n// Card type only supports: default, success, danger, note themes (plus the\n// `current` theme — see `CURRENT_CARD_STYLES` above)\n\nexport const DEFAULT_CARD_STYLES: Styles = {\n border: '#surface-text.20',\n fill: '#surface-3',\n color: '#surface-text-soft',\n} as const;\n\nexport const SUCCESS_CARD_STYLES: Styles = {\n border: '#success-accent-surface.20',\n fill: '#success-surface',\n color: '#success-accent-text',\n} as const;\n\nexport const DANGER_CARD_STYLES: Styles = {\n border: '#danger-accent-surface.20',\n fill: '#danger-surface',\n color: '#danger-accent-text',\n} as const;\n\nexport const WARNING_CARD_STYLES: Styles = {\n border: '#warning-accent-surface.20',\n fill: '#warning-surface',\n color: '#warning-accent-text',\n} as const;\n\nexport const NOTE_CARD_STYLES: Styles = {\n border: '#note-accent-surface.20',\n fill: '#note-surface',\n color: '#note-accent-text',\n} as const;\n\nexport type ItemVariant =\n // Inherited-color theme — every flavour mixes its colors from `currentcolor`\n // instead of a brand ramp. See the CURRENT THEME section.\n | 'current.item'\n | 'current.invert'\n | 'current.primary'\n | 'current.outline'\n | 'current.outline-2'\n | 'current.clear'\n | 'current.link'\n | 'current.card'\n | 'default.invert'\n | 'default.primary'\n | 'default.outline'\n | 'default.outline-2'\n | 'default.clear'\n | 'default.link'\n | 'default.item'\n | 'default.card'\n | 'danger.invert'\n | 'danger.primary'\n | 'danger.outline'\n | 'danger.outline-2'\n | 'danger.clear'\n | 'danger.link'\n | 'danger.item'\n | 'danger.card'\n | 'success.invert'\n | 'success.primary'\n | 'success.outline'\n | 'success.outline-2'\n | 'success.clear'\n | 'success.link'\n | 'success.item'\n | 'success.card'\n | 'warning.invert'\n | 'warning.primary'\n | 'warning.outline'\n | 'warning.outline-2'\n | 'warning.clear'\n | 'warning.link'\n | 'warning.item'\n | 'warning.card'\n | 'note.invert'\n | 'note.primary'\n | 'note.outline'\n | 'note.outline-2'\n | 'note.clear'\n | 'note.link'\n | 'note.item'\n | 'note.card'\n | 'special.invert'\n | 'special.primary'\n | 'special.outline'\n | 'special.clear'\n | 'special.link'\n | 'special.item';\n\n// The single `theme.type` → styles map. Exported so `Item` and the projections\n// below cannot drift apart: `ITEM_RESTING_COLOR_VARIANTS` is derived from this\n// object rather than restating the palette.\nexport const ITEM_VARIANTS: Record<ItemVariant, Styles> = {\n // Current theme — colors mixed from the inherited `currentcolor`\n 'current.item': CURRENT_ITEM_STYLES,\n 'current.primary': CURRENT_PRIMARY_STYLES,\n 'current.invert': CURRENT_INVERT_STYLES,\n 'current.outline': CURRENT_OUTLINE_STYLES,\n 'current.outline-2': CURRENT_OUTLINE_2_STYLES,\n 'current.clear': CURRENT_CLEAR_STYLES,\n 'current.link': CURRENT_LINK_STYLES,\n 'current.card': CURRENT_CARD_STYLES,\n // Default theme\n 'default.primary': DEFAULT_PRIMARY_STYLES,\n 'default.invert': DEFAULT_INVERT_STYLES,\n 'default.outline': DEFAULT_OUTLINE_STYLES,\n 'default.outline-2': DEFAULT_OUTLINE_2_STYLES,\n 'default.clear': DEFAULT_CLEAR_STYLES,\n 'default.link': DEFAULT_LINK_STYLES,\n 'default.item': DEFAULT_ITEM_STYLES,\n 'default.card': DEFAULT_CARD_STYLES,\n // Danger theme\n 'danger.primary': DANGER_PRIMARY_STYLES,\n 'danger.invert': DANGER_INVERT_STYLES,\n 'danger.outline': DANGER_OUTLINE_STYLES,\n 'danger.outline-2': DANGER_OUTLINE_2_STYLES,\n 'danger.clear': DANGER_CLEAR_STYLES,\n 'danger.link': DANGER_LINK_STYLES,\n 'danger.item': DANGER_ITEM_STYLES,\n 'danger.card': DANGER_CARD_STYLES,\n // Success theme\n 'success.primary': SUCCESS_PRIMARY_STYLES,\n 'success.invert': SUCCESS_INVERT_STYLES,\n 'success.outline': SUCCESS_OUTLINE_STYLES,\n 'success.outline-2': SUCCESS_OUTLINE_2_STYLES,\n 'success.clear': SUCCESS_CLEAR_STYLES,\n 'success.link': SUCCESS_LINK_STYLES,\n 'success.item': SUCCESS_ITEM_STYLES,\n 'success.card': SUCCESS_CARD_STYLES,\n // Warning theme\n 'warning.primary': WARNING_PRIMARY_STYLES,\n 'warning.invert': WARNING_INVERT_STYLES,\n 'warning.outline': WARNING_OUTLINE_STYLES,\n 'warning.outline-2': WARNING_OUTLINE_2_STYLES,\n 'warning.clear': WARNING_CLEAR_STYLES,\n 'warning.link': WARNING_LINK_STYLES,\n 'warning.item': WARNING_ITEM_STYLES,\n 'warning.card': WARNING_CARD_STYLES,\n // Note theme\n 'note.primary': NOTE_PRIMARY_STYLES,\n 'note.invert': NOTE_INVERT_STYLES,\n 'note.outline': NOTE_OUTLINE_STYLES,\n 'note.outline-2': NOTE_OUTLINE_2_STYLES,\n 'note.clear': NOTE_CLEAR_STYLES,\n 'note.link': NOTE_LINK_STYLES,\n 'note.item': NOTE_ITEM_STYLES,\n 'note.card': NOTE_CARD_STYLES,\n // Special theme\n 'special.primary': SPECIAL_PRIMARY_STYLES,\n 'special.invert': SPECIAL_INVERT_STYLES,\n 'special.outline': SPECIAL_OUTLINE_STYLES,\n 'special.clear': SPECIAL_CLEAR_STYLES,\n 'special.link': SPECIAL_LINK_STYLES,\n 'special.item': SPECIAL_ITEM_STYLES,\n};\n\n// Resolve a `theme` + `type` pair to the variant key that actually exists in\n// `ITEM_VARIANTS`. Two of the combinations users can write have no entry of\n// their own and are folded onto one that does.\n//\n// Shared rather than inlined because more than one component has to arrive at\n// the same answer: `Item` renders the row, and `ItemButton` repeats the lookup on\n// the wrapper that carries the row color to actions rendered outside it. Those\n// two drifted the moment they were written separately — the `special` fallback\n// below was missed, which silently resolved to a nonexistent\n// `special.outline-2`, left the wrapper with no color, and handed sibling actions\n// the page's `currentcolor` on a dark surface.\nexport function resolveItemVariant(\n theme: string | undefined,\n type: string | undefined,\n): ItemVariant {\n // The `special` theme has no `outline-2` variant (it paints over\n // `#special-surface`, not `#surface-2`/`#surface-3`); fall back to `outline`\n // so the item still renders.\n const effectiveType =\n theme === 'special' && type === 'outline-2' ? 'outline' : type;\n\n // `header` reuses the `item` visuals and is theme-agnostic.\n const variantType = effectiveType === 'header' ? 'item' : effectiveType;\n const variantTheme = effectiveType === 'header' ? 'default' : theme;\n\n return `${variantTheme}.${variantType}` as ItemVariant;\n}\n\n// Each variant reduced to the label colors an actions wrapper has to reproduce.\n//\n// The `current` theme paints from `currentcolor`, which only reaches an action\n// that is a DOM *descendant* of the row. `Item` renders its actions inside the\n// row element, so they inherit the row color for free — but `ItemButton` renders\n// them as a sibling of the button (deliberately, so the actions stay reachable\n// and are not nested inside a `<button>`), where `currentcolor` would inherit\n// from the page instead. Painting these colors on that wrapper restores the link.\n//\n// Resting AND disabled, and the second one is not optional. `ItemAction`\n// suppresses its own `.4` fade when the disabled state was inherited from the\n// host, on the grounds that the host has already faded the color it paints from —\n// which is only true if the wrapper actually reproduces the host's *disabled*\n// color. With resting alone, a disabled `ItemButton` rendered full-strength\n// actions next to its own faded label.\n//\n// The other states are still skipped: the wrapper is not the interactive element,\n// so it never carries `hovered` / `pressed` / `selected` and those entries could\n// never match there. `disabled` is different only because `ItemButton` passes it\n// down explicitly.\nexport const ITEM_RESTING_COLOR_VARIANTS: Record<ItemVariant, Styles> =\n Object.fromEntries(\n Object.entries(ITEM_VARIANTS).map(([variant, styles]) => {\n const color = styles.color;\n\n if (!color || typeof color !== 'object') {\n return [variant, { color }];\n }\n\n const map = color as Record<string, string>;\n // The `current` flavours state their fade as\n // `disabled & !inherit-disabled & !inside-wrapper` rather than a bare\n // `disabled`, and the wrapper wants exactly that value under a plain\n // `disabled`. It is entitled to it: the two negated mods mark \"something\n // above already faded this\", and the wrapper is the top of the subtree —\n // `ItemButton` gives it only `disabled`, never either mod. Reading just\n // `map.disabled` left those variants with no disabled color to hand down,\n // which is the failure the comment above describes: the row faded itself\n // and its sibling actions, which suppress their own fade under\n // `inherit-disabled`, stayed at full strength beside it.\n const disabled =\n map.disabled ?? map['disabled & !inherit-disabled & !inside-wrapper'];\n\n return [\n variant,\n { color: disabled ? { '': map[''], disabled } : map[''] },\n ];\n }),\n ) as Record<ItemVariant, Styles>;\n"],"mappings":"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"}
|
package/dist/data/themes.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-996a50a | Cube Dev Team */
|
|
2
2
|
//#region src/eslint-plugin/defaults.generated.ts
|
|
3
3
|
const DEFAULTS = {
|
|
4
4
|
components: {
|
|
@@ -947,13 +947,12 @@ const DEFAULTS = {
|
|
|
947
947
|
value: false
|
|
948
948
|
},
|
|
949
949
|
theme: {
|
|
950
|
-
kind: "
|
|
951
|
-
|
|
952
|
-
note: "Redundant in a bare tree but load-bearing under \"inside <ItemActionProvider theme=\"danger\">\", so removing it would change behaviour there."
|
|
950
|
+
kind: "default",
|
|
951
|
+
value: "current"
|
|
953
952
|
},
|
|
954
953
|
type: {
|
|
955
954
|
kind: "default",
|
|
956
|
-
value: "
|
|
955
|
+
value: "clear"
|
|
957
956
|
}
|
|
958
957
|
} },
|
|
959
958
|
ItemBadge: { props: {
|
|
@@ -967,13 +966,12 @@ const DEFAULTS = {
|
|
|
967
966
|
note: "Reflected as `aria-selected={isSelected}`, so omitting the prop removes the attribute while `false` emits `aria-selected=\"false\"`. Not safe to strip."
|
|
968
967
|
},
|
|
969
968
|
theme: {
|
|
970
|
-
kind: "
|
|
971
|
-
|
|
972
|
-
note: "Redundant in a bare tree but load-bearing under \"inside <ItemActionProvider theme=\"danger\">\", so removing it would change behaviour there."
|
|
969
|
+
kind: "default",
|
|
970
|
+
value: "current"
|
|
973
971
|
},
|
|
974
972
|
type: {
|
|
975
973
|
kind: "default",
|
|
976
|
-
value: "
|
|
974
|
+
value: "clear"
|
|
977
975
|
}
|
|
978
976
|
} },
|
|
979
977
|
ItemButton: { props: {
|