@cube-dev/ui-kit 0.151.0 → 0.153.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 (532) hide show
  1. package/README.md +17 -0
  2. package/dist/CHANGELOG.md +120 -0
  3. package/dist/README.md +17 -0
  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 +3 -2
  16. package/dist/components/GlobalStyles.js.map +1 -1
  17. package/dist/components/GridProvider.js +1 -1
  18. package/dist/components/HiddenInput.js +1 -1
  19. package/dist/components/Root.d.ts +16 -0
  20. package/dist/components/Root.js +7 -3
  21. package/dist/components/Root.js.map +1 -1
  22. package/dist/components/actions/Action/Action.js +1 -1
  23. package/dist/components/actions/Banner/Banner.js +1 -1
  24. package/dist/components/actions/Button/Button.d.ts +0 -1
  25. package/dist/components/actions/Button/Button.js +1 -1
  26. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  28. package/dist/components/actions/ButtonSplit/context.js +1 -1
  29. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  30. package/dist/components/actions/CommandMenu/styled.js +1 -1
  31. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  32. package/dist/components/actions/ItemActionContext.js +1 -1
  33. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  34. package/dist/components/actions/Link/Link.js +1 -1
  35. package/dist/components/actions/Menu/Menu.js +1 -1
  36. package/dist/components/actions/Menu/MenuItem.js +1 -1
  37. package/dist/components/actions/Menu/MenuSection.js +1 -1
  38. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  39. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  40. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  41. package/dist/components/actions/Menu/context.js +1 -1
  42. package/dist/components/actions/Menu/styled.js +1 -1
  43. package/dist/components/actions/index.js +1 -1
  44. package/dist/components/actions/use-action.js +1 -1
  45. package/dist/components/actions/use-anchored-menu.js +1 -1
  46. package/dist/components/actions/use-context-menu.js +1 -1
  47. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  48. package/dist/components/content/Alert/Alert.js +1 -1
  49. package/dist/components/content/Alert/use-alert.js +1 -1
  50. package/dist/components/content/Avatar/Avatar.js +1 -1
  51. package/dist/components/content/Badge/Badge.js +1 -1
  52. package/dist/components/content/Card/Card.js +1 -1
  53. package/dist/components/content/Content.js +1 -1
  54. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  55. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  56. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  57. package/dist/components/content/Divider.js +1 -1
  58. package/dist/components/content/Footer.js +1 -1
  59. package/dist/components/content/Header.js +1 -1
  60. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  61. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  62. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  63. package/dist/components/content/Item/Item.js +1 -1
  64. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  65. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  66. package/dist/components/content/Layout/GridLayout.js +1 -1
  67. package/dist/components/content/Layout/Layout.js +1 -1
  68. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  69. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  70. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  71. package/dist/components/content/Layout/LayoutContent.js +1 -1
  72. package/dist/components/content/Layout/LayoutContext.js +1 -1
  73. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  74. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  75. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  76. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPane.js +1 -1
  78. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  79. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  80. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  81. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  82. package/dist/components/content/Layout/index.js +1 -1
  83. package/dist/components/content/Layout/utils.js +1 -1
  84. package/dist/components/content/Paragraph.js +1 -1
  85. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  86. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  87. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  88. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  89. package/dist/components/content/Result/Result.js +1 -1
  90. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  91. package/dist/components/content/Tag/Tag.js +1 -1
  92. package/dist/components/content/Text.d.ts +14 -14
  93. package/dist/components/content/Text.js +1 -1
  94. package/dist/components/content/TextItem/TextItem.js +1 -1
  95. package/dist/components/content/Title.js +1 -1
  96. package/dist/components/content/Tree/Tree.js +1 -1
  97. package/dist/components/content/Tree/TreeNode.js +1 -1
  98. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  99. package/dist/components/content/Tree/styled.js +1 -1
  100. package/dist/components/content/Tree/tree-index.js +1 -1
  101. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  102. package/dist/components/content/Tree/use-load-data.js +1 -1
  103. package/dist/components/content/highlightText.js +1 -1
  104. package/dist/components/content/use-auto-tooltip.js +1 -1
  105. package/dist/components/fields/Checkbox/Checkbox.d.ts +2 -2
  106. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  107. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  108. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  109. package/dist/components/fields/Checkbox/context.js +1 -1
  110. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  111. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  112. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  113. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  114. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  115. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  116. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  117. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  118. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  119. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  120. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  121. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  122. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  123. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  124. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  125. package/dist/components/fields/DatePicker/props.js +1 -1
  126. package/dist/components/fields/DatePicker/utils.js +1 -1
  127. package/dist/components/fields/FileInput/FileInput.js +1 -1
  128. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  129. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  130. package/dist/components/fields/Input/Input.js +1 -1
  131. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  132. package/dist/components/fields/ListBox/ListBox.js +1 -1
  133. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  134. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
  135. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  136. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  137. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  138. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  139. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  140. package/dist/components/fields/Picker/Picker.js +1 -1
  141. package/dist/components/fields/RadioGroup/Radio.js +2 -2
  142. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  143. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  144. package/dist/components/fields/RadioGroup/context.js +1 -1
  145. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  146. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  147. package/dist/components/fields/Select/Select.js +1 -1
  148. package/dist/components/fields/Slider/Gradation.js +1 -1
  149. package/dist/components/fields/Slider/HueSlider.js +1 -1
  150. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  151. package/dist/components/fields/Slider/Slider.js +1 -1
  152. package/dist/components/fields/Slider/SliderBase.js +1 -1
  153. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  154. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  155. package/dist/components/fields/Slider/elements.js +1 -1
  156. package/dist/components/fields/Slider/index.js +1 -1
  157. package/dist/components/fields/Switch/Switch.d.ts +2 -2
  158. package/dist/components/fields/Switch/Switch.js +1 -1
  159. package/dist/components/fields/Switch/Switch.js.map +1 -1
  160. package/dist/components/fields/TextArea/TextArea.js +1 -1
  161. package/dist/components/fields/TextInput/TextInput.js +1 -1
  162. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  163. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  164. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  165. package/dist/components/form/Form/Field.js +1 -1
  166. package/dist/components/form/Form/Form.js +1 -1
  167. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  168. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  169. package/dist/components/form/Form/SubmitError.js +1 -1
  170. package/dist/components/form/Form/index.js +1 -1
  171. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  172. package/dist/components/form/Form/use-field/use-field.js +1 -1
  173. package/dist/components/form/Form/use-form.js +1 -1
  174. package/dist/components/form/Form/validation.js +1 -1
  175. package/dist/components/form/Label.js +1 -1
  176. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  177. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  178. package/dist/components/form/validation/use-validation-props.js +1 -1
  179. package/dist/components/form/wrapper.js +1 -1
  180. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  181. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  182. package/dist/components/layout/Board/Board.js +1 -1
  183. package/dist/components/layout/Board/BoardProvider.js +1 -1
  184. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  185. package/dist/components/layout/Board/Widget.js +1 -1
  186. package/dist/components/layout/Board/WidgetHost.js +1 -1
  187. package/dist/components/layout/Board/board-context.js +1 -1
  188. package/dist/components/layout/Board/board-store.js +1 -1
  189. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  190. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  191. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  192. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  193. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  194. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  195. package/dist/components/layout/Board/index.js +1 -1
  196. package/dist/components/layout/Board/responsive-utils.js +1 -1
  197. package/dist/components/layout/Board/use-board-layout.js +1 -1
  198. package/dist/components/layout/Board/use-board-registry.js +1 -1
  199. package/dist/components/layout/Flex.js +1 -1
  200. package/dist/components/layout/Flow.js +1 -1
  201. package/dist/components/layout/Grid.js +1 -1
  202. package/dist/components/layout/Panel.js +1 -1
  203. package/dist/components/layout/Prefix.js +1 -1
  204. package/dist/components/layout/ResizablePanel.js +1 -1
  205. package/dist/components/layout/Space.js +1 -1
  206. package/dist/components/layout/Suffix.js +1 -1
  207. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  208. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  209. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  210. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  211. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  212. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  213. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  214. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  215. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  216. package/dist/components/navigation/Tabs/styled.js +1 -1
  217. package/dist/components/navigation/Tabs/types.js +1 -1
  218. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  219. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  220. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  221. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  222. package/dist/components/other/Calendar/Calendar.js +1 -1
  223. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  224. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  225. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  226. package/dist/components/other/CubeLogo/CubeLogo.d.ts +10 -3
  227. package/dist/components/other/CubeLogo/CubeLogo.js +31 -4
  228. package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
  229. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  230. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  231. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  232. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  233. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  234. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  235. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  236. package/dist/components/overlays/Dialog/context.js +1 -1
  237. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  238. package/dist/components/overlays/Modal/Modal.d.ts +1 -2
  239. package/dist/components/overlays/Modal/Modal.js +1 -1
  240. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  241. package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
  242. package/dist/components/overlays/Modal/Overlay.js +1 -1
  243. package/dist/components/overlays/Modal/Popover.js +1 -1
  244. package/dist/components/overlays/Modal/Tray.js +1 -1
  245. package/dist/components/overlays/Modal/Underlay.js +1 -1
  246. package/dist/components/overlays/Modal/types.d.ts +0 -1
  247. package/dist/components/overlays/Notifications/Notification.js +1 -1
  248. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  249. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  250. package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
  251. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  252. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  253. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  254. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  255. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  256. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  257. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  258. package/dist/components/overlays/Notifications/index.js +1 -1
  259. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  260. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  261. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  262. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  263. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  264. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  265. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  266. package/dist/components/overlays/Toast/index.js +1 -1
  267. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  268. package/dist/components/overlays/Toast/useToast.js +1 -1
  269. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  270. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  271. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  272. package/dist/components/overlays/Tooltip/context.js +1 -1
  273. package/dist/components/portal/Portal.js +1 -1
  274. package/dist/components/portal/PortalProvider.js +1 -1
  275. package/dist/components/portal/index.d.ts +0 -1
  276. package/dist/components/portal/usePortal.js +1 -1
  277. package/dist/components/shared/DraggableCollection.js +1 -1
  278. package/dist/components/shared/InvalidIcon.js +1 -1
  279. package/dist/components/shared/ValidIcon.js +1 -1
  280. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  281. package/dist/components/status/Spin/Cube.js +1 -1
  282. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  283. package/dist/components/status/Spin/Spin.js +1 -1
  284. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  285. package/dist/data/item-themes.js +1 -1
  286. package/dist/data/themes.d.ts +5 -5
  287. package/dist/data/themes.js +6 -6
  288. package/dist/data/themes.js.map +1 -1
  289. package/dist/eslint-plugin/defaults.generated.d.ts +8 -0
  290. package/dist/eslint-plugin/defaults.generated.js +1561 -0
  291. package/dist/eslint-plugin/defaults.generated.js.map +1 -0
  292. package/dist/eslint-plugin/index.d.ts +75 -0
  293. package/dist/eslint-plugin/index.js +37 -0
  294. package/dist/eslint-plugin/index.js.map +1 -0
  295. package/dist/eslint-plugin/rules/no-redundant-default-prop.d.ts +43 -0
  296. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +145 -0
  297. package/dist/eslint-plugin/rules/no-redundant-default-prop.js.map +1 -0
  298. package/dist/eslint-plugin/types.d.ts +68 -0
  299. package/dist/i18n/I18nProvider.js +1 -1
  300. package/dist/i18n/createFormatter.js +1 -1
  301. package/dist/i18n/index.js +1 -1
  302. package/dist/i18n/instance.js +1 -1
  303. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  304. package/dist/i18n/locales/en-US/uikit.js +1 -1
  305. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  306. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  307. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  308. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  309. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  310. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  311. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  312. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  313. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  314. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  315. package/dist/i18n/locales.js +1 -1
  316. package/dist/i18n/useFormatter.js +1 -1
  317. package/dist/i18n/useI18n.js +1 -1
  318. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  319. package/dist/icons/AdjustmentsIcon.js +1 -1
  320. package/dist/icons/AiIcon.js +1 -1
  321. package/dist/icons/AreaChartIcon.js +1 -1
  322. package/dist/icons/BackwardIcon.js +1 -1
  323. package/dist/icons/BarChartIcon.js +1 -1
  324. package/dist/icons/BellFilledIcon.js +1 -1
  325. package/dist/icons/BellIcon.js +1 -1
  326. package/dist/icons/BooleanIcon.js +1 -1
  327. package/dist/icons/CalendarEditIcon.js +1 -1
  328. package/dist/icons/CalendarIcon.js +1 -1
  329. package/dist/icons/CaretDownIcon.js +1 -1
  330. package/dist/icons/CaretUpIcon.js +1 -1
  331. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  332. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  333. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  334. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  335. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  336. package/dist/icons/ChartBarLineIcon.js +1 -1
  337. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  338. package/dist/icons/ChartBarStackedIcon.js +1 -1
  339. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  340. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  341. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  342. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  343. package/dist/icons/ChartBubbleIcon.js +1 -1
  344. package/dist/icons/ChartDonut2Icon.js +1 -1
  345. package/dist/icons/ChartFunnelIcon.js +1 -1
  346. package/dist/icons/ChartHeatmapIcon.js +1 -1
  347. package/dist/icons/ChartKPIIcon.js +1 -1
  348. package/dist/icons/ChartPie2Icon.js +1 -1
  349. package/dist/icons/ChartScatterIcon.js +1 -1
  350. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  351. package/dist/icons/CheckCircleIcon.js +1 -1
  352. package/dist/icons/CheckIcon.js +1 -1
  353. package/dist/icons/CircleFilledIcon.js +1 -1
  354. package/dist/icons/ClearIcon.js +1 -1
  355. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  356. package/dist/icons/CloseCircleIcon.js +1 -1
  357. package/dist/icons/CloseIcon.js +1 -1
  358. package/dist/icons/CodeIcon.js +1 -1
  359. package/dist/icons/ColumnTotalIcon.js +1 -1
  360. package/dist/icons/CopyIcon.js +1 -1
  361. package/dist/icons/CountIcon.js +1 -1
  362. package/dist/icons/CubeIcon.js +1 -1
  363. package/dist/icons/CubePauseIcon.js +1 -1
  364. package/dist/icons/CubePlayIcon.js +1 -1
  365. package/dist/icons/CurrencyDollarIcon.js +1 -1
  366. package/dist/icons/DangerIcon.js +1 -1
  367. package/dist/icons/DashboardIcon.js +1 -1
  368. package/dist/icons/DatabaseIcon.js +1 -1
  369. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  370. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  371. package/dist/icons/DirectionIcon.js +1 -1
  372. package/dist/icons/DonutIcon.js +1 -1
  373. package/dist/icons/DownIcon.js +1 -1
  374. package/dist/icons/EditIcon.js +1 -1
  375. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  376. package/dist/icons/ExclamationCircleIcon.js +1 -1
  377. package/dist/icons/ExclamationIcon.js +1 -1
  378. package/dist/icons/EyeIcon.js +1 -1
  379. package/dist/icons/EyeInvisibleIcon.js +1 -1
  380. package/dist/icons/FilterIcon.js +1 -1
  381. package/dist/icons/FolderFilledIcon.js +1 -1
  382. package/dist/icons/FolderIcon.js +1 -1
  383. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  384. package/dist/icons/FolderOpenIcon.js +1 -1
  385. package/dist/icons/ForwardIcon.js +1 -1
  386. package/dist/icons/GripVerticalIcon.js +1 -1
  387. package/dist/icons/HierarchyIcon.js +1 -1
  388. package/dist/icons/HierarchyOpenIcon.js +1 -1
  389. package/dist/icons/Icon.js +1 -1
  390. package/dist/icons/InfoCircleIcon.js +1 -1
  391. package/dist/icons/InfoIcon.js +1 -1
  392. package/dist/icons/KeyIcon.js +1 -1
  393. package/dist/icons/LeftIcon.js +1 -1
  394. package/dist/icons/LineChartIcon.js +1 -1
  395. package/dist/icons/LoadingIcon.js +1 -1
  396. package/dist/icons/LockFilledIcon.js +1 -1
  397. package/dist/icons/LockIcon.js +1 -1
  398. package/dist/icons/MoreIcon.js +1 -1
  399. package/dist/icons/NotAllowedIcon.js +1 -1
  400. package/dist/icons/Number123Icon.js +1 -1
  401. package/dist/icons/NumberIcon.js +1 -1
  402. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  403. package/dist/icons/PauseCircleIcon.js +1 -1
  404. package/dist/icons/PauseIcon.js +1 -1
  405. package/dist/icons/PercentageIcon.js +1 -1
  406. package/dist/icons/PieChartIcon.js +1 -1
  407. package/dist/icons/PlayCircleIcon.js +1 -1
  408. package/dist/icons/PlayIcon.js +1 -1
  409. package/dist/icons/PlusIcon.js +1 -1
  410. package/dist/icons/ProgressBarIcon.js +1 -1
  411. package/dist/icons/ReloadIcon.js +1 -1
  412. package/dist/icons/ReportIcon.js +1 -1
  413. package/dist/icons/ReturnIcon.js +1 -1
  414. package/dist/icons/RightIcon.js +1 -1
  415. package/dist/icons/RowTotalsIcon.js +1 -1
  416. package/dist/icons/SchemeIcon.js +1 -1
  417. package/dist/icons/SearchIcon.js +1 -1
  418. package/dist/icons/SemanticQueryIcon.js +1 -1
  419. package/dist/icons/SettingsIcon.js +1 -1
  420. package/dist/icons/ShieldFilledIcon.js +1 -1
  421. package/dist/icons/ShieldIcon.js +1 -1
  422. package/dist/icons/SlashIcon.js +1 -1
  423. package/dist/icons/SparklesIcon.js +1 -1
  424. package/dist/icons/SqlIcon.js +1 -1
  425. package/dist/icons/StatsIcon.js +1 -1
  426. package/dist/icons/StopIcon.js +1 -1
  427. package/dist/icons/StringIcon.js +1 -1
  428. package/dist/icons/SubtotalsIcon.js +1 -1
  429. package/dist/icons/SwitchIcon.js +1 -1
  430. package/dist/icons/TableIcon.js +1 -1
  431. package/dist/icons/ThumbsDownIcon.js +1 -1
  432. package/dist/icons/ThumbsUpIcon.js +1 -1
  433. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  434. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  435. package/dist/icons/ThunderboltIcon.js +1 -1
  436. package/dist/icons/TimeIcon.js +1 -1
  437. package/dist/icons/TrashIcon.js +1 -1
  438. package/dist/icons/UnlockIcon.js +1 -1
  439. package/dist/icons/UpIcon.js +1 -1
  440. package/dist/icons/UserGroupIcon.js +1 -1
  441. package/dist/icons/UserIcon.js +1 -1
  442. package/dist/icons/UserLockIcon.js +1 -1
  443. package/dist/icons/ViewIcon.js +1 -1
  444. package/dist/icons/WarningFilledIcon.js +1 -1
  445. package/dist/icons/WarningIcon.js +1 -1
  446. package/dist/icons/wrap-icon.js +1 -1
  447. package/dist/index.d.ts +6 -5
  448. package/dist/index.js +6 -5
  449. package/dist/index.js.map +1 -1
  450. package/dist/provider.js +1 -1
  451. package/dist/providers/TrackingProvider.js +1 -1
  452. package/dist/providers/navigationAdapter.default.js +1 -1
  453. package/dist/shared/form.d.ts +27 -1
  454. package/dist/shared/index.d.ts +1 -1
  455. package/dist/tokens/base.js +1 -1
  456. package/dist/tokens/colors.d.ts +41 -2
  457. package/dist/tokens/colors.js +77 -9
  458. package/dist/tokens/colors.js.map +1 -1
  459. package/dist/tokens/index.d.ts +3 -2
  460. package/dist/tokens/index.js +23 -16
  461. package/dist/tokens/index.js.map +1 -1
  462. package/dist/tokens/layout.js +1 -1
  463. package/dist/tokens/lazy-styles.js +10 -6
  464. package/dist/tokens/lazy-styles.js.map +1 -1
  465. package/dist/tokens/palette-config.d.ts +222 -0
  466. package/dist/tokens/palette-config.js +309 -0
  467. package/dist/tokens/palette-config.js.map +1 -0
  468. package/dist/tokens/palette.d.ts +45 -5
  469. package/dist/tokens/palette.js +578 -405
  470. package/dist/tokens/palette.js.map +1 -1
  471. package/dist/tokens/shadows.js +1 -1
  472. package/dist/tokens/sizes.js +1 -1
  473. package/dist/tokens/spacing.js +1 -1
  474. package/dist/tokens/typography.js +1 -1
  475. package/dist/utils/ResizeSensor.js +1 -1
  476. package/dist/utils/is-dev-env.js +1 -1
  477. package/dist/utils/modules.js +1 -1
  478. package/dist/utils/promise.js +1 -1
  479. package/dist/utils/raf.js +1 -1
  480. package/dist/utils/random.js +1 -1
  481. package/dist/utils/range.js +1 -1
  482. package/dist/utils/react/RenderCache.js +1 -1
  483. package/dist/utils/react/Slots.js +1 -1
  484. package/dist/utils/react/chain.js +1 -1
  485. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  486. package/dist/utils/react/index.js +1 -1
  487. package/dist/utils/react/interactions.js +1 -1
  488. package/dist/utils/react/isTextOnly.js +1 -1
  489. package/dist/utils/react/mapProps.js +1 -1
  490. package/dist/utils/react/mergeProps.js +1 -1
  491. package/dist/utils/react/nullableValue.js +1 -1
  492. package/dist/utils/react/resolveIcon.js +1 -1
  493. package/dist/utils/react/sharedStore.js +1 -1
  494. package/dist/utils/react/useCombinedRefs.js +1 -1
  495. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  496. package/dist/utils/react/useEventBus.js +1 -1
  497. package/dist/utils/react/useId.js +1 -1
  498. package/dist/utils/react/useIsDarwin.js +1 -1
  499. package/dist/utils/react/useKeySymbols.js +1 -1
  500. package/dist/utils/react/useLayoutEffect.js +1 -1
  501. package/dist/utils/react/useLocalStorage.js +1 -1
  502. package/dist/utils/react/useMergeStyles.js +1 -1
  503. package/dist/utils/react/usePopoverSync.js +1 -1
  504. package/dist/utils/react/useQaProps.js +1 -1
  505. package/dist/utils/react/useViewportSize.js +1 -1
  506. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  507. package/dist/utils/selection.js +1 -1
  508. package/dist/utils/styles.js +1 -1
  509. package/dist/utils/tree.js +1 -1
  510. package/dist/utils/warnings.js +1 -1
  511. package/dist/version.js +3 -3
  512. package/docs/Colors.md +4 -0
  513. package/docs/Theming.md +375 -0
  514. package/docs/Usage.md +30 -3
  515. package/docs/components/Root.md +1 -0
  516. package/docs/components/fields/DatePicker.md +1 -1
  517. package/docs/components/fields/RadioGroup.md +1 -1
  518. package/docs/components/fields/Switch.md +1 -1
  519. package/docs/components/navigation/Tabs.md +1 -1
  520. package/docs/components/other/CubeLogo.md +27 -1
  521. package/docs/components/overlays/Dialog.md +1 -1
  522. package/docs/components/overlays/DialogContainer.md +1 -1
  523. package/docs/glaze/api.md +156 -8
  524. package/docs/glaze/methodology.md +21 -1
  525. package/docs/glaze/okhst.md +13 -0
  526. package/docs/tasty/README.md +1 -0
  527. package/docs/tasty/ai-agents.md +206 -0
  528. package/docs/tasty/injector.md +15 -0
  529. package/docs/tasty/react-api.md +21 -2
  530. package/package.json +9 -3
  531. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
  532. package/dist/components/portal/PortalProvider.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"palette.js","names":[],"sources":["../../src/tokens/palette.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\n\nimport { lazyStyles } from './lazy-styles';\n\nimport type { ColorMap } from '@tenphi/glaze';\nimport type { Styles } from '@tenphi/tasty';\n\n/**\n * Glaze-generated color palette for the Cube UI Kit.\n *\n * Produces light, dark, and high-contrast color variants from a single\n * source of truth. Every color token is emitted as a tasty state map:\n *\n * '#surface': { '': 'oklch(...)', '@dark': 'oklch(...)', '@hc': 'oklch(...)' }\n *\n * The `@dark` and `@hc` state aliases are wired up globally in\n * `src/components/Root.tsx` (see `setGlobalPredefinedStates`).\n */\n\n// ============================================================================\n// Hue / saturation seeds\n// ============================================================================\n\nconst PURPLE_HUE = 280.3;\nconst SUCCESS_HUE = 156.9;\nconst DANGER_HUE = 23.1;\nconst WARNING_HUE = 84.3;\nconst NOTE_HUE = 302.3;\n\n/** Seed saturation; per-color saturation factors below are 0–1 of this seed. */\nconst SEED_SATURATION = 80;\n\n// Relative tone ramp from a white surface.\n// Tone is a contrast-uniform 0–100 scale (OKHST). A relative tone delta of -N\n// yields a fixed WCAG contrast step against the base regardless of where the\n// base sits on the scale. These constants form the primary text ramp; the\n// surface-2 / surface-3 variants reuse the same absolute targets via a small\n// offset because their bases are shifted down from `surface`.\nconst TEXT_TONE = -98; // relative tone delta from white surface (~cr 21)\nconst TEXT_SOFT_TONE = -72; // relative tone delta from white surface (~cr 9)\nconst TEXT_SOFT2_TONE = -52; // relative tone delta from white surface (~cr 4.5)\nconst SURFACE_2_TEXT_OFFSET = 2;\nconst SURFACE_3_TEXT_OFFSET = 4;\n\n// ============================================================================\n// Global Glaze configuration\n// ============================================================================\n\nglaze.configure({\n states: {\n dark: '@dark',\n highContrast: '@hc',\n },\n modes: {\n dark: true,\n highContrast: true,\n },\n darkTone: [14, 95],\n darkDesaturation: 0,\n});\n\n// ============================================================================\n// Default theme (neutral, primary in palette → exported unprefixed)\n// ============================================================================\n\nconst defaultTheme = glaze(PURPLE_HUE, SEED_SATURATION);\n\ndefaultTheme.colors({\n // ---- Surfaces (neutral, very low saturation) ----\n surface: { tone: 100, saturation: 0.12 },\n 'surface-2': {\n base: 'surface',\n tone: '-2',\n saturation: 0.1,\n inherit: false,\n },\n 'surface-3': {\n base: 'surface',\n tone: '-4',\n saturation: 0.1,\n inherit: false,\n },\n 'surface-4': {\n base: 'surface',\n tone: '-6',\n saturation: 0.1,\n inherit: false,\n },\n\n // ---- Text on surfaces ----\n // Tone is the contrast-uniform OKHST axis, so a relative tone delta directly\n // encodes a WCAG contrast step. `surface-text` sits at tone 2 (a -98 delta\n // from white), giving the same near-black appearance as the legacy `#dark`.\n // We still keep an `['AA','AAA']` contrast floor on every text-on-surface\n // color so a future low-contrast scale can shift the ramp down without ever\n // breaking readability.\n 'surface-text': {\n base: 'surface',\n tone: `${TEXT_TONE - 2}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n },\n 'surface-text-soft': {\n base: 'surface',\n tone: `${TEXT_SOFT_TONE - 2}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-text-soft-2': {\n base: 'surface',\n tone: `${TEXT_SOFT2_TONE - 2}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-2-text': {\n base: 'surface-2',\n tone: `${TEXT_TONE + SURFACE_2_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-2-text-soft': {\n base: 'surface-2',\n tone: `${TEXT_SOFT_TONE + SURFACE_2_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-3-text': {\n base: 'surface-3',\n tone: `${TEXT_TONE + SURFACE_3_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-3-text-soft': {\n base: 'surface-3',\n tone: `${TEXT_SOFT_TONE + SURFACE_3_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n\n // ---- Other neutral UI primitives (default-only) ----\n border: {\n base: 'surface',\n tone: ['-10', '-20'],\n saturation: 0.175,\n },\n placeholder: {\n base: 'surface',\n tone: '-33',\n saturation: 0.175,\n inherit: false,\n },\n focus: {\n base: 'surface',\n tone: '-29',\n saturation: 0.8625,\n inherit: false,\n },\n disabled: {\n tone: 80.8,\n saturation: 0.4,\n inherit: false,\n },\n // Disabled fill chip + text — both adaptive (mode 'auto') and positioned\n // with relative tone deltas against `surface` so the disabled state has the\n // same perceived intensity in light, dark, and high-contrast schemes. No\n // numeric contrast prop is needed: tone is already on a WCAG-uniform scale.\n //\n // Tone deltas reproduce the legacy palette's disabled appearance exactly:\n // the chip sits ~cr 1.11 vs `surface` (a faint greyed pill for\n // OUTLINE/SECONDARY/item disabled states) and the label ~cr 2.02 vs\n // `surface` — intentionally sub-AA so it reads as disabled while staying the\n // same softness clear/link disabled labels had before. PRIMARY-style buttons\n // use the brand-tinted `accent-disabled-*` variants below instead. Both\n // tokens stay default-only (`inherit: false`) — colored themes inherit their\n // own disabled chip via the accent variants.\n 'disabled-surface': {\n base: 'surface',\n tone: '-3.5',\n saturation: 0.2,\n inherit: false,\n },\n 'disabled-surface-text': {\n base: 'surface',\n tone: '-23',\n saturation: 0.3,\n inherit: false,\n },\n\n // Fixed-mode \"always dark\" surface for elements that intentionally stay\n // inverted regardless of scheme (tooltips, code blocks, popovers with their\n // own dark theme, etc.). `mode: 'fixed'` bypasses the dark-scheme inversion\n // so the color reads as a dark surface in light, dark, and high-contrast.\n // Pair with `#white` (built-in) for foreground text.\n 'surface-inverse': {\n tone: 12,\n saturation: 0.475,\n mode: 'fixed',\n inherit: false,\n },\n\n // ---- Accent system (theme-aware, inherited by colored themes) ----\n // Everything here is anchored to a fixed white \"accent-surface-text\" via\n // `mode: 'fixed'` + relative tone deltas, so accent colors stay visually\n // consistent across light/dark/high-contrast schemes (the brand color does\n // not flip). The solid fills are white-text-on-brand backgrounds, so they\n // keep an `['AA','AAA']` contrast floor even though the chosen tone deltas\n // already exceed it. This leaves room for a future low-contrast scale.\n 'accent-surface-text': { tone: 100, mode: 'fixed' },\n 'accent-surface': {\n base: 'accent-surface-text',\n tone: '-49',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-2': {\n base: 'accent-surface-text',\n tone: '-52',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-3': {\n base: 'accent-surface-text',\n tone: '-55',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n // Hover variant of `accent-surface` — a *fixed*-mode darker shade used as\n // the hover fill for solid PRIMARY-type buttons. Anchored to the same\n // accent-surface-text so it stays in the same hue family. The relative tone\n // lands a few steps darker than the pressed state in both schemes.\n 'accent-surface-hover': {\n base: 'accent-surface-text',\n tone: '-58',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n // Border for accent surfaces — a small relative tone step away from the\n // brand fill so it stays in the brand hue family and does not flip in dark\n // mode. No contrast prop needed; the delta is chosen directly on the tone\n // scale.\n 'accent-surface-border': {\n base: 'accent-surface',\n tone: '+13',\n mode: 'fixed',\n },\n // Opaque stand-in for the BASE selected fill used by outline / outline-2 /\n // clear Item types (`#surface|#surface-2|#surface-3` + `#accent-surface.09`).\n // Anchors `accent-text` contrast. `value: 9` matches the `.09` alpha overlay;\n // `space: 'srgb'` approximates CSS two-layer compositing. Inherited so\n // colored themes re-resolve against their own `surface` + `accent-surface`\n // (default `surface-2`/`surface-3` are `inherit: false` and can't be the mix\n // base). Primary's tinted `surface` makes this slightly harder than default\n // clear-selected, covering outline / outline-2 selected fills as well.\n 'accent-selected-fill': {\n type: 'mix',\n base: 'surface',\n target: 'accent-surface',\n value: 9,\n space: 'srgb',\n },\n // Stronger brand text for HOVERED selected outline/clear labels and LINK\n // hover. Same anchor + preferred tone as `accent-text-soft`, but a higher\n // `contrast: { wcag: [6, 7] }` floor against `accent-selected-fill` so it\n // reads as a clear step up from the soft rest color while staying saturated\n // (a bare `AAA`/`7` floor over-darkens light and desaturates dark). The HC\n // pair keeps it at/above the soft variant (which auto-promotes AA→AAA in HC).\n // `mode: 'auto'` (default) keeps dark-mode text readable on dark surfaces.\n 'accent-text': {\n base: 'accent-selected-fill',\n tone: '-49',\n saturation: 1,\n contrast: [6, 11],\n },\n // Rest brand text for selected outline/clear labels and LINK base color.\n // Anchored to `accent-selected-fill` with `contrast: 'AA'` — the measured\n // floor for every BASE state of those Item types (surface / outline /\n // outline-2 / clear selected fills). Sits visibly less prominent than\n // `accent-text` (lighter in light, darker in dark) so the rest→hover\n // intensify is real.\n 'accent-text-soft': {\n base: 'accent-selected-fill',\n tone: '-49',\n saturation: 1,\n contrast: ['AA', 'AAA'],\n },\n 'accent-icon': {\n base: 'surface',\n tone: '-38',\n saturation: 0.9375,\n },\n\n // Brand-tinted disabled chip + label for PRIMARY-style buttons (solid brand\n // fill). The chip is scheme-symmetric (`mode: 'fixed'`) so the muted state\n // reads the same weight in light/dark/HC; saturation is bumped so it stays\n // identifiable as a muted brand color.\n //\n // The label rides the extreme away from the chip (`tone: 'max'`, ~cr 1.7):\n // deliberately faint, so it reads as disabled rather than as live text.\n // `'max'` is the authored intent — it was temporarily hand-approximated as a\n // relative `tone: '+15'` with `autoFlip: false`, because Glaze < 1.2.0\n // re-mapped the extreme through the dark tone window, compressing the\n // base-to-extreme span and dropping the dark label's contrast. Glaze 1.2.0\n // (tenphi/glaze#82) instead replays the light scheme's base→extreme tone\n // shift against the base's resolved dark tone — same-signed under\n // `mode: 'fixed'` — so `'max'` holds its intended separation in every scheme\n // and the approximation is no longer needed. Inherited per theme.\n //\n // The special theme keeps its own relative `+18` pair: its `surface` is a\n // fixed dark tone, so an extreme there would resolve to white and read as\n // live text rather than disabled.\n 'accent-disabled-surface': {\n base: 'surface',\n tone: '-13',\n saturation: 0.5,\n mode: 'fixed',\n },\n 'accent-disabled-surface-text': {\n base: 'accent-disabled-surface',\n tone: 'max',\n saturation: 0.4,\n mode: 'fixed',\n },\n\n // ---- Code syntax highlighting (PrismCode) ----\n // A small palette of *adaptive* colored tokens for syntax highlighting.\n // Each token is anchored to `surface` with a relative tone plus an `['AA',\n // 'AAA']` readability floor. Hues mirror the long-standing PrismCode\n // reference (pink keywords / pink functions / orange strings / green numbers /\n // gray comments). `code-attribute` keeps a cyan hue for HTML attribute names /\n // CSS properties / selectors; HTML/XML tag names use `code-keyword`. Diff\n // insertion / deletion re-use the existing `success-*` / `danger-*` ramps.\n 'code-comment': {\n base: 'surface',\n hue: 280,\n saturation: 0.1,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'code-punctuation': {\n base: 'surface',\n hue: 348,\n saturation: 0.4,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'code-keyword': {\n base: 'surface',\n hue: 348,\n saturation: 1,\n tone: '-54',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'code-string': {\n base: 'surface',\n hue: PURPLE_HUE,\n saturation: 1,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'code-number': {\n base: 'surface',\n hue: 156,\n saturation: 0.9,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'code-function': {\n base: 'surface',\n hue: 348,\n saturation: 1,\n tone: '-54',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'code-attribute': {\n base: 'surface',\n hue: 200,\n saturation: 1,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n\n // ---- Loading-animation cube faces ----\n // Decorative gradient steps from `surface` to a saturated mid-tone. Tone\n // deltas are chosen directly on the contrast-uniform scale; no contrast prop\n // is needed for a non-text decorative element.\n 'loading-face-1': {\n base: 'surface',\n tone: '-2',\n saturation: 0.3,\n inherit: false,\n },\n 'loading-face-2': {\n base: 'surface',\n tone: '-9',\n saturation: 0.62,\n inherit: false,\n },\n 'loading-face-3': {\n base: 'surface',\n tone: '-21',\n saturation: 0.66,\n inherit: false,\n },\n\n // ---- Shadows (default-only) ----\n 'shadow-sm': {\n type: 'shadow',\n bg: 'surface',\n fg: 'surface-text',\n intensity: 5,\n inherit: false,\n },\n 'shadow-md': {\n type: 'shadow',\n bg: 'surface',\n fg: 'surface-text',\n intensity: 10,\n inherit: false,\n },\n 'shadow-lg': {\n type: 'shadow',\n bg: 'surface',\n fg: 'surface-text',\n intensity: 15,\n inherit: false,\n },\n\n // Backdrop overlay (translucent)\n overlay: { tone: 10, opacity: 0.5, inherit: false },\n});\n\n// ============================================================================\n// Colored themes\n// ============================================================================\n\nconst TINTED_SURFACE_SATURATION = 0.2;\nconst TINTED_SURFACE_TONE_OFFSET = 2;\n\n/**\n * Per-colored-theme overrides on top of `defaultTheme`:\n * - `surface` — bumped saturation so the banner bg is visibly tinted.\n * - `border` — bumped saturation so OUTLINE-variant borders pick up the\n * theme hue (used by `#<theme>-border` in `item-themes.ts`). Mirrors the\n * default-theme `border` shape (`base: 'surface'`, tone window) but\n * with higher saturation. Glaze's `extend({ colors })` redefines each\n * listed color from scratch, so we restate the full definition here.\n */\nconst TINTED_SURFACE_OVERRIDE: ColorMap = {\n surface: {\n tone: 100 - TINTED_SURFACE_TONE_OFFSET,\n saturation: TINTED_SURFACE_SATURATION,\n },\n border: {\n base: 'surface',\n tone: ['-10', '-20'],\n saturation: 0.5,\n },\n 'surface-text': {\n base: 'surface',\n tone: `${TEXT_TONE - TINTED_SURFACE_TONE_OFFSET}`,\n saturation: 0.25,\n contrast: ['AA', 'AAA'],\n },\n 'surface-text-soft': {\n base: 'surface',\n tone: `${TEXT_SOFT_TONE - TINTED_SURFACE_TONE_OFFSET}`,\n saturation: 0.25,\n contrast: ['AA', 'AAA'],\n },\n 'surface-text-soft-2': {\n base: 'surface',\n tone: `${TEXT_SOFT2_TONE - TINTED_SURFACE_TONE_OFFSET}`,\n saturation: 0.25,\n contrast: ['AA', 'AAA'],\n },\n};\n\nconst primaryTheme = defaultTheme.extend({\n colors: TINTED_SURFACE_OVERRIDE,\n});\nconst successTheme = defaultTheme.extend({\n hue: SUCCESS_HUE,\n colors: TINTED_SURFACE_OVERRIDE,\n});\nconst dangerTheme = defaultTheme.extend({\n hue: DANGER_HUE,\n colors: TINTED_SURFACE_OVERRIDE,\n});\nconst warningTheme = defaultTheme.extend({\n hue: WARNING_HUE,\n colors: TINTED_SURFACE_OVERRIDE,\n});\nconst noteTheme = defaultTheme.extend({\n hue: NOTE_HUE,\n colors: TINTED_SURFACE_OVERRIDE,\n});\n\n// ============================================================================\n// Special theme (fixed-mode, NOT inherited from defaultTheme)\n// ============================================================================\n\n/**\n * Standalone theme for `special`-variant components (hero CTAs, banners, etc.)\n * that intentionally sit on a dark surface regardless of the active scheme.\n *\n * Every token here is `mode: 'fixed'` so the resolved value is identical in\n * light, dark, and high-contrast. The shape is purpose-built (not a full\n * mirror of `defaultTheme`) — only what `SPECIAL_*_STYLES` in\n * `src/data/item-themes.ts` consumes is emitted.\n *\n * Token rundown:\n * - `surface` — dark L≈12 backdrop (same value as `#surface-inverse`).\n * - `accent-surface` / `accent-surface-2` / `accent-surface-3` —\n * brand-purple PRIMARY fill ramp (default → hover → pressed). Mirrors\n * the `#primary-accent-surface` / `-2` / `-3` ramp on the colored\n * themes so `SPECIAL_PRIMARY_STYLES.fill` can use the same shape.\n * - `accent-surface-hover` — legacy alias kept around for the\n * `#special-hover` color shortcut in `src/tokens/colors.ts`. Item\n * themes themselves no longer reference it.\n * - `accent-surface-text` — fixed white (= built-in `#white`), exposed\n * for explicit references.\n * - `accent-text` — dark-purple foreground readable on white. Used as\n * CLEAR-variant text on the always-white pill, and as the\n * pressed/focused border on the brand-purple primary fill. Matches the\n * legacy `#fixed-primary-text` alias (= `#primary-accent-surface-hover`).\n * - `accent-disabled-surface` / `accent-disabled-surface-text` —\n * brand-tinted disabled chip + label, positioned with relative tone\n * deltas against the fixed dark `surface` so the disabled state is\n * scheme-symmetric.\n */\nconst specialTheme = glaze(PURPLE_HUE, SEED_SATURATION);\n\nspecialTheme.colors({\n surface: { tone: 12, saturation: 0.475, mode: 'fixed' },\n\n 'accent-surface-text': { tone: 100, mode: 'fixed' },\n 'accent-surface': {\n base: 'accent-surface-text',\n tone: '-49',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-2': {\n base: 'accent-surface-text',\n tone: '-52',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-3': {\n base: 'accent-surface-text',\n tone: '-55',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-border': {\n base: 'accent-surface',\n tone: '+13',\n mode: 'fixed',\n },\n 'accent-surface-hover': {\n base: 'accent-surface-text',\n tone: '-58',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-text': {\n base: 'accent-surface-text',\n tone: '-58',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n\n 'accent-disabled-surface': {\n base: 'surface',\n tone: '+4',\n saturation: 0.5,\n mode: 'fixed',\n },\n 'accent-disabled-surface-text': {\n base: 'accent-disabled-surface',\n tone: '+18',\n saturation: 0.4,\n mode: 'fixed',\n },\n});\n\n// ============================================================================\n// Palette composition\n// ============================================================================\n\n/**\n * Theme map for the palette.\n *\n * `purple` is the legacy alias for `primary` and resolves to identical tokens\n * (same theme instance, different prefix → no token-value collision).\n *\n * `default` is emitted with an empty prefix (custom map below), so its tokens\n * appear unprefixed (`#surface`, `#border`, …). All other themes are prefixed\n * with `<themeName>-`.\n */\nconst palette = glaze.palette({\n default: defaultTheme,\n primary: primaryTheme,\n purple: primaryTheme,\n success: successTheme,\n danger: dangerTheme,\n warning: warningTheme,\n note: noteTheme,\n special: specialTheme,\n});\n\n// ============================================================================\n// Tasty-formatted token export\n// ============================================================================\n\n/**\n * Resolve Glaze palette tokens against the **live** `glaze` global config.\n *\n * Memoized on first call so subsequent reads are free. Resolution is deferred\n * (not done at module import) so host apps can call `glaze.configure(...)`\n * after importing `@cube-dev/ui-kit` and still affect these tokens — as long as\n * configure runs before the first `getPaletteTokens()` / `<Root>` paint.\n *\n * Keys use `#name` syntax; values are state maps:\n * '#surface': { '': 'oklch(...)', '@dark': 'oklch(...)', '@hc': 'oklch(...)' }\n */\nlet paletteTokensCache: Styles | null = null;\n\nexport function getPaletteTokens(): Styles {\n if (!paletteTokensCache) {\n paletteTokensCache = palette.tasty({\n prefix: {\n default: '',\n primary: 'primary-',\n purple: 'purple-',\n success: 'success-',\n danger: 'danger-',\n warning: 'warning-',\n note: 'note-',\n special: 'special-',\n },\n format: 'oklch',\n }) as Styles;\n }\n return paletteTokensCache;\n}\n\n/**\n * Lazy proxy of {@link getPaletteTokens}. Prefer `getPaletteTokens()` in new\n * code. First property / enumeration access resolves against the live glaze\n * config (same memo as the getter).\n */\nexport const PALETTE_TOKENS: Styles = lazyStyles(getPaletteTokens);\n\n/** Re-exported for advanced consumers / tests. */\nexport {\n defaultTheme,\n primaryTheme,\n successTheme,\n dangerTheme,\n warningTheme,\n noteTheme,\n specialTheme,\n palette,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"palette.js","names":[],"sources":["../../src/tokens/palette.ts"],"sourcesContent":["import { glaze } from '@tenphi/glaze';\n\nimport { lazyStyles } from './lazy-styles';\nimport {\n getPaletteConfig,\n getPaletteVersion,\n resolvePaletteConfig,\n} from './palette-config';\n\nimport type {\n ColorMap,\n GlazeConfigOverride,\n GlazePalette,\n GlazeTheme,\n} from '@tenphi/glaze';\nimport type { Styles, Tokens } from '@tenphi/tasty';\nimport type { PaletteConfig, ResolvedPaletteConfig } from './palette-config';\n\n/** Which resolved scheme variant {@link renderPaletteTokens} should return. */\nexport interface RenderPaletteOptions extends PaletteConfig {\n /** Color scheme to resolve. Default: `'light'`. */\n scheme?: 'light' | 'dark';\n /** Resolve the high-contrast variant of that scheme. Default: `false`. */\n highContrast?: boolean;\n}\n\n/**\n * Glaze-generated color palette for the Cube UI Kit.\n *\n * Produces light, dark, and high-contrast color variants from a single\n * source of truth. Every color token is emitted as a tasty state map:\n *\n * '#surface': { '': 'oklch(...)', '@dark': 'oklch(...)', '@hc': 'oklch(...)' }\n *\n * The `@dark` and `@hc` state aliases are wired up globally in\n * `src/components/Root.tsx` (see `setGlobalPredefinedStates`).\n *\n * This module owns the *recipe* — which colors exist and how each one is\n * positioned relative to its base. The *seeds* it is built from (hue,\n * saturation, pastel, contrast level) live in `./palette-config.ts` and are\n * tunable at runtime; `buildPalette()` below is a pure function of them.\n */\n\n// ============================================================================\n// Recipe constants\n// ============================================================================\n\n// Relative tone ramp from a white surface.\n// Tone is a contrast-uniform 0–100 scale (OKHST). A relative tone delta of -N\n// yields a fixed WCAG contrast step against the base regardless of where the\n// base sits on the scale. These constants form the primary text ramp; the\n// surface-2 / surface-3 variants reuse the same absolute targets via a small\n// offset because their bases are shifted down from `surface`.\nconst TEXT_TONE = -98; // relative tone delta from white surface (~cr 21)\nconst TEXT_SOFT_TONE = -72; // relative tone delta from white surface (~cr 9)\nconst TEXT_SOFT2_TONE = -52; // relative tone delta from white surface (~cr 4.5)\nconst SURFACE_2_TEXT_OFFSET = 2;\nconst SURFACE_3_TEXT_OFFSET = 4;\n\n// Syntax highlighting keeps its own fixed hue reference (see the `code-*` block\n// below). This is the kit's default brand hue, frozen as a literal: string\n// literals were historically purple because the brand is, but they must not\n// follow a re-seeded brand hue — a green brand would collide `code-string` with\n// `code-number` (156°) and make strings and numbers indistinguishable.\nconst CODE_STRING_HUE = 280.3;\n\n/**\n * Saturation factor of the neutral `surface`.\n *\n * Shared with the code theme, which mirrors `surface` to solve its contrast floors\n * against the real page background — the two must not drift apart.\n */\nconst SURFACE_SATURATION = 0.12;\n\nconst TINTED_SURFACE_SATURATION = 0.2;\nconst TINTED_SURFACE_TONE_OFFSET = 2;\n\n/**\n * Syntax highlighting for `PrismCode`, as its own theme.\n *\n * A small palette of *adaptive* colored tokens. Each one is anchored to `surface`\n * with a relative tone plus an `['AA','AAA']` readability floor, so it stays legible\n * in light, dark and high contrast. Hues mirror the long-standing PrismCode\n * reference (pink keywords / pink functions / purple strings / green numbers / gray\n * comments); `code-attribute` keeps cyan for HTML attribute names, CSS properties\n * and selectors, while HTML/XML tag names reuse `code-keyword`. Diff insertion and\n * deletion reuse the `success-*` / `danger-*` ramps instead.\n *\n * Two things are deliberately static here. Every hue is an absolute literal, so a\n * re-seeded brand cannot rotate the syntax palette — a green brand would otherwise\n * collide `code-string` with `code-number` (156°). And these factors are relative to\n * the *code* theme's own seed (`themes.code.saturation`), not the palette-level one,\n * so tuning the app's saturation cannot wash out a code block.\n *\n * That separate seed is the only reason these live outside the default theme: a\n * theme colour can never exceed its own seed, and four of these sit at factor `1.0`,\n * so they could not hold their chroma inside a default theme seeded below 80.\n */\nconst CODE_COLORS: ColorMap = {\n 'code-comment': {\n base: 'surface',\n hue: 280,\n saturation: 0.1,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n },\n 'code-punctuation': {\n base: 'surface',\n hue: 348,\n saturation: 0.4,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n },\n 'code-keyword': {\n base: 'surface',\n hue: 348,\n saturation: 1,\n tone: '-54',\n contrast: ['AA', 'AAA'],\n },\n 'code-string': {\n base: 'surface',\n hue: CODE_STRING_HUE,\n saturation: 1,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n },\n 'code-number': {\n base: 'surface',\n hue: 156,\n saturation: 0.9,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n },\n 'code-function': {\n base: 'surface',\n hue: 348,\n saturation: 1,\n tone: '-54',\n contrast: ['AA', 'AAA'],\n },\n 'code-attribute': {\n base: 'surface',\n hue: 200,\n saturation: 1,\n tone: '-50',\n contrast: ['AA', 'AAA'],\n },\n};\n\n/**\n * Build the standalone theme the `code-*` tokens live in.\n *\n * Its seed is the code saturation, so {@link CODE_COLORS} keeps its authored factors\n * verbatim and resolves identically at any palette saturation. The mirrored `surface`\n * is an implementation detail — it exists only as the contrast base, and is filtered\n * out of the emitted tokens by {@link pickCodeTokens}.\n */\nfunction buildCodeTheme(\n config: ResolvedPaletteConfig,\n instanceConfig: GlazeConfigOverride | undefined,\n): GlazeTheme {\n const codeSaturation = config.themes.code.saturation;\n const theme = glaze(config.hue, codeSaturation, instanceConfig);\n\n // Re-express the default theme's `surface` as a factor of the *code* seed, so it\n // resolves to the same colour the code actually sits on. Written as a ratio of\n // seeds so the default config lands on exactly `SURFACE_SATURATION`.\n let mirrorFactor = SURFACE_SATURATION * (config.saturation / codeSaturation);\n\n if (mirrorFactor > 1) {\n // Only reachable with a code saturation far below the palette's. Glaze would\n // clamp this silently and then solve every contrast floor against the wrong\n // background, so say so.\n // eslint-disable-next-line no-console\n console.warn(\n `[cube-ui-kit] themes.code.saturation (${codeSaturation}) is too low for ` +\n `saturation ${config.saturation}: the mirrored code surface would need a ` +\n `factor of ${mirrorFactor.toFixed(3)}. Clamped to 1; raise the code ` +\n `saturation to keep syntax contrast accurate.`,\n );\n mirrorFactor = 1;\n }\n\n theme.colors({\n surface: { tone: 100, saturation: mirrorFactor },\n ...CODE_COLORS,\n });\n\n return theme;\n}\n\n/** What {@link buildPalette} produces: the themed palette plus the code theme. */\ninterface BuiltPalette {\n palette: GlazePalette;\n codeTheme: GlazeTheme;\n}\n\n/** Drop the mirrored `surface`, keeping only the `code-*` tokens. */\nfunction pickCodeTokens<T>(tokens: Record<string, T>): Record<string, T> {\n const out: Record<string, T> = {};\n\n for (const name of Object.keys(tokens)) {\n if (name.startsWith('code-') || name.startsWith('#code-')) {\n out[name] = tokens[name];\n }\n }\n\n return out;\n}\n\n// ============================================================================\n// Global Glaze configuration\n// ============================================================================\n\nglaze.configure({\n states: {\n dark: '@dark',\n highContrast: '@hc',\n },\n modes: {\n dark: true,\n highContrast: true,\n },\n darkTone: [14, 95],\n darkDesaturation: 0,\n});\n\n/**\n * Per-colored-theme overrides on top of the default theme:\n * - `surface` — bumped saturation so the banner bg is visibly tinted.\n * - `border` — bumped saturation so OUTLINE-variant borders pick up the\n * theme hue (used by `#<theme>-border` in `item-themes.ts`). Mirrors the\n * default-theme `border` shape (`base: 'surface'`, tone window) but\n * with higher saturation. Glaze's `extend({ colors })` redefines each\n * listed color from scratch, so we restate the full definition here.\n */\nconst TINTED_SURFACE_OVERRIDE: ColorMap = {\n surface: {\n tone: [\n 100 - TINTED_SURFACE_TONE_OFFSET,\n 100 - TINTED_SURFACE_TONE_OFFSET * 2,\n ],\n saturation: TINTED_SURFACE_SATURATION,\n },\n border: {\n base: 'surface',\n tone: ['-10', '-30'],\n saturation: 0.3,\n },\n 'surface-text': {\n base: 'surface',\n tone: `${TEXT_TONE - TINTED_SURFACE_TONE_OFFSET}`,\n saturation: 0.25,\n contrast: ['AA', 'AAA'],\n },\n 'surface-text-soft': {\n base: 'surface',\n tone: `${TEXT_SOFT_TONE - TINTED_SURFACE_TONE_OFFSET}`,\n saturation: 0.25,\n contrast: ['AA', 'AAA'],\n },\n 'surface-text-soft-2': {\n base: 'surface',\n tone: `${TEXT_SOFT2_TONE - TINTED_SURFACE_TONE_OFFSET}`,\n saturation: 0.25,\n contrast: ['AA', 'AAA'],\n },\n};\n\n// ============================================================================\n// Palette construction\n// ============================================================================\n\n/**\n * Build the full palette from a resolved config.\n *\n * Pure: it reads nothing but its argument (and the global Glaze config, which\n * the caller sets first), so re-running it with the same config yields the same\n * tokens. Theme instances are immutable with respect to their hue / saturation\n * seed and a `GlazePalette` has no mutation API, so re-seeding means rebuilding.\n */\nfunction buildPalette(\n config: ResolvedPaletteConfig,\n options: {\n /**\n * Carry `contrastLevel` on the theme instances instead of relying on the\n * global Glaze config. Used when rendering a palette the app is not running,\n * so a preview cannot disturb the live one. The resolved values are the same\n * either way; only which scheme variants get *emitted* differs, and callers\n * that isolate pick their variant explicitly.\n */\n isolateContrastLevel?: boolean;\n } = {},\n): BuiltPalette {\n const { hue, baseHue, saturation, pastel, themes, contrastLevel } = config;\n\n // `pastel` is instance-level in Glaze (not settable via `glaze.configure`).\n // Setting it on the two root themes is enough: `extend({ config })` merges\n // with the parent's override, so the derived themes inherit it. When it is\n // off we omit the field entirely rather than pass `false` — the two are\n // equivalent, and omitting keeps the default output provably untouched.\n const overrides: GlazeConfigOverride = {\n ...(pastel ? { pastel: true } : null),\n ...(options.isolateContrastLevel ? { contrastLevel } : null),\n };\n const instanceConfig: GlazeConfigOverride | undefined = Object.keys(overrides)\n .length\n ? overrides\n : undefined;\n\n // --------------------------------------------------------------------------\n // Default theme (neutral, primary in palette → exported unprefixed)\n // --------------------------------------------------------------------------\n\n const defaultTheme = glaze(hue, saturation, instanceConfig);\n\n defaultTheme.colors({\n // ---- Surfaces (neutral, very low saturation) ----\n surface: { tone: 100, saturation: SURFACE_SATURATION, hue: baseHue },\n 'surface-2': {\n hue: baseHue,\n base: 'surface',\n tone: ['-2', '-4'],\n saturation: 0.1,\n inherit: false,\n },\n 'surface-3': {\n hue: baseHue,\n base: 'surface',\n tone: ['-4', '-8'],\n saturation: 0.1,\n inherit: false,\n },\n 'surface-4': {\n hue: baseHue,\n base: 'surface',\n tone: ['-6', '-12'],\n saturation: 0.1,\n inherit: false,\n },\n\n // ---- Text on surfaces ----\n // Tone is the contrast-uniform OKHST axis, so a relative tone delta directly\n // encodes a WCAG contrast step. `surface-text` sits at tone 2 (a -98 delta\n // from white), giving the same near-black appearance as the legacy `#dark`.\n // We still keep an `['AA','AAA']` contrast floor on every text-on-surface\n // color so a future low-contrast scale can shift the ramp down without ever\n // breaking readability.\n 'surface-text': {\n hue: baseHue,\n base: 'surface',\n tone: `${TEXT_TONE - 2}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n },\n 'surface-text-soft': {\n hue: baseHue,\n base: 'surface',\n tone: `${TEXT_SOFT_TONE - 2}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-text-soft-2': {\n hue: baseHue,\n base: 'surface',\n tone: `${TEXT_SOFT2_TONE - 2}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-2-text': {\n hue: baseHue,\n base: 'surface-2',\n tone: `${TEXT_TONE + SURFACE_2_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-2-text-soft': {\n hue: baseHue,\n base: 'surface-2',\n tone: `${TEXT_SOFT_TONE + SURFACE_2_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-3-text': {\n hue: baseHue,\n base: 'surface-3',\n tone: `${TEXT_TONE + SURFACE_3_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n 'surface-3-text-soft': {\n hue: baseHue,\n base: 'surface-3',\n tone: `${TEXT_SOFT_TONE + SURFACE_3_TEXT_OFFSET}`,\n saturation: 0.2,\n contrast: ['AA', 'AAA'],\n inherit: false,\n },\n\n // ---- Other neutral UI primitives (default-only) ----\n border: {\n hue: baseHue,\n base: 'surface',\n tone: ['-10', '-30'],\n saturation: 0.175,\n },\n placeholder: {\n hue: baseHue,\n base: 'surface',\n tone: '-33',\n saturation: 0.175,\n inherit: false,\n },\n focus: {\n base: 'surface',\n tone: '-29',\n saturation: 0.8625,\n inherit: false,\n },\n disabled: {\n tone: 80.8,\n saturation: 0.4,\n inherit: false,\n },\n // Disabled fill chip + text — both adaptive (mode 'auto') and positioned\n // with relative tone deltas against `surface` so the disabled state has the\n // same perceived intensity in light, dark, and high-contrast schemes. No\n // numeric contrast prop is needed: tone is already on a WCAG-uniform scale.\n //\n // Tone deltas reproduce the legacy palette's disabled appearance exactly:\n // the chip sits ~cr 1.11 vs `surface` (a faint greyed pill for\n // OUTLINE/SECONDARY/item disabled states) and the label ~cr 2.02 vs\n // `surface` — intentionally sub-AA so it reads as disabled while staying the\n // same softness clear/link disabled labels had before. PRIMARY-style buttons\n // use the brand-tinted `accent-disabled-*` variants below instead. Both\n // tokens stay default-only (`inherit: false`) — colored themes inherit their\n // own disabled chip via the accent variants.\n 'disabled-surface': {\n hue: baseHue,\n base: 'surface',\n tone: '-3.5',\n saturation: 0.2,\n inherit: false,\n },\n 'disabled-surface-text': {\n base: 'surface',\n tone: '-23',\n saturation: 0.3,\n inherit: false,\n },\n\n // Fixed-mode \"always dark\" surface for elements that intentionally stay\n // inverted regardless of scheme (tooltips, code blocks, popovers with their\n // own dark theme, etc.). `mode: 'fixed'` bypasses the dark-scheme inversion\n // so the color reads as a dark surface in light, dark, and high-contrast.\n // Pair with `#white` (built-in) for foreground text.\n 'surface-inverse': {\n hue: baseHue,\n tone: 12,\n saturation: 0.475,\n mode: 'fixed',\n inherit: false,\n },\n\n // ---- Accent system (theme-aware, inherited by colored themes) ----\n // Everything here is anchored to a fixed white \"accent-surface-text\" via\n // `mode: 'fixed'` + relative tone deltas, so accent colors stay visually\n // consistent across light/dark/high-contrast schemes (the brand color does\n // not flip). The solid fills are white-text-on-brand backgrounds, so they\n // keep an `['AA','AAA']` contrast floor even though the chosen tone deltas\n // already exceed it. This leaves room for a future low-contrast scale.\n 'accent-surface-text': { tone: 100, mode: 'fixed' },\n 'accent-surface': {\n base: 'accent-surface-text',\n tone: '-49',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-2': {\n base: 'accent-surface-text',\n tone: '-52',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-3': {\n base: 'accent-surface-text',\n tone: '-55',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n // Hover variant of `accent-surface` — a *fixed*-mode darker shade used as\n // the hover fill for solid PRIMARY-type buttons. Anchored to the same\n // accent-surface-text so it stays in the same hue family. The relative tone\n // lands a few steps darker than the pressed state in both schemes.\n 'accent-surface-hover': {\n base: 'accent-surface-text',\n tone: '-58',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n // Border for accent surfaces — a small relative tone step away from the\n // brand fill so it stays in the brand hue family and does not flip in dark\n // mode. No contrast prop needed; the delta is chosen directly on the tone\n // scale.\n 'accent-surface-border': {\n base: 'accent-surface',\n tone: '+13',\n mode: 'fixed',\n },\n // Opaque stand-in for the BASE selected fill used by outline / outline-2 /\n // clear Item types (`#surface|#surface-2|#surface-3` + `#accent-surface.09`).\n // Anchors `accent-text` contrast. `value: 9` matches the `.09` alpha overlay;\n // `space: 'srgb'` approximates CSS two-layer compositing. Inherited so\n // colored themes re-resolve against their own `surface` + `accent-surface`\n // (default `surface-2`/`surface-3` are `inherit: false` and can't be the mix\n // base). Primary's tinted `surface` makes this slightly harder than default\n // clear-selected, covering outline / outline-2 selected fills as well.\n 'accent-selected-fill': {\n type: 'mix',\n base: 'surface',\n target: 'accent-surface',\n value: 9,\n space: 'srgb',\n },\n // Stronger brand text for HOVERED selected outline/clear labels and LINK\n // hover. Same anchor + preferred tone as `accent-text-soft`, but a higher\n // `contrast: { wcag: [6, 7] }` floor against `accent-selected-fill` so it\n // reads as a clear step up from the soft rest color while staying saturated\n // (a bare `AAA`/`7` floor over-darkens light and desaturates dark). The HC\n // pair keeps it at/above the soft variant (which auto-promotes AA→AAA in HC).\n // `mode: 'auto'` (default) keeps dark-mode text readable on dark surfaces.\n 'accent-text': {\n base: 'accent-selected-fill',\n tone: '-49',\n saturation: 1,\n contrast: [6, 11],\n },\n // Rest brand text for selected outline/clear labels and LINK base color.\n // Anchored to `accent-selected-fill` with `contrast: 'AA'` — the measured\n // floor for every BASE state of those Item types (surface / outline /\n // outline-2 / clear selected fills). Sits visibly less prominent than\n // `accent-text` (lighter in light, darker in dark) so the rest→hover\n // intensify is real.\n 'accent-text-soft': {\n base: 'accent-selected-fill',\n tone: '-49',\n saturation: 1,\n contrast: ['AA', 'AAA'],\n },\n 'accent-icon': {\n base: 'surface',\n tone: '-38',\n saturation: 0.9375,\n },\n\n // Brand-tinted disabled chip + label for PRIMARY-style buttons (solid brand\n // fill). The chip is scheme-symmetric (`mode: 'fixed'`) so the muted state\n // reads the same weight in light/dark/HC; saturation is bumped so it stays\n // identifiable as a muted brand color.\n //\n // The label rides the extreme away from the chip (`tone: 'max'`, ~cr 1.7):\n // deliberately faint, so it reads as disabled rather than as live text.\n // `'max'` is the authored intent — it was temporarily hand-approximated as a\n // relative `tone: '+15'` with `autoFlip: false`, because Glaze < 1.2.0\n // re-mapped the extreme through the dark tone window, compressing the\n // base-to-extreme span and dropping the dark label's contrast. Glaze 1.2.0\n // (tenphi/glaze#82) instead replays the light scheme's base→extreme tone\n // shift against the base's resolved dark tone — same-signed under\n // `mode: 'fixed'` — so `'max'` holds its intended separation in every scheme\n // and the approximation is no longer needed. Inherited per theme.\n //\n // The special theme keeps its own relative `+18` pair: its `surface` is a\n // fixed dark tone, so an extreme there would resolve to white and read as\n // live text rather than disabled.\n 'accent-disabled-surface': {\n base: 'surface',\n tone: '-13',\n saturation: 0.5,\n mode: 'fixed',\n },\n 'accent-disabled-surface-text': {\n base: 'accent-disabled-surface',\n tone: 'max',\n saturation: 0.4,\n mode: 'fixed',\n },\n\n // ---- Loading-animation cube faces ----\n // Decorative gradient steps from `surface` to a saturated mid-tone. Tone\n // deltas are chosen directly on the contrast-uniform scale; no contrast prop\n // is needed for a non-text decorative element.\n 'loading-face-1': {\n base: 'surface',\n tone: '-2',\n saturation: 0.3,\n inherit: false,\n },\n 'loading-face-2': {\n base: 'surface',\n tone: '-9',\n saturation: 0.62,\n inherit: false,\n },\n 'loading-face-3': {\n base: 'surface',\n tone: '-21',\n saturation: 0.66,\n inherit: false,\n },\n\n // ---- Shadows (default-only) ----\n 'shadow-sm': {\n type: 'shadow',\n bg: 'surface',\n fg: 'surface-text',\n intensity: 5,\n inherit: false,\n },\n 'shadow-md': {\n type: 'shadow',\n bg: 'surface',\n fg: 'surface-text',\n intensity: 10,\n inherit: false,\n },\n 'shadow-lg': {\n type: 'shadow',\n bg: 'surface',\n fg: 'surface-text',\n intensity: 15,\n inherit: false,\n },\n\n // Backdrop overlay (translucent)\n overlay: { tone: 10, opacity: 0.5, inherit: false, hue: baseHue },\n });\n\n // --------------------------------------------------------------------------\n // Colored themes\n // --------------------------------------------------------------------------\n //\n // `primary` is the brand theme: it shares both the accent hue and the palette\n // seed saturation with `default`, and differs only in carrying a tinted surface.\n // Each status theme adds its own hue on top.\n const primaryTheme = defaultTheme.extend({\n colors: TINTED_SURFACE_OVERRIDE,\n });\n const successTheme = defaultTheme.extend({\n hue: themes.success.hue,\n saturation: themes.success.saturation,\n colors: TINTED_SURFACE_OVERRIDE,\n });\n const dangerTheme = defaultTheme.extend({\n hue: themes.danger.hue,\n saturation: themes.danger.saturation,\n colors: TINTED_SURFACE_OVERRIDE,\n });\n const warningTheme = defaultTheme.extend({\n hue: themes.warning.hue,\n saturation: themes.warning.saturation,\n colors: TINTED_SURFACE_OVERRIDE,\n });\n const noteTheme = defaultTheme.extend({\n hue: themes.note.hue,\n saturation: themes.note.saturation,\n colors: TINTED_SURFACE_OVERRIDE,\n });\n\n // --------------------------------------------------------------------------\n // Special theme (fixed-mode, NOT inherited from the default theme)\n // --------------------------------------------------------------------------\n //\n // Standalone theme for `special`-variant components (hero CTAs, banners, etc.)\n // that intentionally sit on a dark surface regardless of the active scheme.\n //\n // Every token here is `mode: 'fixed'` so the resolved value is identical in\n // light, dark, and high-contrast. The shape is purpose-built (not a full\n // mirror of the default theme) — only what `SPECIAL_*_STYLES` in\n // `src/data/item-themes.ts` consumes is emitted. It follows the *primary*\n // seed, since it is the brand-on-dark theme.\n //\n // Token rundown:\n // - `surface` — dark L≈12 backdrop (same value as `#surface-inverse`).\n // - `accent-surface` / `accent-surface-2` / `accent-surface-3` —\n // brand PRIMARY fill ramp (default → hover → pressed). Mirrors the\n // `#primary-accent-surface` / `-2` / `-3` ramp on the colored themes so\n // `SPECIAL_PRIMARY_STYLES.fill` can use the same shape.\n // - `accent-surface-hover` — legacy alias kept around for the\n // `#special-hover` color shortcut in `src/tokens/colors.ts`. Item\n // themes themselves no longer reference it.\n // - `accent-surface-text` — fixed white (= built-in `#white`), exposed\n // for explicit references.\n // - `accent-text` — dark brand foreground readable on white. Used as\n // CLEAR-variant text on the always-white pill, and as the\n // pressed/focused border on the brand primary fill. Matches the\n // legacy `#fixed-primary-text` alias (= `#primary-accent-surface-hover`).\n // - `accent-disabled-surface` / `accent-disabled-surface-text` —\n // brand-tinted disabled chip + label, positioned with relative tone\n // deltas against the fixed dark `surface` so the disabled state is\n // scheme-symmetric.\n\n const specialTheme = glaze(hue, saturation, instanceConfig);\n\n specialTheme.colors({\n surface: { tone: 12, saturation: 0.475, mode: 'fixed' },\n\n 'accent-surface-text': { tone: 100, mode: 'fixed' },\n 'accent-surface': {\n base: 'accent-surface-text',\n tone: '-49',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-2': {\n base: 'accent-surface-text',\n tone: '-52',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-3': {\n base: 'accent-surface-text',\n tone: '-55',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-surface-border': {\n base: 'accent-surface',\n tone: '+13',\n mode: 'fixed',\n },\n 'accent-surface-hover': {\n base: 'accent-surface-text',\n tone: '-58',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n 'accent-text': {\n base: 'accent-surface-text',\n tone: '-58',\n contrast: ['AA', 'AAA'],\n mode: 'fixed',\n },\n\n 'accent-disabled-surface': {\n base: 'surface',\n tone: '+4',\n saturation: 0.5,\n mode: 'fixed',\n },\n 'accent-disabled-surface-text': {\n base: 'accent-disabled-surface',\n tone: '+18',\n saturation: 0.4,\n mode: 'fixed',\n },\n });\n\n // --------------------------------------------------------------------------\n // Palette composition\n // --------------------------------------------------------------------------\n //\n // `purple` is the legacy alias for `primary` and resolves to identical tokens\n // (same theme instance, different prefix → no token-value collision).\n //\n // `default` is emitted with an empty prefix (custom map in `getPaletteTokens`),\n // so its tokens appear unprefixed (`#surface`, `#border`, …). All other themes\n // are prefixed with `<themeName>-`.\n return {\n palette: glaze.palette({\n default: defaultTheme,\n primary: primaryTheme,\n purple: primaryTheme,\n success: successTheme,\n danger: dangerTheme,\n warning: warningTheme,\n note: noteTheme,\n special: specialTheme,\n }),\n // Kept out of the palette on purpose: it has to emit `code-*` unprefixed, and\n // its mirrored `surface` would collide with the default theme's.\n codeTheme: buildCodeTheme(config, instanceConfig),\n };\n}\n\n// ============================================================================\n// Tasty-formatted token export\n// ============================================================================\n\nconst TOKEN_PREFIXES = {\n default: '',\n primary: 'primary-',\n purple: 'purple-',\n success: 'success-',\n danger: 'danger-',\n warning: 'warning-',\n note: 'note-',\n special: 'special-',\n};\n\nlet paletteCache: GlazePalette | null = null;\nlet codeThemeCache: GlazeTheme | null = null;\nlet paletteTokensCache: Styles | null = null;\nlet cachedVersion = -1;\n\n/**\n * Whether *we* are the ones holding a manual level in Glaze's global config.\n *\n * `contrastLevel` is the one palette option that has to be global: a global\n * level pins `modes.highContrast: false` so no high-contrast tier is emitted at\n * all (which is the point — a manual level already carries the preference),\n * whereas a per-instance level would leave the tier in place and report its own\n * values there. `palette.tasty({ modes })` cannot override that either.\n *\n * Being global means it is shared with the host app, so we only write it when\n * asked. A host that sets its own `glaze.configure({ contrastLevel })` and never\n * touches `setPaletteConfig({ contrastLevel })` keeps its level — without this\n * flag we would silently reset it to `'auto'` on the first token read.\n */\nlet ownsContrastLevel = false;\n\nfunction applyContrastLevel(contrastLevel: number | 'auto') {\n // Nothing to do: we hold no level, and the config does not ask for one.\n if (contrastLevel === 'auto' && !ownsContrastLevel) return;\n\n // Always explicit — `configure()` never clears a field by omission, so\n // returning to `'auto'` has to say so.\n glaze.configure({ contrastLevel });\n ownsContrastLevel = contrastLevel !== 'auto';\n}\n\nfunction refresh() {\n const version = getPaletteVersion();\n\n if (paletteTokensCache && cachedVersion === version) return;\n\n const config = getPaletteConfig();\n\n applyContrastLevel(config.contrastLevel);\n\n const built = buildPalette(config);\n\n paletteCache = built.palette;\n paletteTokensCache = {\n ...built.palette.tasty({ prefix: TOKEN_PREFIXES, format: 'oklch' }),\n ...pickCodeTokens(built.codeTheme.tasty({ format: 'oklch' })),\n } as Styles;\n codeThemeCache = built.codeTheme;\n cachedVersion = version;\n}\n\n/**\n * Resolve Glaze palette tokens against the current palette config.\n *\n * Memoized against the config version (see `./palette-config.ts`), so repeated\n * reads are free and `setPaletteConfig()` invalidates them. Resolution is\n * deferred rather than done at module import, so host apps can call\n * `setPaletteConfig(...)` / `glaze.configure(...)` after importing\n * `@cube-dev/ui-kit` and still affect the first paint.\n *\n * Keys use `#name` syntax; values are state maps:\n * '#surface': { '': 'oklch(...)', '@dark': 'oklch(...)', '@hc': 'oklch(...)' }\n */\nexport function getPaletteTokens(): Styles {\n refresh();\n\n return paletteTokensCache!;\n}\n\n/** The live `GlazePalette`. Rebuilt whenever the palette config changes. */\nexport function getPalette(): GlazePalette {\n refresh();\n\n return paletteCache!;\n}\n\n/**\n * The live theme behind the `code-*` tokens. Separate from {@link getPalette}\n * because it carries its own saturation seed — see {@link CODE_COLORS}.\n */\nexport function getCodeTheme(): GlazeTheme {\n refresh();\n\n return codeThemeCache!;\n}\n\n// ============================================================================\n// One-variant render (for previewing a palette on a region)\n// ============================================================================\n\nconst VARIANT_KEY = {\n 'light:false': 'light',\n 'light:true': 'lightContrast',\n 'dark:false': 'dark',\n 'dark:true': 'darkContrast',\n} as const;\n\n/**\n * Single-entry memo: all four variants of the last config rendered.\n *\n * Keyed on the palette version as well as the config, because the config is not\n * the only input — `buildPalette` also reads Glaze's own global config\n * (`darkTone`, `darkDesaturation`, the state map). A host that drives Glaze\n * directly and then calls `invalidatePaletteTokens()` bumps the version without\n * touching the config, and the region previews have to follow the document.\n */\nlet renderKey: string | null = null;\nlet renderVariants: Record<string, Record<string, string>> = {};\n\n/**\n * Resolve one scheme variant of a palette to flat, literal color values.\n *\n * Unlike {@link getPaletteTokens}, which emits state maps (`@dark` / `@hc`) for\n * the whole document, this collapses the palette to the single variant you ask\n * for. That is what makes a **region** preview possible: applied through a tasty\n * `tokens` prop, the values override the inherited ones for that subtree only, so\n * a dark or high-contrast theme can be shown inside a light page.\n *\n * Prefer `renderColorTokens()` from `./colors` unless you specifically want the\n * palette without the legacy aliases.\n */\nexport function renderPaletteTokens(\n options: RenderPaletteOptions = {},\n): Tokens {\n const { scheme = 'light', highContrast = false, ...config } = options;\n const resolved = resolvePaletteConfig(config);\n const key = `${getPaletteVersion()}:${JSON.stringify(resolved)}`;\n\n if (renderKey !== key) {\n // Force the *global* level to `'auto'` for the duration of the export.\n // Glaze suppresses high-contrast output whenever a global level is set, and\n // that check reads the global config — so without this, a preview's variants\n // would depend on whatever contrast mode the surrounding app happens to be\n // in. The preview's own level rides on the theme instances instead\n // (`isolateContrastLevel`), so the values stay correct. Restored in `finally`;\n // resolution is synchronous, so nothing can observe the window.\n const previousLevel = glaze.getConfig().contrastLevel;\n\n try {\n glaze.configure({ contrastLevel: 'auto' });\n\n const built = buildPalette(resolved, { isolateContrastLevel: true });\n const modes = { dark: true, highContrast: true };\n const themed = built.palette.tokens({\n prefix: TOKEN_PREFIXES,\n format: 'oklch',\n modes,\n });\n const code = built.codeTheme.tokens({ format: 'oklch', modes });\n\n // Built into a local and published together, so a throw part-way through\n // cannot leave a half-filled map sitting under the previous key.\n const variants: typeof renderVariants = {};\n\n for (const name of Object.keys(themed)) {\n variants[name] = {\n ...themed[name],\n ...pickCodeTokens(code[name] ?? {}),\n };\n }\n\n renderVariants = variants;\n renderKey = key;\n } finally {\n glaze.configure({ contrastLevel: previousLevel });\n }\n }\n\n const variant = VARIANT_KEY[`${scheme}:${highContrast}`];\n // A manual `contrastLevel` leaves no separate high-contrast tier — Glaze\n // mirrors the contrast variants onto the normal ones — so asking for\n // `highContrast` there correctly yields the same colors.\n const flat = renderVariants[variant] ?? renderVariants[scheme];\n const out: Tokens = {};\n\n for (const name of Object.keys(flat)) out[`#${name}`] = flat[name];\n\n return out;\n}\n\n/**\n * Lazy proxy of {@link getPaletteTokens}. Prefer `getPaletteTokens()` in new\n * code. Property / enumeration access always reflects the current palette\n * config.\n */\nexport const PALETTE_TOKENS: Styles = lazyStyles(getPaletteTokens);\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/tokens/shadows.ts
3
3
  /**
4
4
  * Shadow tokens using tasty shorthand syntax.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/tokens/sizes.ts
3
3
  /**
4
4
  * Component size values in pixels.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/tokens/spacing.ts
3
3
  /**
4
4
  * Spacing tokens using tasty multiplier syntax.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/tokens/typography.ts
3
3
  /**
4
4
  * Typography presets for headings, text, and special styles.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/ResizeSensor.ts
3
3
  /**
4
4
  * Iterate over each of the provided element(s).
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/is-dev-env.ts
3
3
  function isDevEnv() {
4
4
  if (typeof window !== "undefined" && window.localStorage) try {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/modules.ts
3
3
  function extractModule(promise) {
4
4
  return promise.then((module) => module.default || module);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/promise.ts
3
3
  function timeout(ms = 30) {
4
4
  return new Promise((resolve) => {
package/dist/utils/raf.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/raf.ts
3
3
  /**
4
4
  * Chains N requestAnimationFrame calls and returns a cancel function.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/random.ts
3
3
  function random(min, max) {
4
4
  const realMin = min < max ? min : max;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/range.ts
3
3
  function range(count) {
4
4
  return Array.from({ length: count }, (_, i) => i);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useRef } from "react";
3
3
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { mergeProps } from "./mergeProps.js";
3
3
  import { Children, cloneElement, createContext, useContext, useMemo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/react/chain.ts
3
3
  /**
4
4
  * Calls all functions in the order they were chained with the same arguments.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/react/forwardRefWithGenerics.tsx
3
3
  /**
4
4
  * A helper for creating forwardRef components with generic types.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { forwardRefWithGenerics } from "./forwardRefWithGenerics.js";
4
4
  import { isTextOnly } from "./isTextOnly.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useState } from "react";
3
3
  import { useFocus, useFocusVisible } from "react-aria";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { Children, isValidElement } from "react";
3
3
 
4
4
  //#region src/utils/react/isTextOnly.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/react/mapProps.ts
3
3
  /** Converts AriaButtonProps to CubeButtonProps */
4
4
  function ariaToCubeButtonProps(props) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { mergeIds } from "./useId.js";
4
4
  import { mergeStyles } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/react/nullableValue.ts
3
3
  function castNullableStringValue(props) {
4
4
  return castNullableField(props, ["value", "defaultValue"], "string", (v) => String(v));
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/react/resolveIcon.ts
3
3
  /**
4
4
  * Resolves a dynamic icon prop to its content and slot state.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useSyncExternalStore } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useEffect, useRef } from "react";
3
3
 
4
4
  //#region src/utils/react/useCombinedRefs.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { createSharedStore } from "./sharedStore.js";
3
3
  import { useEffect } from "react";
4
4
  import { useFocusVisible } from "react-aria";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from "react";
3
3
 
4
4
  //#region src/utils/react/useEventBus.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { useSSRSafeId } from "@react-aria/ssr";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useEffect, useState } from "react";
3
3
 
4
4
  //#region src/utils/react/useIsDarwin.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useIsDarwin } from "./useIsDarwin.js";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import * as React$1 from "react";
3
3
 
4
4
  //#region src/utils/react/useLayoutEffect.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useCallback, useSyncExternalStore } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { mergeStyles } from "@tenphi/tasty";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { EventBusContext, useEventBus } from "./useEventBus.js";
3
3
  import { useCallback, useContext, useEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/react/useQaProps.ts
3
3
  /**
4
4
  * Processes QA props.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { useEffect, useState } from "react";
3
3
 
4
4
  //#region src/utils/react/useViewportSize.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  import { isValidElement } from "react";
3
3
  import { isFragment } from "react-is";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/selection.ts
3
3
  /**
4
4
  * Deduplicate/toggle keys in a selection: if a key appears twice it is
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/styles.ts
3
3
  /**
4
4
  * Split properties into style and non-style properties.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/tree.ts
3
3
  function toFlatTree(tree, includingFolders) {
4
4
  return tree.reduce((result, node) => {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/utils/warnings.ts
3
3
  const SUGGESTED_PROP_MAP = {
4
4
  disabled: "isDisabled",
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.151.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.153.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.151.0";
4
- const TASTY_VERSION = "2.11.0";
3
+ const VERSION = "0.153.0";
4
+ const TASTY_VERSION = "2.11.2";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
7
7
  const tastyVersion = TASTY_VERSION;
package/docs/Colors.md CHANGED
@@ -4,6 +4,10 @@ Cube UI Kit color tokens are generated by Glaze from a shared OKHST palette.
4
4
  Every adaptive token includes light, dark, and high-contrast variants. Change
5
5
  the active scheme in the Storybook toolbar to review each example.
6
6
 
7
+ The colors shown here come from the default seeds. Those seeds — brand hue,
8
+ saturation, per-status hues — are tunable at runtime; see
9
+ [Theming](./Theming.md) for a live playground.
10
+
7
11
  ## Choosing a color pair
8
12
 
9
13
  Start with the surface, then choose a foreground designed for that surface: