@cube-dev/ui-kit 0.0.0-canary-8d79305 → 0.0.0-canary-ed0ffec

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