@cube-dev/ui-kit 0.171.0 → 0.172.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 (597) hide show
  1. package/README.md +1 -1
  2. package/dist/CHANGELOG.md +21 -0
  3. package/dist/README.md +1 -1
  4. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  5. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  6. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  7. package/dist/_internal/hooks/use-event.js +1 -1
  8. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  9. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  10. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  11. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/dist/_internal/hooks/use-warn.js +1 -1
  13. package/dist/components/Block.js +1 -1
  14. package/dist/components/CollectionItem.js +1 -1
  15. package/dist/components/GlobalStyles.js +6 -6
  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.js +2 -2
  20. package/dist/components/Root.js.map +1 -1
  21. package/dist/components/actions/Action/Action.js +1 -1
  22. package/dist/components/actions/Banner/Banner.js +1 -1
  23. package/dist/components/actions/Banner/Banner.js.map +1 -1
  24. package/dist/components/actions/Button/Button.d.ts +1 -0
  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/Menu/styled.js.map +1 -1
  44. package/dist/components/actions/index.js +1 -1
  45. package/dist/components/actions/use-action.js +1 -1
  46. package/dist/components/actions/use-anchored-menu.js +1 -1
  47. package/dist/components/actions/use-context-menu.js +1 -1
  48. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  49. package/dist/components/content/Alert/Alert.js +1 -1
  50. package/dist/components/content/Alert/use-alert.js +1 -1
  51. package/dist/components/content/Avatar/Avatar.js +1 -1
  52. package/dist/components/content/Badge/Badge.js +1 -1
  53. package/dist/components/content/Card/Card.js +1 -1
  54. package/dist/components/content/Content.js +1 -1
  55. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  56. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  57. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  58. package/dist/components/content/Divider.js +1 -1
  59. package/dist/components/content/Footer.js +1 -1
  60. package/dist/components/content/Header.js +1 -1
  61. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  62. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  63. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  64. package/dist/components/content/Item/Item.js +1 -1
  65. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  66. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  67. package/dist/components/content/Layout/GridLayout.js +1 -1
  68. package/dist/components/content/Layout/Layout.js +1 -1
  69. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  70. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  71. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  72. package/dist/components/content/Layout/LayoutContent.js +1 -1
  73. package/dist/components/content/Layout/LayoutContext.js +1 -1
  74. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  75. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  76. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  77. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  78. package/dist/components/content/Layout/LayoutPane.js +1 -1
  79. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  80. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  81. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  82. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  83. package/dist/components/content/Layout/index.js +1 -1
  84. package/dist/components/content/Layout/utils.js +1 -1
  85. package/dist/components/content/Paragraph.js +1 -1
  86. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  87. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  88. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  89. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  90. package/dist/components/content/Result/Result.js +1 -1
  91. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  92. package/dist/components/content/Tag/Tag.js +1 -1
  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/styled.js +1 -1
  99. package/dist/components/content/Tree/tree-index.js +1 -1
  100. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  101. package/dist/components/content/Tree/use-load-data.js +1 -1
  102. package/dist/components/content/highlightText.js +1 -1
  103. package/dist/components/content/use-auto-tooltip.js +1 -1
  104. package/dist/components/data/DataTable/DataTable.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  110. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  111. package/dist/components/data/TableBase/RowCollection.js +1 -1
  112. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  113. package/dist/components/data/TableBase/TableRow.js +1 -1
  114. package/dist/components/data/TableBase/TableView.js +1 -1
  115. package/dist/components/data/TableBase/column-menu.js +1 -1
  116. package/dist/components/data/TableBase/column-tint.js +2 -2
  117. package/dist/components/data/TableBase/column-tint.js.map +1 -1
  118. package/dist/components/data/TableBase/row-menu.js +1 -1
  119. package/dist/components/data/TableBase/styled.d.ts +2 -1
  120. package/dist/components/data/TableBase/styled.js +1 -1
  121. package/dist/components/data/TableBase/table-tree.js +1 -1
  122. package/dist/components/data/TableBase/types.d.ts +3 -3
  123. package/dist/components/data/TableBase/types.js +1 -1
  124. package/dist/components/data/TableBase/types.js.map +1 -1
  125. package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
  126. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  127. package/dist/components/data/TableBase/use-column-order.js +1 -1
  128. package/dist/components/data/TableBase/use-container-width.js +1 -1
  129. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  130. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  131. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  132. package/dist/components/data/TableBase/use-table-search.js +1 -1
  133. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  134. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  135. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  136. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  137. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  138. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  139. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  140. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  141. package/dist/components/fields/Checkbox/context.js +1 -1
  142. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  143. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  144. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  145. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +2 -2
  146. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  147. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  148. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  149. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  150. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  151. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  152. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  153. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  154. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  155. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  156. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  157. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  158. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  159. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  160. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  161. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  162. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  163. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  164. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  165. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  166. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  167. package/dist/components/fields/DatePicker/period.js +1 -1
  168. package/dist/components/fields/DatePicker/props.js +1 -1
  169. package/dist/components/fields/DatePicker/utils.js +1 -1
  170. package/dist/components/fields/FileInput/FileInput.js +1 -1
  171. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  172. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  173. package/dist/components/fields/Input/Input.js +1 -1
  174. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  175. package/dist/components/fields/ListBox/ListBox.js +1 -1
  176. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  177. package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
  178. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  179. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
  180. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  181. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  182. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  183. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  184. package/dist/components/fields/Picker/Picker.js +1 -1
  185. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  186. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  187. package/dist/components/fields/RadioGroup/context.js +1 -1
  188. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  189. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  190. package/dist/components/fields/Select/Select.js +1 -1
  191. package/dist/components/fields/Select/Select.js.map +1 -1
  192. package/dist/components/fields/Slider/Gradation.js +1 -1
  193. package/dist/components/fields/Slider/HueSlider.js +1 -1
  194. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  195. package/dist/components/fields/Slider/Slider.js +1 -1
  196. package/dist/components/fields/Slider/SliderBase.js +1 -1
  197. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  198. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  199. package/dist/components/fields/Slider/elements.js +1 -1
  200. package/dist/components/fields/Slider/index.js +1 -1
  201. package/dist/components/fields/Switch/Switch.js +1 -1
  202. package/dist/components/fields/TextArea/TextArea.js +1 -1
  203. package/dist/components/fields/TextInput/TextInput.js +1 -1
  204. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  205. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  206. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  207. package/dist/components/fields/color/ColorPanel.js +1 -1
  208. package/dist/components/fields/color/channels.js +1 -1
  209. package/dist/components/fields/color/color.js +2 -2
  210. package/dist/components/fields/color/color.js.map +1 -1
  211. package/dist/components/fields/color/context.js +1 -1
  212. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  213. package/dist/components/form/Form/Field.js +1 -1
  214. package/dist/components/form/Form/Form.js +1 -1
  215. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  216. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  217. package/dist/components/form/Form/SubmitError.js +1 -1
  218. package/dist/components/form/Form/index.js +1 -1
  219. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  220. package/dist/components/form/Form/use-field/use-field.js +1 -1
  221. package/dist/components/form/Form/use-form.js +1 -1
  222. package/dist/components/form/Form/validation.js +1 -1
  223. package/dist/components/form/Label.js +1 -1
  224. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  225. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  226. package/dist/components/form/validation/use-validation-props.js +1 -1
  227. package/dist/components/form/wrapper.js +1 -1
  228. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  229. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  230. package/dist/components/layout/Board/Board.js +1 -1
  231. package/dist/components/layout/Board/Board.js.map +1 -1
  232. package/dist/components/layout/Board/BoardProvider.js +1 -1
  233. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  234. package/dist/components/layout/Board/Widget.js +1 -1
  235. package/dist/components/layout/Board/WidgetHost.js +1 -1
  236. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  237. package/dist/components/layout/Board/board-context.js +1 -1
  238. package/dist/components/layout/Board/board-store.js +1 -1
  239. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  240. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  241. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  242. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  243. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  244. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  245. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  246. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  247. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  248. package/dist/components/layout/Board/index.js +1 -1
  249. package/dist/components/layout/Board/responsive-utils.js +1 -1
  250. package/dist/components/layout/Board/use-board-layout.js +1 -1
  251. package/dist/components/layout/Board/use-board-registry.js +1 -1
  252. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  253. package/dist/components/layout/Board/use-board-selection.js +1 -1
  254. package/dist/components/layout/Flex.js +1 -1
  255. package/dist/components/layout/Flow.js +1 -1
  256. package/dist/components/layout/Grid.js +1 -1
  257. package/dist/components/layout/Panel.js +1 -1
  258. package/dist/components/layout/Prefix.js +1 -1
  259. package/dist/components/layout/ResizablePanel.js +1 -1
  260. package/dist/components/layout/Space.js +1 -1
  261. package/dist/components/layout/Suffix.js +1 -1
  262. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  263. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  264. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  265. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  266. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  267. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  268. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  269. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  270. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  271. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  272. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  273. package/dist/components/navigation/Tabs/styled.js +1 -1
  274. package/dist/components/navigation/Tabs/types.js +1 -1
  275. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  276. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  277. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  278. package/dist/components/other/Calendar/Calendar.js +1 -1
  279. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  280. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  281. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  282. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  283. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  284. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  285. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  286. package/dist/components/other/Calendar/styled.js +1 -1
  287. package/dist/components/other/CubeLogo/CubeLogo.d.ts +2 -2
  288. package/dist/components/other/CubeLogo/CubeLogo.js +12 -12
  289. package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
  290. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  291. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  292. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  293. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  294. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  295. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  296. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  297. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  298. package/dist/components/overlays/Dialog/context.js +1 -1
  299. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  300. package/dist/components/overlays/Modal/Modal.d.ts +2 -1
  301. package/dist/components/overlays/Modal/Modal.js +1 -1
  302. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  303. package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
  304. package/dist/components/overlays/Modal/Overlay.js +1 -1
  305. package/dist/components/overlays/Modal/Popover.js +1 -1
  306. package/dist/components/overlays/Modal/Tray.js +1 -1
  307. package/dist/components/overlays/Modal/Underlay.js +1 -1
  308. package/dist/components/overlays/Modal/types.d.ts +1 -0
  309. package/dist/components/overlays/Notifications/Notification.js +1 -1
  310. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  311. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  312. package/dist/components/overlays/Notifications/NotificationContext.d.ts +2 -0
  313. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  314. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  315. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  316. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  317. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  318. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  319. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  320. package/dist/components/overlays/Notifications/index.js +1 -1
  321. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  322. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  323. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  324. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  325. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  326. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  327. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  328. package/dist/components/overlays/Toast/index.js +1 -1
  329. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  330. package/dist/components/overlays/Toast/useToast.js +1 -1
  331. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  332. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  333. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  334. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  335. package/dist/components/overlays/Tooltip/context.js +1 -1
  336. package/dist/components/portal/Portal.js +1 -1
  337. package/dist/components/portal/PortalProvider.d.ts +2 -0
  338. package/dist/components/portal/PortalProvider.js +1 -1
  339. package/dist/components/portal/index.d.ts +1 -0
  340. package/dist/components/portal/usePortal.js +1 -1
  341. package/dist/components/shared/DraggableCollection.js +1 -1
  342. package/dist/components/shared/InvalidIcon.js +1 -1
  343. package/dist/components/shared/ValidIcon.js +1 -1
  344. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  345. package/dist/components/status/Spin/Cube.js +1 -1
  346. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  347. package/dist/components/status/Spin/Spin.js +1 -1
  348. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  349. package/dist/data/item-themes.js +1 -1
  350. package/dist/data/item-themes.js.map +1 -1
  351. package/dist/data/themes.js +1 -1
  352. package/dist/data/themes.js.map +1 -1
  353. package/dist/eslint-plugin/defaults.generated.js +1 -1
  354. package/dist/eslint-plugin/index.js +1 -1
  355. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  356. package/dist/i18n/I18nProvider.js +1 -1
  357. package/dist/i18n/createFormatter.js +1 -1
  358. package/dist/i18n/index.js +1 -1
  359. package/dist/i18n/instance.js +1 -1
  360. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  361. package/dist/i18n/locales/en-US/uikit.js +1 -1
  362. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  363. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  364. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  365. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  366. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  367. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  368. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  369. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  370. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  371. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  372. package/dist/i18n/locales.js +1 -1
  373. package/dist/i18n/useFormatter.js +1 -1
  374. package/dist/i18n/useI18n.js +1 -1
  375. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  376. package/dist/icons/AdjustmentsIcon.js +1 -1
  377. package/dist/icons/AiIcon.js +1 -1
  378. package/dist/icons/AreaChartIcon.js +1 -1
  379. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  380. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  381. package/dist/icons/BackwardIcon.js +1 -1
  382. package/dist/icons/BarChartIcon.js +1 -1
  383. package/dist/icons/BellFilledIcon.js +1 -1
  384. package/dist/icons/BellIcon.js +1 -1
  385. package/dist/icons/BooleanIcon.js +1 -1
  386. package/dist/icons/CalendarEditIcon.js +1 -1
  387. package/dist/icons/CalendarIcon.js +1 -1
  388. package/dist/icons/CaretDownIcon.js +1 -1
  389. package/dist/icons/CaretUpIcon.js +1 -1
  390. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  391. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  392. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  393. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  394. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  395. package/dist/icons/ChartBarLineIcon.js +1 -1
  396. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  397. package/dist/icons/ChartBarStackedIcon.js +1 -1
  398. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  399. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  400. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  401. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  402. package/dist/icons/ChartBubbleIcon.js +1 -1
  403. package/dist/icons/ChartDonut2Icon.js +1 -1
  404. package/dist/icons/ChartFunnelIcon.js +1 -1
  405. package/dist/icons/ChartHeatmapIcon.js +1 -1
  406. package/dist/icons/ChartKPIIcon.js +1 -1
  407. package/dist/icons/ChartPie2Icon.js +1 -1
  408. package/dist/icons/ChartScatterIcon.js +1 -1
  409. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  410. package/dist/icons/CheckCircleIcon.js +1 -1
  411. package/dist/icons/CheckIcon.js +1 -1
  412. package/dist/icons/CircleFilledIcon.js +1 -1
  413. package/dist/icons/ClearIcon.js +1 -1
  414. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  415. package/dist/icons/CloseCircleIcon.js +1 -1
  416. package/dist/icons/CloseIcon.js +1 -1
  417. package/dist/icons/CodeIcon.js +1 -1
  418. package/dist/icons/ColumnTotalIcon.js +1 -1
  419. package/dist/icons/CopyIcon.js +1 -1
  420. package/dist/icons/CountIcon.js +1 -1
  421. package/dist/icons/CubeIcon.js +1 -1
  422. package/dist/icons/CubePauseIcon.js +1 -1
  423. package/dist/icons/CubePlayIcon.js +1 -1
  424. package/dist/icons/CurrencyDollarIcon.js +1 -1
  425. package/dist/icons/DangerIcon.js +1 -1
  426. package/dist/icons/DashboardIcon.js +1 -1
  427. package/dist/icons/DatabaseIcon.js +1 -1
  428. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  429. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  430. package/dist/icons/DirectionIcon.js +1 -1
  431. package/dist/icons/DonutIcon.js +1 -1
  432. package/dist/icons/DownIcon.js +1 -1
  433. package/dist/icons/EditIcon.js +1 -1
  434. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  435. package/dist/icons/ExclamationCircleIcon.js +1 -1
  436. package/dist/icons/ExclamationIcon.js +1 -1
  437. package/dist/icons/EyeIcon.js +1 -1
  438. package/dist/icons/EyeInvisibleIcon.js +1 -1
  439. package/dist/icons/FilterIcon.js +1 -1
  440. package/dist/icons/FolderFilledIcon.js +1 -1
  441. package/dist/icons/FolderIcon.js +1 -1
  442. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  443. package/dist/icons/FolderOpenIcon.js +1 -1
  444. package/dist/icons/ForwardIcon.js +1 -1
  445. package/dist/icons/GripVerticalIcon.js +1 -1
  446. package/dist/icons/HierarchyIcon.js +1 -1
  447. package/dist/icons/HierarchyOpenIcon.js +1 -1
  448. package/dist/icons/Icon.js +1 -1
  449. package/dist/icons/InfoCircleIcon.js +1 -1
  450. package/dist/icons/InfoIcon.js +1 -1
  451. package/dist/icons/KeyIcon.js +1 -1
  452. package/dist/icons/LeftIcon.js +1 -1
  453. package/dist/icons/LineChartIcon.js +1 -1
  454. package/dist/icons/LoadingIcon.js +1 -1
  455. package/dist/icons/LockFilledIcon.js +1 -1
  456. package/dist/icons/LockIcon.js +1 -1
  457. package/dist/icons/MoreIcon.js +1 -1
  458. package/dist/icons/NotAllowedIcon.js +1 -1
  459. package/dist/icons/Number123Icon.js +1 -1
  460. package/dist/icons/NumberIcon.js +1 -1
  461. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  462. package/dist/icons/PauseCircleIcon.js +1 -1
  463. package/dist/icons/PauseIcon.js +1 -1
  464. package/dist/icons/PercentageIcon.js +1 -1
  465. package/dist/icons/PieChartIcon.js +1 -1
  466. package/dist/icons/PipetteIcon.js +1 -1
  467. package/dist/icons/PlayCircleIcon.js +1 -1
  468. package/dist/icons/PlayIcon.js +1 -1
  469. package/dist/icons/PlusIcon.js +1 -1
  470. package/dist/icons/ProgressBarIcon.js +1 -1
  471. package/dist/icons/ReloadIcon.js +1 -1
  472. package/dist/icons/ReportIcon.js +1 -1
  473. package/dist/icons/ReturnIcon.js +1 -1
  474. package/dist/icons/RightIcon.js +1 -1
  475. package/dist/icons/RowTotalsIcon.js +1 -1
  476. package/dist/icons/SchemeIcon.js +1 -1
  477. package/dist/icons/SearchIcon.js +1 -1
  478. package/dist/icons/SemanticQueryIcon.js +1 -1
  479. package/dist/icons/SettingsIcon.js +1 -1
  480. package/dist/icons/ShieldFilledIcon.js +1 -1
  481. package/dist/icons/ShieldIcon.js +1 -1
  482. package/dist/icons/SlashIcon.js +1 -1
  483. package/dist/icons/SparklesIcon.js +1 -1
  484. package/dist/icons/SqlIcon.js +1 -1
  485. package/dist/icons/StatsIcon.js +1 -1
  486. package/dist/icons/StopIcon.js +1 -1
  487. package/dist/icons/StringIcon.js +1 -1
  488. package/dist/icons/SubtotalsIcon.js +1 -1
  489. package/dist/icons/SwitchIcon.js +1 -1
  490. package/dist/icons/TableIcon.js +1 -1
  491. package/dist/icons/ThumbsDownIcon.js +1 -1
  492. package/dist/icons/ThumbsUpIcon.js +1 -1
  493. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  494. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  495. package/dist/icons/ThunderboltIcon.js +1 -1
  496. package/dist/icons/TimeIcon.js +1 -1
  497. package/dist/icons/TrashIcon.js +1 -1
  498. package/dist/icons/UnlockIcon.js +1 -1
  499. package/dist/icons/UpIcon.js +1 -1
  500. package/dist/icons/UserGroupIcon.js +1 -1
  501. package/dist/icons/UserIcon.js +1 -1
  502. package/dist/icons/UserLockIcon.js +1 -1
  503. package/dist/icons/ViewIcon.js +1 -1
  504. package/dist/icons/WarningFilledIcon.js +1 -1
  505. package/dist/icons/WarningIcon.js +1 -1
  506. package/dist/icons/wrap-icon.js +1 -1
  507. package/dist/index.d.ts +2 -2
  508. package/dist/index.js +3 -3
  509. package/dist/probe/canonicalize.js +1 -1
  510. package/dist/probe/css.js +1 -1
  511. package/dist/probe/index.js +1 -1
  512. package/dist/provider.js +1 -1
  513. package/dist/providers/TrackingProvider.js +1 -1
  514. package/dist/providers/navigationAdapter.default.js +1 -1
  515. package/dist/tokens/all-tokens.js +1 -1
  516. package/dist/tokens/base.js +1 -1
  517. package/dist/tokens/color-seed.js +1 -1
  518. package/dist/tokens/color-theme.d.ts +2 -2
  519. package/dist/tokens/color-theme.js +2 -2
  520. package/dist/tokens/color-theme.js.map +1 -1
  521. package/dist/tokens/colors.d.ts +3 -3
  522. package/dist/tokens/colors.js +4 -4
  523. package/dist/tokens/colors.js.map +1 -1
  524. package/dist/tokens/layout.js +1 -1
  525. package/dist/tokens/lazy-styles.js +1 -1
  526. package/dist/tokens/palette-config.d.ts +1 -1
  527. package/dist/tokens/palette-config.js +1 -1
  528. package/dist/tokens/palette-config.js.map +1 -1
  529. package/dist/tokens/palette.d.ts +5 -5
  530. package/dist/tokens/palette.js +11 -11
  531. package/dist/tokens/palette.js.map +1 -1
  532. package/dist/tokens/resolve.d.ts +2 -2
  533. package/dist/tokens/resolve.js +9 -9
  534. package/dist/tokens/resolve.js.map +1 -1
  535. package/dist/tokens/shadows.d.ts +1 -1
  536. package/dist/tokens/shadows.js +2 -2
  537. package/dist/tokens/shadows.js.map +1 -1
  538. package/dist/tokens/sizes.js +1 -1
  539. package/dist/tokens/spacing.js +1 -1
  540. package/dist/tokens/typography.js +1 -1
  541. package/dist/utils/ResizeSensor.js +1 -1
  542. package/dist/utils/index.d.ts +1 -1
  543. package/dist/utils/is-dev-env.js +1 -1
  544. package/dist/utils/modules.js +1 -1
  545. package/dist/utils/promise.js +1 -1
  546. package/dist/utils/raf.js +1 -1
  547. package/dist/utils/random.js +1 -1
  548. package/dist/utils/range.js +1 -1
  549. package/dist/utils/react/RenderCache.js +1 -1
  550. package/dist/utils/react/Slots.js +1 -1
  551. package/dist/utils/react/chain.js +1 -1
  552. package/dist/utils/react/disabledProps.js +1 -1
  553. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  554. package/dist/utils/react/index.d.ts +1 -1
  555. package/dist/utils/react/index.js +2 -2
  556. package/dist/utils/react/interactions.js +1 -1
  557. package/dist/utils/react/isTextOnly.js +1 -1
  558. package/dist/utils/react/mapProps.js +1 -1
  559. package/dist/utils/react/mergeProps.js +1 -1
  560. package/dist/utils/react/nullableValue.js +1 -1
  561. package/dist/utils/react/resolveIcon.js +1 -1
  562. package/dist/utils/react/sharedStore.js +1 -1
  563. package/dist/utils/react/useBufferedValue.js +1 -1
  564. package/dist/utils/react/useCombinedRefs.js +1 -1
  565. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  566. package/dist/utils/react/useEventBus.js +1 -1
  567. package/dist/utils/react/useId.js +1 -1
  568. package/dist/utils/react/useIsDarwin.js +1 -1
  569. package/dist/utils/react/useKeySymbols.js +1 -1
  570. package/dist/utils/react/useLayoutEffect.js +1 -1
  571. package/dist/utils/react/useLocalStorage.js +1 -1
  572. package/dist/utils/react/useMergeStyles.js +1 -1
  573. package/dist/utils/react/usePopoverSync.js +1 -1
  574. package/dist/utils/react/useQaProps.js +1 -1
  575. package/dist/utils/react/{useSchema.d.ts → useScheme.d.ts} +16 -16
  576. package/dist/utils/react/{useSchema.js → useScheme.js} +30 -30
  577. package/dist/utils/react/{useSchema.js.map → useScheme.js.map} +1 -1
  578. package/dist/utils/react/useViewportSize.js +1 -1
  579. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  580. package/dist/utils/selection.js +1 -1
  581. package/dist/utils/styles.js +1 -1
  582. package/dist/utils/tree.js +1 -1
  583. package/dist/utils/warnings.js +1 -1
  584. package/dist/version.js +2 -2
  585. package/docs/Colors.md +2 -2
  586. package/docs/Introduction.md +1 -1
  587. package/docs/Theming.md +19 -19
  588. package/docs/Usage.md +19 -19
  589. package/docs/components/content/ItemCard.md +1 -1
  590. package/docs/components/content/PrismCode.md +2 -2
  591. package/docs/components/data/DataTable.md +1 -1
  592. package/docs/components/fields/Picker.md +1 -1
  593. package/docs/components/organisms/StatsCard.md +1 -1
  594. package/docs/components/other/CubeLogo.md +9 -9
  595. package/docs/components/overlays/Tooltip.md +3 -3
  596. package/docs/components/overlays/TooltipProvider.md +1 -1
  597. package/package.json +1 -1
@@ -1,9 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
2
2
  import { useSyncExternalStore } from "react";
3
3
 
4
- //#region src/utils/react/useSchema.ts
4
+ //#region src/utils/react/useScheme.ts
5
5
  /**
6
- * The ambient viewing conditions — the color schema and the contrast tier the
6
+ * The ambient viewing conditions — the color scheme and the contrast tier the
7
7
  * document is showing right now.
8
8
  *
9
9
  * This module is the single owner of the definition: it builds the `@dark` /
@@ -13,7 +13,7 @@ import { useSyncExternalStore } from "react";
13
13
  *
14
14
  * **For styling, do not use this.** `{ '': light, '@dark': dark, '@hc': hc }` is
15
15
  * the answer, and branching styles in JS gives up the conditionality that lets a
16
- * schema flip repaint without a re-render. Two cases the state map cannot serve:
16
+ * scheme flip repaint without a re-render. Two cases the state map cannot serve:
17
17
  *
18
18
  * 1. **Surfaces the stylesheet does not reach** — a Vega spec, a CodeMirror or
19
19
  * Monaco theme, a third-party iframe. They take values, not CSS, so `@dark`
@@ -31,12 +31,12 @@ import { useSyncExternalStore } from "react";
31
31
  */
32
32
  /**
33
33
  * The `data-*` attribute names the opt-in uses, and the media queries it falls
34
- * back to. `@root(schema=dark)` compiles to `:root[data-schema="dark"]`, hence
34
+ * back to. `@root(scheme=dark)` compiles to `:root[data-scheme="dark"]`, hence
35
35
  * the `data-` prefix on the DOM side and the bare key on the tasty side.
36
36
  */
37
- const SCHEMA_KEY = "schema";
37
+ const SCHEME_KEY = "scheme";
38
38
  const CONTRAST_KEY = "contrast";
39
- const SCHEMA_ATTR = `data-${SCHEMA_KEY}`;
39
+ const SCHEME_ATTR = `data-${SCHEME_KEY}`;
40
40
  const CONTRAST_ATTR = `data-${CONTRAST_KEY}`;
41
41
  const DARK_QUERY = "(prefers-color-scheme: dark)";
42
42
  const HIGH_CONTRAST_QUERY = "(prefers-contrast: more)";
@@ -45,13 +45,13 @@ const HIGH_CONTRAST_QUERY = "(prefers-contrast: more)";
45
45
  * `<Root>` via `setGlobalPredefinedStates()`.
46
46
  *
47
47
  * The attribute opt-in wins over the system preference, and the fallback is
48
- * gated on the attribute being *absent* (`!@root(schema)`) rather than on it
49
- * being some other value — so `<html data-schema="light">` stays light inside a
50
- * dark OS, which is the whole point of an opt-in. {@link resolveSchema} and
48
+ * gated on the attribute being *absent* (`!@root(scheme)`) rather than on it
49
+ * being some other value — so `<html data-scheme="light">` stays light inside a
50
+ * dark OS, which is the whole point of an opt-in. {@link resolveScheme} and
51
51
  * {@link resolveHighContrast} read the same way.
52
52
  */
53
53
  const AMBIENT_PREDEFINED_STATES = {
54
- "@dark": `@root(${SCHEMA_KEY}=dark) | (!@root(${SCHEMA_KEY}) & @media${DARK_QUERY})`,
54
+ "@dark": `@root(${SCHEME_KEY}=dark) | (!@root(${SCHEME_KEY}) & @media${DARK_QUERY})`,
55
55
  "@hc": `@root(${CONTRAST_KEY}=high) | (!@root(${CONTRAST_KEY}) & @media${HIGH_CONTRAST_QUERY})`
56
56
  };
57
57
  /**
@@ -66,14 +66,14 @@ function rootAttribute(name) {
66
66
  return typeof document === "undefined" ? null : document.documentElement.getAttribute(name);
67
67
  }
68
68
  /**
69
- * The document's current color schema, read once — the JS answer to `@dark`.
69
+ * The document's current color scheme, read once — the JS answer to `@dark`.
70
70
  *
71
71
  * Outside React (a chart spec built in a module, an editor theme registered at
72
- * import time). In React use {@link useSchema}, which also re-renders on change.
72
+ * import time). In React use {@link useScheme}, which also re-renders on change.
73
73
  * Returns `'light'` with no DOM.
74
74
  */
75
- function resolveSchema() {
76
- const attribute = rootAttribute(SCHEMA_ATTR);
75
+ function resolveScheme() {
76
+ const attribute = rootAttribute(SCHEME_ATTR);
77
77
  if (attribute !== null) return attribute === "dark" ? "dark" : "light";
78
78
  return mediaMatches(DARK_QUERY) ? "dark" : "light";
79
79
  }
@@ -116,22 +116,22 @@ function startWatching() {
116
116
  const observer = new MutationObserver(notify);
117
117
  observer.observe(document.documentElement, {
118
118
  attributes: true,
119
- attributeFilter: [SCHEMA_ATTR, CONTRAST_ATTR]
119
+ attributeFilter: [SCHEME_ATTR, CONTRAST_ATTR]
120
120
  });
121
121
  teardowns.push(() => observer.disconnect());
122
122
  }
123
123
  return () => teardowns.forEach((teardown) => teardown());
124
124
  }
125
125
  /**
126
- * Subscribe to ambient condition changes — either the schema or the contrast
126
+ * Subscribe to ambient condition changes — either the scheme or the contrast
127
127
  * tier. Returns an unsubscribe function.
128
128
  *
129
- * The listener takes no argument: re-read with {@link resolveSchema} /
129
+ * The listener takes no argument: re-read with {@link resolveScheme} /
130
130
  * {@link resolveHighContrast}, which is what the hooks below do. For non-React
131
131
  * consumers that own a surface the stylesheet cannot reach — re-theming a Monaco
132
132
  * instance, re-rendering a chart.
133
133
  */
134
- function subscribeSchema(listener) {
134
+ function subscribeScheme(listener) {
135
135
  listeners.add(listener);
136
136
  if (!stopWatching) stopWatching = startWatching();
137
137
  return () => {
@@ -144,26 +144,26 @@ function subscribeSchema(listener) {
144
144
  }
145
145
  /**
146
146
  * Snapshots are primitives, so React bails out on an unchanged value and no
147
- * memoization is needed — a contrast change re-runs a `useSchema()` reader's
147
+ * memoization is needed — a contrast change re-runs a `useScheme()` reader's
148
148
  * `getSnapshot` and stops there.
149
149
  */
150
- const getServerSchema = () => "light";
150
+ const getServerScheme = () => "light";
151
151
  const getServerHighContrast = () => false;
152
152
  /**
153
- * The document's color schema, kept live — `'light'` or `'dark'`.
153
+ * The document's color scheme, kept live — `'light'` or `'dark'`.
154
154
  *
155
155
  * ```tsx
156
- * const schema = useSchema();
156
+ * const scheme = useScheme();
157
157
  *
158
- * <VegaChart spec={useMemo(() => buildSpec(schema), [schema])} />;
158
+ * <VegaChart spec={useMemo(() => buildSpec(scheme), [scheme])} />;
159
159
  * ```
160
160
  *
161
- * Follows both the `<html data-schema>` opt-in and `prefers-color-scheme`,
161
+ * Follows both the `<html data-scheme>` opt-in and `prefers-color-scheme`,
162
162
  * exactly as the `@dark` state does. Under SSR it renders `'light'` and
163
163
  * re-renders with the real value after hydration.
164
164
  */
165
- function useSchema() {
166
- return useSyncExternalStore(subscribeSchema, resolveSchema, getServerSchema);
165
+ function useScheme() {
166
+ return useSyncExternalStore(subscribeScheme, resolveScheme, getServerScheme);
167
167
  }
168
168
  /**
169
169
  * Whether the document is showing the high-contrast tier, kept live — the hook
@@ -174,9 +174,9 @@ function useSchema() {
174
174
  * hydration.
175
175
  */
176
176
  function useHighContrast() {
177
- return useSyncExternalStore(subscribeSchema, resolveHighContrast, getServerHighContrast);
177
+ return useSyncExternalStore(subscribeScheme, resolveHighContrast, getServerHighContrast);
178
178
  }
179
179
 
180
180
  //#endregion
181
- export { AMBIENT_PREDEFINED_STATES, resolveHighContrast, resolveSchema, subscribeSchema, useHighContrast, useSchema };
182
- //# sourceMappingURL=useSchema.js.map
181
+ export { AMBIENT_PREDEFINED_STATES, resolveHighContrast, resolveScheme, subscribeScheme, useHighContrast, useScheme };
182
+ //# sourceMappingURL=useScheme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"useSchema.js","names":[],"sources":["../../../src/utils/react/useSchema.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\n/**\n * The ambient viewing conditions — the color schema and the contrast tier the\n * document is showing right now.\n *\n * This module is the single owner of the definition: it builds the `@dark` /\n * `@hc` predefined states that `src/components/Root.tsx` registers with tasty,\n * *and* it answers the same question in JS. One definition, two readers, so the\n * CSS and the JS answers cannot drift apart.\n *\n * **For styling, do not use this.** `{ '': light, '@dark': dark, '@hc': hc }` is\n * the answer, and branching styles in JS gives up the conditionality that lets a\n * schema flip repaint without a re-render. Two cases the state map cannot serve:\n *\n * 1. **Surfaces the stylesheet does not reach** — a Vega spec, a CodeMirror or\n * Monaco theme, a third-party iframe. They take values, not CSS, so `@dark`\n * never applies and the branch has to happen in JS.\n * 2. **Control state that is not styling** — seeding or labelling a control from\n * the ambient condition, e.g. a Light/Dark or Normal/High-contrast preview\n * selector that starts on whatever the page is already showing.\n *\n * Root-level only, and deliberately not a generic state reader: tasty's state\n * vocabulary mixes element-local states (`hovered`, `pressed`, `disabled`) with\n * ambient ones (`@media(…)`, `@root(…)`), and only the ambient half is\n * answerable without an element. Evaluating the state language in JS would mean\n * a second implementation of the state algebra to keep in agreement with the CSS\n * one, for a question almost every caller asks about the root anyway.\n */\n\n// ============================================================================\n// The definition\n// ============================================================================\n\n/**\n * The `data-*` attribute names the opt-in uses, and the media queries it falls\n * back to. `@root(schema=dark)` compiles to `:root[data-schema=\"dark\"]`, hence\n * the `data-` prefix on the DOM side and the bare key on the tasty side.\n */\nconst SCHEMA_KEY = 'schema';\nconst CONTRAST_KEY = 'contrast';\nconst SCHEMA_ATTR = `data-${SCHEMA_KEY}`;\nconst CONTRAST_ATTR = `data-${CONTRAST_KEY}`;\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\nconst HIGH_CONTRAST_QUERY = '(prefers-contrast: more)';\n\n/**\n * The `@dark` / `@hc` state aliases, in tasty's DSL — registered globally by\n * `<Root>` via `setGlobalPredefinedStates()`.\n *\n * The attribute opt-in wins over the system preference, and the fallback is\n * gated on the attribute being *absent* (`!@root(schema)`) rather than on it\n * being some other value — so `<html data-schema=\"light\">` stays light inside a\n * dark OS, which is the whole point of an opt-in. {@link resolveSchema} and\n * {@link resolveHighContrast} read the same way.\n */\nexport const AMBIENT_PREDEFINED_STATES = {\n '@dark': `@root(${SCHEMA_KEY}=dark) | (!@root(${SCHEMA_KEY}) & @media${DARK_QUERY})`,\n '@hc': `@root(${CONTRAST_KEY}=high) | (!@root(${CONTRAST_KEY}) & @media${HIGH_CONTRAST_QUERY})`,\n} as const;\n\n/** The color schema the document resolves to — the two arms of the `@dark` state. */\nexport type ColorSchema = 'light' | 'dark';\n\n// ============================================================================\n// Reading\n// ============================================================================\n\n/**\n * `matchMedia` is called per read rather than cached, so a test that stubs it\n * takes effect immediately. Missing (older jsdom, non-DOM runtimes) reads as\n * \"no preference\", which lands on the light / normal-contrast defaults.\n */\nfunction mediaMatches(query: string): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function'\n ? window.matchMedia(query).matches\n : false;\n}\n\nfunction rootAttribute(name: string): string | null {\n return typeof document === 'undefined'\n ? null\n : document.documentElement.getAttribute(name);\n}\n\n/**\n * The document's current color schema, read once — the JS answer to `@dark`.\n *\n * Outside React (a chart spec built in a module, an editor theme registered at\n * import time). In React use {@link useSchema}, which also re-renders on change.\n * Returns `'light'` with no DOM.\n */\nexport function resolveSchema(): ColorSchema {\n const attribute = rootAttribute(SCHEMA_ATTR);\n\n if (attribute !== null) {\n return attribute === 'dark' ? 'dark' : 'light';\n }\n\n return mediaMatches(DARK_QUERY) ? 'dark' : 'light';\n}\n\n/**\n * Whether the document is showing the high-contrast tier, read once — the JS\n * answer to `@hc`.\n *\n * Note this is an *ambient* condition, not the theme's `contrastLevel`: the\n * level is a `PaletteConfig` seed the app supplies (read it with\n * `getPaletteConfig()`), while this is the tier the viewer asked for.\n * Returns `false` with no DOM.\n */\nexport function resolveHighContrast(): boolean {\n const attribute = rootAttribute(CONTRAST_ATTR);\n\n if (attribute !== null) {\n return attribute === 'high';\n }\n\n return mediaMatches(HIGH_CONTRAST_QUERY);\n}\n\n// ============================================================================\n// Watching\n// ============================================================================\n\nconst listeners = new Set<() => void>();\n\nlet stopWatching: (() => void) | null = null;\n\nfunction notify() {\n listeners.forEach((listener) => listener());\n}\n\n/**\n * Both inputs have to be watched, because either can decide the answer: the\n * attribute when the opt-in is set, the media query otherwise — an attribute flip\n * is invisible to `matchMedia` and a system flip is invisible to a\n * `MutationObserver`. One observer and one pair of query listeners are shared by\n * every subscriber, and torn down when the last one leaves.\n */\nfunction startWatching(): () => void {\n if (typeof document === 'undefined') {\n return () => {};\n }\n\n const teardowns: (() => void)[] = [];\n\n // Guarded rather than assumed: jsdom ships neither `matchMedia` nor a\n // `MediaQueryList` in every version, and a consumer's unit tests are exactly\n // where a hook like this gets mounted. Losing one source of change is a stale\n // value; throwing is a broken render.\n if (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function'\n ) {\n for (const query of [DARK_QUERY, HIGH_CONTRAST_QUERY]) {\n const list = window.matchMedia(query);\n\n if (typeof list?.addEventListener !== 'function') continue;\n\n list.addEventListener('change', notify);\n teardowns.push(() => list.removeEventListener('change', notify));\n }\n }\n\n if (typeof MutationObserver === 'function' && document.documentElement) {\n const observer = new MutationObserver(notify);\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [SCHEMA_ATTR, CONTRAST_ATTR],\n });\n\n teardowns.push(() => observer.disconnect());\n }\n\n return () => teardowns.forEach((teardown) => teardown());\n}\n\n/**\n * Subscribe to ambient condition changes — either the schema or the contrast\n * tier. Returns an unsubscribe function.\n *\n * The listener takes no argument: re-read with {@link resolveSchema} /\n * {@link resolveHighContrast}, which is what the hooks below do. For non-React\n * consumers that own a surface the stylesheet cannot reach — re-theming a Monaco\n * instance, re-rendering a chart.\n */\nexport function subscribeSchema(listener: () => void): () => void {\n listeners.add(listener);\n\n if (!stopWatching) {\n stopWatching = startWatching();\n }\n\n return () => {\n listeners.delete(listener);\n\n if (!listeners.size && stopWatching) {\n stopWatching();\n stopWatching = null;\n }\n };\n}\n\n// ============================================================================\n// React bindings\n// ============================================================================\n\n/**\n * Snapshots are primitives, so React bails out on an unchanged value and no\n * memoization is needed — a contrast change re-runs a `useSchema()` reader's\n * `getSnapshot` and stops there.\n */\nconst getServerSchema = (): ColorSchema => 'light';\nconst getServerHighContrast = () => false;\n\n/**\n * The document's color schema, kept live — `'light'` or `'dark'`.\n *\n * ```tsx\n * const schema = useSchema();\n *\n * <VegaChart spec={useMemo(() => buildSpec(schema), [schema])} />;\n * ```\n *\n * Follows both the `<html data-schema>` opt-in and `prefers-color-scheme`,\n * exactly as the `@dark` state does. Under SSR it renders `'light'` and\n * re-renders with the real value after hydration.\n */\nexport function useSchema(): ColorSchema {\n return useSyncExternalStore(subscribeSchema, resolveSchema, getServerSchema);\n}\n\n/**\n * Whether the document is showing the high-contrast tier, kept live — the hook\n * form of {@link resolveHighContrast}, following `<html data-contrast>` and\n * `prefers-contrast` exactly as the `@hc` state does.\n *\n * Under SSR it renders `false` and re-renders with the real value after\n * hydration.\n */\nexport function useHighContrast(): boolean {\n return useSyncExternalStore(\n subscribeSchema,\n resolveHighContrast,\n getServerHighContrast,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,cAAc,QAAQ;AAC5B,MAAM,gBAAgB,QAAQ;AAC9B,MAAM,aAAa;AACnB,MAAM,sBAAsB;;;;;;;;;;;AAY5B,MAAa,4BAA4B;CACvC,SAAS,SAAS,WAAW,mBAAmB,WAAW,YAAY,WAAW;CAClF,OAAO,SAAS,aAAa,mBAAmB,aAAa,YAAY,oBAAoB;CAC9F;;;;;;AAcD,SAAS,aAAa,OAAwB;AAC5C,QAAO,OAAO,WAAW,eACvB,OAAO,OAAO,eAAe,aAC3B,OAAO,WAAW,MAAM,CAAC,UACzB;;AAGN,SAAS,cAAc,MAA6B;AAClD,QAAO,OAAO,aAAa,cACvB,OACA,SAAS,gBAAgB,aAAa,KAAK;;;;;;;;;AAUjD,SAAgB,gBAA6B;CAC3C,MAAM,YAAY,cAAc,YAAY;AAE5C,KAAI,cAAc,KAChB,QAAO,cAAc,SAAS,SAAS;AAGzC,QAAO,aAAa,WAAW,GAAG,SAAS;;;;;;;;;;;AAY7C,SAAgB,sBAA+B;CAC7C,MAAM,YAAY,cAAc,cAAc;AAE9C,KAAI,cAAc,KAChB,QAAO,cAAc;AAGvB,QAAO,aAAa,oBAAoB;;AAO1C,MAAM,4BAAY,IAAI,KAAiB;AAEvC,IAAI,eAAoC;AAExC,SAAS,SAAS;AAChB,WAAU,SAAS,aAAa,UAAU,CAAC;;;;;;;;;AAU7C,SAAS,gBAA4B;AACnC,KAAI,OAAO,aAAa,YACtB,cAAa;CAGf,MAAM,YAA4B,EAAE;AAMpC,KACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,WAE7B,MAAK,MAAM,SAAS,CAAC,YAAY,oBAAoB,EAAE;EACrD,MAAM,OAAO,OAAO,WAAW,MAAM;AAErC,MAAI,OAAO,MAAM,qBAAqB,WAAY;AAElD,OAAK,iBAAiB,UAAU,OAAO;AACvC,YAAU,WAAW,KAAK,oBAAoB,UAAU,OAAO,CAAC;;AAIpE,KAAI,OAAO,qBAAqB,cAAc,SAAS,iBAAiB;EACtE,MAAM,WAAW,IAAI,iBAAiB,OAAO;AAE7C,WAAS,QAAQ,SAAS,iBAAiB;GACzC,YAAY;GACZ,iBAAiB,CAAC,aAAa,cAAc;GAC9C,CAAC;AAEF,YAAU,WAAW,SAAS,YAAY,CAAC;;AAG7C,cAAa,UAAU,SAAS,aAAa,UAAU,CAAC;;;;;;;;;;;AAY1D,SAAgB,gBAAgB,UAAkC;AAChE,WAAU,IAAI,SAAS;AAEvB,KAAI,CAAC,aACH,gBAAe,eAAe;AAGhC,cAAa;AACX,YAAU,OAAO,SAAS;AAE1B,MAAI,CAAC,UAAU,QAAQ,cAAc;AACnC,iBAAc;AACd,kBAAe;;;;;;;;;AAcrB,MAAM,wBAAqC;AAC3C,MAAM,8BAA8B;;;;;;;;;;;;;;AAepC,SAAgB,YAAyB;AACvC,QAAO,qBAAqB,iBAAiB,eAAe,gBAAgB;;;;;;;;;;AAW9E,SAAgB,kBAA2B;AACzC,QAAO,qBACL,iBACA,qBACA,sBACD"}
1
+ {"version":3,"file":"useScheme.js","names":[],"sources":["../../../src/utils/react/useScheme.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\n/**\n * The ambient viewing conditions — the color scheme and the contrast tier the\n * document is showing right now.\n *\n * This module is the single owner of the definition: it builds the `@dark` /\n * `@hc` predefined states that `src/components/Root.tsx` registers with tasty,\n * *and* it answers the same question in JS. One definition, two readers, so the\n * CSS and the JS answers cannot drift apart.\n *\n * **For styling, do not use this.** `{ '': light, '@dark': dark, '@hc': hc }` is\n * the answer, and branching styles in JS gives up the conditionality that lets a\n * scheme flip repaint without a re-render. Two cases the state map cannot serve:\n *\n * 1. **Surfaces the stylesheet does not reach** — a Vega spec, a CodeMirror or\n * Monaco theme, a third-party iframe. They take values, not CSS, so `@dark`\n * never applies and the branch has to happen in JS.\n * 2. **Control state that is not styling** — seeding or labelling a control from\n * the ambient condition, e.g. a Light/Dark or Normal/High-contrast preview\n * selector that starts on whatever the page is already showing.\n *\n * Root-level only, and deliberately not a generic state reader: tasty's state\n * vocabulary mixes element-local states (`hovered`, `pressed`, `disabled`) with\n * ambient ones (`@media(…)`, `@root(…)`), and only the ambient half is\n * answerable without an element. Evaluating the state language in JS would mean\n * a second implementation of the state algebra to keep in agreement with the CSS\n * one, for a question almost every caller asks about the root anyway.\n */\n\n// ============================================================================\n// The definition\n// ============================================================================\n\n/**\n * The `data-*` attribute names the opt-in uses, and the media queries it falls\n * back to. `@root(scheme=dark)` compiles to `:root[data-scheme=\"dark\"]`, hence\n * the `data-` prefix on the DOM side and the bare key on the tasty side.\n */\nconst SCHEME_KEY = 'scheme';\nconst CONTRAST_KEY = 'contrast';\nconst SCHEME_ATTR = `data-${SCHEME_KEY}`;\nconst CONTRAST_ATTR = `data-${CONTRAST_KEY}`;\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\nconst HIGH_CONTRAST_QUERY = '(prefers-contrast: more)';\n\n/**\n * The `@dark` / `@hc` state aliases, in tasty's DSL — registered globally by\n * `<Root>` via `setGlobalPredefinedStates()`.\n *\n * The attribute opt-in wins over the system preference, and the fallback is\n * gated on the attribute being *absent* (`!@root(scheme)`) rather than on it\n * being some other value — so `<html data-scheme=\"light\">` stays light inside a\n * dark OS, which is the whole point of an opt-in. {@link resolveScheme} and\n * {@link resolveHighContrast} read the same way.\n */\nexport const AMBIENT_PREDEFINED_STATES = {\n '@dark': `@root(${SCHEME_KEY}=dark) | (!@root(${SCHEME_KEY}) & @media${DARK_QUERY})`,\n '@hc': `@root(${CONTRAST_KEY}=high) | (!@root(${CONTRAST_KEY}) & @media${HIGH_CONTRAST_QUERY})`,\n} as const;\n\n/** The color scheme the document resolves to — the two arms of the `@dark` state. */\nexport type ColorScheme = 'light' | 'dark';\n\n// ============================================================================\n// Reading\n// ============================================================================\n\n/**\n * `matchMedia` is called per read rather than cached, so a test that stubs it\n * takes effect immediately. Missing (older jsdom, non-DOM runtimes) reads as\n * \"no preference\", which lands on the light / normal-contrast defaults.\n */\nfunction mediaMatches(query: string): boolean {\n return typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function'\n ? window.matchMedia(query).matches\n : false;\n}\n\nfunction rootAttribute(name: string): string | null {\n return typeof document === 'undefined'\n ? null\n : document.documentElement.getAttribute(name);\n}\n\n/**\n * The document's current color scheme, read once — the JS answer to `@dark`.\n *\n * Outside React (a chart spec built in a module, an editor theme registered at\n * import time). In React use {@link useScheme}, which also re-renders on change.\n * Returns `'light'` with no DOM.\n */\nexport function resolveScheme(): ColorScheme {\n const attribute = rootAttribute(SCHEME_ATTR);\n\n if (attribute !== null) {\n return attribute === 'dark' ? 'dark' : 'light';\n }\n\n return mediaMatches(DARK_QUERY) ? 'dark' : 'light';\n}\n\n/**\n * Whether the document is showing the high-contrast tier, read once — the JS\n * answer to `@hc`.\n *\n * Note this is an *ambient* condition, not the theme's `contrastLevel`: the\n * level is a `PaletteConfig` seed the app supplies (read it with\n * `getPaletteConfig()`), while this is the tier the viewer asked for.\n * Returns `false` with no DOM.\n */\nexport function resolveHighContrast(): boolean {\n const attribute = rootAttribute(CONTRAST_ATTR);\n\n if (attribute !== null) {\n return attribute === 'high';\n }\n\n return mediaMatches(HIGH_CONTRAST_QUERY);\n}\n\n// ============================================================================\n// Watching\n// ============================================================================\n\nconst listeners = new Set<() => void>();\n\nlet stopWatching: (() => void) | null = null;\n\nfunction notify() {\n listeners.forEach((listener) => listener());\n}\n\n/**\n * Both inputs have to be watched, because either can decide the answer: the\n * attribute when the opt-in is set, the media query otherwise — an attribute flip\n * is invisible to `matchMedia` and a system flip is invisible to a\n * `MutationObserver`. One observer and one pair of query listeners are shared by\n * every subscriber, and torn down when the last one leaves.\n */\nfunction startWatching(): () => void {\n if (typeof document === 'undefined') {\n return () => {};\n }\n\n const teardowns: (() => void)[] = [];\n\n // Guarded rather than assumed: jsdom ships neither `matchMedia` nor a\n // `MediaQueryList` in every version, and a consumer's unit tests are exactly\n // where a hook like this gets mounted. Losing one source of change is a stale\n // value; throwing is a broken render.\n if (\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function'\n ) {\n for (const query of [DARK_QUERY, HIGH_CONTRAST_QUERY]) {\n const list = window.matchMedia(query);\n\n if (typeof list?.addEventListener !== 'function') continue;\n\n list.addEventListener('change', notify);\n teardowns.push(() => list.removeEventListener('change', notify));\n }\n }\n\n if (typeof MutationObserver === 'function' && document.documentElement) {\n const observer = new MutationObserver(notify);\n\n observer.observe(document.documentElement, {\n attributes: true,\n attributeFilter: [SCHEME_ATTR, CONTRAST_ATTR],\n });\n\n teardowns.push(() => observer.disconnect());\n }\n\n return () => teardowns.forEach((teardown) => teardown());\n}\n\n/**\n * Subscribe to ambient condition changes — either the scheme or the contrast\n * tier. Returns an unsubscribe function.\n *\n * The listener takes no argument: re-read with {@link resolveScheme} /\n * {@link resolveHighContrast}, which is what the hooks below do. For non-React\n * consumers that own a surface the stylesheet cannot reach — re-theming a Monaco\n * instance, re-rendering a chart.\n */\nexport function subscribeScheme(listener: () => void): () => void {\n listeners.add(listener);\n\n if (!stopWatching) {\n stopWatching = startWatching();\n }\n\n return () => {\n listeners.delete(listener);\n\n if (!listeners.size && stopWatching) {\n stopWatching();\n stopWatching = null;\n }\n };\n}\n\n// ============================================================================\n// React bindings\n// ============================================================================\n\n/**\n * Snapshots are primitives, so React bails out on an unchanged value and no\n * memoization is needed — a contrast change re-runs a `useScheme()` reader's\n * `getSnapshot` and stops there.\n */\nconst getServerScheme = (): ColorScheme => 'light';\nconst getServerHighContrast = () => false;\n\n/**\n * The document's color scheme, kept live — `'light'` or `'dark'`.\n *\n * ```tsx\n * const scheme = useScheme();\n *\n * <VegaChart spec={useMemo(() => buildSpec(scheme), [scheme])} />;\n * ```\n *\n * Follows both the `<html data-scheme>` opt-in and `prefers-color-scheme`,\n * exactly as the `@dark` state does. Under SSR it renders `'light'` and\n * re-renders with the real value after hydration.\n */\nexport function useScheme(): ColorScheme {\n return useSyncExternalStore(subscribeScheme, resolveScheme, getServerScheme);\n}\n\n/**\n * Whether the document is showing the high-contrast tier, kept live — the hook\n * form of {@link resolveHighContrast}, following `<html data-contrast>` and\n * `prefers-contrast` exactly as the `@hc` state does.\n *\n * Under SSR it renders `false` and re-renders with the real value after\n * hydration.\n */\nexport function useHighContrast(): boolean {\n return useSyncExternalStore(\n subscribeScheme,\n resolveHighContrast,\n getServerHighContrast,\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,cAAc,QAAQ;AAC5B,MAAM,gBAAgB,QAAQ;AAC9B,MAAM,aAAa;AACnB,MAAM,sBAAsB;;;;;;;;;;;AAY5B,MAAa,4BAA4B;CACvC,SAAS,SAAS,WAAW,mBAAmB,WAAW,YAAY,WAAW;CAClF,OAAO,SAAS,aAAa,mBAAmB,aAAa,YAAY,oBAAoB;CAC9F;;;;;;AAcD,SAAS,aAAa,OAAwB;AAC5C,QAAO,OAAO,WAAW,eACvB,OAAO,OAAO,eAAe,aAC3B,OAAO,WAAW,MAAM,CAAC,UACzB;;AAGN,SAAS,cAAc,MAA6B;AAClD,QAAO,OAAO,aAAa,cACvB,OACA,SAAS,gBAAgB,aAAa,KAAK;;;;;;;;;AAUjD,SAAgB,gBAA6B;CAC3C,MAAM,YAAY,cAAc,YAAY;AAE5C,KAAI,cAAc,KAChB,QAAO,cAAc,SAAS,SAAS;AAGzC,QAAO,aAAa,WAAW,GAAG,SAAS;;;;;;;;;;;AAY7C,SAAgB,sBAA+B;CAC7C,MAAM,YAAY,cAAc,cAAc;AAE9C,KAAI,cAAc,KAChB,QAAO,cAAc;AAGvB,QAAO,aAAa,oBAAoB;;AAO1C,MAAM,4BAAY,IAAI,KAAiB;AAEvC,IAAI,eAAoC;AAExC,SAAS,SAAS;AAChB,WAAU,SAAS,aAAa,UAAU,CAAC;;;;;;;;;AAU7C,SAAS,gBAA4B;AACnC,KAAI,OAAO,aAAa,YACtB,cAAa;CAGf,MAAM,YAA4B,EAAE;AAMpC,KACE,OAAO,WAAW,eAClB,OAAO,OAAO,eAAe,WAE7B,MAAK,MAAM,SAAS,CAAC,YAAY,oBAAoB,EAAE;EACrD,MAAM,OAAO,OAAO,WAAW,MAAM;AAErC,MAAI,OAAO,MAAM,qBAAqB,WAAY;AAElD,OAAK,iBAAiB,UAAU,OAAO;AACvC,YAAU,WAAW,KAAK,oBAAoB,UAAU,OAAO,CAAC;;AAIpE,KAAI,OAAO,qBAAqB,cAAc,SAAS,iBAAiB;EACtE,MAAM,WAAW,IAAI,iBAAiB,OAAO;AAE7C,WAAS,QAAQ,SAAS,iBAAiB;GACzC,YAAY;GACZ,iBAAiB,CAAC,aAAa,cAAc;GAC9C,CAAC;AAEF,YAAU,WAAW,SAAS,YAAY,CAAC;;AAG7C,cAAa,UAAU,SAAS,aAAa,UAAU,CAAC;;;;;;;;;;;AAY1D,SAAgB,gBAAgB,UAAkC;AAChE,WAAU,IAAI,SAAS;AAEvB,KAAI,CAAC,aACH,gBAAe,eAAe;AAGhC,cAAa;AACX,YAAU,OAAO,SAAS;AAE1B,MAAI,CAAC,UAAU,QAAQ,cAAc;AACnC,iBAAc;AACd,kBAAe;;;;;;;;;AAcrB,MAAM,wBAAqC;AAC3C,MAAM,8BAA8B;;;;;;;;;;;;;;AAepC,SAAgB,YAAyB;AACvC,QAAO,qBAAqB,iBAAiB,eAAe,gBAAgB;;;;;;;;;;AAW9E,SAAgB,kBAA2B;AACzC,QAAO,qBACL,iBACA,qBACA,sBACD"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.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.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.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.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.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.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.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.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.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.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.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,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.171.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.172.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.171.0";
3
+ const VERSION = "0.172.0";
4
4
  const TASTY_VERSION = "3.3.1";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
package/docs/Colors.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Colors
2
2
 
3
- Cube UI Kit color tokens are generated by Glaze from a shared OKHST palette. Every adaptive token includes light, dark, and high-contrast variants. Change the active schema in the Storybook toolbar to review each example.
3
+ Cube UI Kit color tokens are generated by Glaze from a shared OKHST palette. Every adaptive token includes light, dark, and high-contrast variants. Change the active scheme in the Storybook toolbar to review each example.
4
4
 
5
5
  The colors shown here come from the default seeds. Those seeds — brand hue, saturation, per-status hues — are tunable at runtime; see [Theming](./Theming.md) for a live playground.
6
6
 
@@ -50,7 +50,7 @@ Syntax tokens are calibrated as a group against `#surface`. Use the semantic tok
50
50
 
51
51
  ## Borders and shadows
52
52
 
53
- Borders use the `1bw` design-system width. Shadow geometry comes from `src/tokens/shadows.ts`; the `#shadow-sm`, `#shadow-md`, and `#shadow-lg` colors adapt with the active schema.
53
+ Borders use the `1bw` design-system width. Shadow geometry comes from `src/tokens/shadows.ts`; the `#shadow-sm`, `#shadow-md`, and `#shadow-lg` colors adapt with the active scheme.
54
54
 
55
55
  ## Scope
56
56
 
@@ -17,7 +17,7 @@ Cube UI Kit is built on two independent open-source projects:
17
17
  - [Tasty](https://tasty.style) is the declarative styling engine. It turns token-aware style objects, responsive values, and component states into conflict-free CSS.
18
18
  - [Glaze](https://github.com/tenphi/glaze) generates the semantic color palette. A small set of brand and status seeds resolves into light, dark, and high-contrast token sets.
19
19
 
20
- Use the [Theme Builder](/story/getting-started-theming--theme-builder) to tune a palette and preview the result across schemas and contrast levels.
20
+ Use the [Theme Builder](/story/getting-started-theming--theme-builder) to tune a palette and preview the result across schemes and contrast levels.
21
21
 
22
22
  ## Get started
23
23
 
package/docs/Theming.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Theming
2
2
 
3
- The whole palette is generated by [Glaze](https://github.com/tenphi/glaze) from a handful of seeds, one per **zone**: the accent, the base, and each of the four status themes. Those seeds are tunable at runtime — change one and every token re-resolves, in light, dark, and high-contrast schemas at once.
3
+ The whole palette is generated by [Glaze](https://github.com/tenphi/glaze) from a handful of seeds, one per **zone**: the accent, the base, and each of the four status themes. Those seeds are tunable at runtime — change one and every token re-resolves, in light, dark, and high-contrast schemes at once.
4
4
 
5
5
  Every zone takes the same seed, and it comes in two forms: a **color**, which is usually what you actually have, or the **numbers** behind one. Never both — a zone is seeded one way or the other. See [One seed, two ways to spell it](#one-seed-two-ways-to-spell-it).
6
6
 
@@ -133,7 +133,7 @@ First, **exactness is scoped to the light, normal-contrast variant.** That is th
133
133
 
134
134
  Sizing those two the same is a mistake worth naming, because this palette made it. In light `surface` **is** white, so one measurement is both constraints at once and Lc 45 looks right for the pair. In dark the page is near-black and the same number becomes a demand that a filled shape reach text contrast against it — which nothing in the palette meets, the shipped fill included. Since a floor can only lighten, the surplus flattened the dark half of the tone axis onto a single value: every brand darker than the floor came out the same colour. The page floor is now sized for a shape and the label is guaranteed separately, by a cap on the seed's tone.
135
135
 
136
- They are APCA rather than WCAG on purpose. A single WCAG ratio means two different things depending on the schema: measured across twelve hues, a fill sitting exactly at 3:1 comes out at Lc 56 in light but only Lc 23 in dark. That is why light brands kept getting crushed while dark ones sailed through the same rule. **A consequence to state plainly: the emitted fill can sit below WCAG 3:1.** `#0EA5E9` renders at 2.77:1 against a white page and is correct there — the Lc is the guarantee, not the ratio.
136
+ They are APCA rather than WCAG on purpose. A single WCAG ratio means two different things depending on the scheme: measured across twelve hues, a fill sitting exactly at 3:1 comes out at Lc 56 in light but only Lc 23 in dark. That is why light brands kept getting crushed while dark ones sailed through the same rule. **A consequence to state plainly: the emitted fill can sit below WCAG 3:1.** `#0EA5E9` renders at 2.77:1 against a white page and is correct there — the Lc is the guarantee, not the ratio.
137
137
 
138
138
  High contrast does **not** escalate the page floor. It is a request for separation over brand, but not for separation from the page: the same fill carries the label, and driving it off the page drives the label off it. The shipped ladder makes the same trade and lands the other side of it, ending up with _less_ page separation in high contrast than in normal, because it darkens the fill toward its label. What does escalate is the label cap, which searches the high-contrast variants too.
139
139
 
@@ -173,7 +173,7 @@ setPaletteConfig({ surfaceMode: 'tinted', base: { saturation: 25 } });
173
173
 
174
174
  Two tones is not a lightness change you would name — it is _room_. Everything below `surface` is positioned relative to it, so the ladder, the borders and the text ramp all follow, and the text's `['AA','AAA']` floors re-solve against the new background rather than drifting. The `code-*` family follows too: its mirrored `surface` exists to be the page, so it tracks both the tone and the base seed.
175
175
 
176
- **The tinted surfaces move with it.** A status theme's `surface` — and a runtime tint's, from `getColorTheme()` — is authored as an offset from the page's rather than as an absolute tone, and that offset is exactly the two tones `tinted` shifts by. Anchored absolutely they would land on the page's own new tone and a `note` banner would stop reading as a banner at all; anchored to the page they keep the separation the offset was chosen for, in both schemas. They also pick up a little more chroma there, being further from the extreme — so `tinted` makes a status surface easier to see, not harder.
176
+ **The tinted surfaces move with it.** A status theme's `surface` — and a runtime tint's, from `getColorTheme()` — is authored as an offset from the page's rather than as an absolute tone, and that offset is exactly the two tones `tinted` shifts by. Anchored absolutely they would land on the page's own new tone and a `note` banner would stop reading as a banner at all; anchored to the page they keep the separation the offset was chosen for, in both schemes. They also pick up a little more chroma there, being further from the extreme — so `tinted` makes a status surface easier to see, not harder.
177
177
 
178
178
  The tint stays subtle by construction. Near white the sRGB gamut has very little chroma to give, so `tinted` buys a surface that reads as warm or cool rather than one that reads as colored — which is the whole ask. For a genuinely colored panel, reach for a status theme's `surface` instead.
179
179
 
@@ -331,7 +331,7 @@ The preview deliberately shows all three surface levels with their own text ramp
331
331
 
332
332
  ## Previewing a theme in a region
333
333
 
334
- `setPaletteConfig()` re-themes the whole document, which is no use for a theme picker — you want several themes visible at once, or a dark preview inside a light page. `renderColorTokens()` does that: it resolves the palette for **one** config and **one** schema and returns flat literal values, ready to apply to a subtree through a tasty `tokens` prop.
334
+ `setPaletteConfig()` re-themes the whole document, which is no use for a theme picker — you want several themes visible at once, or a dark preview inside a light page. `renderColorTokens()` does that: it resolves the palette for **one** config and **one** scheme and returns flat literal values, ready to apply to a subtree through a tasty `tokens` prop.
335
335
 
336
336
  ```tsx
337
337
  import { renderColorTokens, tasty } from '@cube-dev/ui-kit';
@@ -339,20 +339,20 @@ import { renderColorTokens, tasty } from '@cube-dev/ui-kit';
339
339
  const Region = tasty({ styles: { fill: '#surface', color: '#surface-text' } });
340
340
 
341
341
  const preview = useMemo(
342
- () => renderColorTokens({ accent: { hue: 210 }, schema: 'dark' }),
342
+ () => renderColorTokens({ accent: { hue: 210 }, scheme: 'dark' }),
343
343
  [],
344
344
  );
345
345
 
346
346
  <Region tokens={preview}>…everything in here renders in that theme…</Region>;
347
347
  ```
348
348
 
349
- The reason this needs its own API: the document palette emits **state maps** (`{ '': …, '@dark': …, '@hc': … }`), so a page can only ever show one schema at a time — that is what `@dark` means. Collapsing the palette to a chosen schema removes the conditionality, so several themes can coexist.
349
+ The reason this needs its own API: the document palette emits **state maps** (`{ '': …, '@dark': …, '@hc': … }`), so a page can only ever show one scheme at a time — that is what `@dark` means. Collapsing the palette to a chosen scheme removes the conditionality, so several themes can coexist.
350
350
 
351
351
  | Option | Meaning |
352
352
  | --- | --- |
353
- | every `PaletteConfig` field | merged over the **current** config, so `{ schema: 'dark' }` previews the active theme in dark |
354
- | `schema` | `'light'` (default) or `'dark'` |
355
- | `highContrast` | resolve that schema's high-contrast variant. Default `false` |
353
+ | every `PaletteConfig` field | merged over the **current** config, so `{ scheme: 'dark' }` previews the active theme in dark |
354
+ | `scheme` | `'light'` (default) or `'dark'` |
355
+ | `highContrast` | resolve that scheme's high-contrast variant. Default `false` |
356
356
 
357
357
  Nothing is applied globally — the live palette and the stored config are untouched, so previews are safe to render anywhere.
358
358
 
@@ -360,10 +360,10 @@ Note the one place the merge/replace split matters: this call **layers** over th
360
360
 
361
361
  Notes:
362
362
 
363
- - Real components work inside a region. Every color in the kit compiles to a CSS custom property, so overriding those properties on one element re-colors its whole subtree with no schema attribute and no second `<Root>`.
363
+ - Real components work inside a region. Every color in the kit compiles to a CSS custom property, so overriding those properties on one element re-colors its whole subtree with no scheme attribute and no second `<Root>`.
364
364
  - The legacy aliases come along **by reference** (`'#dark': '#surface-text'`), and so do the shadow tokens and scrollbar colors, whose values embed a palette color. Tasty re-declares them on the region so each `var()` resolves against the region's own values; resolving them up front would freeze them to the outer theme instead.
365
365
  - Typography, spacing, sizes and layout are **not** included — nothing in their values references a color, so the region inherits them from `<Root>`.
366
- - `contrastLevel` works per region, so the whole 0–100 ramp can be shown at once — something a document cannot do, since it is only ever at one level. Level `0` reproduces the normal tier and `100` the high-contrast tier exactly, in both schemas. `highContrast: true` still returns the genuine high-contrast resolution at any level below `100`, because the level moves the baseline and the tier escalates from where `'auto'` would put it; at `100` the two coincide and it returns the same colors as the normal variant. Note that tokens carrying a contrast _floor_ (most text) can sit still over part of the ramp — the floor is solved, not approximated, so the value only moves once the interpolated target does. Tokens positioned by a plain tone pair, like `#border`, step at every level.
366
+ - `contrastLevel` works per region, so the whole 0–100 ramp can be shown at once — something a document cannot do, since it is only ever at one level. Level `0` reproduces the normal tier and `100` the high-contrast tier exactly, in both schemes. `highContrast: true` still returns the genuine high-contrast resolution at any level below `100`, because the level moves the baseline and the tier escalates from where `'auto'` would put it; at `100` the two coincide and it returns the same colors as the normal variant. Note that tokens carrying a contrast _floor_ (most text) can sit still over part of the ramp — the floor is solved, not approximated, so the value only moves once the interpolated target does. Tokens positioned by a plain tone pair, like `#border`, step at every level.
367
367
  - Resolving a palette costs a few milliseconds. The last config is memoized, but `useMemo` on the caller side if you drive it from state.
368
368
 
369
369
  `renderPaletteTokens()` is the same thing without the aliases and companion tokens, if you want only the Glaze palette.
@@ -395,22 +395,22 @@ subscribePaletteConfig(() => {
395
395
 
396
396
  `getPaletteConfig()` always returns the fully resolved form, so `getPaletteConfig().themes.danger.saturation` is a number even if nobody ever set it. `DEFAULT_PALETTE_CONFIG` is the shipped baseline in the same shape.
397
397
 
398
- ## Reading the ambient schema
398
+ ## Reading the ambient scheme
399
399
 
400
- The palette config is what the app _asked for_; the schema and contrast tier are what the viewer is _seeing_ — `<html data-schema>` / `prefers-color-scheme`, and `<html data-contrast>` / `prefers-contrast`. They are not part of the config, so `getPaletteConfig()` says nothing about them:
400
+ The palette config is what the app _asked for_; the scheme and contrast tier are what the viewer is _seeing_ — `<html data-scheme>` / `prefers-color-scheme`, and `<html data-contrast>` / `prefers-contrast`. They are not part of the config, so `getPaletteConfig()` says nothing about them:
401
401
 
402
402
  ```tsx
403
- import { useHighContrast, useSchema } from '@cube-dev/ui-kit';
403
+ import { useHighContrast, useScheme } from '@cube-dev/ui-kit';
404
404
 
405
- const schema = useSchema(); // 'light' | 'dark'
405
+ const scheme = useScheme(); // 'light' | 'dark'
406
406
  const isHighContrast = useHighContrast(); // boolean
407
407
  ```
408
408
 
409
- Both resolve exactly as the `@dark` / `@hc` states do — attribute opt-in first, media query only when the attribute is absent — and re-render when either input changes. Outside React: `resolveSchema()`, `resolveHighContrast()` and `subscribeSchema(listener)`, which fires on a change to either condition.
409
+ Both resolve exactly as the `@dark` / `@hc` states do — attribute opt-in first, media query only when the attribute is absent — and re-render when either input changes. Outside React: `resolveScheme()`, `resolveHighContrast()` and `subscribeScheme(listener)`, which fires on a change to either condition.
410
410
 
411
- Reach for these only where CSS cannot go. Styling belongs in a state map (`{ '': …, '@dark': …, '@hc': … }`), which repaints on a schema flip with no re-render at all. What the states cannot reach is a surface that takes values rather than CSS — a Vega spec, a CodeMirror or Monaco theme, an iframe — or a control whose value _is_ the condition, like the Light/Dark and Normal/High-contrast selectors over the [theme builder](#theme-builder).
411
+ Reach for these only where CSS cannot go. Styling belongs in a state map (`{ '': …, '@dark': …, '@hc': … }`), which repaints on a scheme flip with no re-render at all. What the states cannot reach is a surface that takes values rather than CSS — a Vega spec, a CodeMirror or Monaco theme, an iframe — or a control whose value _is_ the condition, like the Light/Dark and Normal/High-contrast selectors over the [theme builder](#theme-builder).
412
412
 
413
- Note the distinction from `contrastLevel`: the level is a config seed the app supplies and can read back, while high contrast is a viewing condition the document is in. They also pair up — `renderColorTokens({ schema, highContrast })` takes both, so a region can be previewed in the conditions the page is actually showing.
413
+ Note the distinction from `contrastLevel`: the level is a config seed the app supplies and can read back, while high contrast is a viewing condition the document is in. They also pair up — `renderColorTokens({ scheme, highContrast })` takes both, so a region can be previewed in the conditions the page is actually showing.
414
414
 
415
415
  ## `<Root palette>`
416
416
 
@@ -437,7 +437,7 @@ This is a convenience wrapper over `setPaletteConfig()`, not a separate scope. *
437
437
 
438
438
  It also owns the accent's `saturation` outright — pinned to `100`, so a number passed _explicitly alongside_ it is inert and warned about (a number passed on its own turns pastel off instead). And it caps a color seed short of itself: the ceiling sits below where a saturated color lands, so `#EF4444` resolves to `#c47069`. Both are visible in the [Theme builder](#theme-builder), the first as a disabled slider and the second as the requested/resolved chips.
439
439
 
440
- **Re-seeding costs about 10 ms.** Rebuilding the eight themes and re-solving ~156 tokens across four schema variants is not free, though it is inside a frame. A manual `contrastLevel` costs the same — it runs the same four passes — except at level `100`, which skips the two high-contrast ones because the normal pass already produced those values. Setting the config to a value it already holds is free — it does not even bump the version. If you are driving it from a slider, let the input coalesce to frames (a pointer-driven `onChange` already does) rather than writing on every event.
440
+ **Re-seeding costs about 10 ms.** Rebuilding the eight themes and re-solving ~156 tokens across four scheme variants is not free, though it is inside a frame. A manual `contrastLevel` costs the same — it runs the same four passes — except at level `100`, which skips the two high-contrast ones because the normal pass already produced those values. Setting the config to a value it already holds is free — it does not even bump the version. If you are driving it from a slider, let the input coalesce to frames (a pointer-driven `onChange` already does) rather than writing on every event.
441
441
 
442
442
  **If you call Glaze directly, tell the kit.** `glaze.configure({ darkTone })` and friends invalidate Glaze's own caches, but the kit's token maps are memoized against the palette config version:
443
443
 
package/docs/Usage.md CHANGED
@@ -69,7 +69,7 @@ Defined in `src/tokens/sizes.ts`. Used for component heights and icon sizes.
69
69
 
70
70
  ## Shadow Tokens
71
71
 
72
- Defined in `src/tokens/shadows.ts`. Shadow colors (`#shadow-sm`, `#shadow-md`, `#shadow-lg`) are generated by Glaze and adapt automatically to dark / high-contrast schemas.
72
+ Defined in `src/tokens/shadows.ts`. Shadow colors (`#shadow-sm`, `#shadow-md`, `#shadow-lg`) are generated by Glaze and adapt automatically to dark / high-contrast schemes.
73
73
 
74
74
  | Token | Value |
75
75
  | ---------------- | ------------------------- |
@@ -92,39 +92,39 @@ Defined in `src/tokens/layout.ts`.
92
92
 
93
93
  All color tokens use `#name` syntax in styles. Opacity variants use `#name.NN` (e.g. `#surface-text.06` for 6% opacity).
94
94
 
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 schemas automatically.
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
97
  The seeds it is generated from — brand hue, saturation, per-status hues, `pastel`, `contrastLevel` — are tunable at runtime. See [Theming](./Theming.md).
98
98
 
99
- ### Color Schemas
99
+ ### Color Schemes
100
100
 
101
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:
102
102
 
103
103
  ```html
104
- <!-- Force dark schema -->
105
- <html data-schema="dark">
104
+ <!-- Force dark scheme -->
105
+ <html data-scheme="dark">
106
106
 
107
- <!-- Force high-contrast schema -->
107
+ <!-- Force high-contrast scheme -->
108
108
  <html data-contrast="high">
109
109
 
110
110
  <!-- Both can be combined -->
111
- <html data-schema="dark" data-contrast="high">
111
+ <html data-scheme="dark" data-contrast="high">
112
112
  ```
113
113
 
114
- When the attribute is absent, the schema falls back to `@media (prefers-color-scheme: dark)` and `@media (prefers-contrast: more)`.
114
+ When the attribute is absent, the scheme falls back to `@media (prefers-color-scheme: dark)` and `@media (prefers-contrast: more)`.
115
115
 
116
- #### Reading the schema from JS
116
+ #### Reading the scheme from JS
117
117
 
118
118
  For styling, use the state map — `{ '': light, '@dark': dark, '@hc': hc }`. Two cases it cannot serve: a surface the stylesheet never reaches (a Vega spec, a CodeMirror / Monaco theme, an iframe), and a control whose value _is_ the ambient condition (a Light/Dark preview selector). For those, read the same two conditions from JS:
119
119
 
120
120
  ```tsx
121
- import { useHighContrast, useSchema } from '@cube-dev/ui-kit';
121
+ import { useHighContrast, useScheme } from '@cube-dev/ui-kit';
122
122
 
123
- const schema = useSchema(); // 'light' | 'dark' — the JS answer to `@dark`
123
+ const scheme = useScheme(); // 'light' | 'dark' — the JS answer to `@dark`
124
124
  const isHighContrast = useHighContrast(); // boolean — the JS answer to `@hc`
125
125
  ```
126
126
 
127
- Both follow the attribute opt-in first and the media query second, exactly as the states do, and re-render when either changes. Outside React: `resolveSchema()`, `resolveHighContrast()` and `subscribeSchema(listener)` (fires on either condition; re-read in the listener). This is the conditions half of the gap [`resolveTokenValue()`](#resolving-tokens-outside-css) closes for token _values_.
127
+ Both follow the attribute opt-in first and the media query second, exactly as the states do, and re-render when either changes. Outside React: `resolveScheme()`, `resolveHighContrast()` and `subscribeScheme(listener)` (fires on either condition; re-read in the listener). This is the conditions half of the gap [`resolveTokenValue()`](#resolving-tokens-outside-css) closes for token _values_.
128
128
 
129
129
  Root-level only — there is no element-scoped or generic state reader, on purpose. Tasty's state vocabulary mixes element-local states (`hovered`, `pressed`, `disabled`) with ambient ones (`@media(…)`, `@root(…)`), and only the ambient half is answerable without an element.
130
130
 
@@ -169,7 +169,7 @@ Tokens a **container** sets to steer a component that cannot resolve the color o
169
169
 
170
170
  ```jsx
171
171
  <Block fill="#fixed-dark" color="#white" styles={{ '#current-fill': '#fixed-dark' }}>
172
- <Button theme="current" type="primary">Legible in both schemas</Button>
172
+ <Button theme="current" type="primary">Legible in both schemes</Button>
173
173
  </Block>
174
174
  ```
175
175
 
@@ -177,7 +177,7 @@ Setting it moves the label, the icon slots and the chip's rim together. It also
177
177
 
178
178
  ### Accent System
179
179
 
180
- Each themed color (default, primary, success, danger, warning, note) provides an `accent-*` family anchored to a fixed white "accent surface text". These tokens stay recognizable across schemas (used for branded buttons, CTAs, etc.):
180
+ Each themed color (default, primary, success, danger, warning, note) provides an `accent-*` family anchored to a fixed white "accent surface text". These tokens stay recognizable across schemes (used for branded buttons, CTAs, etc.):
181
181
 
182
182
  | Token (default theme; prefixed in others) | Role |
183
183
  | --- | --- |
@@ -218,10 +218,10 @@ resetPaletteConfig();
218
218
 
219
219
  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.
220
220
 
221
- 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 schema to flat values you apply via a `tokens` prop, without touching the live palette:
221
+ 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:
222
222
 
223
223
  ```tsx
224
- <Block tokens={renderColorTokens({ accent: { hue: 210 }, schema: 'dark' })} fill="#surface">
224
+ <Block tokens={renderColorTokens({ accent: { hue: 210 }, scheme: 'dark' })} fill="#surface">
225
225
 
226
226
  </Block>
227
227
  ```
@@ -340,13 +340,13 @@ resolveTokenValues(['#surface', '#surface-text', '#border']); // keyed by the to
340
340
  resolvePresetValues('s3'); // { fontFamily: 'ui-monospace, …', fontSize: '14px', lineHeight: '20px', … }
341
341
  ```
342
342
 
343
- `useTokenValue()`, `useTokenValues()` and `usePresetValues()` are the same three readers as hooks, re-resolved whenever the palette is re-seeded or the schema / contrast tier flips. The object `useTokenValues()` returns keeps its identity while the values do, so it is safe as a dependency of the theme object built from it.
343
+ `useTokenValue()`, `useTokenValues()` and `usePresetValues()` are the same three readers as hooks, re-resolved whenever the palette is re-seeded or the scheme / contrast tier flips. The object `useTokenValues()` returns keeps its identity while the values do, so it is safe as a dependency of the theme object built from it.
344
344
 
345
- These resolve token _values_. For the ambient _conditions_ themselves — which schema and contrast tier the document is in — see [Reading the schema from JS](#reading-the-schema-from-js).
345
+ These resolve token _values_. For the ambient _conditions_ themselves — which scheme and contrast tier the document is in — see [Reading the scheme from JS](#reading-the-scheme-from-js).
346
346
 
347
347
  So these helpers do not inspect the value. They read `$tokens-applied`, a marker the token block declares alongside the tokens, which answers the question that matters — _are the kit's tokens in effect on this element?_ Off that surface every read returns `null` (or `fallback`) and warns once in development; on it, the computed value is taken as the truth.
348
348
 
349
- All six take `{ element, fallback }`. Pass `element` to read a _local_ override instead of the document — a subtree carrying its own `tokens` prop (`renderColorTokens()`), or one under a `data-schema` / `data-contrast` that differs from the document's. Pass `fallback` for the value to use when a token cannot be resolved, including during SSR, where there is no DOM to read.
349
+ All six take `{ element, fallback }`. Pass `element` to read a _local_ override instead of the document — a subtree carrying its own `tokens` prop (`renderColorTokens()`), or one under a `data-scheme` / `data-contrast` that differs from the document's. Pass `fallback` for the value to use when a token cannot be resolved, including during SSR, where there is no DOM to read.
350
350
 
351
351
  **Why `getComputedStyle` by hand does not work.** `Root` declares the token block on `<body>`, so `<html>`, a detached node, and a tree that has not mounted `Root` yet are all outside it — and a token read from outside does not come back empty. Tasty registers `@property` rules with real `initial-value`s, so `--gap` reads `4px` there rather than the kit's `8px`, `--radius` reads `6px`, `--transition` reads `80ms`. The value looks entirely ordinary and is simply wrong. Inspecting it cannot help in the other direction either: `#clear` really is `transparent` and `$h2-letter-spacing` really is `0px`, indistinguishable from an unset property of the same type.
352
352
 
@@ -55,7 +55,7 @@ Inherits all styling from `Item`. See [Item documentation](./Item.md) for sub-el
55
55
 
56
56
  ### Themes
57
57
 
58
- Use the `theme` prop to apply a semantic color schema:
58
+ Use the `theme` prop to apply a semantic color scheme:
59
59
 
60
60
  - `default` — Standard card appearance
61
61
  - `success` — Green theme for positive outcomes
@@ -28,7 +28,7 @@ Supports [Base properties](../../BaseProperties.md).
28
28
 
29
29
  ## Theme
30
30
 
31
- Syntax colors are driven by a dedicated, schema-aware palette of `code-*` tokens. Each token uses a different hue so token classes stay visually separable, and every token meets at least **WCAG AA (4.5:1)** contrast against `#surface` in light, dark, and high-contrast schemas (AAA in HC).
31
+ Syntax colors are driven by a dedicated, scheme-aware palette of `code-*` tokens. Each token uses a different hue so token classes stay visually separable, and every token meets at least **WCAG AA (4.5:1)** contrast against `#surface` in light, dark, and high-contrast schemes (AAA in HC).
32
32
 
33
33
  | Token | Hue | Used for |
34
34
  | --- | --- | --- |
@@ -40,7 +40,7 @@ Syntax colors are driven by a dedicated, schema-aware palette of `code-*` tokens
40
40
  | `#code-function` | pink | functions, class names, regex, variables |
41
41
  | `#code-attribute` | cyan | attribute names, properties, selectors, built-ins, keys |
42
42
 
43
- Diff insertion (`+`) and deletion (`-`) intentionally re-use the existing `#success-*` / `#danger-*` ramps — both the line background tint and the foreground color adapt to the active schema.
43
+ Diff insertion (`+`) and deletion (`-`) intentionally re-use the existing `#success-*` / `#danger-*` ramps — both the line background tint and the foreground color adapt to the active scheme.
44
44
 
45
45
  ## Examples
46
46
 
@@ -371,7 +371,7 @@ A stale order is safe: keys for columns that no longer exist are ignored, and a
371
371
 
372
372
  `column.color` tints a whole column — header, cells and pinned totals. It takes a palette theme name, any CSS color, a `{ hue, saturation }` seed, or a `{ fill, text }` pair for full manual control.
373
373
 
374
- Every form but the last is _derived_: only the hue and saturation are kept, and the tone ramp plus an AA/AAA text floor are re-solved for light, dark and high-contrast. A column cannot end up unreadable in a schema nobody checked.
374
+ Every form but the last is _derived_: only the hue and saturation are kept, and the tone ramp plus an AA/AAA text floor are re-solved for light, dark and high-contrast. A column cannot end up unreadable in a scheme nobody checked.
375
375
 
376
376
  ```tsx
377
377
  const columns = [
@@ -310,7 +310,7 @@ The trigger button supports various visual styles via the `type` prop:
310
310
 
311
311
  ### Trigger Button Themes
312
312
 
313
- Control the color schema with the `theme` prop:
313
+ Control the color scheme with the `theme` prop:
314
314
 
315
315
  - **`default`** — Standard theme (default)
316
316
  - **`danger`** — Red/destructive color (also applied automatically when `isInvalid` is set)
@@ -22,7 +22,7 @@ Extends Card with:
22
22
  - `placeContent` — `space-between`
23
23
  - `gap` — `1x`
24
24
  - `border` — none
25
- - `shadow` — `$shadow` (design-system elevation token, schema-aware via `#shadow-md`)
25
+ - `shadow` — `$shadow` (design-system elevation token, scheme-aware via `#shadow-md`)
26
26
  - `padding` — `2.5x`
27
27
 
28
28
  ### Base Properties