@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
@@ -0,0 +1,375 @@
1
+ # Theming
2
+
3
+ The whole palette is generated by [Glaze](https://github.com/tenphi/glaze) from a
4
+ handful of seeds: an accent hue, a base hue, a saturation, and a hue per status
5
+ theme. Those seeds are tunable at runtime — change one and every token re-resolves, in light,
6
+ dark, and high-contrast schemes at once.
7
+
8
+ ```ts
9
+ import { setPaletteConfig } from '@cube-dev/ui-kit';
10
+
11
+ setPaletteConfig({
12
+ hue: 210,
13
+ saturation: 72,
14
+ themes: { danger: { hue: 12 } },
15
+ });
16
+ ```
17
+
18
+ With no configuration set, the palette is exactly the one the kit ships — the
19
+ defaults below are the shipped seeds, and a snapshot test pins every resolved
20
+ value so this stays true.
21
+
22
+ ## What is tunable
23
+
24
+ | Option | Scope | Default |
25
+ | --- | --- | --- |
26
+ | `hue` | **Accent** hue in degrees — the brand. Drives the `accent-*` family, `primary` / `purple` / `special`, and the brand-tinted `focus`, loading faces and disabled chip. | `280.3` |
27
+ | `baseHue` | **Base** hue in degrees — the neutral chrome: `surface` and its ladder, the `surface-text*` ramp, `border`, `placeholder`. | inherits `hue` |
28
+ | `saturation` | Seed saturation (0–100) for the `default` theme, and the fallback for every theme that sets none. | `80` |
29
+ | `themes.<status>.hue` | Hue for `success` / `danger` / `warning` / `note`. | `156.9` / `23.1` / `84.3` / `302.3` |
30
+ | `themes.<status>.saturation` | Saturation for that status theme. | inherits `saturation` |
31
+ | `themes.code.saturation` | Saturation for the `code-*` syntax family. Hues are fixed, and this does **not** inherit `saturation`. | `80` |
32
+ | `pastel` | Global. Relaxes the sRGB-safe chroma limit. | `false` |
33
+ | `contrastLevel` | Global. `'auto'`, or a manual `0`–`100` level. | `'auto'` |
34
+
35
+ ### The setter replaces
36
+
37
+ `setPaletteConfig()` works like `useState`, not like `glaze.configure()`: the
38
+ config you pass **is** the config, resolved against the shipped defaults. Nothing
39
+ accumulates, so removing a customization means removing it from the object:
40
+
41
+ ```ts
42
+ setPaletteConfig({ hue: 200, baseHue: 60 });
43
+ setPaletteConfig({ hue: 200 }); // baseHue is gone — back to inheriting `hue`
44
+ ```
45
+
46
+ That is what makes the config safe to keep in your own state and re-apply: the
47
+ same object twice does the same thing as once, and `<Root palette>` can un-set a
48
+ field by no longer passing it.
49
+
50
+ To change one field of the config already in place — a slider in a settings UI —
51
+ pass an updater. It receives the config **as written**, sparse, so spreading it
52
+ preserves which fields are pinned and which still inherit:
53
+
54
+ ```ts
55
+ setPaletteConfig((config) => ({ ...config, saturation: 55 }));
56
+
57
+ // Nested seeds need their own spread, or the other themes go with them.
58
+ setPaletteConfig((config) => ({
59
+ ...config,
60
+ themes: { ...config.themes, warning: { saturation: 95 } },
61
+ }));
62
+ ```
63
+
64
+ `resetPaletteConfig()` drops all tuning at once — the same as
65
+ `setPaletteConfig({})`, just easier to read at a call site.
66
+
67
+ ### Two hue zones
68
+
69
+ Hue is split into an **accent** zone and a **base** zone:
70
+
71
+ - **Accent** (`hue`) — the `accent-*` family on every theme, `primary` / `purple` /
72
+ `special`, plus `focus`, the loading faces and the disabled chip.
73
+ - **Base** (`baseHue`) — the neutral chrome: `surface` and its ladder, the
74
+ `surface-text*` ramp, `border`, `placeholder`.
75
+
76
+ `baseHue` inherits `hue`, so out of the box the chrome carries a faint tint of the
77
+ brand. Set it to decouple them — a warm grey UI under a cool blue brand:
78
+
79
+ ```ts
80
+ setPaletteConfig({ hue: 235, baseHue: 60 });
81
+ ```
82
+
83
+ Only the `default` theme is affected. A colored theme's tinted `surface`
84
+ deliberately follows *its own* hue, because a danger banner should read as red.
85
+
86
+ ### One saturation scale per theme
87
+
88
+ Saturation is *not* split, deliberately: `saturation` is the theme's **seed**, and
89
+ every color's own `saturation` is a 0–1 factor of it. `surface` sits at `0.12`,
90
+ `border` at `0.175`, the text ramp at `0.2`, the accent family at ~`1.0`.
91
+
92
+ So the palette has one saturation *scale*, and everything on it keeps its
93
+ proportions: turning `saturation` down mutes the brand fills and the neutral tint
94
+ together, in the ratios the palette was designed around. That is the point — the
95
+ relationship between a subtle surface tint and a saturated accent is part of the
96
+ design, not something to tune per token.
97
+
98
+ ### The `code-*` family is the exception
99
+
100
+ Syntax colors are their own theme with their own seed, so neither the brand hue nor
101
+ the palette saturation reaches them. Hues are absolute literals — a brand re-seeded
102
+ toward green would otherwise collide `code-string` with `code-number` (156°) — and
103
+ the saturation is fixed at `80` rather than inheriting, so muting the app cannot
104
+ wash out a code block. Tune it on its own:
105
+
106
+ ```ts
107
+ setPaletteConfig({ themes: { code: { saturation: 60 } } });
108
+ ```
109
+
110
+ They are still *adaptive*: each one is anchored to the real `surface` with an
111
+ `['AA','AAA']` floor, so they re-solve for light, dark and high contrast. Only hue
112
+ and saturation are pinned.
113
+
114
+ That separate seed is also a hard requirement, not a preference: a Glaze colour can
115
+ never exceed its own theme seed, and four of these sit at factor `1.0`. Inside a
116
+ default theme seeded below 80 they simply could not hold their chroma.
117
+
118
+ ### Inherited vs pinned
119
+
120
+ Every per-theme field starts out **inheriting** the palette-level value, so
121
+ `baseHue` tracks `hue` until something sets it, and `themes.<status>.saturation`
122
+ tracks `saturation`. Moving the accent hue therefore appears to move the base hue
123
+ too — they are not linked, `baseHue` simply has no value of its own yet.
124
+
125
+ Writing the field pins it; leaving it out of the config unpins it, so it inherits
126
+ again:
127
+
128
+ ```ts
129
+ setPaletteConfig({ baseHue: 60 }); // pin
130
+ setPaletteConfig((config) => ({ ...config, hue: 235 })); // baseHue stays at 60
131
+ setPaletteConfig({ hue: 235 }); // baseHue dropped — inherits again → 235
132
+
133
+ // Same thing from inside an updater, when the rest of the config must survive.
134
+ setPaletteConfig(({ baseHue, ...config }) => config);
135
+ ```
136
+
137
+ An explicit `baseHue: undefined` is equivalent to omitting it; neither is a value.
138
+
139
+ `getPaletteConfig()` resolves everything, which loses that distinction — it cannot
140
+ tell you whether `80` was chosen or inherited. `getPaletteConfigInput()` returns the
141
+ sparse config as set, which is what a settings UI needs to render an inherited value
142
+ as inherited and offer a way back:
143
+
144
+ ```ts
145
+ const pinned = getPaletteConfigInput().baseHue !== undefined;
146
+ ```
147
+
148
+ Pinning a field to the value it already inherited resolves to the same colors but
149
+ still counts as a change, so a UI reading the sparse config re-renders. Re-applying
150
+ an *already pinned* value is a true no-op and costs nothing.
151
+
152
+ ## Palette playground
153
+
154
+ Drag the brand hue and watch the accent ramp, the neutral surfaces, the buttons,
155
+ the borders and the shadows move together. Nothing re-renders: every color in the
156
+ kit compiles to a CSS custom property, so re-seeding replaces a single rule on
157
+ `body` and the browser repaints.
158
+
159
+ Two things worth noticing while you tune:
160
+
161
+ - The **neutral** surfaces carry saturation factors of 0.10–0.175, so they read
162
+ as a faint tint of the brand hue. That is where the saturation seed is
163
+ legible — the solid accents hide it.
164
+ - The **syntax** colors do not move at all — they are their own theme with their
165
+ own seed, so neither the accent hue nor the saturation reaches them.
166
+
167
+ ## Status themes
168
+
169
+ Each status theme is a Glaze `extend()` of the default theme with its own hue, so
170
+ tuning one moves only its own `#<theme>-*` family.
171
+
172
+ ## Contrast level
173
+
174
+ By default contrast is a two-tier switch: normal colors plus a separate
175
+ high-contrast set, selected by `<html data-contrast="high">` or a
176
+ `prefers-contrast: more` preference.
177
+
178
+ A manual `contrastLevel` replaces both tiers with a single 0–100 slider. Because
179
+ the level already carries the contrast preference, **no separate high-contrast
180
+ variant is emitted** — which means `data-contrast="high"` and
181
+ `prefers-contrast: more` stop having any effect while a level is set. Levels `0`
182
+ and `100` reproduce the normal and high-contrast palettes bit for bit, so the
183
+ slider is a continuous interpolation between exactly what the two tiers ship
184
+ today.
185
+
186
+ That is a real accessibility trade-off: leave `contrastLevel` at `'auto'` unless
187
+ you are giving users their own contrast control.
188
+
189
+ ## Theme builder
190
+
191
+ The `Theme Builder` story puts the whole config behind controls and renders the
192
+ result into a single region: pick **Light / Dark**, then either a contrast **mode**
193
+ (Normal / High) or a **custom** 0–100 level, and the preview shows exactly that
194
+ variant while the page around it stays as it is.
195
+
196
+ There is no `Auto` for scheme or contrast mode, on purpose. `Auto` means "follow
197
+ the OS" — a *preference*, and a flat token value cannot express one. A preview
198
+ renders one concrete variant, so it has to name which. The contrast *level* keeps
199
+ its `Auto`, because there the choice is between the two-tier model and a hand-set
200
+ number rather than between following and not following the system.
201
+
202
+ The preview deliberately shows all three surface levels with their own text ramps
203
+ (`#surface-text`, `#surface-2-text`, `#surface-3-text`), because a theme that looks
204
+ fine on the page surface can fall apart two panels deep.
205
+
206
+ ## Previewing a theme in a region
207
+
208
+ `setPaletteConfig()` re-themes the whole document, which is no use for a theme
209
+ picker — you want several themes visible at once, or a dark preview inside a light
210
+ page. `renderColorTokens()` does that: it resolves the palette for **one** config
211
+ and **one** scheme and returns flat literal values, ready to apply to a subtree
212
+ through a tasty `tokens` prop.
213
+
214
+ ```tsx
215
+ import { renderColorTokens, tasty } from '@cube-dev/ui-kit';
216
+
217
+ const Region = tasty({ styles: { fill: '#surface', color: '#surface-text' } });
218
+
219
+ const preview = useMemo(
220
+ () => renderColorTokens({ hue: 210, scheme: 'dark' }),
221
+ [],
222
+ );
223
+
224
+ <Region tokens={preview}>…everything in here renders in that theme…</Region>;
225
+ ```
226
+
227
+ The reason this needs its own API: the document palette emits **state maps**
228
+ (`{ '': …, '@dark': …, '@hc': … }`), so a page can only ever show one scheme at a
229
+ time — that is what `@dark` means. Collapsing the palette to a chosen scheme
230
+ removes the conditionality, so several themes can coexist.
231
+
232
+ | Option | Meaning |
233
+ | --- | --- |
234
+ | every `PaletteConfig` field | merged over the **current** config, so `{ scheme: 'dark' }` previews the active theme in dark |
235
+ | `scheme` | `'light'` (default) or `'dark'` |
236
+ | `highContrast` | resolve that scheme's high-contrast variant. Default `false` |
237
+
238
+ Nothing is applied globally — the live palette and the stored config are
239
+ untouched, so previews are safe to render anywhere.
240
+
241
+ Note the one place the merge/replace split matters: this call **layers** over the
242
+ live config, unlike `setPaletteConfig()`, which replaces. A preview means "the
243
+ theme in use, but in dark", so the fields it does not mention have to come from
244
+ the current palette rather than from the defaults. `resolvePaletteConfig()` layers
245
+ the same way.
246
+
247
+ Notes:
248
+
249
+ - Real components work inside a region. Every color in the kit compiles to a CSS
250
+ custom property, so overriding those properties on one element re-colors its
251
+ whole subtree with no scheme attribute and no second `<Root>`.
252
+ - The legacy aliases come along **by reference** (`'#dark': '#surface-text'`), and
253
+ so do the shadow tokens and scrollbar colors, whose values embed a palette
254
+ color. Tasty re-declares them on the region so each `var()` resolves against the
255
+ region's own values; resolving them up front would freeze them to the outer
256
+ theme instead.
257
+ - Typography, spacing, sizes and layout are **not** included — nothing in their
258
+ values references a color, so the region inherits them from `<Root>`.
259
+ - `contrastLevel` works per region, so the whole 0–100 ramp can be shown at once —
260
+ something a document cannot do, since it is only ever at one level. Level `0`
261
+ reproduces the normal tier and `100` the high-contrast tier exactly, in both
262
+ schemes. Because a manual level leaves no separate high-contrast tier,
263
+ `highContrast: true` correctly returns the same colors as the normal variant.
264
+ Note that tokens carrying a contrast *floor* (most text) can sit still over part
265
+ of the ramp — the floor is solved, not approximated, so the value only moves once
266
+ the interpolated target does. Tokens positioned by a plain tone pair, like
267
+ `#border`, step at every level.
268
+ - Resolving a palette costs a few milliseconds. The last config is memoized, but
269
+ `useMemo` on the caller side if you drive it from state.
270
+
271
+ `renderPaletteTokens()` is the same thing without the aliases and companion
272
+ tokens, if you want only the Glaze palette.
273
+
274
+ ## Reading and reacting to the config
275
+
276
+ ```tsx
277
+ import {
278
+ DEFAULT_PALETTE_CONFIG,
279
+ getPaletteConfig,
280
+ resetPaletteConfig,
281
+ setPaletteConfig,
282
+ subscribePaletteConfig,
283
+ usePaletteConfig,
284
+ } from '@cube-dev/ui-kit';
285
+
286
+ // In React — `useState`-style (including the replacing setter), and re-renders
287
+ // on change. `palette` is the resolved config; the updater's argument is sparse.
288
+ const [palette, setPalette] = usePaletteConfig();
289
+
290
+ setPalette((config) => ({ ...config, hue: 200 }));
291
+
292
+ // Outside React.
293
+ getPaletteConfig(); // every field resolved to a concrete value
294
+ subscribePaletteConfig(() => {
295
+ /* … */
296
+ });
297
+ ```
298
+
299
+ `getPaletteConfig()` always returns the fully resolved form, so
300
+ `getPaletteConfig().themes.danger.saturation` is a number even if nobody ever set
301
+ it. `DEFAULT_PALETTE_CONFIG` is the shipped baseline in the same shape.
302
+
303
+ ## `<Root palette>`
304
+
305
+ `<Root>` accepts the same config as a prop, applied during render so the first
306
+ paint is already correct:
307
+
308
+ ```tsx
309
+ <Root palette={{ hue: userAccentHue }}>
310
+ <App />
311
+ </Root>
312
+ ```
313
+
314
+ Because the setter replaces, the prop describes the **whole** palette: drop a
315
+ field from the object and that customization goes away on the next render, which
316
+ is what you want from a declarative prop.
317
+
318
+ Removing the prop entirely is the one thing that does *not* reset the palette —
319
+ `<Root>` with no `palette` leaves whatever is configured alone, so that the common
320
+ case cannot clobber a host's imperative `setPaletteConfig()` call. Pass
321
+ `palette={{}}` if you do want the default.
322
+
323
+ This is a convenience wrapper over `setPaletteConfig()`, not a separate scope.
324
+ **The palette is process-global** — Glaze's own config is, and so is the single
325
+ `body` rule the tokens are injected into. One palette per process, not per tree
326
+ and not per request:
327
+
328
+ - Two `<Root>`s with different `palette` props will fight over the same tokens.
329
+ - Under SSR, apply the palette in code that runs on **both** server and client.
330
+ A client-only `setPaletteConfig` disposes and replaces the server-rendered
331
+ token block on the first render, which is visible as a flash. Per-request
332
+ palettes are not supported.
333
+
334
+ ## Caveats
335
+
336
+ **`pastel: true` is a redesign, not a filter.** It changes every resolved color.
337
+ The per-color saturation factors in this palette were tuned for the non-pastel
338
+ space — pastel equalizes chroma across hues, so a pastel palette on the shipped
339
+ seeds resolves more saturated than you may expect. Re-tune the seeds alongside
340
+ it.
341
+
342
+ **Re-seeding costs about 10 ms.** Rebuilding the eight themes and re-solving
343
+ ~156 tokens across four scheme variants is not free, though it is inside a frame.
344
+ A manual `contrastLevel` is cheaper, since it skips both high-contrast passes.
345
+ Setting the config to a value it already holds is free — it does not even bump
346
+ the version. If you are driving it from a slider, let the input coalesce to
347
+ frames (a pointer-driven `onChange` already does) rather than writing on every
348
+ event.
349
+
350
+ **If you call Glaze directly, tell the kit.** `glaze.configure({ darkTone })` and
351
+ friends invalidate Glaze's own caches, but the kit's token maps are memoized
352
+ against the palette config version:
353
+
354
+ ```ts
355
+ import { glaze, invalidatePaletteTokens } from '@cube-dev/ui-kit';
356
+
357
+ glaze.configure({ darkDesaturation: 0.2 });
358
+ invalidatePaletteTokens(); // only needed once the kit is already mounted
359
+ ```
360
+
361
+ `contrastLevel` is the one field the kit writes to Glaze's global config, and it
362
+ only ever does so if you asked for a level. A host that sets its own
363
+ `glaze.configure({ contrastLevel })` and never passes `contrastLevel` here keeps
364
+ it.
365
+
366
+ **Some things are not tunable at all.** Tasty locks its configuration on the
367
+ first style injection, so the `@dark` / `@hc` state definitions and the
368
+ `colorSpace` (both set in `Root`) are fixed for the lifetime of the page. Only
369
+ token *values* stay mutable — which is all re-seeding needs.
370
+
371
+ ## See also
372
+
373
+ - [Colors](./Colors.md) — how to pair surfaces with
374
+ foregrounds, and what each token family is for.
375
+ - [Usage](./Usage.md) — the full token reference.
package/docs/Usage.md CHANGED
@@ -94,6 +94,8 @@ All color tokens use `#name` syntax in styles. Opacity variants use `#name.NN` (
94
94
 
95
95
  The palette is generated by [`@tenphi/glaze`](https://github.com/tenphi/glaze) (see `src/tokens/palette.ts`). Every color token is emitted as a state map with `light`, `@dark`, and `@hc` (high-contrast) variants, so the entire UI Kit adapts to dark / high-contrast schemes automatically.
96
96
 
97
+ The seeds it is generated from — brand hue, saturation, per-status hues, `pastel`, `contrastLevel` — are tunable at runtime. See [Theming](./Theming.md).
98
+
97
99
  ### Color Schemes
98
100
 
99
101
  The `@dark` and `@hc` predefined states are wired up in `src/components/Root.tsx` to support both an attribute opt-in and the user's system preference:
@@ -156,10 +158,12 @@ In the `default` theme these tokens are unprefixed (`#accent-surface`). In color
156
158
 
157
159
  ### Themed Surfaces
158
160
 
159
- Each colored theme (`primary`, `purple`, `success`, `danger`, `warning`, `note`) also provides its own tinted `<theme>-surface` (banner / chip background) and `<theme>-surface-text` (banner text):
161
+ Each colored theme (`primary`, `purple`, `success`, `danger`, `warning`, `note`) also provides its own tinted `<theme>-surface` (banner / chip background) and `<theme>-surface-text` (banner text).
162
+
163
+ The hues below are the *defaults*; each is tunable at runtime (see [Theming](./Theming.md)).
160
164
 
161
- | Group | Hue | Purpose |
162
- |-------|-----|---------|
165
+ | Group | Default hue | Purpose |
166
+ |-------|-------------|---------|
163
167
  | `#primary-*` / `#purple-*` | 280.3° | Primary actions, brand color |
164
168
  | `#success-*` | 156.9° | Success states, confirmations |
165
169
  | `#danger-*` | 23.1° | Errors, destructive actions |
@@ -168,6 +172,29 @@ Each colored theme (`primary`, `purple`, `success`, `danger`, `warning`, `note`)
168
172
 
169
173
  For example, a success banner uses `fill: '#success-surface'` + `color: '#success-surface-text'`, while a primary button uses `fill: '#primary-accent-surface'` + `color: '#primary-accent-surface-text'`.
170
174
 
175
+ ### Runtime Theming
176
+
177
+ `setPaletteConfig()` re-seeds the palette after the kit has mounted; every token re-resolves and `<Root>` re-injects the token block. No component re-render is involved, because every color compiles to a CSS custom property.
178
+
179
+ ```ts
180
+ import { resetPaletteConfig, setPaletteConfig } from '@cube-dev/ui-kit';
181
+
182
+ setPaletteConfig({ hue: 210, themes: { danger: { hue: 12 } } });
183
+ resetPaletteConfig();
184
+ ```
185
+
186
+ Also available: `getPaletteConfig()`, `subscribePaletteConfig()`, the `usePaletteConfig()` hook, a `<Root palette={…}>` prop, `DEFAULT_PALETTE_CONFIG`, and `invalidatePaletteTokens()` for when you drive `glaze.configure(...)` yourself after mount. The palette is process-global — one palette per process, not per tree or per request.
187
+
188
+ To theme a *region* instead of the document — a theme preview, or a dark panel inside a light page — use `renderColorTokens()`. It resolves one config and one scheme to flat values you apply via a `tokens` prop, without touching the live palette:
189
+
190
+ ```tsx
191
+ <Block tokens={renderColorTokens({ hue: 210, scheme: 'dark' })} fill="#surface">
192
+
193
+ </Block>
194
+ ```
195
+
196
+ Full contract, caveats and a live playground: [Theming](./Theming.md).
197
+
171
198
  ### Legacy Aliases
172
199
 
173
200
  The previous token names continue to work as aliases (defined at the bottom of `src/tokens/colors.ts`). New code should prefer the Glaze tokens, but existing components do not need to be migrated:
@@ -13,6 +13,7 @@ The root application wrapper. Provides theme context, global styles, portal cont
13
13
  - **`navigation`** `NavigationAdapter` — Custom navigation adapter for routing
14
14
  - **`tracking`** `TrackingProps` — Analytics/tracking event configuration
15
15
  - **`tokens`** `Record<string, string>` — Custom design tokens (CSS custom properties)
16
+ - **`palette`** `PaletteConfig` — Tune the generated color palette: brand `hue` / `saturation`, per-status theme seeds, `pastel`, `contrastLevel`. Applied during render, so the first paint is already correct. Describes the whole palette, so dropping a field drops that customization. A convenience wrapper over `setPaletteConfig()` — the palette is process-global, not per tree. See [Theming](../Theming.md)
16
17
  - **`fonts`** `boolean` — Whether to load default fonts
17
18
  - **`font`** `string` — Custom font family name
18
19
  - **`monospaceFont`** `string` — Custom monospace font family name
@@ -23,7 +23,7 @@ A date picker combines a text input with a calendar interface, allowing users to
23
23
  - **`maxValue`** `DateValue` — The maximum allowed date
24
24
  - **`granularity`** `'day' | 'hour' | 'minute' | 'second'` (default: `day`) — Determines the smallest selectable unit
25
25
  - **`size`** `'small' | 'medium' | 'large' | (string & {})` (default: `medium`) — DatePicker size
26
- - **`useLocale`** `boolean` (default: `false`) — Whether to use locale-specific date formatting
26
+ - **`useLocale`** `boolean` (default: `undefined`) — Date segment formatting. Leave unset for the kit's own segment order; `true` uses the active locale's order; `false` forces `en-US`. Note that unset and `false` are **not** the same — unset applies extra segment formatting that `false` skips
27
27
  - **`maxVisibleMonths`** `number` (default: `1`) — Maximum number of months to display in calendar
28
28
  - **`shouldFlip`** `boolean` (default: `true`) — Whether the calendar popover should flip to fit in the viewport
29
29
  - **`isOpen`** `boolean` — Whether the calendar popover is open (controlled)
@@ -20,7 +20,7 @@ A radio group allows users to select exactly one option from a set of mutually e
20
20
  - **`value`** `string` — The currently selected value (controlled)
21
21
  - **`defaultValue`** `string` — The default selected value (uncontrolled)
22
22
  - **`type`** `'radio' | 'button' | 'tabs'` (default: `radio`) — Visual type for all radios in the group (button/tabs default to horizontal)
23
- - **`orientation`** `undefined | 'vertical' | 'horizontal'` (default: `auto`) — Orientation of the radio group (auto-set based on type)
23
+ - **`orientation`** `undefined | 'vertical' | 'horizontal'` (default: `undefined`) — Orientation of the radio group. When unset it is derived from `type`: `horizontal` for `button` and `tabs`, `vertical` otherwise
24
24
  - **`size`** `'xsmall' | 'small' | 'medium' | 'large' | 'xlarge'` (default: `xsmall`) — Size for all radio buttons in the group
25
25
  - **`buttonType`** `'outline' | 'outline-2' | 'clear' | 'primary'` — Button type for button-style radios (ignored in tabs mode). When set to "primary", selected buttons use primary style and non-selected use outline with brand tint. `outline-2` is identical to `outline` but uses `#surface-3` as its base fill, so it stands out when the radio group sits on a `#surface-2` container
26
26
  - **`onChange`** `function` — Callback fired when the selected value changes
@@ -19,7 +19,7 @@ A switch allows users to toggle between two states: on and off. It provides imme
19
19
  - **`children`** `string` — The content to display as the switch label
20
20
  - **`isSelected`** `boolean` (default: `false`) — Whether the switch is selected (controlled)
21
21
  - **`defaultSelected`** `boolean` (default: `false`) — Whether the switch is selected by default (uncontrolled)
22
- - **`size`** `'small' | 'medium' | 'large'` (default: `large`) — Switch size
22
+ - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Switch size
23
23
  - **`onChange`** — Callback fired when the switch value changes
24
24
  - **`onFocus`** — Callback fired when the switch receives focus
25
25
  - **`onBlur`** — Callback fired when the switch loses focus
@@ -19,7 +19,7 @@ An accessible tabbed interface for organizing content into multiple panels, show
19
19
  - **`activeKey`** `Key` — Controlled active tab key
20
20
  - **`defaultActiveKey`** `Key` — Initial active tab key for uncontrolled mode
21
21
  - **`type`** `'default' | 'narrow' | 'file' | 'radio'` (default: `'default'`) — Visual style variant
22
- - **`size`** `'xsmall' | 'small' | 'medium' | 'large'` (default: `'small'`) — Tab size
22
+ - **`size`** `'xsmall' | 'small' | 'medium' | 'large'` (default: `'medium'`) — Tab size
23
23
  - **`placement`** `'top' | 'bottom' | 'left' | 'right'` (default: `'top'`) — Where the tab bar sits relative to its panels. `top` / `bottom` keep the bar horizontal; `left` / `right` switch it to a vertical strip. The selection indicator, scrolling, fades, scroll arrows, and per-type visuals (radius, file-style shadow, dividers) all adapt automatically.
24
24
  - **`prerender`** `boolean` (default: `false`) — If true, all tab panels are rendered but hidden
25
25
  - **`keepMounted`** `boolean` (default: `false`) — If true, visited tab panels stay in DOM
@@ -43,7 +43,33 @@ There are **no baked-in brand hexes**, which is what lets the marks work on any
43
43
 
44
44
  The mark is two different drawings rather than one drawing recoloured — the dark variant is filled differently so it holds its weight against a dark surface. Both are rendered, and the `@dark` state swaps them in CSS.
45
45
 
46
- That means the swap costs no re-render, needs no scheme prop, and is correct during SSR and before hydration. It also means a snapshot of the DOM always contains both paths; assert on `[data-element="LightMark"]` / `[data-element="DarkMark"]` rather than on a single `path`.
46
+ That means the swap costs no re-render, is correct during SSR and before hydration, and needs no prop in the normal case. It also means a snapshot of the DOM always contains both paths; assert on `[data-element="LightMark"]` / `[data-element="DarkMark"]` rather than on a single `path`.
47
+
48
+ ### Pinning a scheme
49
+
50
+ `@dark` is a *state*, and it is resolved against the **document**. Where the background is known but the document scheme does not describe it, pass `scheme` to pin one mark:
51
+
52
+ ```jsx
53
+ {/* A fixed-dark panel inside a light app */}
54
+ <Block fill="#surface-inverse">
55
+ <CubeFullLogo scheme="dark" color="#white" />
56
+ </Block>
57
+
58
+ {/* A themed region — `tokens` overrides token *values*, so it cannot reach a state */}
59
+ <Block tokens={renderColorTokens({ scheme: 'dark' })} fill="#surface">
60
+ <CubeFullLogo scheme="dark" />
61
+ </Block>
62
+ ```
63
+
64
+ Use it only when you know the surface. Omitting it is the right default: a pinned scheme stops following the user's own light/dark preference.
65
+
66
+ ## Properties
67
+
68
+ - **`scheme`** `'light' | 'dark'` — Pin one mark instead of letting the `@dark` state pick. Omit it unless you know the surface; see [Pinning a scheme](#pinning-a-scheme)
69
+ - **`size`** — Maps onto `font-size`. Both axes on `CubeLogo`, height only on `CubeFullLogo`
70
+ - **`color`** — Any color token. Both marks are drawn with `currentColor`, so this is inherited by default
71
+
72
+ Everything else is `Icon`'s: `stroke`, the style props, and `qa`. Supports [Base properties](../../BaseProperties.md).
47
73
 
48
74
  ## Accessibility
49
75
 
@@ -17,7 +17,7 @@ Dialogs are windows containing contextual information, tasks, or workflows that
17
17
  ### Properties
18
18
 
19
19
  - **`children`** — Dialog content (Header, Content, Footer, etc.)
20
- - **`size`** `'small' | 'medium' | 'large' | 'S' | 'M' | 'L'` (default: `S`) — Dialog size
20
+ - **`size`** `'small' | 'medium' | 'large' | 'S' | 'M' | 'L'` (default: `M`) — Dialog size (`S`/`M`/`L` are aliases for `small`/`medium`/`large`)
21
21
  - **`styles`** — Custom styles for the dialog root
22
22
  - **`closeButtonStyles`** — Custom styles for the close button
23
23
  - **`isDismissable`** `boolean` (default: `false`) — Whether the dialog is dismissable (shows close button, allows Escape key)
@@ -18,7 +18,7 @@ A DialogContainer accepts a single Dialog as a child, and manages to show and hi
18
18
 
19
19
  - **`children`** — The Dialog to display, if any
20
20
  - **`type`** `'modal' | 'fullscreen' | 'fullscreenTakeover' | 'panel'` (default: `modal`) — The type of Dialog that should be rendered
21
- - **`isDismissable`** `boolean` (default: `false`) — Whether the Dialog is dismissible
21
+ - **`isDismissable`** `boolean` (default: `true`) — Whether the Dialog is dismissible
22
22
  - **`isKeyboardDismissDisabled`** `boolean` (default: `false`) — Whether pressing the escape key to close the dialog should be disabled
23
23
  - **`isOpen`** `boolean` — Whether the modal is open or not
24
24
  - **`onDismiss`** `function` — Handler called when the x button of a dismissible Dialog is clicked