@cube-dev/ui-kit 0.162.0 → 0.164.0

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