@cube-dev/ui-kit 0.0.0-canary-324d6c4 → 0.0.0-canary-e612701

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 (583) 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 +4 -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 +1 -1
  20. package/dist/components/actions/Button/Button.d.ts +1 -0
  21. package/dist/components/actions/Button/Button.js +1 -1
  22. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  24. package/dist/components/actions/ButtonSplit/context.js +1 -1
  25. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  61. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  62. package/dist/components/content/Layout/GridLayout.js +1 -1
  63. package/dist/components/content/Layout/Layout.js +1 -1
  64. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  65. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +1 -1
  86. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  87. package/dist/components/content/Tag/Tag.js +1 -1
  88. package/dist/components/content/Text.d.ts +28 -28
  89. package/dist/components/content/Text.js +1 -1
  90. package/dist/components/content/TextItem/TextItem.js +1 -1
  91. package/dist/components/content/Title.js +1 -1
  92. package/dist/components/content/Tree/Tree.js +1 -1
  93. package/dist/components/content/Tree/TreeNode.js +1 -1
  94. package/dist/components/content/Tree/styled.js +1 -1
  95. package/dist/components/content/Tree/tree-index.js +1 -1
  96. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  97. package/dist/components/content/Tree/use-load-data.js +1 -1
  98. package/dist/components/content/highlightText.js +1 -1
  99. package/dist/components/content/use-auto-tooltip.js +1 -1
  100. package/dist/components/data/DataTable/DataTable.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  103. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  106. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  107. package/dist/components/data/TableBase/RowCollection.js +1 -1
  108. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  109. package/dist/components/data/TableBase/TableRow.js +1 -1
  110. package/dist/components/data/TableBase/TableView.js +1 -1
  111. package/dist/components/data/TableBase/column-menu.js +1 -1
  112. package/dist/components/data/TableBase/column-tint.js +1 -1
  113. package/dist/components/data/TableBase/row-menu.js +1 -1
  114. package/dist/components/data/TableBase/styled.d.ts +2 -1
  115. package/dist/components/data/TableBase/styled.js +1 -1
  116. package/dist/components/data/TableBase/types.js +1 -1
  117. package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
  118. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  119. package/dist/components/data/TableBase/use-column-order.js +1 -1
  120. package/dist/components/data/TableBase/use-container-width.js +1 -1
  121. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  122. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  123. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  124. package/dist/components/data/TableBase/use-table-search.js +1 -1
  125. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  126. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  127. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  128. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  129. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  130. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  131. package/dist/components/fields/Checkbox/context.js +1 -1
  132. package/dist/components/fields/ColorInput/ColorInput.js +2 -3
  133. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  134. package/dist/components/fields/ColorPicker/ColorPicker.js +2 -2
  135. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  136. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  137. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  138. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  139. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  140. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  141. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  142. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  143. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  144. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  145. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  146. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  147. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  148. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  149. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  150. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  151. package/dist/components/fields/DatePicker/PeriodPicker.d.ts +1 -1
  152. package/dist/components/fields/DatePicker/PeriodPicker.js +39 -23
  153. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  154. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  155. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  156. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  157. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  158. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  159. package/dist/components/fields/DatePicker/period.js +1 -1
  160. package/dist/components/fields/DatePicker/props.js +1 -1
  161. package/dist/components/fields/DatePicker/utils.js +1 -1
  162. package/dist/components/fields/FileInput/FileInput.js +1 -1
  163. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  164. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  165. package/dist/components/fields/Input/Input.js +1 -1
  166. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  167. package/dist/components/fields/ListBox/ListBox.js +1 -1
  168. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  169. package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
  170. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  171. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
  172. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  173. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  174. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  175. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  176. package/dist/components/fields/Picker/Picker.js +1 -1
  177. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  178. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -2
  179. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  180. package/dist/components/fields/RadioGroup/context.js +1 -1
  181. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  182. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  183. package/dist/components/fields/Select/Select.js +1 -1
  184. package/dist/components/fields/Slider/Gradation.js +1 -1
  185. package/dist/components/fields/Slider/HueSlider.js +2 -15
  186. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  187. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  188. package/dist/components/fields/Slider/Slider.js +1 -1
  189. package/dist/components/fields/Slider/SliderBase.js +1 -1
  190. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  191. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  192. package/dist/components/fields/Slider/elements.js +1 -1
  193. package/dist/components/fields/Slider/index.js +1 -1
  194. package/dist/components/fields/Switch/Switch.js +1 -1
  195. package/dist/components/fields/TextArea/TextArea.js +1 -1
  196. package/dist/components/fields/TextInput/TextInput.js +1 -1
  197. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  198. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  199. package/dist/components/fields/color/ColorPanel.js +1 -1
  200. package/dist/components/fields/{ColorSwatch → color}/ColorSwatch.d.ts +2 -8
  201. package/dist/components/fields/{ColorSwatch → color}/ColorSwatch.js +6 -14
  202. package/dist/components/fields/color/ColorSwatch.js.map +1 -0
  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/fields/color/index.d.ts +1 -0
  207. package/dist/components/fields/index.d.ts +1 -2
  208. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  209. package/dist/components/form/Form/Field.js +1 -1
  210. package/dist/components/form/Form/Form.js +1 -1
  211. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  212. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  213. package/dist/components/form/Form/SubmitError.js +1 -1
  214. package/dist/components/form/Form/index.js +1 -1
  215. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  216. package/dist/components/form/Form/use-field/use-field.js +1 -1
  217. package/dist/components/form/Form/use-form.js +1 -1
  218. package/dist/components/form/Form/validation.js +1 -1
  219. package/dist/components/form/Label.js +1 -1
  220. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  221. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  222. package/dist/components/form/validation/use-validation-props.js +1 -1
  223. package/dist/components/form/wrapper.js +1 -1
  224. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  225. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  226. package/dist/components/layout/Board/Board.js +1 -1
  227. package/dist/components/layout/Board/BoardProvider.js +1 -1
  228. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  229. package/dist/components/layout/Board/Widget.js +1 -1
  230. package/dist/components/layout/Board/WidgetHost.js +1 -1
  231. package/dist/components/layout/Board/board-context.js +1 -1
  232. package/dist/components/layout/Board/board-store.js +1 -1
  233. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  234. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  235. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  236. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  237. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  238. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  239. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  240. package/dist/components/layout/Board/index.js +1 -1
  241. package/dist/components/layout/Board/responsive-utils.js +1 -1
  242. package/dist/components/layout/Board/use-board-layout.js +1 -1
  243. package/dist/components/layout/Board/use-board-registry.js +1 -1
  244. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  245. package/dist/components/layout/Board/use-board-selection.js +1 -1
  246. package/dist/components/layout/Flex.js +1 -1
  247. package/dist/components/layout/Flow.js +1 -1
  248. package/dist/components/layout/Grid.js +1 -1
  249. package/dist/components/layout/Panel.js +1 -1
  250. package/dist/components/layout/Prefix.js +1 -1
  251. package/dist/components/layout/ResizablePanel.js +1 -1
  252. package/dist/components/layout/Space.js +1 -1
  253. package/dist/components/layout/Suffix.js +1 -1
  254. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  255. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  256. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  257. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  258. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  259. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  260. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  261. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  262. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  263. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  264. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  265. package/dist/components/navigation/Tabs/styled.js +1 -1
  266. package/dist/components/navigation/Tabs/types.js +1 -1
  267. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  268. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  269. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  270. package/dist/components/other/Calendar/Calendar.js +13 -43
  271. package/dist/components/other/Calendar/Calendar.js.map +1 -1
  272. package/dist/components/other/Calendar/CalendarCell.js +10 -30
  273. package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
  274. package/dist/components/other/Calendar/CalendarGrid.js +9 -5
  275. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  276. package/dist/components/other/Calendar/CalendarHeader.js +62 -0
  277. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -0
  278. package/dist/components/other/Calendar/CalendarPanel.js +196 -0
  279. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -0
  280. package/dist/components/other/Calendar/PeriodCalendar.js +160 -196
  281. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  282. package/dist/components/other/Calendar/PeriodGrid.js +144 -0
  283. package/dist/components/other/Calendar/PeriodGrid.js.map +1 -0
  284. package/dist/components/other/Calendar/RangeCalendar.js +11 -40
  285. package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
  286. package/dist/components/other/Calendar/styled.js +64 -0
  287. package/dist/components/other/Calendar/styled.js.map +1 -0
  288. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  289. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  290. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  291. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  292. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  293. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  294. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  295. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  296. package/dist/components/overlays/Dialog/context.js +1 -1
  297. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  298. package/dist/components/overlays/Modal/Modal.d.ts +2 -1
  299. package/dist/components/overlays/Modal/Modal.js +1 -1
  300. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  301. package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
  302. package/dist/components/overlays/Modal/Overlay.js +1 -1
  303. package/dist/components/overlays/Modal/Popover.js +11 -13
  304. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  305. package/dist/components/overlays/Modal/Tray.js +1 -1
  306. package/dist/components/overlays/Modal/Underlay.js +1 -1
  307. package/dist/components/overlays/Modal/types.d.ts +1 -0
  308. package/dist/components/overlays/Notifications/Notification.js +1 -1
  309. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  310. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  311. package/dist/components/overlays/Notifications/NotificationContext.d.ts +2 -0
  312. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  313. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  314. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  315. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  316. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  317. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  318. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  319. package/dist/components/overlays/Notifications/index.js +1 -1
  320. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  321. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  322. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  323. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  324. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  325. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  326. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  327. package/dist/components/overlays/Toast/index.js +1 -1
  328. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  329. package/dist/components/overlays/Toast/useToast.js +1 -1
  330. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  331. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  332. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  333. package/dist/components/overlays/Tooltip/context.js +1 -1
  334. package/dist/components/portal/Portal.js +1 -1
  335. package/dist/components/portal/PortalProvider.d.ts +2 -0
  336. package/dist/components/portal/PortalProvider.js +1 -1
  337. package/dist/components/portal/index.d.ts +1 -0
  338. package/dist/components/portal/usePortal.js +1 -1
  339. package/dist/components/shared/DraggableCollection.js +1 -1
  340. package/dist/components/shared/InvalidIcon.js +1 -1
  341. package/dist/components/shared/ValidIcon.js +1 -1
  342. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  343. package/dist/components/status/Spin/Cube.js +1 -1
  344. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  345. package/dist/components/status/Spin/Spin.js +1 -1
  346. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  347. package/dist/data/item-themes.js +1 -1
  348. package/dist/data/themes.js +1 -1
  349. package/dist/eslint-plugin/defaults.generated.js +1 -1
  350. package/dist/eslint-plugin/index.js +1 -1
  351. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  352. package/dist/i18n/I18nProvider.js +1 -1
  353. package/dist/i18n/createFormatter.js +1 -1
  354. package/dist/i18n/index.js +1 -1
  355. package/dist/i18n/instance.js +1 -1
  356. package/dist/i18n/locales/de-DE/uikit.js +15 -2
  357. package/dist/i18n/locales/en-US/uikit.js +15 -2
  358. package/dist/i18n/locales/en-US/uikit.json.d.ts +14 -1
  359. package/dist/i18n/locales/es-ES/uikit.js +15 -2
  360. package/dist/i18n/locales/es-MX/uikit.js +15 -2
  361. package/dist/i18n/locales/fr-FR/uikit.js +15 -2
  362. package/dist/i18n/locales/it-IT/uikit.js +15 -2
  363. package/dist/i18n/locales/ja-JP/uikit.js +15 -2
  364. package/dist/i18n/locales/nb-NO/uikit.js +15 -2
  365. package/dist/i18n/locales/pt-BR/uikit.js +15 -2
  366. package/dist/i18n/locales/pt-PT/uikit.js +15 -2
  367. package/dist/i18n/locales/sv-SE/uikit.js +15 -2
  368. package/dist/i18n/locales/vi-VN/uikit.js +15 -2
  369. package/dist/i18n/locales.js +1 -1
  370. package/dist/i18n/useFormatter.js +1 -1
  371. package/dist/i18n/useI18n.js +1 -1
  372. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  373. package/dist/icons/AdjustmentsIcon.js +1 -1
  374. package/dist/icons/AiIcon.js +1 -1
  375. package/dist/icons/AreaChartIcon.js +1 -1
  376. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  377. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  378. package/dist/icons/BackwardIcon.js +1 -1
  379. package/dist/icons/BarChartIcon.js +1 -1
  380. package/dist/icons/BellFilledIcon.js +1 -1
  381. package/dist/icons/BellIcon.js +1 -1
  382. package/dist/icons/BooleanIcon.js +1 -1
  383. package/dist/icons/CalendarEditIcon.js +1 -1
  384. package/dist/icons/CalendarIcon.js +1 -1
  385. package/dist/icons/CaretDownIcon.js +1 -1
  386. package/dist/icons/CaretUpIcon.js +1 -1
  387. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  388. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  389. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  390. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  391. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  392. package/dist/icons/ChartBarLineIcon.js +1 -1
  393. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  394. package/dist/icons/ChartBarStackedIcon.js +1 -1
  395. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  396. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  397. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  398. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  399. package/dist/icons/ChartBubbleIcon.js +1 -1
  400. package/dist/icons/ChartDonut2Icon.js +1 -1
  401. package/dist/icons/ChartFunnelIcon.js +1 -1
  402. package/dist/icons/ChartHeatmapIcon.js +1 -1
  403. package/dist/icons/ChartKPIIcon.js +1 -1
  404. package/dist/icons/ChartPie2Icon.js +1 -1
  405. package/dist/icons/ChartScatterIcon.js +1 -1
  406. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  407. package/dist/icons/CheckCircleIcon.js +1 -1
  408. package/dist/icons/CheckIcon.js +1 -1
  409. package/dist/icons/CircleFilledIcon.js +1 -1
  410. package/dist/icons/ClearIcon.js +1 -1
  411. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  412. package/dist/icons/CloseCircleIcon.js +1 -1
  413. package/dist/icons/CloseIcon.js +1 -1
  414. package/dist/icons/CodeIcon.js +1 -1
  415. package/dist/icons/ColumnTotalIcon.js +1 -1
  416. package/dist/icons/CopyIcon.js +1 -1
  417. package/dist/icons/CountIcon.js +1 -1
  418. package/dist/icons/CubeIcon.js +1 -1
  419. package/dist/icons/CubePauseIcon.js +1 -1
  420. package/dist/icons/CubePlayIcon.js +1 -1
  421. package/dist/icons/CurrencyDollarIcon.js +1 -1
  422. package/dist/icons/DangerIcon.js +1 -1
  423. package/dist/icons/DashboardIcon.js +1 -1
  424. package/dist/icons/DatabaseIcon.js +1 -1
  425. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  426. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  427. package/dist/icons/DirectionIcon.js +1 -1
  428. package/dist/icons/DonutIcon.js +1 -1
  429. package/dist/icons/DownIcon.js +1 -1
  430. package/dist/icons/EditIcon.js +1 -1
  431. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  432. package/dist/icons/ExclamationCircleIcon.js +1 -1
  433. package/dist/icons/ExclamationIcon.js +1 -1
  434. package/dist/icons/EyeIcon.js +1 -1
  435. package/dist/icons/EyeInvisibleIcon.js +1 -1
  436. package/dist/icons/FilterIcon.js +1 -1
  437. package/dist/icons/FolderFilledIcon.js +1 -1
  438. package/dist/icons/FolderIcon.js +1 -1
  439. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  440. package/dist/icons/FolderOpenIcon.js +1 -1
  441. package/dist/icons/ForwardIcon.js +1 -1
  442. package/dist/icons/GripVerticalIcon.js +1 -1
  443. package/dist/icons/HierarchyIcon.js +1 -1
  444. package/dist/icons/HierarchyOpenIcon.js +1 -1
  445. package/dist/icons/Icon.js +1 -1
  446. package/dist/icons/InfoCircleIcon.js +1 -1
  447. package/dist/icons/InfoIcon.js +1 -1
  448. package/dist/icons/KeyIcon.js +1 -1
  449. package/dist/icons/LeftIcon.js +1 -1
  450. package/dist/icons/LineChartIcon.js +1 -1
  451. package/dist/icons/LoadingIcon.js +1 -1
  452. package/dist/icons/LockFilledIcon.js +1 -1
  453. package/dist/icons/LockIcon.js +1 -1
  454. package/dist/icons/MoreIcon.js +1 -1
  455. package/dist/icons/NotAllowedIcon.js +1 -1
  456. package/dist/icons/Number123Icon.js +1 -1
  457. package/dist/icons/NumberIcon.js +1 -1
  458. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  459. package/dist/icons/PauseCircleIcon.js +1 -1
  460. package/dist/icons/PauseIcon.js +1 -1
  461. package/dist/icons/PercentageIcon.js +1 -1
  462. package/dist/icons/PieChartIcon.js +1 -1
  463. package/dist/icons/PipetteIcon.js +1 -1
  464. package/dist/icons/PlayCircleIcon.js +1 -1
  465. package/dist/icons/PlayIcon.js +1 -1
  466. package/dist/icons/PlusIcon.js +1 -1
  467. package/dist/icons/ProgressBarIcon.js +1 -1
  468. package/dist/icons/ReloadIcon.js +1 -1
  469. package/dist/icons/ReportIcon.js +1 -1
  470. package/dist/icons/ReturnIcon.js +1 -1
  471. package/dist/icons/RightIcon.js +1 -1
  472. package/dist/icons/RowTotalsIcon.js +1 -1
  473. package/dist/icons/SchemeIcon.js +1 -1
  474. package/dist/icons/SearchIcon.js +1 -1
  475. package/dist/icons/SemanticQueryIcon.js +1 -1
  476. package/dist/icons/SettingsIcon.js +1 -1
  477. package/dist/icons/ShieldFilledIcon.js +1 -1
  478. package/dist/icons/ShieldIcon.js +1 -1
  479. package/dist/icons/SlashIcon.js +1 -1
  480. package/dist/icons/SparklesIcon.js +1 -1
  481. package/dist/icons/SqlIcon.js +1 -1
  482. package/dist/icons/StatsIcon.js +1 -1
  483. package/dist/icons/StopIcon.js +1 -1
  484. package/dist/icons/StringIcon.js +1 -1
  485. package/dist/icons/SubtotalsIcon.js +1 -1
  486. package/dist/icons/SwitchIcon.js +1 -1
  487. package/dist/icons/TableIcon.js +1 -1
  488. package/dist/icons/ThumbsDownIcon.js +1 -1
  489. package/dist/icons/ThumbsUpIcon.js +1 -1
  490. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  491. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  492. package/dist/icons/ThunderboltIcon.js +1 -1
  493. package/dist/icons/TimeIcon.js +1 -1
  494. package/dist/icons/TrashIcon.js +1 -1
  495. package/dist/icons/UnlockIcon.js +1 -1
  496. package/dist/icons/UpIcon.js +1 -1
  497. package/dist/icons/UserGroupIcon.js +1 -1
  498. package/dist/icons/UserIcon.js +1 -1
  499. package/dist/icons/UserLockIcon.js +1 -1
  500. package/dist/icons/ViewIcon.js +1 -1
  501. package/dist/icons/WarningFilledIcon.js +1 -1
  502. package/dist/icons/WarningIcon.js +1 -1
  503. package/dist/icons/wrap-icon.js +1 -1
  504. package/dist/index.d.ts +3 -4
  505. package/dist/index.js +4 -5
  506. package/dist/index.js.map +1 -1
  507. package/dist/probe/canonicalize.js +1 -1
  508. package/dist/probe/css.js +1 -1
  509. package/dist/probe/index.js +1 -1
  510. package/dist/provider.js +1 -1
  511. package/dist/providers/TrackingProvider.js +1 -1
  512. package/dist/providers/navigationAdapter.default.js +1 -1
  513. package/dist/tokens/base.js +1 -1
  514. package/dist/tokens/color-theme.d.ts +1 -8
  515. package/dist/tokens/color-theme.js +7 -19
  516. package/dist/tokens/color-theme.js.map +1 -1
  517. package/dist/tokens/colors.js +1 -1
  518. package/dist/tokens/index.d.ts +1 -2
  519. package/dist/tokens/index.js +2 -3
  520. package/dist/tokens/index.js.map +1 -1
  521. package/dist/tokens/layout.js +1 -1
  522. package/dist/tokens/lazy-styles.js +1 -1
  523. package/dist/tokens/palette-config.d.ts +9 -174
  524. package/dist/tokens/palette-config.js +10 -62
  525. package/dist/tokens/palette-config.js.map +1 -1
  526. package/dist/tokens/palette.js +157 -398
  527. package/dist/tokens/palette.js.map +1 -1
  528. package/dist/tokens/shadows.js +1 -1
  529. package/dist/tokens/sizes.js +1 -1
  530. package/dist/tokens/spacing.js +1 -1
  531. package/dist/tokens/typography.js +1 -1
  532. package/dist/utils/ResizeSensor.js +1 -1
  533. package/dist/utils/is-dev-env.js +1 -1
  534. package/dist/utils/modules.js +1 -1
  535. package/dist/utils/promise.js +1 -1
  536. package/dist/utils/raf.js +1 -1
  537. package/dist/utils/random.js +1 -1
  538. package/dist/utils/range.js +1 -1
  539. package/dist/utils/react/RenderCache.js +1 -1
  540. package/dist/utils/react/Slots.js +1 -1
  541. package/dist/utils/react/chain.js +1 -1
  542. package/dist/utils/react/disabledProps.js +1 -1
  543. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  544. package/dist/utils/react/index.js +1 -1
  545. package/dist/utils/react/interactions.js +1 -1
  546. package/dist/utils/react/isTextOnly.js +1 -1
  547. package/dist/utils/react/mapProps.js +1 -1
  548. package/dist/utils/react/mergeProps.js +1 -1
  549. package/dist/utils/react/nullableValue.js +1 -1
  550. package/dist/utils/react/resolveIcon.js +1 -1
  551. package/dist/utils/react/sharedStore.js +1 -1
  552. package/dist/utils/react/useBufferedValue.js +1 -1
  553. package/dist/utils/react/useCombinedRefs.js +1 -1
  554. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  555. package/dist/utils/react/useEventBus.js +1 -1
  556. package/dist/utils/react/useId.js +1 -1
  557. package/dist/utils/react/useIsDarwin.js +1 -1
  558. package/dist/utils/react/useKeySymbols.js +1 -1
  559. package/dist/utils/react/useLayoutEffect.js +1 -1
  560. package/dist/utils/react/useLocalStorage.js +1 -1
  561. package/dist/utils/react/useMergeStyles.js +1 -1
  562. package/dist/utils/react/usePopoverSync.js +1 -1
  563. package/dist/utils/react/useQaProps.js +1 -1
  564. package/dist/utils/react/useViewportSize.js +1 -1
  565. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  566. package/dist/utils/selection.js +1 -1
  567. package/dist/utils/styles.js +1 -1
  568. package/dist/utils/tree.js +1 -1
  569. package/dist/utils/warnings.js +1 -1
  570. package/dist/version.js +2 -2
  571. package/docs/Theming.md +30 -299
  572. package/docs/components/fields/PeriodPicker.md +44 -4
  573. package/docs/components/other/Calendar.md +187 -0
  574. package/docs/glaze/api.md +38 -117
  575. package/docs/glaze/methodology.md +13 -15
  576. package/docs/glaze/okhst.md +0 -4
  577. package/package.json +2 -2
  578. package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +0 -1
  579. package/dist/components/fields/ColorSwatch/index.d.ts +0 -2
  580. package/dist/tokens/color-seed.d.ts +0 -44
  581. package/dist/tokens/color-seed.js +0 -48
  582. package/dist/tokens/color-seed.js.map +0 -1
  583. package/docs/components/fields/ColorSwatch.md +0 -148
@@ -1,7 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-324d6c4 | Cube Dev Team */
2
- import { colorSeed } from "./color-seed.js";
3
- import { DEFAULT_HUE, DEFAULT_SATURATION, getPaletteConfig, getPaletteVersion, usePaletteVersion } from "./palette-config.js";
4
- import { tintRecipe } from "./palette.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e612701 | Cube Dev Team */
2
+ import { DEFAULT_SATURATION, getPaletteConfig, getPaletteVersion, usePaletteVersion } from "./palette-config.js";
3
+ import { TINT_RECIPE } from "./palette.js";
5
4
  import { useGlobalStyles } from "@tenphi/tasty";
6
5
  import { glaze } from "@tenphi/glaze";
7
6
 
@@ -51,23 +50,12 @@ function stableStringify(value) {
51
50
  * ```ts
52
51
  * colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }
53
52
  * ```
54
- *
55
- * The tone {@link colorSeed} also reads is dropped here on purpose: a tint theme
56
- * re-derives its lightness per scheme, which is what makes it adaptive. The palette's
57
- * `accentColor` keeps the tone, because a brand fill has to *be* the colour.
58
- *
59
- * An unparseable value falls back to the shipped seed rather than throwing — a hue
60
- * typed into a settings field should not take the render down.
61
53
  */
62
54
  function colorThemeSeed(value) {
63
- const seed = colorSeed(value);
64
- if (!seed) return {
65
- hue: DEFAULT_HUE,
66
- saturation: DEFAULT_SATURATION
67
- };
55
+ const light = glaze.color(value).resolve().light;
68
56
  return {
69
- hue: seed.hue,
70
- saturation: seed.saturation
57
+ hue: light.h,
58
+ saturation: light.s * 100
71
59
  };
72
60
  }
73
61
  /**
@@ -110,7 +98,7 @@ function getColorTheme(config) {
110
98
  };
111
99
  const theme = glaze(hue, saturation, Object.keys(overrides).length ? overrides : void 0);
112
100
  theme.colors({
113
- ...tintRecipe(paletteConfig),
101
+ ...TINT_RECIPE,
114
102
  ...config.colors
115
103
  });
116
104
  const raw = theme.tasty({ format: "oklch" });
@@ -1 +1 @@
1
- {"version":3,"file":"color-theme.js","names":[],"sources":["../../src/tokens/color-theme.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\nimport { useGlobalStyles } from '@tenphi/tasty';\n\n// Imported for its SIDE EFFECT as much as for `tintRecipe`.\n//\n// `palette.ts` runs `glaze.configure({ states: { dark: '@dark', highContrast:\n// '@hc' }, modes: …, darkTone: … })` at module scope, and that global config is\n// what makes a theme emit `'@dark'` / `'@hc'` keys at all. Without this import\n// a runtime theme falls back to Glaze's defaults — `@media(prefers-color-scheme:\n// dark)` keys and NO high-contrast tier — which still renders, so the failure is\n// silent. `color-theme.test.ts` asserts the `'@hc'` key exists to catch it.\nimport { colorSeed } from './color-seed';\nimport { tintRecipe } from './palette';\nimport {\n DEFAULT_HUE,\n DEFAULT_SATURATION,\n getPaletteConfig,\n getPaletteVersion,\n usePaletteVersion,\n} from './palette-config';\n\nimport type { ColorMap, GlazeConfigOverride } from '@tenphi/glaze';\nimport type { Styles } from '@tenphi/tasty';\n\nexport interface ColorThemeConfig {\n /**\n * A hue in 0–360, or any colour Glaze parses — hex, `rgb()`, `hsl()`,\n * `okhsl()`, `okhst()`, `oklch()`.\n *\n * From a colour only the HUE and SATURATION are taken; the lightness is\n * discarded and re-derived per scheme. That is what makes the result adaptive\n * rather than a value that happens to work in one theme.\n */\n hue: number | string;\n /** 0–100. @default the palette's own saturation seed */\n saturation?: number;\n pastel?: boolean;\n /**\n * Extra colour definitions, merged over {@link tintRecipe}. Anything Glaze's\n * `theme.colors()` accepts, including `contrast` floors against a sibling.\n */\n colors?: ColorMap;\n}\n\nexport interface ColorTheme {\n /**\n * A hash of the config, and the token prefix — `'tint-1a2b3c'`.\n *\n * Content-addressed rather than positional so two components asking for the\n * same colour name the same theme, and therefore share one injection. Also\n * makes it safe to stamp on the DOM as an identifier.\n */\n name: string;\n /**\n * Tasty token declarations, one state map per colour:\n * `{ '#tint-1a2b3c-surface': { '': …, '@dark': …, '@hc': …, '@dark & @hc': … } }`\n */\n tokens: Styles;\n /** Token references by their unprefixed name — `{ surface: '#tint-1a2b3c-surface' }`. */\n colors: Record<string, string>;\n}\n\n/**\n * FNV-1a, base36. Short, stable and dependency-free.\n *\n * These hashes name CSS custom properties and land in DOM attributes, so they\n * have to be deterministic across processes (SSR and the client must agree) and\n * safe as identifiers — but not cryptographic.\n */\nexport function hashString(input: string): string {\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n // >>> 0 keeps it an unsigned 32-bit int; `Math.imul` is the 32-bit multiply.\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n\n return hash.toString(36);\n}\n\n/**\n * Hashes the RESOLVED seed, not the config as written.\n *\n * `{ hue: '#0ea5e9' }` and `{ hue: 237.32, saturation: 98.19 }` are the same\n * colour said two ways; hashing the input would give them two names, two\n * injections and two sets of generated rules. Rounded, because a seed that\n * differs in the twelfth decimal is the same colour to every eye and every\n * renderer — and an unrounded float would defeat the deduplication it is here to\n * provide.\n */\nfunction hashSeed(seed: ResolvedSeed): string {\n return `tint-${hashString(\n JSON.stringify([\n seed.hue.toFixed(4),\n seed.saturation.toFixed(4),\n seed.pastel,\n seed.colors ? stableStringify(seed.colors) : null,\n ]),\n )}`;\n}\n\ninterface ResolvedSeed {\n hue: number;\n saturation: number;\n pastel: boolean;\n colors?: ColorMap;\n}\n\n/** Key order must not change the hash, or two identical configs get two slots. */\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n\n return `{${entries\n .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`)\n .join(',')}}`;\n}\n\n/**\n * The hue and saturation of a colour, for use as a theme seed.\n *\n * ```ts\n * colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }\n * ```\n *\n * The tone {@link colorSeed} also reads is dropped here on purpose: a tint theme\n * re-derives its lightness per scheme, which is what makes it adaptive. The palette's\n * `accentColor` keeps the tone, because a brand fill has to *be* the colour.\n *\n * An unparseable value falls back to the shipped seed rather than throwing — a hue\n * typed into a settings field should not take the render down.\n */\nexport function colorThemeSeed(value: string): {\n hue: number;\n saturation: number;\n} {\n const seed = colorSeed(value);\n\n if (!seed) return { hue: DEFAULT_HUE, saturation: DEFAULT_SATURATION };\n\n return { hue: seed.hue, saturation: seed.saturation };\n}\n\n/**\n * Cached by `${paletteVersion}:${name}`.\n *\n * The palette version is in the KEY rather than triggering a clear, so a stale\n * entry is simply unreachable. `lastVersion` still clears the map on a change,\n * or repeated `setPaletteConfig` calls would grow it without bound.\n */\nconst cache = new Map<string, ColorTheme>();\nlet lastVersion = -1;\n\n/**\n * Build (or reuse) an adaptive theme from a hue.\n *\n * Pure and memoized: the same config returns the same object identity until the\n * palette is re-seeded. Registering the tokens is {@link useColorTheme}'s job —\n * this only computes them, so it is safe to call while rendering or from a test.\n */\nexport function getColorTheme(config: ColorThemeConfig): ColorTheme {\n const version = getPaletteVersion();\n\n if (version !== lastVersion) {\n cache.clear();\n lastVersion = version;\n }\n\n const paletteConfig = getPaletteConfig();\n const parsed =\n typeof config.hue === 'string' ? colorThemeSeed(config.hue) : null;\n const seed: ResolvedSeed = {\n hue: parsed ? parsed.hue : (config.hue as number),\n saturation:\n config.saturation ??\n parsed?.saturation ??\n paletteConfig.saturation ??\n DEFAULT_SATURATION,\n pastel: config.pastel ?? paletteConfig.pastel ?? false,\n colors: config.colors,\n };\n\n const name = hashSeed(seed);\n const cached = cache.get(name);\n\n if (cached) return cached;\n\n const { hue, saturation } = seed;\n\n // `pastel` and `contrastLevel` are instance-level in Glaze, not settable\n // through `glaze.configure`, so a runtime theme has to carry them itself or it\n // would ignore a pastel palette. Omitted entirely when off, so the default\n // output is provably the same as passing nothing.\n const overrides: GlazeConfigOverride = {\n ...(paletteConfig.contrastLevel != null\n ? { contrastLevel: paletteConfig.contrastLevel }\n : null),\n ...(seed.pastel ? { pastel: true } : null),\n };\n\n const theme = glaze(\n hue,\n saturation,\n Object.keys(overrides).length ? overrides : undefined,\n );\n\n // The recipe follows the palette's `surfaceMode`, so a runtime tint sits the same\n // distance off the page as a built-in status theme does. Safe to read here rather\n // than hash into the seed: the cache is cleared on every palette version change,\n // and `surfaceMode` is one of the fields that bumps it.\n theme.colors({ ...tintRecipe(paletteConfig), ...config.colors });\n\n // `prefix` is a palette-only option, so the keys are renamed here. `oklch`\n // because that is what the palette emits; tasty converts to the configured\n // colour space on the way out either way.\n const raw = theme.tasty({ format: 'oklch' }) as Record<string, unknown>;\n const tokens: Styles = {};\n const colors: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(raw)) {\n // Only the `#colour` entries are renamed; `splitHue` is off, so there are no\n // `$…-hue` companions to worry about, but a future one must not be mangled.\n if (!key.startsWith('#')) {\n (tokens as Record<string, unknown>)[key] = value;\n continue;\n }\n\n const bare = key.slice(1);\n const token = `#${name}-${bare}`;\n\n (tokens as Record<string, unknown>)[token] = value;\n colors[bare] = token;\n }\n\n const result: ColorTheme = { name, tokens, colors };\n\n cache.set(name, result);\n\n return result;\n}\n\n/**\n * Register an adaptive theme's tokens once per document, and get it back.\n *\n * The tokens land on `body` under a slot keyed by the theme's name, which is a\n * hash of the config — so every component asking for the same colour shares one\n * injection no matter how many of them there are. Tasty's global-style slots are\n * also permanent, which is what makes that safe: one component unmounting cannot\n * strip tokens another is still referencing.\n *\n * `body` rather than `:root`, which emits nothing at all — the same selector\n * `GlobalStyles` uses for the palette's own tokens. Custom properties inherit, so\n * anything rendered inside the document sees them; the one thing this cannot\n * reach is content portalled outside `<body>`, which nothing does.\n *\n * Because the slot id hashes the CONFIG rather than the resolved values,\n * re-seeding the palette replaces the same slot instead of leaking a new one.\n *\n * ```tsx\n * const theme = useColorTheme({ hue: '#0ea5e9' });\n * // theme.colors.surface → '#tint-1a2b3c-surface'\n * ```\n */\nexport function useColorTheme(config: ColorThemeConfig): ColorTheme {\n // Subscribes this component to a re-seed. `getColorTheme` reads the version\n // itself for its cache, so the value is unused here — the subscription is the\n // point, and it is what makes the tokens below re-inject.\n usePaletteVersion();\n\n const theme = getColorTheme(config);\n\n useGlobalStyles('body', theme.tokens, {\n id: `cube-color-theme-${theme.name}`,\n });\n\n return theme;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"color-theme.js","names":[],"sources":["../../src/tokens/color-theme.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\nimport { useGlobalStyles } from '@tenphi/tasty';\n\n// Imported for its SIDE EFFECT as much as for `TINT_RECIPE`.\n//\n// `palette.ts` runs `glaze.configure({ states: { dark: '@dark', highContrast:\n// '@hc' }, modes: …, darkTone: … })` at module scope, and that global config is\n// what makes a theme emit `'@dark'` / `'@hc'` keys at all. Without this import\n// a runtime theme falls back to Glaze's defaults — `@media(prefers-color-scheme:\n// dark)` keys and NO high-contrast tier — which still renders, so the failure is\n// silent. `color-theme.test.ts` asserts the `'@hc'` key exists to catch it.\nimport { TINT_RECIPE } from './palette';\nimport {\n DEFAULT_SATURATION,\n getPaletteConfig,\n getPaletteVersion,\n usePaletteVersion,\n} from './palette-config';\n\nimport type { ColorMap, GlazeConfigOverride } from '@tenphi/glaze';\nimport type { Styles } from '@tenphi/tasty';\n\nexport interface ColorThemeConfig {\n /**\n * A hue in 0–360, or any colour Glaze parses — hex, `rgb()`, `hsl()`,\n * `okhsl()`, `okhst()`, `oklch()`.\n *\n * From a colour only the HUE and SATURATION are taken; the lightness is\n * discarded and re-derived per scheme. That is what makes the result adaptive\n * rather than a value that happens to work in one theme.\n */\n hue: number | string;\n /** 0–100. @default the palette's own saturation seed */\n saturation?: number;\n pastel?: boolean;\n /**\n * Extra colour definitions, merged over {@link TINT_RECIPE}. Anything Glaze's\n * `theme.colors()` accepts, including `contrast` floors against a sibling.\n */\n colors?: ColorMap;\n}\n\nexport interface ColorTheme {\n /**\n * A hash of the config, and the token prefix — `'tint-1a2b3c'`.\n *\n * Content-addressed rather than positional so two components asking for the\n * same colour name the same theme, and therefore share one injection. Also\n * makes it safe to stamp on the DOM as an identifier.\n */\n name: string;\n /**\n * Tasty token declarations, one state map per colour:\n * `{ '#tint-1a2b3c-surface': { '': …, '@dark': …, '@hc': …, '@dark & @hc': … } }`\n */\n tokens: Styles;\n /** Token references by their unprefixed name — `{ surface: '#tint-1a2b3c-surface' }`. */\n colors: Record<string, string>;\n}\n\n/**\n * FNV-1a, base36. Short, stable and dependency-free.\n *\n * These hashes name CSS custom properties and land in DOM attributes, so they\n * have to be deterministic across processes (SSR and the client must agree) and\n * safe as identifiers — but not cryptographic.\n */\nexport function hashString(input: string): string {\n let hash = 0x811c9dc5;\n\n for (let i = 0; i < input.length; i++) {\n hash ^= input.charCodeAt(i);\n // >>> 0 keeps it an unsigned 32-bit int; `Math.imul` is the 32-bit multiply.\n hash = Math.imul(hash, 0x01000193) >>> 0;\n }\n\n return hash.toString(36);\n}\n\n/**\n * Hashes the RESOLVED seed, not the config as written.\n *\n * `{ hue: '#0ea5e9' }` and `{ hue: 237.32, saturation: 98.19 }` are the same\n * colour said two ways; hashing the input would give them two names, two\n * injections and two sets of generated rules. Rounded, because a seed that\n * differs in the twelfth decimal is the same colour to every eye and every\n * renderer — and an unrounded float would defeat the deduplication it is here to\n * provide.\n */\nfunction hashSeed(seed: ResolvedSeed): string {\n return `tint-${hashString(\n JSON.stringify([\n seed.hue.toFixed(4),\n seed.saturation.toFixed(4),\n seed.pastel,\n seed.colors ? stableStringify(seed.colors) : null,\n ]),\n )}`;\n}\n\ninterface ResolvedSeed {\n hue: number;\n saturation: number;\n pastel: boolean;\n colors?: ColorMap;\n}\n\n/** Key order must not change the hash, or two identical configs get two slots. */\nfunction stableStringify(value: unknown): string {\n if (value === null || typeof value !== 'object') return JSON.stringify(value);\n\n if (Array.isArray(value)) {\n return `[${value.map(stableStringify).join(',')}]`;\n }\n\n const entries = Object.entries(value as Record<string, unknown>).sort(\n ([a], [b]) => (a < b ? -1 : a > b ? 1 : 0),\n );\n\n return `{${entries\n .map(([key, item]) => `${JSON.stringify(key)}:${stableStringify(item)}`)\n .join(',')}}`;\n}\n\n/**\n * The hue and saturation of a colour, for use as a theme seed.\n *\n * ```ts\n * colorThemeSeed('#0ea5e9'); // → { hue: 237.32, saturation: 98.19 }\n * ```\n */\nexport function colorThemeSeed(value: string): {\n hue: number;\n saturation: number;\n} {\n const light = glaze.color(value).resolve().light;\n\n // Glaze reports saturation as a 0–1 factor; the palette's seeds are 0–100.\n return { hue: light.h, saturation: light.s * 100 };\n}\n\n/**\n * Cached by `${paletteVersion}:${name}`.\n *\n * The palette version is in the KEY rather than triggering a clear, so a stale\n * entry is simply unreachable. `lastVersion` still clears the map on a change,\n * or repeated `setPaletteConfig` calls would grow it without bound.\n */\nconst cache = new Map<string, ColorTheme>();\nlet lastVersion = -1;\n\n/**\n * Build (or reuse) an adaptive theme from a hue.\n *\n * Pure and memoized: the same config returns the same object identity until the\n * palette is re-seeded. Registering the tokens is {@link useColorTheme}'s job —\n * this only computes them, so it is safe to call while rendering or from a test.\n */\nexport function getColorTheme(config: ColorThemeConfig): ColorTheme {\n const version = getPaletteVersion();\n\n if (version !== lastVersion) {\n cache.clear();\n lastVersion = version;\n }\n\n const paletteConfig = getPaletteConfig();\n const parsed =\n typeof config.hue === 'string' ? colorThemeSeed(config.hue) : null;\n const seed: ResolvedSeed = {\n hue: parsed ? parsed.hue : (config.hue as number),\n saturation:\n config.saturation ??\n parsed?.saturation ??\n paletteConfig.saturation ??\n DEFAULT_SATURATION,\n pastel: config.pastel ?? paletteConfig.pastel ?? false,\n colors: config.colors,\n };\n\n const name = hashSeed(seed);\n const cached = cache.get(name);\n\n if (cached) return cached;\n\n const { hue, saturation } = seed;\n\n // `pastel` and `contrastLevel` are instance-level in Glaze, not settable\n // through `glaze.configure`, so a runtime theme has to carry them itself or it\n // would ignore a pastel palette. Omitted entirely when off, so the default\n // output is provably the same as passing nothing.\n const overrides: GlazeConfigOverride = {\n ...(paletteConfig.contrastLevel != null\n ? { contrastLevel: paletteConfig.contrastLevel }\n : null),\n ...(seed.pastel ? { pastel: true } : null),\n };\n\n const theme = glaze(\n hue,\n saturation,\n Object.keys(overrides).length ? overrides : undefined,\n );\n\n theme.colors({ ...TINT_RECIPE, ...config.colors });\n\n // `prefix` is a palette-only option, so the keys are renamed here. `oklch`\n // because that is what the palette emits; tasty converts to the configured\n // colour space on the way out either way.\n const raw = theme.tasty({ format: 'oklch' }) as Record<string, unknown>;\n const tokens: Styles = {};\n const colors: Record<string, string> = {};\n\n for (const [key, value] of Object.entries(raw)) {\n // Only the `#colour` entries are renamed; `splitHue` is off, so there are no\n // `$…-hue` companions to worry about, but a future one must not be mangled.\n if (!key.startsWith('#')) {\n (tokens as Record<string, unknown>)[key] = value;\n continue;\n }\n\n const bare = key.slice(1);\n const token = `#${name}-${bare}`;\n\n (tokens as Record<string, unknown>)[token] = value;\n colors[bare] = token;\n }\n\n const result: ColorTheme = { name, tokens, colors };\n\n cache.set(name, result);\n\n return result;\n}\n\n/**\n * Register an adaptive theme's tokens once per document, and get it back.\n *\n * The tokens land on `body` under a slot keyed by the theme's name, which is a\n * hash of the config — so every component asking for the same colour shares one\n * injection no matter how many of them there are. Tasty's global-style slots are\n * also permanent, which is what makes that safe: one component unmounting cannot\n * strip tokens another is still referencing.\n *\n * `body` rather than `:root`, which emits nothing at all — the same selector\n * `GlobalStyles` uses for the palette's own tokens. Custom properties inherit, so\n * anything rendered inside the document sees them; the one thing this cannot\n * reach is content portalled outside `<body>`, which nothing does.\n *\n * Because the slot id hashes the CONFIG rather than the resolved values,\n * re-seeding the palette replaces the same slot instead of leaking a new one.\n *\n * ```tsx\n * const theme = useColorTheme({ hue: '#0ea5e9' });\n * // theme.colors.surface → '#tint-1a2b3c-surface'\n * ```\n */\nexport function useColorTheme(config: ColorThemeConfig): ColorTheme {\n // Subscribes this component to a re-seed. `getColorTheme` reads the version\n // itself for its cache, so the value is unused here — the subscription is the\n // point, and it is what makes the tokens below re-inject.\n usePaletteVersion();\n\n const theme = getColorTheme(config);\n\n useGlobalStyles('body', theme.tokens, {\n id: `cube-color-theme-${theme.name}`,\n });\n\n return theme;\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-324d6c4 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e612701 | Cube Dev Team */
2
2
  import { getPaletteVersion } from "./palette-config.js";
3
3
  import { BASE_TOKENS } from "./base.js";
4
4
  import { lazyStyles } from "./lazy-styles.js";
@@ -1,9 +1,8 @@
1
1
 
2
- import { DEFAULT_PALETTE_CONFIG, MAX_BASE_SATURATION, PaletteCodeSeed, PaletteConfig, PaletteThemeName, PaletteThemeSeed, ResolvedPaletteConfig, SurfaceMode, getPaletteConfig, getPaletteConfigInput, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion } from "./palette-config.js";
2
+ import { DEFAULT_PALETTE_CONFIG, PaletteCodeSeed, PaletteConfig, PaletteThemeName, PaletteThemeSeed, ResolvedPaletteConfig, getPaletteConfig, getPaletteConfigInput, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion } from "./palette-config.js";
3
3
  import { SIZES, SIZE_NAME_TO_KEY, SIZE_TOKENS, SizeKey, SizeName } from "./sizes.js";
4
4
  import { PALETTE_TOKENS, RenderPaletteOptions, getCodeTheme, getPalette, getPaletteTokens, renderPaletteTokens } from "./palette.js";
5
5
  import { COLOR_TOKENS, getColorTokens, renderColorTokens } from "./colors.js";
6
- import { ColorSeed, colorSeed } from "./color-seed.js";
7
6
  import { ColorTheme, ColorThemeConfig, colorThemeSeed, getColorTheme, useColorTheme } from "./color-theme.js";
8
7
  import { SPACE_TOKENS } from "./spacing.js";
9
8
  import { SHADOW_TOKENS } from "./shadows.js";
@@ -1,6 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-324d6c4 | Cube Dev Team */
2
- import { colorSeed } from "./color-seed.js";
3
- import { DEFAULT_PALETTE_CONFIG, MAX_BASE_SATURATION, getPaletteConfig, getPaletteConfigInput, getPaletteVersion, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion } from "./palette-config.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e612701 | Cube Dev Team */
2
+ import { DEFAULT_PALETTE_CONFIG, getPaletteConfig, getPaletteConfigInput, getPaletteVersion, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion } from "./palette-config.js";
4
3
  import { BASE_TOKENS } from "./base.js";
5
4
  import { lazyStyles } from "./lazy-styles.js";
6
5
  import { PALETTE_TOKENS, getCodeTheme, getPalette, getPaletteTokens, renderPaletteTokens } from "./palette.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/tokens/index.ts"],"sourcesContent":["/**\n * Design tokens for the Cube UI Kit.\n *\n * This module exports all design tokens used throughout the design system.\n * All token keys use $ prefix for CSS custom properties.\n *\n * Categories:\n * - Colors: Base color palette with -color and -color-rgb variants\n * - Typography: Font presets for headings, text, paragraphs, etc.\n * - Sizes: Component size values (XS, SM, MD, LG, XL)\n * - Spacing: Space tokens using gap multipliers\n * - Shadows: Shadow definitions for elevation\n * - Layout: Common layout dimensions\n * - Base: Core design system values\n */\n\nimport { generateTypographyTokens } from '@tenphi/tasty';\n\nimport { BASE_TOKENS } from './base';\nimport { getColorTokens } from './colors';\nimport { LAYOUT_TOKENS } from './layout';\nimport { lazyStyles } from './lazy-styles';\nimport { getPaletteVersion } from './palette-config';\nimport { SHADOW_TOKENS } from './shadows';\nimport { SIZE_TOKENS } from './sizes';\nimport { SPACE_TOKENS } from './spacing';\nimport { TYPOGRAPHY_PRESETS } from './typography';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { SizeKey, SizeName } from './sizes';\n\n/**\n * All design tokens combined into a single Styles object.\n * Keys use $ prefix for CSS custom properties.\n *\n * Color tokens resolve against the current palette config (see\n * {@link getColorTokens}), and this map is memoized against that config's\n * version so `setPaletteConfig()` invalidates it. Prefer this over the lazy\n * {@link TOKENS} proxy when applying styles from React (`GlobalStyles`).\n *\n * Includes:\n * - Base tokens ($gap, $radius, etc.)\n * - Space tokens ($space-xs, $space-sm, etc.)\n * - Size tokens ($size-xs, $size-sm, etc.)\n * - Shadow tokens ($shadow, $item-shadow, etc.)\n * - Layout tokens ($max-content-width, $topbar-height, etc.)\n * - Typography tokens ($h1-font-size, $t3-line-height, etc.)\n * - Color tokens ($purple-color, $purple-color-rgb, etc.)\n */\nlet tokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\nexport function getTokens(): Styles {\n const version = getPaletteVersion();\n\n if (!tokensCache || cachedVersion !== version) {\n tokensCache = {\n ...BASE_TOKENS,\n ...SPACE_TOKENS,\n ...SIZE_TOKENS,\n ...SHADOW_TOKENS,\n ...LAYOUT_TOKENS,\n ...generateTypographyTokens(TYPOGRAPHY_PRESETS),\n ...getColorTokens(),\n };\n cachedVersion = version;\n }\n return tokensCache;\n}\n\n/** Lazy proxy of {@link getTokens}. Prefer `getTokens()` in new code. */\nexport const TOKENS: Styles = lazyStyles(getTokens);\n\n// Re-export category modules for direct access\nexport { COLOR_TOKENS, getColorTokens, renderColorTokens } from './colors';\n// Reads hue / saturation / tone off a colour — what the palette's `accentColor` and\n// `baseColor` seeds are resolved through.\nexport { colorSeed } from './color-seed';\nexport type { ColorSeed } from './color-seed';\n// Adaptive one-off themes built at runtime from an arbitrary hue, named by a\n// hash of their config so identical requests share one injection.\nexport { colorThemeSeed, getColorTheme, useColorTheme } from './color-theme';\nexport type { ColorTheme, ColorThemeConfig } from './color-theme';\nexport {\n getCodeTheme,\n getPalette,\n getPaletteTokens,\n PALETTE_TOKENS,\n renderPaletteTokens,\n} from './palette';\nexport type { RenderPaletteOptions } from './palette';\nexport {\n DEFAULT_PALETTE_CONFIG,\n getPaletteConfig,\n getPaletteConfigInput,\n invalidatePaletteTokens,\n MAX_BASE_SATURATION,\n resetPaletteConfig,\n resolvePaletteConfig,\n setPaletteConfig,\n subscribePaletteConfig,\n usePaletteConfig,\n usePaletteVersion,\n} from './palette-config';\nexport type {\n PaletteCodeSeed,\n PaletteConfig,\n PaletteThemeName,\n PaletteThemeSeed,\n ResolvedPaletteConfig,\n SurfaceMode,\n} from './palette-config';\nexport { SIZES, SIZE_NAME_TO_KEY, SIZE_TOKENS } from './sizes';\nexport type { SizeKey, SizeName } from './sizes';\nexport { SPACE_TOKENS } from './spacing';\nexport { SHADOW_TOKENS } from './shadows';\nexport { LAYOUT_TOKENS } from './layout';\nexport { BASE_TOKENS } from './base';\nexport { TYPOGRAPHY_PRESETS } from './typography';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,IAAI,cAA6B;AACjC,IAAI,gBAAgB;AAEpB,SAAgB,YAAoB;CAClC,MAAM,UAAU,mBAAmB;AAEnC,KAAI,CAAC,eAAe,kBAAkB,SAAS;AAC7C,gBAAc;GACZ,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG,yBAAyB,mBAAmB;GAC/C,GAAG,gBAAgB;GACpB;AACD,kBAAgB;;AAElB,QAAO;;;AAIT,MAAa,SAAiB,WAAW,UAAU"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/tokens/index.ts"],"sourcesContent":["/**\n * Design tokens for the Cube UI Kit.\n *\n * This module exports all design tokens used throughout the design system.\n * All token keys use $ prefix for CSS custom properties.\n *\n * Categories:\n * - Colors: Base color palette with -color and -color-rgb variants\n * - Typography: Font presets for headings, text, paragraphs, etc.\n * - Sizes: Component size values (XS, SM, MD, LG, XL)\n * - Spacing: Space tokens using gap multipliers\n * - Shadows: Shadow definitions for elevation\n * - Layout: Common layout dimensions\n * - Base: Core design system values\n */\n\nimport { generateTypographyTokens } from '@tenphi/tasty';\n\nimport { BASE_TOKENS } from './base';\nimport { getColorTokens } from './colors';\nimport { LAYOUT_TOKENS } from './layout';\nimport { lazyStyles } from './lazy-styles';\nimport { getPaletteVersion } from './palette-config';\nimport { SHADOW_TOKENS } from './shadows';\nimport { SIZE_TOKENS } from './sizes';\nimport { SPACE_TOKENS } from './spacing';\nimport { TYPOGRAPHY_PRESETS } from './typography';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { SizeKey, SizeName } from './sizes';\n\n/**\n * All design tokens combined into a single Styles object.\n * Keys use $ prefix for CSS custom properties.\n *\n * Color tokens resolve against the current palette config (see\n * {@link getColorTokens}), and this map is memoized against that config's\n * version so `setPaletteConfig()` invalidates it. Prefer this over the lazy\n * {@link TOKENS} proxy when applying styles from React (`GlobalStyles`).\n *\n * Includes:\n * - Base tokens ($gap, $radius, etc.)\n * - Space tokens ($space-xs, $space-sm, etc.)\n * - Size tokens ($size-xs, $size-sm, etc.)\n * - Shadow tokens ($shadow, $item-shadow, etc.)\n * - Layout tokens ($max-content-width, $topbar-height, etc.)\n * - Typography tokens ($h1-font-size, $t3-line-height, etc.)\n * - Color tokens ($purple-color, $purple-color-rgb, etc.)\n */\nlet tokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\nexport function getTokens(): Styles {\n const version = getPaletteVersion();\n\n if (!tokensCache || cachedVersion !== version) {\n tokensCache = {\n ...BASE_TOKENS,\n ...SPACE_TOKENS,\n ...SIZE_TOKENS,\n ...SHADOW_TOKENS,\n ...LAYOUT_TOKENS,\n ...generateTypographyTokens(TYPOGRAPHY_PRESETS),\n ...getColorTokens(),\n };\n cachedVersion = version;\n }\n return tokensCache;\n}\n\n/** Lazy proxy of {@link getTokens}. Prefer `getTokens()` in new code. */\nexport const TOKENS: Styles = lazyStyles(getTokens);\n\n// Re-export category modules for direct access\nexport { COLOR_TOKENS, getColorTokens, renderColorTokens } from './colors';\n// Adaptive one-off themes built at runtime from an arbitrary hue, named by a\n// hash of their config so identical requests share one injection.\nexport { colorThemeSeed, getColorTheme, useColorTheme } from './color-theme';\nexport type { ColorTheme, ColorThemeConfig } from './color-theme';\nexport {\n getCodeTheme,\n getPalette,\n getPaletteTokens,\n PALETTE_TOKENS,\n renderPaletteTokens,\n} from './palette';\nexport type { RenderPaletteOptions } from './palette';\nexport {\n DEFAULT_PALETTE_CONFIG,\n getPaletteConfig,\n getPaletteConfigInput,\n invalidatePaletteTokens,\n resetPaletteConfig,\n resolvePaletteConfig,\n setPaletteConfig,\n subscribePaletteConfig,\n usePaletteConfig,\n usePaletteVersion,\n} from './palette-config';\nexport type {\n PaletteCodeSeed,\n PaletteConfig,\n PaletteThemeName,\n PaletteThemeSeed,\n ResolvedPaletteConfig,\n} from './palette-config';\nexport { SIZES, SIZE_NAME_TO_KEY, SIZE_TOKENS } from './sizes';\nexport type { SizeKey, SizeName } from './sizes';\nexport { SPACE_TOKENS } from './spacing';\nexport { SHADOW_TOKENS } from './shadows';\nexport { LAYOUT_TOKENS } from './layout';\nexport { BASE_TOKENS } from './base';\nexport { TYPOGRAPHY_PRESETS } from './typography';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,IAAI,cAA6B;AACjC,IAAI,gBAAgB;AAEpB,SAAgB,YAAoB;CAClC,MAAM,UAAU,mBAAmB;AAEnC,KAAI,CAAC,eAAe,kBAAkB,SAAS;AAC7C,gBAAc;GACZ,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG;GACH,GAAG,yBAAyB,mBAAmB;GAC/C,GAAG,gBAAgB;GACpB;AACD,kBAAgB;;AAElB,QAAO;;;AAIT,MAAa,SAAiB,WAAW,UAAU"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-324d6c4 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e612701 | Cube Dev Team */
2
2
  //#region src/tokens/layout.ts
3
3
  /**
4
4
  * Layout-related tokens for common UI dimensions.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-324d6c4 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e612701 | Cube Dev Team */
2
2
  //#region src/tokens/lazy-styles.ts
3
3
  /**
4
4
  * Proxy that defers to `factory()` on every property / enumeration access.
@@ -1,20 +1,5 @@
1
1
 
2
2
  //#region src/tokens/palette-config.d.ts
3
- /**
4
- * Ceiling on a {@link PaletteConfig.baseSaturation} derived from a
5
- * {@link PaletteConfig.baseColor}.
6
- *
7
- * A named base color lands the chrome near itself rather than at the 12% share the
8
- * accent lends it, which is the whole reason to name one — but a fully saturated
9
- * chrome stops being chrome. `50` is well past where the base colors begin to
10
- * converge (`surface-inverse` tops out around `25`), so the clip costs nothing that
11
- * was still moving and stops a vivid brand hex from being read as an instruction to
12
- * paint the page with it.
13
- *
14
- * The manual slider in the tuner shares the number, so the two agree on what the top
15
- * of the range means.
16
- */
17
- declare const MAX_BASE_SATURATION = 50;
18
3
  /** Hue / saturation seed override for one colored theme. */
19
4
  interface PaletteThemeSeed {
20
5
  /** Hue in degrees (0–360). */
@@ -37,11 +22,6 @@ interface PaletteCodeSeed {
37
22
  /** Saturation (0–100). Defaults to {@link DEFAULT_CODE_SATURATION}, not to `saturation`. */
38
23
  saturation?: number;
39
24
  }
40
- /**
41
- * Where the neutral surface ramp sits on the tone scale — see
42
- * {@link PaletteConfig.surfaceMode}.
43
- */
44
- type SurfaceMode = 'default' | 'tinted';
45
25
  /** Names of the themes whose seeds can be overridden individually. */
46
26
  type PaletteThemeName = 'success' | 'danger' | 'warning' | 'note' | 'code';
47
27
  /**
@@ -49,48 +29,6 @@ type PaletteThemeName = 'success' | 'danger' | 'warning' | 'note' | 'code';
49
29
  * and per-theme fields left unset inherit the palette-level value.
50
30
  */
51
31
  interface PaletteConfig {
52
- /**
53
- * Accent zone seeded by a **color** rather than a hue — the brand, as you have it.
54
- *
55
- * Anything Glaze parses: hex, `rgb()`, `hsl()`, `okhsl()`, `okhst()`, `oklch()`.
56
- * CSS color keywords (`rebeccapurple`) are not supported. An unparseable value
57
- * warns and falls back to the numeric seed.
58
- *
59
- * Unlike {@link ColorThemeConfig.hue}, which keeps only hue and saturation, this
60
- * keeps the **tone** as well — which is the whole point. Without it the brand fill
61
- * is authored as a fixed tone step off white, so every accent hue lands at roughly
62
- * the same lightness and the color you asked for never actually appears.
63
- *
64
- * The **light, normal-contrast** variant reproduces the color; dark and high
65
- * contrast adapt, as every other color in the palette does. Two things cost
66
- * exactness even there: {@link PaletteConfig.pastel} caps chroma (so `#FFD400`
67
- * softens), and a color that misses the 3:1 floor against `surface` darkens until
68
- * it clears it — and no further.
69
- *
70
- * {@link PaletteConfig.hue} and {@link PaletteConfig.saturation} still win when
71
- * set — the number is the more specific instruction — and the tone keeps coming
72
- * from here either way, so a preview can rotate the hue without losing the brand's
73
- * lightness.
74
- */
75
- accentColor?: string;
76
- /**
77
- * Base zone seeded by a **color** rather than a hue and a saturation.
78
- *
79
- * Its **hue and saturation** are read; its **tone is discarded**, because the
80
- * chrome's lightness ladder is the design — a base color says which way the greys
81
- * lean and how far, not how dark they are.
82
- *
83
- * The saturation is clipped to {@link MAX_BASE_SATURATION}. Naming a base color
84
- * says "the chrome is this color", so it lands near it rather than at the 12%
85
- * share {@link PaletteConfig.baseSaturation} inherits from the accent — but a
86
- * fully saturated chrome is no longer chrome, so there is a ceiling on how far
87
- * "near" goes.
88
- *
89
- * {@link PaletteConfig.baseHue} and {@link PaletteConfig.baseSaturation} each win
90
- * over it when set — the number is the more specific instruction, the same
91
- * precedence {@link PaletteConfig.accentColor} sits under.
92
- */
93
- baseColor?: string;
94
32
  /**
95
33
  * Accent hue in degrees (0–360) — the brand.
96
34
  *
@@ -110,63 +48,10 @@ interface PaletteConfig {
110
48
  * danger banner should read as red.
111
49
  */
112
50
  baseHue?: number;
113
- /**
114
- * Saturation seed (0–100) of the **base** zone — the same family
115
- * {@link PaletteConfig.baseHue} governs: `surface` and its ladder, the
116
- * `surface-text*` ramp, `border`, `placeholder`.
117
- *
118
- * On the same 0–100 scale as {@link PaletteConfig.saturation}, and read the same
119
- * way: `100` is a fully saturated base hue. **The shipped chrome is `12`** — a
120
- * faint tint is what a neutral surface is — so the useful range is mostly below
121
- * a third, and the numbers above it are a deliberately tinted theme rather than
122
- * a neutral one.
123
- *
124
- * Left unset it is `saturation × 0.12`, which reproduces the recipe's own factor
125
- * exactly and keeps a muted palette muting the chrome along with everything
126
- * else. Set it and the base zone stops following the brand: a vivid accent over
127
- * near-grey chrome, or a muted accent over visibly warm chrome, are both one
128
- * number away and neither is reachable from a single scale.
129
- *
130
- * The base colors keep their proportions to one another — `border` more than
131
- * `surface`, the text ramp more than `border` — until the highest of them hits
132
- * the top of the scale, which happens around `25`. Past that they converge.
133
- *
134
- * Under {@link PaletteConfig.surfaceMode} `'default'` this reaches
135
- * `surface-2`…`surface-4`, `border`, `placeholder` and the text ramp, but not
136
- * the page surface: at the end of the tone scale there is no room for chroma,
137
- * whatever the seed says. `'tinted'` is what gives it somewhere to land.
138
- */
139
- baseSaturation?: number;
140
- /**
141
- * Global. Where the neutral surface ramp sits on the tone scale.
142
- *
143
- * - `'default'` — `surface` is the extreme: pure white in light, the darkest
144
- * step the dark tone window allows in dark.
145
- * - `'tinted'` — the whole ramp moves two tones inward, off the extreme.
146
- *
147
- * Two tones is not a visible lightness change; what it buys is *room*. Chroma
148
- * needs distance from white to exist at all, so at the extreme a light page is
149
- * white no matter what {@link PaletteConfig.baseSaturation} says. Tinted trades
150
- * two tones of headroom for a page that actually carries its base hue.
151
- *
152
- * Everything below `surface` is positioned relative to it, so the ladder, the
153
- * borders and the text ramp all follow — and the contrast floors on the text
154
- * re-solve against the new background rather than drifting.
155
- */
156
- surfaceMode?: SurfaceMode;
157
51
  /**
158
52
  * Seed saturation (0–100), and the fallback for every theme that does not set
159
53
  * its own.
160
54
  *
161
- * **Belongs to the non-pastel path**, and setting it says so: with no
162
- * {@link PaletteConfig.pastel} beside it, this turns pastel off, because tuning a
163
- * saturation is the non-pastel path by definition. Pastel is one flat chroma ceiling,
164
- * so under it there is exactly one seed and it is the top of the scale.
165
- *
166
- * A `pastel: true` written next to a saturation wins and the saturation is ignored
167
- * (with a dev warning) — but it is kept rather than dropped, so turning pastel back
168
- * off restores your number.
169
- *
170
55
  * One scale for the whole theme, by design. Every color's own `saturation` is a
171
56
  * 0–1 factor of this seed — `surface` at 0.12, `border` at 0.175, the text ramp
172
57
  * at 0.2, the accent family at ~1.0 — so moving it rescales the palette while
@@ -181,19 +66,6 @@ interface PaletteConfig {
181
66
  * producing a softer, more even palette across hues. Glaze treats `pastel` as
182
67
  * instance-level, so it is threaded into every theme.
183
68
  *
184
- * It also **pins {@link PaletteConfig.saturation} to 100**: the even, hue-independent
185
- * ceiling is what pastel is for, and a second saturation scale on top of it would
186
- * only undo that. Two paths, then — pastel with no saturation knob, or
187
- * `pastel: false` with a free 0–100 one.
188
- *
189
- * Which is why a lone `saturation` picks the second path for you. State this field
190
- * only to override that: it is the coarser of the two choices, so it wins wherever
191
- * both are set, and a saturation it shadows is ignored with a dev warning.
192
- *
193
- * The same ceiling is why an {@link PaletteConfig.accentColor} cannot render
194
- * exactly under pastel — `#FFD400` softens to `#e4d8ad`. Under pastel a color
195
- * contributes its hue and its tone; turn pastel off to get its chroma too.
196
- *
197
69
  * Every theme except `code`. The syntax family is calibrated on its own
198
70
  * saturation and is deliberately left out — softening it collapses the chroma
199
71
  * spread the syntax hues rely on to stay apart. To soften a code block, lower
@@ -201,20 +73,14 @@ interface PaletteConfig {
201
73
  */
202
74
  pastel?: boolean;
203
75
  /**
204
- * Global. `'auto'` (the default) leaves contrast entirely to the two-tier model:
205
- * normal colors plus a high-contrast tier driven by `<html data-contrast="high">`
206
- * / `prefers-contrast: more`.
207
- *
208
- * A number (0–100) additionally positions the **normal** colors on a slider, so
209
- * a product can offer its own contrast control. `0` is the shipped palette and
210
- * `100` is the high-contrast one, bit for bit.
211
- *
212
- * The two **compose** rather than replace each other: the high-contrast tier
213
- * stays the true high-contrast resolution at every level — identical to what
214
- * `'auto'` emits — so a slider raises the baseline while
215
- * `prefers-contrast: more` still escalates on top of it. The one exception is
216
- * `100`, where the normal colors already *are* the high-contrast ones and a
217
- * second tier would only duplicate them.
76
+ * Global. `'auto'` (the default) keeps the two-tier model: normal colors plus
77
+ * a separate high-contrast tier driven by `<html data-contrast="high">` /
78
+ * `prefers-contrast: more`.
79
+ *
80
+ * A number (0–100) replaces that switch with a slider — and, because a manual
81
+ * level already carries the contrast preference, **drops the high-contrast
82
+ * tier entirely**. `0` reproduces the normal output and `100` the
83
+ * high-contrast output, bit for bit.
218
84
  */
219
85
  contrastLevel?: number | 'auto';
220
86
  /** Per-theme seed overrides. */
@@ -231,37 +97,6 @@ interface ResolvedPaletteConfig {
231
97
  hue: number;
232
98
  baseHue: number;
233
99
  saturation: number;
234
- baseSaturation: number;
235
- surfaceMode: SurfaceMode;
236
- /**
237
- * The accent color as given, handed to Glaze's `from` so the brand family renders
238
- * as that literal value rather than as a shade re-derived from the seed.
239
- *
240
- * `null` — the common case — means no accent color was supplied and the family keeps
241
- * its white-anchored derivation, which is the only arrangement that reproduces the
242
- * shipped palette bit for bit.
243
- */
244
- accentColor: string | null;
245
- /**
246
- * The base color as given, or `null`.
247
- *
248
- * Nothing renders from it — the hue and the saturation it derives are what reach the
249
- * palette. It is resolved anyway so {@link isSameConfig} can compare it, which is the
250
- * only way a write that changes the *string* without changing either derived number
251
- * still counts as a change. `MAX_BASE_SATURATION` makes that a live case rather than
252
- * a theoretical one: every color above the clip on a given hue derives the same pair,
253
- * so without this a color picker's whole upper range — and its entire tone axis, which
254
- * a base color discards — would drop writes silently and leave the field stale.
255
- */
256
- baseColor: string | null;
257
- /**
258
- * The tone of {@link ResolvedPaletteConfig.accentColor}, or `null` alongside it.
259
- *
260
- * `from` carries the tone itself, so this exists for the one thing that needs the
261
- * *number*: the hover brand text sits a fixed tone step past the rest one, and a
262
- * step has to be computed.
263
- */
264
- accentTone: number | null;
265
100
  pastel: boolean;
266
101
  contrastLevel: number | 'auto';
267
102
  themes: {
@@ -390,5 +225,5 @@ declare function usePaletteVersion(): number;
390
225
  */
391
226
  declare function usePaletteConfig(): readonly [ResolvedPaletteConfig, typeof setPaletteConfig];
392
227
  //#endregion
393
- export { DEFAULT_PALETTE_CONFIG, MAX_BASE_SATURATION, PaletteCodeSeed, PaletteConfig, PaletteThemeName, PaletteThemeSeed, ResolvedPaletteConfig, SurfaceMode, getPaletteConfig, getPaletteConfigInput, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion };
228
+ export { DEFAULT_PALETTE_CONFIG, PaletteCodeSeed, PaletteConfig, PaletteThemeName, PaletteThemeSeed, ResolvedPaletteConfig, getPaletteConfig, getPaletteConfigInput, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion };
394
229
  //# sourceMappingURL=palette-config.d.ts.map
@@ -1,5 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-324d6c4 | Cube Dev Team */
2
- import { colorSeed } from "./color-seed.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-e612701 | Cube Dev Team */
3
2
  import { useSyncExternalStore } from "react";
4
3
 
5
4
  //#region src/tokens/palette-config.ts
@@ -7,10 +6,9 @@ import { useSyncExternalStore } from "react";
7
6
  * Runtime configuration for the Glaze-generated color palette.
8
7
  *
9
8
  * The palette recipe itself lives in `./palette.ts`; this module owns only the
10
- * *seeds* it is built from, plus a version counter the token caches watch. Its only
11
- * import is the leaf `./color-seed` helper — never the token modules — so there is
12
- * no import cycle and no ordering hazard. See that file for why reading a colour
13
- * cannot depend on the global Glaze config `./palette.ts` installs.
9
+ * *seeds* it is built from, plus a version counter the token caches watch. It
10
+ * deliberately imports nothing else — not the token modules, not `glaze` — so
11
+ * there is no import cycle and no ordering hazard.
14
12
  *
15
13
  * Reading is free; writing rebuilds the palette on the next token read. See
16
14
  * `Getting Started/Theming` in Storybook for the full contract.
@@ -24,32 +22,6 @@ const DEFAULT_NOTE_HUE = 302.3;
24
22
  /** Seed saturation. Per-color `saturation` in the recipe is a 0–1 factor of it. */
25
23
  const DEFAULT_SATURATION = 100;
26
24
  /**
27
- * Share of {@link DEFAULT_SATURATION} the neutral `surface` carries — the recipe's
28
- * own `SURFACE_SATURATION` factor, as a fraction.
29
- *
30
- * It lives here rather than in the recipe because the dependency runs one way:
31
- * `./palette.ts` imports the config, not the reverse — and the config needs this
32
- * number to default `baseSaturation`. It is the anchor of the base zone's own 0–100
33
- * scale: the share the *accent zone* lends the chrome when no `baseColor` names one
34
- * outright, so an untouched palette lands on `12`.
35
- */
36
- const SURFACE_SATURATION_SHARE = .12;
37
- /**
38
- * Ceiling on a {@link PaletteConfig.baseSaturation} derived from a
39
- * {@link PaletteConfig.baseColor}.
40
- *
41
- * A named base color lands the chrome near itself rather than at the 12% share the
42
- * accent lends it, which is the whole reason to name one — but a fully saturated
43
- * chrome stops being chrome. `50` is well past where the base colors begin to
44
- * converge (`surface-inverse` tops out around `25`), so the clip costs nothing that
45
- * was still moving and stops a vivid brand hex from being read as an instruction to
46
- * paint the page with it.
47
- *
48
- * The manual slider in the tuner shares the number, so the two agree on what the top
49
- * of the range means.
50
- */
51
- const MAX_BASE_SATURATION = 50;
52
- /**
53
25
  * Seed saturation for the `code-*` syntax family, deliberately **not** the same
54
26
  * constant as {@link DEFAULT_SATURATION}.
55
27
  *
@@ -67,35 +39,15 @@ const DEFAULT_THEME_HUES = {
67
39
  warning: DEFAULT_WARNING_HUE,
68
40
  note: DEFAULT_NOTE_HUE
69
41
  };
70
- /**
71
- * Warned once per process, not once per call.
72
- *
73
- * `resolveConfig` runs on every write AND on every `resolvePaletteConfig` preview, so an
74
- * unguarded warning would fire on every frame of a slider drag.
75
- */
76
- let warnedAboutPastelSaturation = false;
77
42
  function resolveConfig(input) {
43
+ const saturation = input.saturation ?? DEFAULT_SATURATION;
78
44
  const themes = input.themes ?? {};
79
- const accent = input.accentColor ? colorSeed(input.accentColor) : null;
80
- const base = input.baseColor ? colorSeed(input.baseColor) : null;
81
- const pastel = input.pastel ?? input.saturation === void 0;
82
- const hue = input.hue ?? accent?.hue ?? DEFAULT_HUE;
83
- const baseHue = input.baseHue ?? base?.hue ?? hue;
84
- if (input.pastel === true && input.saturation !== void 0 && input.saturation !== DEFAULT_SATURATION && !warnedAboutPastelSaturation) {
85
- warnedAboutPastelSaturation = true;
86
- console.warn(`[cube-ui-kit] palette \`saturation\` (${input.saturation}) is ignored because \`pastel\` is on — pastel pins it to ${DEFAULT_SATURATION}. Drop \`pastel\`, or set it to \`false\`, to tune saturation yourself.`);
87
- }
88
- const saturation = pastel ? DEFAULT_SATURATION : input.saturation ?? DEFAULT_SATURATION;
45
+ const hue = input.hue ?? DEFAULT_HUE;
89
46
  return {
90
47
  hue,
91
- baseHue,
48
+ baseHue: input.baseHue ?? hue,
92
49
  saturation,
93
- baseSaturation: input.baseSaturation ?? (base ? Math.min(base.saturation, MAX_BASE_SATURATION, saturation) : Math.min(accent?.saturation ?? saturation, saturation) * SURFACE_SATURATION_SHARE),
94
- surfaceMode: input.surfaceMode ?? "default",
95
- accentColor: accent ? input.accentColor : null,
96
- baseColor: base ? input.baseColor : null,
97
- accentTone: accent?.tone ?? null,
98
- pastel,
50
+ pastel: input.pastel ?? true,
99
51
  contrastLevel: input.contrastLevel ?? "auto",
100
52
  themes: {
101
53
  success: {
@@ -161,7 +113,7 @@ function mergeInput(base, patch) {
161
113
  return next;
162
114
  }
163
115
  function isSameConfig(a, b) {
164
- return a.hue === b.hue && a.baseHue === b.baseHue && a.saturation === b.saturation && a.baseSaturation === b.baseSaturation && a.surfaceMode === b.surfaceMode && a.accentColor === b.accentColor && a.baseColor === b.baseColor && a.pastel === b.pastel && a.contrastLevel === b.contrastLevel && a.themes.code.saturation === b.themes.code.saturation && [
116
+ return a.hue === b.hue && a.baseHue === b.baseHue && a.saturation === b.saturation && a.pastel === b.pastel && a.contrastLevel === b.contrastLevel && a.themes.code.saturation === b.themes.code.saturation && [
165
117
  "success",
166
118
  "danger",
167
119
  "warning",
@@ -180,13 +132,9 @@ function isSameConfig(a, b) {
180
132
  function pinSignature(config) {
181
133
  const set = (value) => value === void 0 ? "0" : "1";
182
134
  return [
183
- set(config.accentColor),
184
- set(config.baseColor),
185
135
  set(config.hue),
186
136
  set(config.baseHue),
187
137
  set(config.saturation),
188
- set(config.baseSaturation),
189
- set(config.surfaceMode),
190
138
  set(config.pastel),
191
139
  set(config.contrastLevel),
192
140
  set(config.themes?.code?.saturation),
@@ -369,5 +317,5 @@ function usePaletteConfig() {
369
317
  }
370
318
 
371
319
  //#endregion
372
- export { DEFAULT_HUE, DEFAULT_PALETTE_CONFIG, DEFAULT_SATURATION, MAX_BASE_SATURATION, SURFACE_SATURATION_SHARE, getPaletteConfig, getPaletteConfigInput, getPaletteVersion, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion };
320
+ export { DEFAULT_PALETTE_CONFIG, DEFAULT_SATURATION, getPaletteConfig, getPaletteConfigInput, getPaletteVersion, invalidatePaletteTokens, resetPaletteConfig, resolvePaletteConfig, setPaletteConfig, subscribePaletteConfig, usePaletteConfig, usePaletteVersion };
373
321
  //# sourceMappingURL=palette-config.js.map