@cube-dev/ui-kit 0.164.0 → 0.165.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 (582) hide show
  1. package/dist/CHANGELOG.md +17 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +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.d.ts +0 -1
  20. package/dist/components/actions/Button/Button.js +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  23. package/dist/components/actions/ButtonSplit/context.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  25. package/dist/components/actions/CommandMenu/styled.js +1 -1
  26. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  27. package/dist/components/actions/ItemActionContext.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.js +1 -1
  59. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  60. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  61. package/dist/components/content/Layout/GridLayout.js +1 -1
  62. package/dist/components/content/Layout/Layout.js +1 -1
  63. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  64. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  65. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  66. package/dist/components/content/Layout/LayoutContent.js +1 -1
  67. package/dist/components/content/Layout/LayoutContext.js +1 -1
  68. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  69. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  70. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  71. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutPane.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  76. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  77. package/dist/components/content/Layout/index.js +1 -1
  78. package/dist/components/content/Layout/utils.js +1 -1
  79. package/dist/components/content/Paragraph.js +1 -1
  80. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  81. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  82. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  83. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  84. package/dist/components/content/Result/Result.js +1 -1
  85. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  86. package/dist/components/content/Tag/Tag.js +1 -1
  87. package/dist/components/content/Text.d.ts +14 -14
  88. package/dist/components/content/Text.js +1 -1
  89. package/dist/components/content/TextItem/TextItem.js +1 -1
  90. package/dist/components/content/Title.js +1 -1
  91. package/dist/components/content/Tree/Tree.js +1 -1
  92. package/dist/components/content/Tree/TreeNode.js +1 -1
  93. package/dist/components/content/Tree/styled.js +1 -1
  94. package/dist/components/content/Tree/tree-index.js +1 -1
  95. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  96. package/dist/components/content/Tree/use-load-data.js +1 -1
  97. package/dist/components/content/highlightText.js +1 -1
  98. package/dist/components/content/use-auto-tooltip.js +1 -1
  99. package/dist/components/data/DataTable/DataTable.js +140 -21
  100. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  101. package/dist/components/data/DataTable/index.d.ts +1 -1
  102. package/dist/components/data/DataTable/types.d.ts +19 -4
  103. package/dist/components/data/ItemTable/ItemTable.js +169 -25
  104. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  105. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  109. package/dist/components/data/ItemTable/types.d.ts +7 -2
  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 +30 -5
  114. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  115. package/dist/components/data/TableBase/TableView.d.ts +2 -1
  116. package/dist/components/data/TableBase/TableView.js +299 -75
  117. package/dist/components/data/TableBase/TableView.js.map +1 -1
  118. package/dist/components/data/TableBase/column-menu.js +1 -1
  119. package/dist/components/data/TableBase/column-tint.js +1 -1
  120. package/dist/components/data/TableBase/index.d.ts +1 -1
  121. package/dist/components/data/TableBase/row-menu.js +1 -1
  122. package/dist/components/data/TableBase/styled.d.ts +1 -2
  123. package/dist/components/data/TableBase/styled.js +75 -2
  124. package/dist/components/data/TableBase/styled.js.map +1 -1
  125. package/dist/components/data/TableBase/table-tree.js +129 -0
  126. package/dist/components/data/TableBase/table-tree.js.map +1 -0
  127. package/dist/components/data/TableBase/types.d.ts +46 -1
  128. package/dist/components/data/TableBase/types.js +1 -1
  129. package/dist/components/data/TableBase/types.js.map +1 -1
  130. package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
  131. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  132. package/dist/components/data/TableBase/use-column-order.js +1 -1
  133. package/dist/components/data/TableBase/use-container-width.js +1 -1
  134. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  135. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  136. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  137. package/dist/components/data/TableBase/use-table-search.js +4 -4
  138. package/dist/components/data/TableBase/use-table-search.js.map +1 -1
  139. package/dist/components/data/TableBase/use-table-selection.js +124 -24
  140. package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
  141. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  142. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  143. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  144. package/dist/components/data/TableBase/use-table-tree-state.js +107 -0
  145. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -0
  146. package/dist/components/data/index.d.ts +2 -2
  147. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  148. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  149. package/dist/components/fields/Checkbox/context.js +1 -1
  150. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  151. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  152. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  153. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  154. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  155. package/dist/components/fields/CommandTextArea/CommandTextArea.js +8 -25
  156. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  157. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  158. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  159. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  160. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  161. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  162. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  163. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  164. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  165. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  166. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  167. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  168. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  169. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  170. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  171. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  172. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  173. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  174. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  175. package/dist/components/fields/DatePicker/period.js +1 -1
  176. package/dist/components/fields/DatePicker/props.js +1 -1
  177. package/dist/components/fields/DatePicker/utils.js +1 -1
  178. package/dist/components/fields/FileInput/FileInput.js +1 -1
  179. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  180. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  181. package/dist/components/fields/Input/Input.js +1 -1
  182. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  183. package/dist/components/fields/ListBox/ListBox.js +1 -1
  184. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  185. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
  186. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  187. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  188. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  189. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  190. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  191. package/dist/components/fields/Picker/Picker.js +1 -1
  192. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  193. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  194. package/dist/components/fields/RadioGroup/context.js +1 -1
  195. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  196. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  197. package/dist/components/fields/Select/Select.js +1 -1
  198. package/dist/components/fields/Slider/Gradation.js +1 -1
  199. package/dist/components/fields/Slider/HueSlider.js +1 -1
  200. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  201. package/dist/components/fields/Slider/Slider.js +1 -1
  202. package/dist/components/fields/Slider/SliderBase.js +1 -1
  203. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  204. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  205. package/dist/components/fields/Slider/elements.js +1 -1
  206. package/dist/components/fields/Slider/index.js +1 -1
  207. package/dist/components/fields/Switch/Switch.js +1 -1
  208. package/dist/components/fields/TextArea/TextArea.js +10 -29
  209. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  210. package/dist/components/fields/TextInput/TextInput.js +1 -1
  211. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  212. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +146 -0
  213. package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -0
  214. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  215. package/dist/components/fields/color/ColorPanel.js +1 -1
  216. package/dist/components/fields/color/channels.js +1 -1
  217. package/dist/components/fields/color/color.js +1 -1
  218. package/dist/components/fields/color/context.js +1 -1
  219. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  220. package/dist/components/form/Form/Field.js +1 -1
  221. package/dist/components/form/Form/Form.js +1 -1
  222. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  223. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  224. package/dist/components/form/Form/SubmitError.js +1 -1
  225. package/dist/components/form/Form/index.js +1 -1
  226. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  227. package/dist/components/form/Form/use-field/use-field.js +1 -1
  228. package/dist/components/form/Form/use-form.js +1 -1
  229. package/dist/components/form/Form/validation.js +1 -1
  230. package/dist/components/form/Label.js +1 -1
  231. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  232. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  233. package/dist/components/form/validation/use-validation-props.js +1 -1
  234. package/dist/components/form/wrapper.js +1 -1
  235. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  236. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  237. package/dist/components/layout/Board/Board.d.ts +8 -5
  238. package/dist/components/layout/Board/Board.js +1 -1
  239. package/dist/components/layout/Board/Board.js.map +1 -1
  240. package/dist/components/layout/Board/BoardProvider.js +1 -1
  241. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  242. package/dist/components/layout/Board/Widget.js +1 -1
  243. package/dist/components/layout/Board/WidgetHost.js +1 -1
  244. package/dist/components/layout/Board/board-context.js +1 -1
  245. package/dist/components/layout/Board/board-store.js +1 -1
  246. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  247. package/dist/components/layout/Board/grid-core/collision-modes.js +7 -4
  248. package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -1
  249. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  250. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  251. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  252. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  253. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  254. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  255. package/dist/components/layout/Board/grid-core/types.d.ts +6 -4
  256. package/dist/components/layout/Board/index.js +1 -1
  257. package/dist/components/layout/Board/responsive-utils.js +1 -1
  258. package/dist/components/layout/Board/use-board-layout.js +1 -1
  259. package/dist/components/layout/Board/use-board-registry.js +90 -48
  260. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  261. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  262. package/dist/components/layout/Board/use-board-selection.js +1 -1
  263. package/dist/components/layout/Flex.js +1 -1
  264. package/dist/components/layout/Flow.js +1 -1
  265. package/dist/components/layout/Grid.js +1 -1
  266. package/dist/components/layout/Panel.js +1 -1
  267. package/dist/components/layout/Prefix.js +1 -1
  268. package/dist/components/layout/ResizablePanel.js +1 -1
  269. package/dist/components/layout/Space.js +1 -1
  270. package/dist/components/layout/Suffix.js +1 -1
  271. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  272. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  273. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  274. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  275. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  276. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  277. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  278. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  279. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  280. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  281. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  282. package/dist/components/navigation/Tabs/styled.js +1 -1
  283. package/dist/components/navigation/Tabs/types.js +1 -1
  284. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  285. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  286. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  287. package/dist/components/other/Calendar/Calendar.js +1 -1
  288. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  289. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  290. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  291. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  292. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  293. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  294. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  295. package/dist/components/other/Calendar/styled.js +1 -1
  296. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  297. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  298. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  299. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  300. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  301. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  302. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  303. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  304. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  305. package/dist/components/overlays/Dialog/context.js +1 -1
  306. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  307. package/dist/components/overlays/Modal/Modal.d.ts +1 -2
  308. package/dist/components/overlays/Modal/Modal.js +1 -1
  309. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  310. package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
  311. package/dist/components/overlays/Modal/Overlay.js +1 -1
  312. package/dist/components/overlays/Modal/Popover.js +1 -1
  313. package/dist/components/overlays/Modal/Tray.js +1 -1
  314. package/dist/components/overlays/Modal/Underlay.js +1 -1
  315. package/dist/components/overlays/Modal/types.d.ts +0 -1
  316. package/dist/components/overlays/Notifications/Notification.js +1 -1
  317. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  318. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  319. package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
  320. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  321. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  322. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  323. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  324. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  325. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  326. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  327. package/dist/components/overlays/Notifications/index.js +1 -1
  328. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  329. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  330. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  331. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  332. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  333. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  334. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  335. package/dist/components/overlays/Toast/index.js +1 -1
  336. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  337. package/dist/components/overlays/Toast/useToast.js +1 -1
  338. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  339. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  340. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  341. package/dist/components/overlays/Tooltip/context.js +1 -1
  342. package/dist/components/portal/Portal.js +1 -1
  343. package/dist/components/portal/PortalProvider.js +1 -1
  344. package/dist/components/portal/index.d.ts +0 -1
  345. package/dist/components/portal/usePortal.js +1 -1
  346. package/dist/components/shared/DraggableCollection.js +1 -1
  347. package/dist/components/shared/InvalidIcon.js +1 -1
  348. package/dist/components/shared/ValidIcon.js +1 -1
  349. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  350. package/dist/components/status/Spin/Cube.js +1 -1
  351. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  352. package/dist/components/status/Spin/Spin.js +1 -1
  353. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  354. package/dist/data/item-themes.js +1 -1
  355. package/dist/data/themes.js +1 -1
  356. package/dist/eslint-plugin/defaults.generated.js +13 -1
  357. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  358. package/dist/eslint-plugin/index.js +1 -1
  359. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  360. package/dist/i18n/I18nProvider.js +1 -1
  361. package/dist/i18n/createFormatter.js +1 -1
  362. package/dist/i18n/index.js +1 -1
  363. package/dist/i18n/instance.js +1 -1
  364. package/dist/i18n/locales/de-DE/uikit.js +2 -1
  365. package/dist/i18n/locales/en-US/uikit.js +2 -1
  366. package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -0
  367. package/dist/i18n/locales/es-ES/uikit.js +2 -1
  368. package/dist/i18n/locales/es-MX/uikit.js +2 -1
  369. package/dist/i18n/locales/fr-FR/uikit.js +2 -1
  370. package/dist/i18n/locales/it-IT/uikit.js +2 -1
  371. package/dist/i18n/locales/ja-JP/uikit.js +2 -1
  372. package/dist/i18n/locales/nb-NO/uikit.js +2 -1
  373. package/dist/i18n/locales/pt-BR/uikit.js +2 -1
  374. package/dist/i18n/locales/pt-PT/uikit.js +2 -1
  375. package/dist/i18n/locales/sv-SE/uikit.js +2 -1
  376. package/dist/i18n/locales/vi-VN/uikit.js +2 -1
  377. package/dist/i18n/locales.js +1 -1
  378. package/dist/i18n/useFormatter.js +1 -1
  379. package/dist/i18n/useI18n.js +1 -1
  380. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  381. package/dist/icons/AdjustmentsIcon.js +1 -1
  382. package/dist/icons/AiIcon.js +1 -1
  383. package/dist/icons/AreaChartIcon.js +1 -1
  384. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  385. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  386. package/dist/icons/BackwardIcon.js +1 -1
  387. package/dist/icons/BarChartIcon.js +1 -1
  388. package/dist/icons/BellFilledIcon.js +1 -1
  389. package/dist/icons/BellIcon.js +1 -1
  390. package/dist/icons/BooleanIcon.js +1 -1
  391. package/dist/icons/CalendarEditIcon.js +1 -1
  392. package/dist/icons/CalendarIcon.js +1 -1
  393. package/dist/icons/CaretDownIcon.js +1 -1
  394. package/dist/icons/CaretUpIcon.js +1 -1
  395. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  396. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  397. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  398. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  399. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  400. package/dist/icons/ChartBarLineIcon.js +1 -1
  401. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  402. package/dist/icons/ChartBarStackedIcon.js +1 -1
  403. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  404. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  405. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  406. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  407. package/dist/icons/ChartBubbleIcon.js +1 -1
  408. package/dist/icons/ChartDonut2Icon.js +1 -1
  409. package/dist/icons/ChartFunnelIcon.js +1 -1
  410. package/dist/icons/ChartHeatmapIcon.js +1 -1
  411. package/dist/icons/ChartKPIIcon.js +1 -1
  412. package/dist/icons/ChartPie2Icon.js +1 -1
  413. package/dist/icons/ChartScatterIcon.js +1 -1
  414. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  415. package/dist/icons/CheckCircleIcon.js +1 -1
  416. package/dist/icons/CheckIcon.js +1 -1
  417. package/dist/icons/CircleFilledIcon.js +1 -1
  418. package/dist/icons/ClearIcon.js +1 -1
  419. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  420. package/dist/icons/CloseCircleIcon.js +1 -1
  421. package/dist/icons/CloseIcon.js +1 -1
  422. package/dist/icons/CodeIcon.js +1 -1
  423. package/dist/icons/ColumnTotalIcon.js +1 -1
  424. package/dist/icons/CopyIcon.js +1 -1
  425. package/dist/icons/CountIcon.js +1 -1
  426. package/dist/icons/CubeIcon.js +1 -1
  427. package/dist/icons/CubePauseIcon.js +1 -1
  428. package/dist/icons/CubePlayIcon.js +1 -1
  429. package/dist/icons/CurrencyDollarIcon.js +1 -1
  430. package/dist/icons/DangerIcon.js +1 -1
  431. package/dist/icons/DashboardIcon.js +1 -1
  432. package/dist/icons/DatabaseIcon.js +1 -1
  433. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  434. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  435. package/dist/icons/DirectionIcon.js +1 -1
  436. package/dist/icons/DonutIcon.js +1 -1
  437. package/dist/icons/DownIcon.js +1 -1
  438. package/dist/icons/EditIcon.js +1 -1
  439. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  440. package/dist/icons/ExclamationCircleIcon.js +1 -1
  441. package/dist/icons/ExclamationIcon.js +1 -1
  442. package/dist/icons/EyeIcon.js +1 -1
  443. package/dist/icons/EyeInvisibleIcon.js +1 -1
  444. package/dist/icons/FilterIcon.js +1 -1
  445. package/dist/icons/FolderFilledIcon.js +1 -1
  446. package/dist/icons/FolderIcon.js +1 -1
  447. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  448. package/dist/icons/FolderOpenIcon.js +1 -1
  449. package/dist/icons/ForwardIcon.js +1 -1
  450. package/dist/icons/GripVerticalIcon.js +1 -1
  451. package/dist/icons/HierarchyIcon.js +1 -1
  452. package/dist/icons/HierarchyOpenIcon.js +1 -1
  453. package/dist/icons/Icon.js +1 -1
  454. package/dist/icons/InfoCircleIcon.js +1 -1
  455. package/dist/icons/InfoIcon.js +1 -1
  456. package/dist/icons/KeyIcon.js +1 -1
  457. package/dist/icons/LeftIcon.js +1 -1
  458. package/dist/icons/LineChartIcon.js +1 -1
  459. package/dist/icons/LoadingIcon.js +1 -1
  460. package/dist/icons/LockFilledIcon.js +1 -1
  461. package/dist/icons/LockIcon.js +1 -1
  462. package/dist/icons/MoreIcon.js +1 -1
  463. package/dist/icons/NotAllowedIcon.js +1 -1
  464. package/dist/icons/Number123Icon.js +1 -1
  465. package/dist/icons/NumberIcon.js +1 -1
  466. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  467. package/dist/icons/PauseCircleIcon.js +1 -1
  468. package/dist/icons/PauseIcon.js +1 -1
  469. package/dist/icons/PercentageIcon.js +1 -1
  470. package/dist/icons/PieChartIcon.js +1 -1
  471. package/dist/icons/PipetteIcon.js +1 -1
  472. package/dist/icons/PlayCircleIcon.js +1 -1
  473. package/dist/icons/PlayIcon.js +1 -1
  474. package/dist/icons/PlusIcon.js +1 -1
  475. package/dist/icons/ProgressBarIcon.js +1 -1
  476. package/dist/icons/ReloadIcon.js +1 -1
  477. package/dist/icons/ReportIcon.js +1 -1
  478. package/dist/icons/ReturnIcon.js +1 -1
  479. package/dist/icons/RightIcon.js +1 -1
  480. package/dist/icons/RowTotalsIcon.js +1 -1
  481. package/dist/icons/SchemeIcon.js +1 -1
  482. package/dist/icons/SearchIcon.js +1 -1
  483. package/dist/icons/SemanticQueryIcon.js +1 -1
  484. package/dist/icons/SettingsIcon.js +1 -1
  485. package/dist/icons/ShieldFilledIcon.js +1 -1
  486. package/dist/icons/ShieldIcon.js +1 -1
  487. package/dist/icons/SlashIcon.js +1 -1
  488. package/dist/icons/SparklesIcon.js +1 -1
  489. package/dist/icons/SqlIcon.js +1 -1
  490. package/dist/icons/StatsIcon.js +1 -1
  491. package/dist/icons/StopIcon.js +1 -1
  492. package/dist/icons/StringIcon.js +1 -1
  493. package/dist/icons/SubtotalsIcon.js +1 -1
  494. package/dist/icons/SwitchIcon.js +1 -1
  495. package/dist/icons/TableIcon.js +1 -1
  496. package/dist/icons/ThumbsDownIcon.js +1 -1
  497. package/dist/icons/ThumbsUpIcon.js +1 -1
  498. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  499. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  500. package/dist/icons/ThunderboltIcon.js +1 -1
  501. package/dist/icons/TimeIcon.js +1 -1
  502. package/dist/icons/TrashIcon.js +1 -1
  503. package/dist/icons/UnlockIcon.js +1 -1
  504. package/dist/icons/UpIcon.js +1 -1
  505. package/dist/icons/UserGroupIcon.js +1 -1
  506. package/dist/icons/UserIcon.js +1 -1
  507. package/dist/icons/UserLockIcon.js +1 -1
  508. package/dist/icons/ViewIcon.js +1 -1
  509. package/dist/icons/WarningFilledIcon.js +1 -1
  510. package/dist/icons/WarningIcon.js +1 -1
  511. package/dist/icons/wrap-icon.js +1 -1
  512. package/dist/index.d.ts +3 -3
  513. package/dist/index.js +1 -1
  514. package/dist/probe/canonicalize.js +1 -1
  515. package/dist/probe/css.js +1 -1
  516. package/dist/probe/index.js +1 -1
  517. package/dist/provider.js +1 -1
  518. package/dist/providers/TrackingProvider.js +1 -1
  519. package/dist/providers/navigationAdapter.default.js +1 -1
  520. package/dist/tokens/base.js +1 -1
  521. package/dist/tokens/color-seed.js +1 -1
  522. package/dist/tokens/color-theme.js +1 -1
  523. package/dist/tokens/colors.js +1 -1
  524. package/dist/tokens/index.js +1 -1
  525. package/dist/tokens/layout.js +1 -1
  526. package/dist/tokens/lazy-styles.js +1 -1
  527. package/dist/tokens/palette-config.js +1 -1
  528. package/dist/tokens/palette.js +1 -1
  529. package/dist/tokens/shadows.js +1 -1
  530. package/dist/tokens/sizes.js +1 -1
  531. package/dist/tokens/spacing.js +1 -1
  532. package/dist/tokens/typography.js +1 -1
  533. package/dist/utils/ResizeSensor.js +1 -1
  534. package/dist/utils/is-dev-env.js +1 -1
  535. package/dist/utils/modules.js +1 -1
  536. package/dist/utils/promise.js +1 -1
  537. package/dist/utils/raf.js +1 -1
  538. package/dist/utils/random.js +1 -1
  539. package/dist/utils/range.js +1 -1
  540. package/dist/utils/react/RenderCache.js +1 -1
  541. package/dist/utils/react/Slots.js +1 -1
  542. package/dist/utils/react/chain.js +1 -1
  543. package/dist/utils/react/disabledProps.js +1 -1
  544. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  545. package/dist/utils/react/index.js +1 -1
  546. package/dist/utils/react/interactions.js +1 -1
  547. package/dist/utils/react/isTextOnly.js +1 -1
  548. package/dist/utils/react/mapProps.js +1 -1
  549. package/dist/utils/react/mergeProps.js +1 -1
  550. package/dist/utils/react/nullableValue.js +1 -1
  551. package/dist/utils/react/resolveIcon.js +1 -1
  552. package/dist/utils/react/sharedStore.js +1 -1
  553. package/dist/utils/react/useBufferedValue.js +1 -1
  554. package/dist/utils/react/useCombinedRefs.js +1 -1
  555. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  556. package/dist/utils/react/useEventBus.js +1 -1
  557. package/dist/utils/react/useId.js +1 -1
  558. package/dist/utils/react/useIsDarwin.js +1 -1
  559. package/dist/utils/react/useKeySymbols.js +1 -1
  560. package/dist/utils/react/useLayoutEffect.js +1 -1
  561. package/dist/utils/react/useLocalStorage.js +1 -1
  562. package/dist/utils/react/useMergeStyles.js +1 -1
  563. package/dist/utils/react/usePopoverSync.js +1 -1
  564. package/dist/utils/react/useQaProps.js +1 -1
  565. package/dist/utils/react/useViewportSize.js +1 -1
  566. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  567. package/dist/utils/selection.js +1 -1
  568. package/dist/utils/styles.js +1 -1
  569. package/dist/utils/tree.js +1 -1
  570. package/dist/utils/warnings.js +1 -1
  571. package/dist/version.js +3 -3
  572. package/docs/Introduction.md +85 -97
  573. package/docs/Usage.md +26 -0
  574. package/docs/components/data/DataTable.md +110 -11
  575. package/docs/components/data/ItemTable.md +63 -1
  576. package/docs/components/layout/Board.md +6 -5
  577. package/docs/tasty/configuration.md +10 -6
  578. package/docs/tasty/dsl.md +99 -2
  579. package/docs/tasty/styles.md +3 -1
  580. package/package.json +2 -2
  581. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
  582. package/dist/components/portal/PortalProvider.d.ts +0 -2
@@ -30,9 +30,9 @@ API keys. That is the one with selection, bulk actions, row menus and row links.
30
30
  ## It knows nothing about Cube
31
31
 
32
32
  Measures, dimensions, pivots, drill-downs and calculated fields never reach this
33
- component as concepts. They arrive as ordinary columns, `render` output and
34
- `column.header.menu` content — which is what keeps Cloud's column-header menu,
35
- and everything it knows about the query, in Cloud.
33
+ component as query concepts. They arrive as leaf columns, presentational column
34
+ groups, `render` output and `column.header.menu` content — which is what keeps
35
+ Cloud's column-header menu, and everything it knows about the query, in Cloud.
36
36
 
37
37
  ## Component
38
38
 
@@ -41,9 +41,19 @@ and everything it knows about the query, in Cloud.
41
41
  #### Data
42
42
 
43
43
  - **`data`** `readonly T[]` — The rows.
44
- - **`columns`** `CubeDataTableColumn<T>[]` — Same shape as `ItemTable`'s, plus `dataType`.
44
+ - **`columns`** `CubeDataTableColumnDefinition<T>[]` — Leaf columns use the same
45
+ shape as `ItemTable`'s, plus `dataType`; group nodes contain nested `children`.
45
46
  - **`rowKey`** `string` (default: `'id'`) — Property to read the row identity from.
46
47
  - **`getRowKey`** `(row: T, index: number) => Key` — Wins over `rowKey`.
48
+ - **`getRowChildren`** `(row: T) => readonly T[] | undefined` — Enables nested
49
+ treegrid rows; `data` contains roots.
50
+ - **`treeColumnKey`** `string` — Indented disclosure column. Defaults to the
51
+ first visible data column.
52
+ - **`expandedKeys`** `Key[]` — Controlled expansion.
53
+ - **`defaultExpandedKeys`** `Key[]` — Initial expansion. Nothing is expanded by
54
+ default.
55
+ - **`onExpand`** `(keys, info) => void` — Reports the resulting keys and toggled
56
+ row metadata.
47
57
  - **`pinnedTopRows`** `readonly T[]` — Rows stuck to the top of the scroller. Ordinary rows as far as the columns are concerned.
48
58
  - **`pinnedBottomRows`** `readonly T[]` — The same, at the bottom. This is where totals go.
49
59
 
@@ -63,10 +73,13 @@ and everything it knows about the query, in Cloud.
63
73
  - **`size`** `SizeName` (default: `'small'`) — An analytical grid packs more rows than a list.
64
74
  - **`rowSize`** `'small' | 'medium' | 'large'` — Row height as a named step: 28px / 32px / 40px. Rows only; the header keeps answering to `size`. Unset, the height comes from `size`.
65
75
  - **`rowHeight`** `number` — An exact height, when none of the named steps is the answer. Wins over both `rowSize` and `size`.
66
- - **`headerHeight`** `number`
76
+ - **`headerHeight`** `number` — Exact height of each header row in px.
67
77
  - **`isStriped`** `boolean` (default: `true`) — Banding is what makes a wide row readable across.
68
78
  - **`isHeaderHidden`** `boolean`
69
79
  - **`isHeaderSticky`** `boolean` (default: `true`)
80
+ - **`isAutoHeight`** `boolean` (default: `false`) — Shrink-wraps the frame to
81
+ the rendered rows instead of filling its flex pane. It takes precedence over
82
+ root height/flex sizing and disables virtualization.
70
83
  - **`isRowMoveAnimated`** `boolean` (default: `true`) — Slide rows to their new positions when the order changes, instead of teleporting them. Respects `prefers-reduced-motion`.
71
84
  - **`showRowNumbers`** `boolean` (default: `false`) — A continuous count down the side, which stays continuous across pages.
72
85
 
@@ -127,7 +140,7 @@ see [Column Colors](#column-colors) for the last two.
127
140
 
128
141
  #### Virtualization
129
142
 
130
- - **`isVirtualized`** `boolean | 'auto'` (default: `'auto'`) — On when the grid is height-bounded and has more rows than the threshold.
143
+ - **`isVirtualized`** `boolean | 'auto'` (default: `'auto'`) — On when the grid is height-bounded and has more rows than the threshold. Ignored when `isAutoHeight` is enabled.
131
144
  - **`virtualizeThreshold`** `number`
132
145
  - **`overscan`** `number`
133
146
 
@@ -136,6 +149,9 @@ see [Column Colors](#column-colors) for the last two.
136
149
  - **`getRowProps`** `(ctx: CubeTableRowContext<T>) => Record<string, any>` — Per-row mods, styles and height.
137
150
  - **`storageKey`** `string` — Persists page size, column widths and column order.
138
151
  - **`ariaLabel`** `string`
152
+ - **`isChecked`** `boolean` — Base checked-state modifier.
153
+ - **`place`** `string` — Tasty placement shorthand on the root frame.
154
+ - **`scrollMargin`** `string | number` — Scroll margin on the root frame.
139
155
 
140
156
  #### `dataType`
141
157
 
@@ -159,9 +175,10 @@ Customizes the root frame. Every internal part of the grid is a **sub-element**
159
175
  reachable from this one prop — the same contract, and the same sub-element
160
176
  names, as ItemTable.
161
177
 
162
- `DataTable` adds one: `StateCell`, the full-span cell that carries the empty,
163
- no-results and error content. It is deliberately not a `Cell`, so it takes none
164
- of the row's banding or hover paint.
178
+ `DataTable` adds `StateCell`, the full-span cell that carries the empty,
179
+ no-results and error content, and `HeaderGroupCell`, a spanning cell in a
180
+ multi-row header. `StateCell` is deliberately not a `Cell`, so it takes none of
181
+ the row's banding or hover paint.
165
182
 
166
183
  #### Targeted slots
167
184
 
@@ -204,6 +221,72 @@ body into a scroller, pins the header, and lets virtualization engage at all.
204
221
  Cell-level, in addition to `ItemTable`'s: `cell-selected`, `last-column`,
205
222
  `pinned`.
206
223
 
224
+ ## Pivoted Results and Column Groups
225
+
226
+ Pass group nodes in `columns` to render real multi-row headers. Groups may nest
227
+ to any depth; their `children` eventually resolve to ordinary leaf columns, and
228
+ only those leaves participate in sorting, resizing, ranges and copying.
229
+
230
+ ```jsx
231
+ const columns = [
232
+ { key: 'region', title: 'Region', pin: 'start' },
233
+ {
234
+ key: 'organic',
235
+ title: 'Organic',
236
+ children: [
237
+ { key: 'organic_orders', title: 'Orders', dataType: 'number' },
238
+ { key: 'organic_revenue', title: 'Revenue', dataType: 'number' },
239
+ ],
240
+ },
241
+ {
242
+ key: 'paid',
243
+ title: 'Paid',
244
+ children: [
245
+ { key: 'paid_orders', title: 'Orders', dataType: 'number' },
246
+ { key: 'paid_revenue', title: 'Revenue', dataType: 'number' },
247
+ ],
248
+ },
249
+ ];
250
+
251
+ <DataTable data={pivotRows} columns={columns} isAutoHeight />;
252
+ ```
253
+
254
+ The data/query layer still owns the pivot calculation. DataTable only renders
255
+ the already-shaped rows and generated column hierarchy. Leaf resizing and
256
+ sorting remain available; drag column reordering is ignored while groups are
257
+ present because moving one leaf cannot preserve an arbitrary hierarchy.
258
+
259
+ ## Tree Rows
260
+
261
+ Tree mode uses the same nested-data contract as `ItemTable`:
262
+
263
+ ```jsx
264
+ <DataTable
265
+ data={regions}
266
+ columns={columns}
267
+ getRowChildren={(row) => row.children}
268
+ treeColumnKey="region"
269
+ defaultExpandedKeys={['americas']}
270
+ />
271
+ ```
272
+
273
+ Multi-sort is recursive: every sibling collection is sorted by the same
274
+ precedence. Client pagination slices roots and keeps complete subtrees together;
275
+ server pages are rendered exactly as supplied and `total` counts roots. Pinned
276
+ rows remain ordinary non-hierarchical totals.
277
+
278
+ Only visible descendants participate in cell ranges and virtualization.
279
+ Collapsing a range endpoint makes the effective range inactive; a controlled or
280
+ uncontrolled range is restored when that endpoint becomes visible again. Client
281
+ row numbers remain continuous across root pages, while server tree pages restart
282
+ at 1 because preceding descendant counts are unknown.
283
+
284
+ The native table exposes `role="treegrid"`, `aria-level`, `aria-expanded`,
285
+ `aria-posinset` and `aria-setsize`. Right/Left expand, collapse or move to the
286
+ parent; Up/Down traverse visible rows, and typeahead reads `treeColumnKey`.
287
+ Customize the hierarchy chrome with `styles.TreeContent`, `styles.TreeToggle`
288
+ and `styles.TreeValue`.
289
+
207
290
  ## Examples
208
291
 
209
292
  ### Multi-Column Sorting
@@ -241,6 +324,20 @@ competing for a position.
241
324
  Above `virtualizeThreshold` a bounded grid virtualizes on its own, so
242
325
  `paginationMode="off"` is a reasonable default for a result the user scrolls.
243
326
 
327
+ For a compact result that should participate in normal page flow, set
328
+ `isAutoHeight`. The frame then ends at the last rendered row rather than filling
329
+ its flex pane. This renders the complete result and disables virtualization, so
330
+ keep larger results bounded instead.
331
+
332
+ ```jsx
333
+ <DataTable
334
+ data={summaryRows}
335
+ columns={columns}
336
+ paginationMode="off"
337
+ isAutoHeight
338
+ />
339
+ ```
340
+
244
341
  ### Sorting Moves Rows
245
342
 
246
343
  When a sort reorders rows, they slide to their new positions over 120ms rather
@@ -401,8 +498,10 @@ elsewhere.
401
498
  ## Accessibility
402
499
 
403
500
  The table is a `role="grid"` with document-absolute `aria-rowindex` /
404
- `aria-colindex`, and `aria-rowcount` counts pinned rows. Every sorted column
405
- carries `aria-sort`, not just the first.
501
+ `aria-colindex`, and `aria-rowcount` counts pinned rows and every visible header
502
+ row. Group cells use native `scope="colgroup"` / `colSpan`; ungrouped leaf
503
+ headers span the remaining rows. Every sorted leaf column carries `aria-sort`,
504
+ not just the first.
406
505
 
407
506
  A header cell takes a tab stop when it is interactive — sortable, carrying a
408
507
  menu, or reorderable. `Shift`+`F10` opens the column menu from the keyboard, and
@@ -31,6 +31,14 @@ pivots, totals. Use `ListBox` when there is only one column.
31
31
  - **`columns`** `CubeItemTableColumn<T>[]` — Column definitions. See below.
32
32
  - **`rowKey`** `string` (default: `'id'`) — Property used as the row key.
33
33
  - **`getRowKey`** `(row: T, index: number) => Key` — Wins over `rowKey`.
34
+ - **`getRowChildren`** `(row: T) => readonly T[] | undefined` — Enables tree
35
+ mode. `data` then contains top-level rows and children are read recursively.
36
+ - **`treeColumnKey`** `string` — Column containing indentation and the
37
+ disclosure control. Defaults to the first visible data column.
38
+ - **`expandedKeys`** `Key[]` — Controlled expanded rows.
39
+ - **`defaultExpandedKeys`** `Key[]` — Initially expanded rows. Defaults to none.
40
+ - **`onExpand`** `(keys, info) => void` — Reports the complete expanded-key list
41
+ and the toggled row, key, zero-based level, parent key and resulting state.
34
42
  - **`isLoading`** `boolean` (default: `false`) — Marks a fetch in flight. What
35
43
  the user sees depends on `loadingIndicator`.
36
44
  - **`loadingIndicator`** `'overlay' | 'skeleton' | 'none'` (default: `'overlay'`)
@@ -65,6 +73,9 @@ pivots, totals. Use `ListBox` when there is only one column.
65
73
  row and drops it from `aria-rowcount`.
66
74
  - **`isHeaderSticky`** `boolean` (default: `true`) — Pins the column header
67
75
  while the body scrolls.
76
+ - **`isAutoHeight`** `boolean` (default: `false`) — Shrink-wraps the frame to
77
+ the rendered rows instead of filling its flex pane. It takes precedence over
78
+ root height/flex sizing and disables virtualization.
68
79
  - **`sortMode`** `'client' | 'server' | 'off'` (default: `'client'` when any
69
80
  column is sortable, else `'off'`) — `client` reorders `data` itself; `server`
70
81
  only reflects `sort` and fires `onSortChange`; `off` removes the affordance.
@@ -96,7 +107,8 @@ pivots, totals. Use `ListBox` when there is only one column.
96
107
  toolbar.
97
108
  - **`isVirtualized`** `boolean | 'auto'` (default: `'auto'`) — `'auto'` turns
98
109
  virtualization on once the row count passes `virtualizeThreshold`. It needs a
99
- bounded height to have a viewport to work against.
110
+ bounded height to have a viewport to work against and is ignored when
111
+ `isAutoHeight` is enabled.
100
112
  - **`virtualizeThreshold`** `number` (default: `50`) — Row count above which
101
113
  `'auto'` virtualizes.
102
114
  - **`overscan`** `number` (default: `12`) — Rows mounted beyond each viewport
@@ -117,6 +129,10 @@ pivots, totals. Use `ListBox` when there is only one column.
117
129
  - **`selectionTooltip`** `string | ((row: T) => string | undefined)` — Explains
118
130
  an inert checkbox.
119
131
  - **`disabledKeys`** `Key[]` — Rows that cannot be interacted with at all.
132
+ - **`treeSelectionBehavior`** `'cascade' | 'independent'` (default: `'cascade'`
133
+ in tree mode) — Multiple selection only. Cascade selects eligible descendants
134
+ and derives checked or indeterminate ancestors; single selection is always
135
+ independent.
120
136
  - **`rowLink`** `(row: T, index: number) => NavigateArg | undefined` — Turns the
121
137
  row-header cell into a stretched link covering the whole row. Return
122
138
  `undefined` for a row that should not navigate.
@@ -207,6 +223,9 @@ pivots, totals. Use `ListBox` when there is only one column.
207
223
  - **`getRowProps`** `(ctx) => { isDimmed?, mods?, styles?, height?, qa?, tooltip? }`
208
224
  — Per-row visuals.
209
225
  - **`ariaLabel`** `string` — Labels the grid.
226
+ - **`isChecked`** `boolean` — Base checked-state modifier.
227
+ - **`place`** `string` — Tasty placement shorthand on the root frame.
228
+ - **`scrollMargin`** `string | number` — Scroll margin on the root frame.
210
229
 
211
230
  #### `CubeItemTableColumn<T>`
212
231
 
@@ -291,6 +310,8 @@ reachable from this one prop — that is the whole styling contract.
291
310
  - `Table` — the `<table>`
292
311
  - `Head`, `HeadRow`, `HeaderCell` — the column header
293
312
  - `Body`, `Row`, `Cell` — the data rows
313
+ - `TreeContent`, `TreeToggle`, `TreeValue` — indentation, disclosure/leaf
314
+ placeholder, and the consumer-rendered value in the tree column
294
315
  - `SortIndicator` — the sort arrow, inside the header `Item`'s suffix
295
316
  - `Foot`, `FootRow`, `FootCell` — pinned totals
296
317
  - `StateContent` — the empty / no-results / error content
@@ -390,6 +411,39 @@ Row-level modifiers, set on each `<tr>`: `odd`, `selected`, `focused`, `dimmed`,
390
411
  />
391
412
  ```
392
413
 
414
+ ### Tree Rows
415
+
416
+ Supplying `getRowChildren` changes the root to `role="treegrid"`. Rows keep their
417
+ original objects; keys must be unique across the complete hierarchy.
418
+
419
+ ```jsx
420
+ <ItemTable
421
+ data={folders}
422
+ columns={columns}
423
+ getRowChildren={(row) => row.children}
424
+ treeColumnKey="name"
425
+ defaultExpandedKeys={['production']}
426
+ selectionMode="multiple"
427
+ />
428
+ ```
429
+
430
+ Client sorting runs independently within every sibling collection. Client
431
+ search retains ancestor paths; a matching parent keeps its complete subtree,
432
+ and required branches open temporarily without changing `expandedKeys`. Client
433
+ pagination counts and slices roots, keeping each subtree on its parent's page.
434
+ Server modes treat the supplied nested page as already processed, and `total`
435
+ counts roots.
436
+
437
+ The chevron and Right/Left arrows expand or collapse. Up/Down traverse visible
438
+ rows, typeahead uses the tree column, and Left on a collapsed child moves to its
439
+ parent. Ordinary row clicks still activate `onRowAction`/`rowLink`; the
440
+ disclosure does not. Select-all includes collapsed descendants. Disabled and
441
+ unselectable descendants are excluded from cascade.
442
+
443
+ Tree mode ignores `isReorderable`, because a flat reordered array cannot encode
444
+ parents. `dropOnRow` remains available for folder moves; self/descendant cycles
445
+ are rejected and selected descendants are collapsed under a dragged ancestor.
446
+
393
447
  ### Custom Cells
394
448
 
395
449
  ```jsx
@@ -668,6 +722,14 @@ DOM and the styles are identical either way — only the number of mounted rows
668
722
  changes, so sorting, search, pinned columns and the sticky header all behave the
669
723
  same.
670
724
 
725
+ For a compact list in normal page flow, set `isAutoHeight`. Its frame then ends
726
+ at the final rendered row instead of filling the surrounding flex pane. The
727
+ complete result is rendered, so keep large lists bounded and virtualized.
728
+
729
+ ```jsx
730
+ <ItemTable data={recentRows} columns={columns} paginationMode="off" isAutoHeight />
731
+ ```
732
+
671
733
  ```jsx
672
734
  <ItemTable height="420px" paginationMode="off" data={tenThousandRows} columns={columns} />
673
735
  ```
@@ -61,7 +61,7 @@ clipped by an ancestor's `overflow: hidden`.
61
61
  - **`compact`** `'vertical' | 'horizontal' | 'free' | null` (default: `'vertical'`) — Compaction behavior. `'vertical'`/`'horizontal'` reflow widgets to remove gaps; `'free'` places each widget exactly where dropped and never pushes its neighbours (blocked from occupied cells unless `allowOverlap`); `null` disables compaction but still resolves collisions the legacy react-grid-layout way.
62
62
  - **`allowOverlap`** `boolean` (default: `false`) — Allow widgets to overlap (stack). In `'free'` mode this is what distinguishes stacking from blocking a drop onto an occupied cell.
63
63
  - **`preventCollision`** `boolean` (default: `false`) — Block movement into occupied cells instead of pushing.
64
- - **`collisionMode`** `'revert' | 'downscale' | 'swap'` (default: `'revert'`) — How to resolve a drop the grid would otherwise refuse. Only applies where a collision *blocks* a move — `compact="free"` (which prevents collisions) or an explicit `preventCollision` — and never under `allowOverlap`, where nothing is blocked. `'revert'` snaps the widget back. `'downscale'` shrinks it into the free space at the drop cell, growing rightward and downward, floored at its `minW`/`minH` (below that it reverts). `'swap'` trades places with **one** widget — the one the drop covers most — which takes the cell the drag began at, each keeping as much of its own size as fits there (so a widget displaced next to a neighbour may shrink). It never displaces more than that one widget. A drop straddling two widgets trades with one of them rather than refusing, so the swap never blinks away as you sweep across a boundary; ties go to the widget earlier in reading order. Dragging back retraces the original arrangement exactly. It falls back to `'downscale'`, then `'revert'`. No mode ever *grows* a widget: a drag only ever preserves or reduces size. Applies to single-widget drags. Arrow keys honour it too but never resize anything — each press is a gesture of its own, so a press that shrank a widget would have nothing to restore from, and only an exchange that fits outright is allowed. A multi-widget selection still only moves where it fits outright, and a resize is still blocked by a collision.
64
+ - **`collisionMode`** `'revert' | 'downscale' | 'swap'` (default: `'revert'`) — How to resolve a drop the grid would otherwise refuse. Only applies where a collision *blocks* a move — `compact="free"` (which prevents collisions) or an explicit `preventCollision` — and never under `allowOverlap`, where nothing is blocked. `'revert'` snaps the widget back. `'downscale'` shrinks it into the free space at the drop cell, growing rightward and downward, floored at its `minW`/`minH` (below that it reverts). Within one board, `'swap'` trades places with **one** widget — the one the drop covers most — which takes the cell the drag began at, each keeping as much of its own size as fits there. It never displaces more than that one widget. A drop straddling two widgets trades with one of them rather than refusing, so the swap never blinks away as you sweep across a boundary; ties go to the widget earlier in reading order. Dragging back retraces the original arrangement exactly. For a widget arriving from another board (including a nested board entering its parent), the destination board's `'swap'` mode becomes strict insertion: the requested anchor cell must be empty, the incoming widget keeps its size when possible or downscales into the available room to its right and below, and existing destination widgets are neither exchanged nor reflowed. Releasing over an occupied anchor or where `minW`/`minH` cannot fit cancels the transfer and restores both boards; it does not reuse the last valid preview or search for another slot. No mode ever *grows* a widget. Applies to single-widget drags. Arrow keys honour it too but never resize anything — each press is a gesture of its own, so a press that shrank a widget would have nothing to restore from, and only an exchange that fits outright is allowed. A multi-widget selection still only moves where it fits outright, and a resize is still blocked by a collision.
65
65
  - **`isDraggable`** `boolean` (default: `true`) — Enable dragging for all widgets.
66
66
  - **`isResizable`** `boolean` (default: `true`) — Enable resizing for all widgets.
67
67
  - **`isDroppable`** `boolean` (default: `true`) — Whether the board accepts widgets dropped from other boards.
@@ -252,10 +252,11 @@ so it lines up with a control centred on the opposite corner.
252
252
  ### Resolving a blocked drop
253
253
 
254
254
  On a free grid a drop onto occupied cells is refused. `collisionMode` resolves it
255
- instead: `'downscale'` shrinks the widget into whatever room is at the drop cell,
256
- `'swap'` trades places with the widget already there. Neither ever grows a widget.
257
- One board per mode below drag the wide widget onto the row below in the first,
258
- and drop a widget onto one of its neighbours in the second.
255
+ instead: `'downscale'` shrinks the widget into whatever room is at the drop cell.
256
+ Within one board, `'swap'` trades places with the widget already there. Across
257
+ boards, the same mode inserts only at an empty anchor and downscales without
258
+ moving destination widgets; an invalid release cancels the transfer. None of
259
+ these paths ever grows a widget. The examples below show all three behaviors.
259
260
 
260
261
  ### Card widgets
261
262
 
@@ -78,7 +78,7 @@ These docs use `data-schema="dark"` in examples. If your app already standardize
78
78
 
79
79
  ## Color Space
80
80
 
81
- Controls the CSS color space used for decomposed color token companion variables. When you define `#name` color tokens, tasty generates both `--name-color` (full color) and `--name-color-{suffix}` (decomposed components for alpha composition).
81
+ Controls the CSS color space used for decomposed color token companion variables. When you define `#name` color tokens, tasty generates both `--name-color` (the color) and `--name-color-{suffix}` (its channels, decomposed).
82
82
 
83
83
  ```jsx
84
84
  configure({
@@ -86,13 +86,17 @@ configure({
86
86
  });
87
87
  ```
88
88
 
89
- | Color Space | Suffix | Components Format | Alpha Syntax |
89
+ | Color Space | Suffix | Components Format | Channel Reference |
90
90
  |---|---|---|---|
91
- | `rgb` | `-rgb` | `255 128 0` | `rgb(var(--name-color-rgb) / .5)` |
92
- | `hsl` | `-hsl` | `300 100% 25%` | `hsl(var(--name-color-hsl) / .5)` |
93
- | `oklch` | `-oklch` | `0.42 0.16 328` | `oklch(var(--name-color-oklch) / .5)` |
91
+ | `rgb` | `-rgb` | `255 128 0` | `rgb(var(--name-color-rgb))` |
92
+ | `hsl` | `-hsl` | `300 100% 25%` | `hsl(var(--name-color-hsl))` |
93
+ | `oklch` | `-oklch` | `0.42 0.16 328` | `oklch(var(--name-color-oklch))` |
94
94
 
95
- The `oklch` color space is the default because it provides perceptually uniform color manipulation — alpha fading and color mixing produce more natural-looking results.
95
+ The `oklch` color space is the default because it provides perceptually uniform color manipulation — reaching for a channel to shift lightness or hue produces more natural-looking results.
96
+
97
+ The companion is there so you can *address the channels*: shift a lightness, animate a hue, build a derived color. It is not how the [opacity suffix](dsl.md#color-tokens--opacity) works — that sets the alpha on `--name-color` itself with relative color syntax, so it needs nothing from the companion and works on any color.
98
+
99
+ A color the engine cannot evaluate at build time — a `color-mix()`, a `light-dark()`, a `color()` in a space it has no conversion for — has no channels to decompose, so its companion is expressed *by reference* using CSS relative color syntax (`--name-color-oklch: from color-mix(…) l c h`). Reading a channel off it still works; the browser resolves them.
96
100
 
97
101
  ---
98
102
 
package/docs/tasty/dsl.md CHANGED
@@ -111,7 +111,7 @@ const List = tasty({
111
111
  Named color prefixed with `#` that maps to CSS custom properties. Supports opacity with `.N` suffix:
112
112
 
113
113
  ```jsx
114
- fill: '#purple.5' // → var(--purple-color) with 50% opacity
114
+ fill: '#purple.5' // → oklch(from var(--purple-color) l c h / .5)
115
115
  ```
116
116
 
117
117
  ### Modifier
@@ -133,11 +133,108 @@ Modifiers can also be exposed as top-level component props via `modProps` — se
133
133
  color: '#purple', // Full opacity
134
134
  color: '#purple.5', // 50% opacity
135
135
  color: '#purple.05', // 5% opacity
136
+ color: '#purple.$fade', // Opacity from a custom property
136
137
  fill: '#current', // → currentcolor
137
- fill: '#current.5', // → color-mix(in oklab, currentcolor 50%, transparent)
138
138
  color: '(#primary, #secondary)', // Fallback syntax
139
139
  ```
140
140
 
141
+ The suffix sets the alpha on the token's color with CSS relative color syntax:
142
+
143
+ ```jsx
144
+ fill: '#purple.5';
145
+ // → oklch(from var(--purple-color) l c h / .5)
146
+ ```
147
+
148
+ The channels are copied over and the alpha slot is written, which asks nothing of
149
+ the color beyond *being* a color. That means the suffix works on every one of
150
+ these:
151
+
152
+ - a token holding a `color-mix()`, a `light-dark()`, or a `color()` in a space
153
+ Tasty cannot convert — none of which have channels to decompose
154
+ - `#current`, which resolves to `currentcolor`
155
+ - a `--name-color` variable declared in your own CSS, with no Tasty token
156
+ definition and no companion variable behind it
157
+
158
+ Two properties follow from writing the alpha slot rather than compositing:
159
+
160
+ - **Alpha is replaced, not multiplied.** A token holding `rgb(255 0 0 / .8)`
161
+ faded to `.5` is alpha `.5`, not `.4`.
162
+ - **The alpha may be a number or a percentage.** `#purple.$fade` emits
163
+ `/ var(--fade)` unchanged, so it works whether `$fade` holds `.5` or `50%` —
164
+ which is what `--*-opacity` properties are registered to accept.
165
+
166
+ ### `#current` composes instead
167
+
168
+ `#current` is the one exception, and the difference is deliberate. A token *names*
169
+ a color, so fading it sets its alpha. `currentcolor` is the color an element
170
+ **inherits**, which an ancestor may already have faded — `#current.4` means "40%
171
+ of what reaches me":
172
+
173
+ ```jsx
174
+ fill: '#current.4';
175
+ // → color-mix(in oklab, currentcolor 40%, transparent)
176
+ ```
177
+
178
+ So a `#current` fade nested inside another one composes: a label at `#current.4`
179
+ with a fill of `#current.18` under it lands at `.072`. Color ramps built on
180
+ `#current` depend on that — replacing would double the opacity of every nested
181
+ step. Because a `color-mix()` percentage cannot be a `<number>`, an opacity
182
+ custom property used as `#current.$fade` must hold a unitless number; a token
183
+ accepts either form.
184
+
185
+ The space is always `oklch`, whatever [`colorSpace`](configuration.md#color-space)
186
+ is set to: it is unbounded, so a wide-gamut color survives a round trip that a
187
+ gamut-limited space would clamp.
188
+
189
+ ---
190
+
191
+ ## CSS Color Functions
192
+
193
+ Every CSS color function is recognized as a color, so it lands in the color slot
194
+ of whichever style property you use it in — and tokens inside it are expanded:
195
+
196
+ ```jsx
197
+ fill: 'color-mix(in oklab, #primary 50%, #surface)',
198
+ color: 'light-dark(#dark, #light)',
199
+ color: 'contrast-color(#primary)',
200
+ fill: 'color(display-p3 1 .5 0)',
201
+ border: '1bw solid oklch(from #primary l c h / 50%)', // relative color syntax
202
+ shadow: '0 0 1x color-mix(in oklab, #dark 20%, transparent)',
203
+ ```
204
+
205
+ `light-dark()` is the one exception to "always a color": CSS lets it pick between
206
+ values of any type, so it is treated as a color only when its arguments are
207
+ colors. `padding: 'light-dark(1x, 2x)'` still reaches the padding slot.
208
+
209
+ A color token defined as one of these functions takes the
210
+ [opacity suffix](#color-tokens--opacity) like any other:
211
+
212
+ ```jsx
213
+ const Card = tasty({
214
+ styles: {
215
+ '#brand': 'color-mix(in oklab, #primary 50%, #surface)',
216
+ fill: '#brand.5',
217
+ },
218
+ });
219
+ ```
220
+
221
+ A [replace token](configuration.md#replace-tokens-parse-time-substitution) is
222
+ substituted while parsing, so its color is right there to fade in place. A
223
+ channel function takes the alpha after a slash; a derived function has no alpha
224
+ channel, so it gets wrapped:
225
+
226
+ ```jsx
227
+ configure({
228
+ replaceTokens: {
229
+ '#solid': 'hsl(220 90% 50%)',
230
+ '#adaptive': 'light-dark(#dark, #light)',
231
+ },
232
+ });
233
+
234
+ fill: '#solid.5'; // → hsl(220 90% 50% / .5)
235
+ fill: '#adaptive.5'; // → oklch(from light-dark(…) l c h / .5)
236
+ ```
237
+
141
238
  ---
142
239
 
143
240
  ## Built-in Units
@@ -254,6 +254,7 @@ Background color with design token support. Preferred over `backgroundColor` and
254
254
  | `"#purple.10"` | Token color at 10% opacity |
255
255
  | `"#surface #primary.10"` | Background `#surface` with `#primary.10` overlay (two colors enable smooth transitions between both) |
256
256
  | `"rgb(255 128 0)"` | CSS color value |
257
+ | `"color-mix(in oklab, #primary 50%, #surface)"` | CSS color function — see [CSS Color Functions](dsl.md#css-color-functions) |
257
258
  | `true` | Default fill color |
258
259
 
259
260
  When two colors are provided, the first sets the background color and the second is applied as an overlay gradient layer. This enables independent CSS transitions on each color. The overlay is only applied when no explicit `image` or `backgroundImage` is set.
@@ -286,9 +287,10 @@ Text color with design token support.
286
287
  | `"#current"` | Current inherited color |
287
288
  | `"#current.5"` | Current inherited color at 50% opacity |
288
289
  | `"(#primary, #secondary)"` | Fallback: use `#primary`, fall back to `#secondary` |
290
+ | `"light-dark(#dark, #light)"` | CSS color function — see [CSS Color Functions](dsl.md#css-color-functions) |
289
291
  | `true` | `currentColor` |
290
292
 
291
- When set to a named color token, also sets `$current-color` and `$current-color-{colorSpace}` custom properties for downstream use (suffix depends on the configured `colorSpace`, default `oklch`).
293
+ When set to a named color token, also sets `$current-color` and `$current-color-{colorSpace}` custom properties for downstream use (suffix depends on the configured `colorSpace`, default `oklch`). An opacity suffix does not move the companion: `color="#purple.5"` still reports `#purple`'s channels, since components carry no alpha.
292
294
 
293
295
  ### `svgFill`
294
296
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.164.0",
3
+ "version": "0.165.0",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {
@@ -59,7 +59,7 @@
59
59
  "@tabler/icons-react": "^3.31.0",
60
60
  "@tanstack/react-virtual": "^3.13.12",
61
61
  "@tenphi/glaze": "2.0.0",
62
- "@tenphi/tasty": "^3.0.2",
62
+ "@tenphi/tasty": "^3.1.0",
63
63
  "clipboard-copy": "^4.0.1",
64
64
  "clsx": "^1.1.1",
65
65
  "diff": "^8.0.3",
@@ -1,2 +0,0 @@
1
-
2
- import React, { RefObject } from "react";
@@ -1,2 +0,0 @@
1
-
2
- import { RefObject } from "react";