@cube-dev/ui-kit 0.205.0 → 0.206.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 (618) hide show
  1. package/dist/CHANGELOG.md +20 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/Root.js.map +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemActionsWrapper.js +221 -132
  28. package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  31. package/dist/components/actions/Link/Link.js +1 -1
  32. package/dist/components/actions/Menu/Menu.js +1 -1
  33. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  34. package/dist/components/actions/Menu/MenuItem.js +1 -1
  35. package/dist/components/actions/Menu/MenuSection.js +1 -1
  36. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  37. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  38. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  39. package/dist/components/actions/Menu/context.js +1 -1
  40. package/dist/components/actions/Menu/styled.js +1 -1
  41. package/dist/components/actions/actions-run.js +1 -1
  42. package/dist/components/actions/index.js +1 -1
  43. package/dist/components/actions/use-action.js +1 -1
  44. package/dist/components/actions/use-anchored-menu.js +1 -1
  45. package/dist/components/actions/use-context-menu.js +1 -1
  46. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  47. package/dist/components/content/Alert/Alert.js +1 -1
  48. package/dist/components/content/Alert/use-alert.js +1 -1
  49. package/dist/components/content/Avatar/Avatar.js +1 -1
  50. package/dist/components/content/Badge/Badge.js +1 -1
  51. package/dist/components/content/Card/Card.js +1 -1
  52. package/dist/components/content/Content.js +1 -1
  53. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  54. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  55. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  56. package/dist/components/content/Divider/Divider.js +1 -1
  57. package/dist/components/content/Footer.js +1 -1
  58. package/dist/components/content/Header.js +1 -1
  59. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  60. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  61. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  62. package/dist/components/content/Item/Item.d.ts +2 -1
  63. package/dist/components/content/Item/Item.js +1 -1
  64. package/dist/components/content/Item/Item.js.map +1 -1
  65. package/dist/components/content/Item/ItemWithNativeLinks.js +1 -1
  66. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  67. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  68. package/dist/components/content/Layout/GridLayout.js +1 -1
  69. package/dist/components/content/Layout/Layout.js +1 -1
  70. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  71. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  72. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  73. package/dist/components/content/Layout/LayoutContent.js +1 -1
  74. package/dist/components/content/Layout/LayoutContext.js +1 -1
  75. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  76. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  77. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  78. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  79. package/dist/components/content/Layout/LayoutPane.js +1 -1
  80. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  81. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  82. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  83. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  84. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  85. package/dist/components/content/Layout/index.js +1 -1
  86. package/dist/components/content/Layout/utils.js +1 -1
  87. package/dist/components/content/Paragraph.js +1 -1
  88. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  89. package/dist/components/content/PrismCode/PrismCode.js +3 -2
  90. package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
  91. package/dist/components/content/PrismCode/prismSetup.js +8 -2
  92. package/dist/components/content/PrismCode/prismSetup.js.map +1 -1
  93. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  94. package/dist/components/content/Result/Result.js +1 -1
  95. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  96. package/dist/components/content/Tag/Tag.js +1 -1
  97. package/dist/components/content/Text.js +1 -1
  98. package/dist/components/content/TextItem/TextItem.d.ts +5 -2
  99. package/dist/components/content/TextItem/TextItem.js +1 -1
  100. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  101. package/dist/components/content/Title.js +1 -1
  102. package/dist/components/content/Tree/Tree.js +1 -1
  103. package/dist/components/content/Tree/TreeNode.js +1 -1
  104. package/dist/components/content/Tree/checked-keys.js +1 -1
  105. package/dist/components/content/Tree/rowId.js +1 -1
  106. package/dist/components/content/Tree/styled.js +1 -1
  107. package/dist/components/content/Tree/tree-index.js +1 -1
  108. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  109. package/dist/components/content/Tree/use-load-data.js +1 -1
  110. package/dist/components/content/highlightText.js +1 -1
  111. package/dist/components/content/use-auto-tooltip.js +114 -72
  112. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  113. package/dist/components/data/DataTable/DataTable.js +1 -1
  114. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  115. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  116. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  117. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  118. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  119. package/dist/components/data/ItemTable/item-table-sections.js +1 -1
  120. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  121. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  122. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  123. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  124. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  125. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  126. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  127. package/dist/components/data/TableBase/RowCollection.js +1 -1
  128. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  129. package/dist/components/data/TableBase/TableRow.js +1 -1
  130. package/dist/components/data/TableBase/TableRowLink.js +1 -1
  131. package/dist/components/data/TableBase/TableView.js +1 -1
  132. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  133. package/dist/components/data/TableBase/column-header.js +1 -1
  134. package/dist/components/data/TableBase/column-menu.js +1 -1
  135. package/dist/components/data/TableBase/column-styles.js +1 -1
  136. package/dist/components/data/TableBase/column-tint.js +1 -1
  137. package/dist/components/data/TableBase/row-menu.js +1 -1
  138. package/dist/components/data/TableBase/styled.js +21 -20
  139. package/dist/components/data/TableBase/styled.js.map +1 -1
  140. package/dist/components/data/TableBase/table-body-sections.js +1 -1
  141. package/dist/components/data/TableBase/table-tree.js +1 -1
  142. package/dist/components/data/TableBase/types.js +1 -1
  143. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  144. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  145. package/dist/components/data/TableBase/use-column-order.js +1 -1
  146. package/dist/components/data/TableBase/use-column-window.js +1 -1
  147. package/dist/components/data/TableBase/use-container-width.js +1 -1
  148. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  149. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  150. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  151. package/dist/components/data/TableBase/use-table-search.js +1 -1
  152. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  153. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  154. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  155. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  156. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  157. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  158. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  159. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  160. package/dist/components/fields/Checkbox/context.js +1 -1
  161. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  162. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  163. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  164. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  165. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  166. package/dist/components/fields/ComboBox/comboBoxOptions.js +1 -1
  167. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  168. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  169. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  170. package/dist/components/fields/DatePicker/CalendarPopover.js +1 -1
  171. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  172. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  173. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  174. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  175. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  176. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  177. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  178. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  179. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  180. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  181. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  182. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  183. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  184. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  185. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  186. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  187. package/dist/components/fields/DatePicker/period.js +1 -1
  188. package/dist/components/fields/DatePicker/props.js +1 -1
  189. package/dist/components/fields/DatePicker/utils.js +1 -1
  190. package/dist/components/fields/FileInput/FileInput.js +1 -1
  191. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  192. package/dist/components/fields/FilterListBox/styled.js +1 -1
  193. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  194. package/dist/components/fields/FilterPicker/FilterTree.js +1 -1
  195. package/dist/components/fields/Input/Input.js +1 -1
  196. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  197. package/dist/components/fields/ListBox/ListBox.js +1 -1
  198. package/dist/components/fields/ListBox/optionId.js +1 -1
  199. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  200. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  201. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  202. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  203. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  204. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  205. package/dist/components/fields/Picker/Picker.js +1 -1
  206. package/dist/components/fields/RadioGroup/Radio.js +108 -118
  207. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  208. package/dist/components/fields/RadioGroup/RadioGroup.js +10 -12
  209. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  210. package/dist/components/fields/RadioGroup/context.js +1 -1
  211. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  212. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  213. package/dist/components/fields/Select/Select.js +1 -1
  214. package/dist/components/fields/Slider/Gradation.js +1 -1
  215. package/dist/components/fields/Slider/HueSlider.js +1 -1
  216. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  217. package/dist/components/fields/Slider/Slider.js +1 -1
  218. package/dist/components/fields/Slider/SliderBase.js +1 -1
  219. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  220. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  221. package/dist/components/fields/Slider/elements.js +1 -1
  222. package/dist/components/fields/Slider/index.js +1 -1
  223. package/dist/components/fields/Switch/Switch.js +1 -1
  224. package/dist/components/fields/TagInput/TagInput.js +1 -1
  225. package/dist/components/fields/TagInput/TagList.js +1 -1
  226. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  227. package/dist/components/fields/TagInput/useTagError.js +1 -1
  228. package/dist/components/fields/TextArea/TextArea.js +1 -1
  229. package/dist/components/fields/TextInput/TextInput.js +1 -1
  230. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  231. package/dist/components/fields/TextInput/displayed-validation.js +1 -1
  232. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  233. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  234. package/dist/components/fields/TriggerActions.js +1 -1
  235. package/dist/components/fields/color/ColorPanel.js +1 -1
  236. package/dist/components/fields/color/channels.js +1 -1
  237. package/dist/components/fields/color/color.js +1 -1
  238. package/dist/components/fields/color/context.js +1 -1
  239. package/dist/components/fields/option-origin-press.js +1 -1
  240. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  241. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  242. package/dist/components/form/Form/Field.js +1 -1
  243. package/dist/components/form/Form/Form.js +1 -1
  244. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  245. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  246. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  247. package/dist/components/form/Form/SubmitError.js +1 -1
  248. package/dist/components/form/Form/backend.js +1 -1
  249. package/dist/components/form/Form/index.js +1 -1
  250. package/dist/components/form/Form/modern/actions.js +1 -1
  251. package/dist/components/form/Form/modern/context.js +1 -1
  252. package/dist/components/form/Form/modern/controller.js +1 -1
  253. package/dist/components/form/Form/modern/field-binding.js +1 -1
  254. package/dist/components/form/Form/modern/field.js +1 -1
  255. package/dist/components/form/Form/modern/react.js +1 -1
  256. package/dist/components/form/Form/modern/store.js +1 -1
  257. package/dist/components/form/Form/modern/validation.js +1 -1
  258. package/dist/components/form/Form/modern/values.js +1 -1
  259. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  260. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  261. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  262. package/dist/components/form/Form/use-field/use-field.js +1 -1
  263. package/dist/components/form/Form/use-form.js +1 -1
  264. package/dist/components/form/Form/validation.js +1 -1
  265. package/dist/components/form/Label.js +1 -1
  266. package/dist/components/form/field-chrome.js +1 -1
  267. package/dist/components/form/field-layout.js +1 -1
  268. package/dist/components/form/legacy-tooltip.js +1 -1
  269. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  270. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  271. package/dist/components/form/validation/use-validation-props.js +1 -1
  272. package/dist/components/form/wrapper.js +1 -1
  273. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  274. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  275. package/dist/components/layout/Flex.js +1 -1
  276. package/dist/components/layout/Flow.js +1 -1
  277. package/dist/components/layout/Grid.js +1 -1
  278. package/dist/components/layout/Panel.js +1 -1
  279. package/dist/components/layout/Prefix.js +1 -1
  280. package/dist/components/layout/ResizablePanel.js +1 -1
  281. package/dist/components/layout/Space.js +1 -1
  282. package/dist/components/layout/Suffix.js +1 -1
  283. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  284. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  285. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  286. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  287. package/dist/components/navigation/Tabs/TabButton.js +190 -187
  288. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  289. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  290. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  291. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  292. package/dist/components/navigation/Tabs/Tabs.js +2 -1
  293. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  294. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  295. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  296. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  297. package/dist/components/navigation/Tabs/segmented-styles.js +53 -0
  298. package/dist/components/navigation/Tabs/segmented-styles.js.map +1 -0
  299. package/dist/components/navigation/Tabs/styled.js +15 -28
  300. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  301. package/dist/components/navigation/Tabs/types.d.ts +4 -4
  302. package/dist/components/navigation/Tabs/types.js +1 -1
  303. package/dist/components/navigation/Tabs/types.js.map +1 -1
  304. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  305. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  306. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  307. package/dist/components/other/Calendar/Calendar.js +1 -1
  308. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  309. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  310. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  311. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  312. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  313. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  314. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  315. package/dist/components/other/Calendar/styled.js +1 -1
  316. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  317. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  318. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  319. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  320. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  321. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  322. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  323. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  324. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  325. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  326. package/dist/components/overlays/Dialog/context.js +1 -1
  327. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  328. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  329. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  330. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +1 -1
  331. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +1 -1
  332. package/dist/components/overlays/Dialog/use-retained-dialog-focus.js +1 -1
  333. package/dist/components/overlays/Modal/Modal.js +1 -1
  334. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  335. package/dist/components/overlays/Modal/Overlay.js +1 -1
  336. package/dist/components/overlays/Modal/Popover.js +1 -1
  337. package/dist/components/overlays/Modal/Tray.js +1 -1
  338. package/dist/components/overlays/Modal/Underlay.js +1 -1
  339. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  340. package/dist/components/overlays/Notifications/Notification.js +1 -1
  341. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  342. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  343. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  344. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  345. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  346. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  347. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  348. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  349. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  350. package/dist/components/overlays/Notifications/index.js +1 -1
  351. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  352. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  353. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  354. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  355. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  356. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  357. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  358. package/dist/components/overlays/Toast/index.js +1 -1
  359. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  360. package/dist/components/overlays/Toast/useToast.js +1 -1
  361. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  362. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  363. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  364. package/dist/components/overlays/Tooltip/context.js +1 -1
  365. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  366. package/dist/components/portal/Portal.js +1 -1
  367. package/dist/components/portal/PortalProvider.js +1 -1
  368. package/dist/components/portal/usePortal.js +1 -1
  369. package/dist/components/shared/DraggableCollection.js +1 -1
  370. package/dist/components/shared/InvalidIcon.js +1 -1
  371. package/dist/components/shared/ValidIcon.js +1 -1
  372. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  373. package/dist/components/status/Spin/Cube.js +2 -2
  374. package/dist/components/status/Spin/Cube.js.map +1 -1
  375. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  376. package/dist/components/status/Spin/Spin.js +1 -1
  377. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  378. package/dist/data/item-themes.js +70 -70
  379. package/dist/data/item-themes.js.map +1 -1
  380. package/dist/data/themes.js +1 -1
  381. package/dist/eslint-plugin/defaults.generated.js +1 -1
  382. package/dist/eslint-plugin/index.js +1 -1
  383. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  384. package/dist/i18n/I18nProvider.js +1 -1
  385. package/dist/i18n/createFormatter.js +1 -1
  386. package/dist/i18n/index.js +1 -1
  387. package/dist/i18n/instance.js +1 -1
  388. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  389. package/dist/i18n/locales/en-US/uikit.js +1 -1
  390. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  391. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  392. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  393. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  394. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  395. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  396. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  397. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  398. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  399. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  400. package/dist/i18n/locales.js +1 -1
  401. package/dist/i18n/namespace.js +1 -1
  402. package/dist/i18n/useFormatter.js +1 -1
  403. package/dist/i18n/useI18n.js +1 -1
  404. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  405. package/dist/icons/AdjustmentsIcon.js +1 -1
  406. package/dist/icons/AiIcon.js +1 -1
  407. package/dist/icons/AreaChartIcon.js +1 -1
  408. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  409. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  410. package/dist/icons/BackwardIcon.js +1 -1
  411. package/dist/icons/BarChartIcon.js +1 -1
  412. package/dist/icons/BellFilledIcon.js +1 -1
  413. package/dist/icons/BellIcon.js +1 -1
  414. package/dist/icons/BooleanIcon.js +1 -1
  415. package/dist/icons/CalendarEditIcon.js +1 -1
  416. package/dist/icons/CalendarIcon.js +1 -1
  417. package/dist/icons/CaretDownIcon.js +1 -1
  418. package/dist/icons/CaretUpIcon.js +1 -1
  419. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  420. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  421. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  422. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  423. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  424. package/dist/icons/ChartBarLineIcon.js +1 -1
  425. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  426. package/dist/icons/ChartBarStackedIcon.js +1 -1
  427. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  428. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  429. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  430. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  431. package/dist/icons/ChartBubbleIcon.js +1 -1
  432. package/dist/icons/ChartDonut2Icon.js +1 -1
  433. package/dist/icons/ChartFunnelIcon.js +1 -1
  434. package/dist/icons/ChartHeatmapIcon.js +1 -1
  435. package/dist/icons/ChartKPIIcon.js +1 -1
  436. package/dist/icons/ChartPie2Icon.js +1 -1
  437. package/dist/icons/ChartScatterIcon.js +1 -1
  438. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  439. package/dist/icons/CheckCircleIcon.js +1 -1
  440. package/dist/icons/CheckIcon.js +1 -1
  441. package/dist/icons/CircleFilledIcon.js +1 -1
  442. package/dist/icons/ClearIcon.js +1 -1
  443. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  444. package/dist/icons/CloseCircleIcon.js +1 -1
  445. package/dist/icons/CloseIcon.js +1 -1
  446. package/dist/icons/CodeIcon.js +1 -1
  447. package/dist/icons/ColumnTotalIcon.js +1 -1
  448. package/dist/icons/CopyIcon.js +1 -1
  449. package/dist/icons/CountIcon.js +1 -1
  450. package/dist/icons/CubeIcon.js +1 -1
  451. package/dist/icons/CubePauseIcon.js +1 -1
  452. package/dist/icons/CubePlayIcon.js +1 -1
  453. package/dist/icons/CurrencyDollarIcon.js +1 -1
  454. package/dist/icons/DangerIcon.js +1 -1
  455. package/dist/icons/DashboardIcon.js +1 -1
  456. package/dist/icons/DatabaseIcon.js +1 -1
  457. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  458. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  459. package/dist/icons/DirectionIcon.js +1 -1
  460. package/dist/icons/DonutIcon.js +1 -1
  461. package/dist/icons/DownIcon.js +1 -1
  462. package/dist/icons/EditIcon.js +1 -1
  463. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  464. package/dist/icons/ExclamationCircleIcon.js +1 -1
  465. package/dist/icons/ExclamationIcon.js +1 -1
  466. package/dist/icons/EyeIcon.js +1 -1
  467. package/dist/icons/EyeInvisibleIcon.js +1 -1
  468. package/dist/icons/FilterIcon.js +1 -1
  469. package/dist/icons/FolderFilledIcon.js +1 -1
  470. package/dist/icons/FolderIcon.js +1 -1
  471. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  472. package/dist/icons/FolderOpenIcon.js +1 -1
  473. package/dist/icons/ForwardIcon.js +1 -1
  474. package/dist/icons/GripVerticalIcon.js +1 -1
  475. package/dist/icons/HierarchyIcon.js +1 -1
  476. package/dist/icons/HierarchyOpenIcon.js +1 -1
  477. package/dist/icons/Icon.js +1 -1
  478. package/dist/icons/InfoCircleIcon.js +1 -1
  479. package/dist/icons/InfoIcon.js +1 -1
  480. package/dist/icons/KeyIcon.js +1 -1
  481. package/dist/icons/LeftIcon.js +1 -1
  482. package/dist/icons/LineChartIcon.js +1 -1
  483. package/dist/icons/LoadingIcon.js +1 -1
  484. package/dist/icons/LockFilledIcon.js +1 -1
  485. package/dist/icons/LockIcon.js +1 -1
  486. package/dist/icons/MoreIcon.js +1 -1
  487. package/dist/icons/NotAllowedIcon.js +1 -1
  488. package/dist/icons/Number123Icon.js +1 -1
  489. package/dist/icons/NumberIcon.js +1 -1
  490. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  491. package/dist/icons/PauseCircleIcon.js +1 -1
  492. package/dist/icons/PauseIcon.js +1 -1
  493. package/dist/icons/PercentageIcon.js +1 -1
  494. package/dist/icons/PieChartIcon.js +1 -1
  495. package/dist/icons/PipetteIcon.js +1 -1
  496. package/dist/icons/PlayCircleIcon.js +1 -1
  497. package/dist/icons/PlayIcon.js +1 -1
  498. package/dist/icons/PlusIcon.js +1 -1
  499. package/dist/icons/ProgressBarIcon.js +1 -1
  500. package/dist/icons/ReloadIcon.js +1 -1
  501. package/dist/icons/ReportIcon.js +1 -1
  502. package/dist/icons/ReturnIcon.js +1 -1
  503. package/dist/icons/RightIcon.js +1 -1
  504. package/dist/icons/RowTotalsIcon.js +1 -1
  505. package/dist/icons/SchemeIcon.js +1 -1
  506. package/dist/icons/SearchIcon.js +1 -1
  507. package/dist/icons/SemanticQueryIcon.js +1 -1
  508. package/dist/icons/SettingsIcon.js +1 -1
  509. package/dist/icons/ShieldFilledIcon.js +1 -1
  510. package/dist/icons/ShieldIcon.js +1 -1
  511. package/dist/icons/SlashIcon.js +1 -1
  512. package/dist/icons/SparklesIcon.js +1 -1
  513. package/dist/icons/SqlIcon.js +1 -1
  514. package/dist/icons/StatsIcon.js +1 -1
  515. package/dist/icons/StopIcon.js +1 -1
  516. package/dist/icons/StringIcon.js +1 -1
  517. package/dist/icons/SubtotalsIcon.js +1 -1
  518. package/dist/icons/SwitchIcon.js +1 -1
  519. package/dist/icons/TableIcon.js +1 -1
  520. package/dist/icons/ThumbsDownIcon.js +1 -1
  521. package/dist/icons/ThumbsUpIcon.js +1 -1
  522. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  523. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  524. package/dist/icons/ThunderboltIcon.js +1 -1
  525. package/dist/icons/TimeIcon.js +1 -1
  526. package/dist/icons/TrashIcon.js +1 -1
  527. package/dist/icons/UnlockIcon.js +1 -1
  528. package/dist/icons/UpIcon.js +1 -1
  529. package/dist/icons/UserGroupIcon.js +1 -1
  530. package/dist/icons/UserIcon.js +1 -1
  531. package/dist/icons/UserLockIcon.js +1 -1
  532. package/dist/icons/ViewIcon.js +1 -1
  533. package/dist/icons/WarningFilledIcon.js +1 -1
  534. package/dist/icons/WarningIcon.js +1 -1
  535. package/dist/icons/wrap-icon.js +1 -1
  536. package/dist/index.js +1 -1
  537. package/dist/probe/canonicalize.js +1 -1
  538. package/dist/probe/css.js +1 -1
  539. package/dist/probe/index.js +1 -1
  540. package/dist/provider.js +1 -1
  541. package/dist/providers/TrackingProvider.js +1 -1
  542. package/dist/providers/navigation-url.js +1 -1
  543. package/dist/providers/navigationAdapter.default.js +1 -1
  544. package/dist/providers/use-navigation.js +1 -1
  545. package/dist/tokens/all-tokens.js +1 -1
  546. package/dist/tokens/base.js +1 -1
  547. package/dist/tokens/color-seed.js +1 -1
  548. package/dist/tokens/color-theme.js +1 -1
  549. package/dist/tokens/colors.js +1 -1
  550. package/dist/tokens/layout.js +1 -1
  551. package/dist/tokens/lazy-styles.js +1 -1
  552. package/dist/tokens/legacy-color.js +1 -1
  553. package/dist/tokens/palette-config.js +1 -1
  554. package/dist/tokens/palette.js +1 -1
  555. package/dist/tokens/resolve.js +1 -1
  556. package/dist/tokens/shadows.js +1 -1
  557. package/dist/tokens/sizes.js +1 -1
  558. package/dist/tokens/spacing.js +1 -1
  559. package/dist/tokens/typography.js +1 -1
  560. package/dist/utils/ResizeSensor.js +1 -1
  561. package/dist/utils/colors.js +1 -1
  562. package/dist/utils/dotize.js +1 -1
  563. package/dist/utils/is-dev-env.js +1 -1
  564. package/dist/utils/modules.js +1 -1
  565. package/dist/utils/promise.js +1 -1
  566. package/dist/utils/raf.js +1 -1
  567. package/dist/utils/random.js +1 -1
  568. package/dist/utils/range.js +1 -1
  569. package/dist/utils/react/RenderCache.js +1 -1
  570. package/dist/utils/react/Slots.js +1 -1
  571. package/dist/utils/react/chain.js +1 -1
  572. package/dist/utils/react/disabledProps.js +1 -1
  573. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  574. package/dist/utils/react/index.js +1 -1
  575. package/dist/utils/react/interactions.js +1 -1
  576. package/dist/utils/react/isTextOnly.js +1 -1
  577. package/dist/utils/react/mapProps.js +1 -1
  578. package/dist/utils/react/mergeProps.js +1 -1
  579. package/dist/utils/react/nullableValue.js +1 -1
  580. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  581. package/dist/utils/react/programmaticFocus.js +1 -1
  582. package/dist/utils/react/resolveIcon.js +1 -1
  583. package/dist/utils/react/sharedStore.js +1 -1
  584. package/dist/utils/react/useBufferedValue.js +1 -1
  585. package/dist/utils/react/useCombinedRefs.js +1 -1
  586. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  587. package/dist/utils/react/useEventBus.js +1 -1
  588. package/dist/utils/react/useId.js +1 -1
  589. package/dist/utils/react/useIsDarwin.js +1 -1
  590. package/dist/utils/react/useKeySymbols.js +1 -1
  591. package/dist/utils/react/useLayoutEffect.js +1 -1
  592. package/dist/utils/react/useLocalStorage.js +1 -1
  593. package/dist/utils/react/useMergeStyles.js +1 -1
  594. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  595. package/dist/utils/react/usePopoverSync.js +1 -1
  596. package/dist/utils/react/useQaProps.js +1 -1
  597. package/dist/utils/react/useScheme.js +7 -5
  598. package/dist/utils/react/useScheme.js.map +1 -1
  599. package/dist/utils/react/useViewportSize.js +1 -1
  600. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  601. package/dist/utils/selection.js +1 -1
  602. package/dist/utils/styles.js +1 -1
  603. package/dist/utils/tree.js +1 -1
  604. package/dist/utils/warnings.js +1 -1
  605. package/dist/version.js +3 -3
  606. package/docs/Theming.md +1 -1
  607. package/docs/Usage.md +26 -0
  608. package/docs/components/content/Item.md +1 -1
  609. package/docs/components/content/TextItem.md +13 -1
  610. package/docs/components/data/ItemTable.md +1 -1
  611. package/docs/components/fields/RadioGroup.md +5 -4
  612. package/docs/components/navigation/Tabs.md +5 -3
  613. package/docs/tasty/ai-agents.md +3 -2
  614. package/docs/tasty/dsl.md +52 -0
  615. package/docs/tasty/styles.md +27 -15
  616. package/package.json +5 -3
  617. package/tasty.config.generated.ts +526 -0
  618. package/tasty.config.ts +29 -422
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { hslToSrgb, okhslToOklch, okhslToSrgb, okhstToOkhsl, oklabToOkhsl, parseHexAlpha } from "@tenphi/glaze";
3
3
  //#region src/utils/colors.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/dotize.ts
3
3
  /**
4
4
  * Flattens a nested object into dot paths: `{ a: { b: 1 } }` becomes
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/is-dev-env.ts
3
3
  /**
4
4
  * `NODE_ENV` as the environment that is actually running reports it, or
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/modules.ts
3
3
  function extractModule(promise) {
4
4
  return promise.then((module) => module.default || module);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/promise.ts
3
3
  function timeout(ms = 30) {
4
4
  return new Promise((resolve) => {
package/dist/utils/raf.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/raf.ts
3
3
  /**
4
4
  * Chains N requestAnimationFrame calls and returns a cancel function.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/random.ts
3
3
  function random(min, max) {
4
4
  const realMin = min < max ? min : max;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/range.ts
3
3
  function range(count) {
4
4
  return Array.from({ length: count }, (_, i) => i);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useRef } from "react";
3
3
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
4
4
  //#region src/utils/react/RenderCache.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { mergeProps } from "./mergeProps.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { Children, cloneElement, createContext, useContext } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/chain.ts
3
3
  /**
4
4
  * Calls all functions in the order they were chained with the same arguments.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { mergeProps } from "./mergeProps.js";
3
3
  //#region src/utils/react/disabledProps.ts
4
4
  /**
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/forwardRefWithGenerics.tsx
3
3
  /**
4
4
  * @deprecated Declare a ref prop on a generic component, or preserve an
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { useLayoutEffect } from "./useLayoutEffect.js";
4
4
  import { mergeProps } from "./mergeProps.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { Children, isValidElement } from "react";
3
3
  //#region src/utils/react/isTextOnly.ts
4
4
  function isTextOnly(children) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/mapProps.ts
3
3
  /** Converts AriaButtonProps to CubeButtonProps */
4
4
  function ariaToCubeButtonProps(props) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { mergeIds } from "./useId.js";
4
4
  import { mergeStyles } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/nullableValue.ts
3
3
  function castNullableStringValue(props, emptyValue = "") {
4
4
  return castNullableField(props, ["value", "defaultValue"], "string", (v) => String(v), emptyValue);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/overlayKeyPropagation.ts
3
3
  /**
4
4
  * Keys whose final handling belongs to the overlay around a control, not to
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/programmaticFocus.ts
3
3
  /**
4
4
  * Telling focus the user moved from focus a component moved for them.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/resolveIcon.ts
3
3
  /**
4
4
  * Resolves a dynamic icon prop to its content and slot state.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { isDevEnv } from "../is-dev-env.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { useCallback, useRef, useState } from "react";
4
4
  //#region src/utils/react/useBufferedValue.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useEffect, useRef } from "react";
4
4
  //#region src/utils/react/useCombinedRefs.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { createSharedStore } from "./sharedStore.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useEffect } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import React, { createContext, useCallback, useContext, useEffect, useMemo, useRef } from "react";
4
4
  //#region src/utils/react/useEventBus.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import "react/compiler-runtime";
4
4
  import { useEffect, useRef, useState } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useEffect, useState } from "react";
4
4
  //#region src/utils/react/useIsDarwin.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useIsDarwin } from "./useIsDarwin.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  //#region src/utils/react/useKeySymbols.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import * as React$1 from "react";
3
3
  //#region src/utils/react/useLayoutEffect.tsx
4
4
  const useLayoutEffect$1 = typeof window !== "undefined" ? React$1.useLayoutEffect : React$1.useEffect;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useSyncExternalStore } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { mergeStyles } from "@tenphi/tasty";
3
3
  import { useMemo } from "react";
4
4
  //#region src/utils/react/useMergeStyles.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { getEventTarget, nodeContains } from "@react-aria/utils";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { EventBusContext, useEventBus } from "./useEventBus.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useContext, useEffect, useEffectEvent, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/utils/react/useQaProps.ts
3
3
  /**
4
4
  * Processes QA props.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { useSyncExternalStore } from "react";
3
3
  //#region src/utils/react/useScheme.ts
4
4
  /**
@@ -40,10 +40,11 @@ const CONTRAST_ATTR = `data-${CONTRAST_KEY}`;
40
40
  const DARK_QUERY = "(prefers-color-scheme: dark)";
41
41
  const HIGH_CONTRAST_QUERY = "(prefers-contrast: more)";
42
42
  /**
43
- * The `@dark` / `@hc` state aliases, in tasty's DSL — registered globally by
44
- * `<Root>` via `setGlobalPredefinedStates()`.
43
+ * The `@dark` / `@hc` / `@reduced-motion` state aliases, in tasty's DSL —
44
+ * registered globally by `<Root>` via `setGlobalPredefinedStates()`.
45
45
  *
46
- * The attribute opt-in wins over the system preference, and the fallback is
46
+ * `@reduced-motion` follows the system preference alone. For the two schemes,
47
+ * the attribute opt-in wins over the system preference, and the fallback is
47
48
  * gated on the attribute being *absent* (`!@root(scheme)`) rather than on it
48
49
  * being some other value — so `<html data-scheme="light">` stays light inside a
49
50
  * dark OS, which is the whole point of an opt-in. {@link resolveScheme} and
@@ -51,7 +52,8 @@ const HIGH_CONTRAST_QUERY = "(prefers-contrast: more)";
51
52
  */
52
53
  const AMBIENT_PREDEFINED_STATES = {
53
54
  "@dark": `@root(${SCHEME_KEY}=dark) | (!@root(${SCHEME_KEY}) & @media${DARK_QUERY})`,
54
- "@hc": `@root(${CONTRAST_KEY}=high) | (!@root(${CONTRAST_KEY}) & @media${HIGH_CONTRAST_QUERY})`
55
+ "@hc": `@root(${CONTRAST_KEY}=high) | (!@root(${CONTRAST_KEY}) & @media${HIGH_CONTRAST_QUERY})`,
56
+ "@reduced-motion": `@media(prefers-reduced-motion: reduce)`
55
57
  };
56
58
  /**
57
59
  * `matchMedia` is called per read rather than cached, so a test that stubs it
@@ -1 +1 @@
1
- {"version":3,"file":"useScheme.js","names":["useSyncExternalStore","SCHEME_KEY","CONTRAST_KEY","SCHEME_ATTR","CONTRAST_ATTR","DARK_QUERY","HIGH_CONTRAST_QUERY","AMBIENT_PREDEFINED_STATES","const","ColorScheme","mediaMatches","query","window","matchMedia","matches","rootAttribute","name","document","documentElement","getAttribute","resolveScheme","attribute","resolveHighContrast","listeners","Set","stopWatching","notify","forEach","listener","startWatching","teardowns","list","addEventListener","push","removeEventListener","MutationObserver","observer","observe","attributes","attributeFilter","disconnect","teardown","subscribeScheme","add","delete","size","getServerScheme","getServerHighContrast","useScheme","useHighContrast"],"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,MAAMC,aAAa;AACnB,MAAMC,eAAe;AACrB,MAAMC,cAAc,QAAQF;AAC5B,MAAMG,gBAAgB,QAAQF;AAC9B,MAAMG,aAAa;AACnB,MAAMC,sBAAsB;;;;;;;;;;;AAY5B,MAAaC,4BAA4B;CACvC,SAAS,SAASN,WAAU,mBAAoBA,WAAU,YAAaI,WAAU;CACjF,OAAO,SAASH,aAAY,mBAAoBA,aAAY,YAAaI,oBAAmB;AAC9F;;;;;;AAcA,SAASI,aAAaC,OAAwB;CAC5C,OAAO,OAAOC,WAAW,eACvB,OAAOA,OAAOC,eAAe,aAC3BD,OAAOC,WAAWF,KAAK,CAAC,CAACG,UACzB;AACN;AAEA,SAASC,cAAcC,MAA6B;CAClD,OAAO,OAAOC,aAAa,cACvB,OACAA,SAASC,gBAAgBC,aAAaH,IAAI;AAChD;;;;;;;;AASA,SAAgBI,gBAA6B;CAC3C,MAAMC,YAAYN,cAAcZ,WAAW;CAE3C,IAAIkB,cAAc,MAChB,OAAOA,cAAc,SAAS,SAAS;CAGzC,OAAOX,aAAaL,UAAU,IAAI,SAAS;AAC7C;;;;;;;;;;AAWA,SAAgBiB,sBAA+B;CAC7C,MAAMD,YAAYN,cAAcX,aAAa;CAE7C,IAAIiB,cAAc,MAChB,OAAOA,cAAc;CAGvB,OAAOX,aAAaJ,mBAAmB;AACzC;AAMA,MAAMiB,4BAAY,IAAIC,IAAgB;AAEtC,IAAIC,eAAoC;AAExC,SAASC,SAAS;CAChBH,UAAUI,SAASC,aAAaA,SAAS,CAAC;AAC5C;;;;;;;;AASA,SAASC,gBAA4B;CACnC,IAAI,OAAOZ,aAAa,aACtB,aAAa,CAAC;CAGhB,MAAMa,YAA4B,CAAA;CAMlC,IACE,OAAOlB,WAAW,eAClB,OAAOA,OAAOC,eAAe,YAE7B,KAAK,MAAMF,SAAS,CAACN,YAAYC,mBAAmB,GAAG;EACrD,MAAMyB,OAAOnB,OAAOC,WAAWF,KAAK;EAEpC,IAAI,OAAOoB,MAAMC,qBAAqB,YAAY;EAElDD,KAAKC,iBAAiB,UAAUN,MAAM;EACtCI,UAAUG,WAAWF,KAAKG,oBAAoB,UAAUR,MAAM,CAAC;CACjE;CAGF,IAAI,OAAOS,qBAAqB,cAAclB,SAASC,iBAAiB;EACtE,MAAMkB,WAAW,IAAID,iBAAiBT,MAAM;EAE5CU,SAASC,QAAQpB,SAASC,iBAAiB;GACzCoB,YAAY;GACZC,iBAAiB,CAACpC,aAAaC,aAAa;EAC9C,CAAC;EAED0B,UAAUG,WAAWG,SAASI,WAAW,CAAC;CAC5C;CAEA,aAAaV,UAAUH,SAASc,aAAaA,SAAS,CAAC;AACzD;;;;;;;;;;AAWA,SAAgBC,gBAAgBd,UAAkC;CAChEL,UAAUoB,IAAIf,QAAQ;CAEtB,IAAI,CAACH,cACHA,eAAeI,cAAc;CAG/B,aAAa;EACXN,UAAUqB,OAAOhB,QAAQ;EAEzB,IAAI,CAACL,UAAUsB,QAAQpB,cAAc;GACnCA,aAAa;GACbA,eAAe;EACjB;CACF;AACF;;;;;;AAWA,MAAMqB,wBAAqC;AAC3C,MAAMC,8BAA8B;;;;;;;;;;;;;;AAepC,SAAOC,YAAA;CAAA,OACEhD,qBAAqB0C,iBAAiBtB,eAAe0B,eAAe;AAAC;;;;;;;;;AAW9E,SAAOG,kBAAA;CAAA,OACEjD,qBACL0C,iBACApB,qBACAyB,qBACF;AAAC"}
1
+ {"version":3,"file":"useScheme.js","names":["useSyncExternalStore","SCHEME_KEY","CONTRAST_KEY","SCHEME_ATTR","CONTRAST_ATTR","DARK_QUERY","HIGH_CONTRAST_QUERY","REDUCED_MOTION_QUERY","AMBIENT_PREDEFINED_STATES","const","ColorScheme","mediaMatches","query","window","matchMedia","matches","rootAttribute","name","document","documentElement","getAttribute","resolveScheme","attribute","resolveHighContrast","listeners","Set","stopWatching","notify","forEach","listener","startWatching","teardowns","list","addEventListener","push","removeEventListener","MutationObserver","observer","observe","attributes","attributeFilter","disconnect","teardown","subscribeScheme","add","delete","size","getServerScheme","getServerHighContrast","useScheme","useHighContrast"],"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)';\nconst REDUCED_MOTION_QUERY = '(prefers-reduced-motion: reduce)';\n\n/**\n * The `@dark` / `@hc` / `@reduced-motion` state aliases, in tasty's DSL —\n * registered globally by `<Root>` via `setGlobalPredefinedStates()`.\n *\n * `@reduced-motion` follows the system preference alone. For the two schemes,\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 '@reduced-motion': `@media${REDUCED_MOTION_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,MAAMC,aAAa;AACnB,MAAMC,eAAe;AACrB,MAAMC,cAAc,QAAQF;AAC5B,MAAMG,gBAAgB,QAAQF;AAC9B,MAAMG,aAAa;AACnB,MAAMC,sBAAsB;;;;;;;;;;;;AAc5B,MAAaE,4BAA4B;CACvC,SAAS,SAASP,WAAU,mBAAoBA,WAAU,YAAaI,WAAU;CACjF,OAAO,SAASH,aAAY,mBAAoBA,aAAY,YAAaI,oBAAmB;CAC5F,mBAAmB;AACrB;;;;;;AAcA,SAASK,aAAaC,OAAwB;CAC5C,OAAO,OAAOC,WAAW,eACvB,OAAOA,OAAOC,eAAe,aAC3BD,OAAOC,WAAWF,KAAK,CAAC,CAACG,UACzB;AACN;AAEA,SAASC,cAAcC,MAA6B;CAClD,OAAO,OAAOC,aAAa,cACvB,OACAA,SAASC,gBAAgBC,aAAaH,IAAI;AAChD;;;;;;;;AASA,SAAgBI,gBAA6B;CAC3C,MAAMC,YAAYN,cAAcb,WAAW;CAE3C,IAAImB,cAAc,MAChB,OAAOA,cAAc,SAAS,SAAS;CAGzC,OAAOX,aAAaN,UAAU,IAAI,SAAS;AAC7C;;;;;;;;;;AAWA,SAAgBkB,sBAA+B;CAC7C,MAAMD,YAAYN,cAAcZ,aAAa;CAE7C,IAAIkB,cAAc,MAChB,OAAOA,cAAc;CAGvB,OAAOX,aAAaL,mBAAmB;AACzC;AAMA,MAAMkB,4BAAY,IAAIC,IAAgB;AAEtC,IAAIC,eAAoC;AAExC,SAASC,SAAS;CAChBH,UAAUI,SAASC,aAAaA,SAAS,CAAC;AAC5C;;;;;;;;AASA,SAASC,gBAA4B;CACnC,IAAI,OAAOZ,aAAa,aACtB,aAAa,CAAC;CAGhB,MAAMa,YAA4B,CAAA;CAMlC,IACE,OAAOlB,WAAW,eAClB,OAAOA,OAAOC,eAAe,YAE7B,KAAK,MAAMF,SAAS,CAACP,YAAYC,mBAAmB,GAAG;EACrD,MAAM0B,OAAOnB,OAAOC,WAAWF,KAAK;EAEpC,IAAI,OAAOoB,MAAMC,qBAAqB,YAAY;EAElDD,KAAKC,iBAAiB,UAAUN,MAAM;EACtCI,UAAUG,WAAWF,KAAKG,oBAAoB,UAAUR,MAAM,CAAC;CACjE;CAGF,IAAI,OAAOS,qBAAqB,cAAclB,SAASC,iBAAiB;EACtE,MAAMkB,WAAW,IAAID,iBAAiBT,MAAM;EAE5CU,SAASC,QAAQpB,SAASC,iBAAiB;GACzCoB,YAAY;GACZC,iBAAiB,CAACrC,aAAaC,aAAa;EAC9C,CAAC;EAED2B,UAAUG,WAAWG,SAASI,WAAW,CAAC;CAC5C;CAEA,aAAaV,UAAUH,SAASc,aAAaA,SAAS,CAAC;AACzD;;;;;;;;;;AAWA,SAAgBC,gBAAgBd,UAAkC;CAChEL,UAAUoB,IAAIf,QAAQ;CAEtB,IAAI,CAACH,cACHA,eAAeI,cAAc;CAG/B,aAAa;EACXN,UAAUqB,OAAOhB,QAAQ;EAEzB,IAAI,CAACL,UAAUsB,QAAQpB,cAAc;GACnCA,aAAa;GACbA,eAAe;EACjB;CACF;AACF;;;;;;AAWA,MAAMqB,wBAAqC;AAC3C,MAAMC,8BAA8B;;;;;;;;;;;;;;AAepC,SAAOC,YAAA;CAAA,OACEjD,qBAAqB2C,iBAAiBtB,eAAe0B,eAAe;AAAC;;;;;;;;;AAW9E,SAAOG,kBAAA;CAAA,OACElD,qBACL2C,iBACApB,qBACAyB,qBACF;AAAC"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useEffect, useState } from "react";
4
4
  //#region src/utils/react/useViewportSize.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { Fragment, isValidElement } from "react";
3
3
  //#region src/utils/react/wrapNodeIfPlain.ts
4
4
  function wrapNodeIfPlain(children, render) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.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.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { isSelector, mergeStyles } from "@tenphi/tasty";
3
3
  //#region src/utils/styles.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.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.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  import { isDevEnvOrTest } from "./is-dev-env.js";
3
3
  //#region src/utils/warnings.ts
4
4
  const SUGGESTED_PROP_MAP = {
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.205.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.206.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.205.0";
4
- const TASTY_VERSION = "3.15.0";
3
+ const VERSION = "0.206.0";
4
+ const TASTY_VERSION = "3.17.1";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
7
7
  const tastyVersion = TASTY_VERSION;
package/docs/Theming.md CHANGED
@@ -451,7 +451,7 @@ invalidatePaletteTokens(); // only needed once the kit is already mounted
451
451
 
452
452
  `contrastLevel` is the one field the kit writes to Glaze's global config, and it only ever does so if you asked for a level. A host that sets its own `glaze.configure({ contrastLevel })` and never passes `contrastLevel` here keeps it.
453
453
 
454
- **Some things are not tunable at all.** Tasty locks its configuration on the first style injection, so the `@dark` / `@hc` state definitions (set in `Root`) are fixed for the lifetime of the page. Only token _values_ stay mutable — which is all re-seeding needs.
454
+ **Some things are not tunable at all.** Tasty locks its configuration on the first style injection, so the `@dark` / `@hc` / `@reduced-motion` state definitions (set in `Root`) are fixed for the lifetime of the page. Only token _values_ stay mutable — which is all re-seeding needs.
455
455
 
456
456
  ## See also
457
457
 
package/docs/Usage.md CHANGED
@@ -447,6 +447,17 @@ An intended override takes a disable comment with its reason on the line before
447
447
 
448
448
  With this rule on, `tasty/no-styles-prop` can stay off, so the primitives keep their `styles`.
449
449
 
450
+ The same `extends` gives the plugin's other rules the names UI Kit defines: its tokens, presets and recipes, and the `@dark`, `@hc` and `@reduced-motion` state aliases. `tasty/valid-color-token`, `tasty/valid-custom-property`, `tasty/valid-preset`, `tasty/valid-recipe`, `tasty/valid-state-key` and `tasty/no-unknown-state-alias` then report only names that don't exist. List what your app defines itself, in its own `configure()` or `tokens`, in its own config, which adds to the lists it extends:
451
+
452
+ ```ts
453
+ // tasty.config.ts
454
+ export default {
455
+ extends: '@cube-dev/ui-kit',
456
+ states: ['@mobile'],
457
+ tokens: ['#brand'],
458
+ };
459
+ ```
460
+
450
461
  ## Recipes
451
462
 
452
463
  Reusable style presets applied via the `recipe` style property. Defined in `src/components/Root.tsx`.
@@ -499,6 +510,21 @@ fill: {
499
510
  }
500
511
  ```
501
512
 
513
+ ### Reduced Motion
514
+
515
+ `<Root>` registers a global `@reduced-motion` state beside [`@dark` and `@hc`](#color-schemes). It matches `@media (prefers-reduced-motion: reduce)`. Use it to stop or shorten motion for users who ask for less:
516
+
517
+ ```tsx
518
+ const Spinner = tasty({
519
+ styles: {
520
+ animation: 'spin 1s linear infinite',
521
+ animationPlayState: { '': 'running', '@reduced-motion': 'paused' },
522
+ },
523
+ });
524
+ ```
525
+
526
+ It follows the system preference alone, with no attribute opt-in.
527
+
502
528
  ## Icons
503
529
 
504
530
  Icons live in `src/icons/`. Use existing icons when possible; otherwise use `@tabler/icons-react`.
@@ -399,7 +399,7 @@ By default, Item shows an auto tooltip when content overflows. The label and a s
399
399
  - `string` - Shows tooltip with the specified text (always visible, not auto)
400
400
  - `object` - Advanced configuration:
401
401
  - `title?: string` - Custom tooltip text (when provided, always shows tooltip unless `auto: true`)
402
- - `auto?: boolean` - Enable/disable auto overflow behavior (defaults to `true` when no `title` is provided)
402
+ - `auto?: boolean` - Enable/disable auto overflow behavior (defaults to `true` when no `title` is provided). The automatic tooltip measures only a string label or description, because it shows the text that is cut off. With a `title`, `auto: true` measures a label or description of any kind, an element one included, and shows the `title` only while one of them is cut off. Only their own boxes are measured, so a child that clips its own text doesn't count. The check reruns when they resize or the `title` text changes, so derive a string `title` from the same text.
403
403
  - `placement?: string` - Tooltip position (top, bottom, left, right, etc.)
404
404
  - Plus other [TooltipProvider props](../overlays/Tooltip.md)
405
405
 
@@ -20,7 +20,7 @@ TextItem renders one line truncated with an ellipsis, so Text's `ellipsis` and `
20
20
  - **`highlight`** `string` — String to highlight within children (only works when children is a plain string)
21
21
  - **`highlightCaseSensitive`** `boolean` (default: `false`) — Whether highlight matching is case-sensitive
22
22
  - **`highlightStyles`** `Styles` — Custom styles for highlighted text portions
23
- - **`tooltip`** `string | boolean | TooltipProviderProps` (default: `true`) — Tooltip configuration. `true` enables auto tooltip on overflow, a string shows fixed tooltip text, an object supports advanced configuration.
23
+ - **`tooltip`** `string | boolean | TooltipProviderProps` (default: `true`) — Tooltip configuration. `true` enables auto tooltip on overflow for string children, a string shows fixed tooltip text, an object supports advanced configuration. `{ title, auto: true }` shows `title` only on overflow, for any children (see [Overflow Tooltip for an Element Label](#overflow-tooltip-for-an-element-label)).
24
24
  - **`tooltipPlacement`** `Placement` (default: `top`) — Default tooltip placement
25
25
  - **`monospace`** `boolean` — Use monospace font
26
26
  - **`italic`** `string` — Font style (e.g. `'italic'`)
@@ -66,6 +66,18 @@ When text overflows its container, hovering reveals a tooltip with the full cont
66
66
  </Block>
67
67
  ```
68
68
 
69
+ ### Overflow Tooltip for an Element Label
70
+
71
+ The automatic tooltip shows the text that is cut off, so it needs string children. When the label is built from elements, such as a commit hash coloured apart from its message, give the tooltip its own `title` with `auto: true`. It then shows only while the label is cut off:
72
+
73
+ ```jsx
74
+ <TextItem tooltip={{ title: `${hash}: ${message}`, auto: true }}>
75
+ <Text color="#dark">{hash}:</Text> {message}
76
+ </TextItem>
77
+ ```
78
+
79
+ Only the label's own box is measured. A child that clips its own text, such as a nested `Text` with its own `ellipsis`, never makes the label overflow, so it shows no tooltip. The check reruns when the label resizes or the `title` text changes, so derive a string `title` from the same text as the label.
80
+
69
81
  ### Text Highlighting
70
82
 
71
83
  Highlight matching text within the content - useful for search results:
@@ -215,7 +215,7 @@ const Compact = tasty(ItemTable, {
215
215
  });
216
216
  ```
217
217
 
218
- Rows publish their paint as inherited custom properties — `#row-base`, `#row-overlay`, `$row-overlay-weight`, `#row-text` and `$dim` — which cells consume. `#row-overlay` is an opaque color that cells mix into `#row-base` at `$row-overlay-weight` (a percentage), so each cell paints one solid background color. That is what lets a pinned (and therefore opaque) cell match its row's state without duplicating the state matrix.
218
+ Rows publish their paint as inherited custom properties — `#row-base`, `#row-overlay`, `$row-overlay-weight`, `#row-text` and `$dim` — which cells consume. `#row-overlay` is an opaque color that cells layer over `#row-base` at `$row-overlay-weight`, a number from 0 to 1 read as its opacity (`#row-base+#row-overlay.$row-overlay-weight`), so each cell paints one solid background color. That is what lets a pinned (and therefore opaque) cell match its row's state without duplicating the state matrix.
219
219
 
220
220
  Geometry runs through tokens too: `$row-height`, `$header-height`, `$cell-padding-x` (16px) and `$cell-padding-y`. Height lives on the **cells**, not the `<tr>` — table layout ignores `min-height` on a row and sizes it from its cells instead.
221
221
 
@@ -100,6 +100,7 @@ The `mods` property accepts the following modifiers you can override:
100
100
 
101
101
  - **`horizontal`** `boolean` — Whether the radio group is oriented horizontally
102
102
  - **`tabs`** `boolean` — Whether the radio group uses tabs styling
103
+ - **`segmented`** `boolean` — Set with `tabs`: the segmented control look, shared with `Tabs type="radio"`, applies to it. Each `Radio` in the group carries it too
103
104
  - **`inside-form`** `boolean` — Whether the radio group is inside a form field
104
105
  - **`side-label`** `boolean` — Whether the label is positioned at the side
105
106
  - **`fill-width`** `boolean` — Set when the group's style props size its field's width (`width`, `inlineSize`, `flex*`); the group then fills it
@@ -112,7 +113,7 @@ Each `Radio` carries **`readonly`** while its group is `isReadOnly`. A classic r
112
113
 
113
114
  - `radio` - Traditional radio button appearance (default)
114
115
  - `button` - Button-style radio options with spacing
115
- - `tabs` - Connected tab-style buttons (compact, clear styling)
116
+ - `tabs` - A segmented control. It takes the look of [Tabs](../navigation/Tabs.md) `type="radio"` from one shared style definition: the track, the white chip on the selected option, hover, the keyboard focus ring on the focused option, the disabled look (the selected chip stays, the labels fade) and the text size. Recolor it through the tokens [Tabs → Theming](../navigation/Tabs.md#theming) lists. An invalid or valid group also tints its idle labels. Only the layout differs: its options size to their labels, while tabs share the track equally.
116
117
 
117
118
  **Default Orientation:**
118
119
 
@@ -141,10 +142,10 @@ Controls the size of all radio buttons in the group:
141
142
 
142
143
  **Size Mapping in Tabs Mode:** When `type="tabs"`, sizes are automatically mapped to maintain visual consistency:
143
144
 
144
- - `large` → `medium`
145
- - every other size → `xsmall`
145
+ - `large` → `medium` (a 40px control, t3m text)
146
+ - every other size → `xsmall` (a 32px control, t4 text)
146
147
 
147
- Only `large` is carried through; `xsmall`, `small`, `medium` and `xlarge` all collapse to `xsmall`. This ensures tab groups remain compact and cohesive.
148
+ Only `large` is carried through; `xsmall`, `small`, `medium` and `xlarge` all collapse to `xsmall`. These are the sizes `Tabs type="radio"` uses, so the two controls match at either size.
148
149
 
149
150
  ### Button Type
150
151
 
@@ -85,6 +85,7 @@ These properties allow direct style application without using the `styles` prop:
85
85
  The `mods` property accepts the following modifiers:
86
86
 
87
87
  - **`type`** `'default' \| 'narrow' \| 'file' \| 'radio'` — Current tab type
88
+ - **`segmented`** `boolean` — True for the `radio` type, the segmented control it shares with `Radio.Tabs`
88
89
  - **`placement`** `'top' \| 'bottom' \| 'left' \| 'right'` — Current bar placement
89
90
  - **`deletable`** `boolean` — True when onDelete callback is provided
90
91
  - **`scrolling`** `boolean` — True when tabs are being scrolled
@@ -95,6 +96,7 @@ The `mods` property accepts the following modifiers:
95
96
  For individual tabs:
96
97
 
97
98
  - **`type`** `'default' \| 'narrow' \| 'file' \| 'radio'` — Current tab type
99
+ - **`segmented`** `boolean` — True for a `radio` tab, a segment of the shared segmented control
98
100
  - **`active`** `boolean` — True when the tab is selected
99
101
  - **`deletable`** `boolean` — True when delete button is visible
100
102
  - **`disabled`** `boolean` — True when tab is disabled
@@ -159,16 +161,16 @@ A navigation strip with no panels, themed with your own tokens:
159
161
  - `default` - Standard tabs with selection indicator below (default)
160
162
  - `narrow` - Same as default but with collapsed horizontal label padding for compact layouts
161
163
  - `file` - File-style tabs with border bottom highlight on selection, delimiter between tabs
162
- - `radio` - Radio button style for tab selection. This is the right choice for a compact switcher that is _not_ a form field — a view toolbar, a segmented control over page content. [`Radio.Tabs`](../fields/RadioGroup.md) looks the same but is a form control, so keep it for choices inside a `Form`
164
+ - `radio` - Radio button style for tab selection. This is the right choice for a compact switcher that is _not_ a form field — a view toolbar, a segmented control over page content. [`Radio.Tabs`](../fields/RadioGroup.md) takes the same segmented look from one shared style definition (only the layout differs: its options size to their labels, while tabs share the track equally), but it is a form control, so keep it for choices inside a `Form`
163
165
 
164
166
  ### Sizes
165
167
 
166
168
  - `xsmall` - Extra small size with t4 typography
167
- - `small` - Small size with t3m typography (default)
169
+ - `small` - Small size with t3m typography
168
170
  - `medium` - Default size with t3m typography
169
171
  - `large` - Larger tabs with t3m typography
170
172
 
171
- **Note:** Radio type supports `large` (default, 40px total) and `medium` (32px total) sizes, mapped to Item button sizes `medium` (32px) and `xsmall` (24px) respectively. A radio tab given less room than its title (an explicit `width`, say) truncates the title and shows it in a tooltip.
173
+ **Note:** Radio type supports `medium` (default, 32px total) and `large` (40px total) sizes, mapped to Item button sizes `xsmall` (24px, t4 text) and `medium` (32px, t3m text) respectively. `Radio.Tabs` maps its sizes the same way. A radio tab given less room than its title (an explicit `width`, say) truncates the title and shows it in a tooltip.
172
174
 
173
175
  ### Placement / Vertical Tabs
174
176