@cube-dev/ui-kit 0.163.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 (676) hide show
  1. package/README.md +1 -1
  2. package/dist/CHANGELOG.md +394 -0
  3. package/dist/README.md +1 -1
  4. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  5. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  6. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  7. package/dist/_internal/hooks/use-event.js +1 -1
  8. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  9. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  10. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  11. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/dist/_internal/hooks/use-warn.js +1 -1
  13. package/dist/components/Block.js +1 -1
  14. package/dist/components/CollectionItem.js +1 -1
  15. package/dist/components/GlobalStyles.js +1 -1
  16. package/dist/components/GridProvider.js +1 -1
  17. package/dist/components/HiddenInput.js +1 -1
  18. package/dist/components/Root.d.ts +3 -2
  19. package/dist/components/Root.js +1 -1
  20. package/dist/components/Root.js.map +1 -1
  21. package/dist/components/actions/Action/Action.js +1 -1
  22. package/dist/components/actions/Banner/Banner.js +2 -5
  23. package/dist/components/actions/Banner/Banner.js.map +1 -1
  24. package/dist/components/actions/Button/Button.d.ts +3 -3
  25. package/dist/components/actions/Button/Button.js +8 -5
  26. package/dist/components/actions/Button/Button.js.map +1 -1
  27. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  28. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  29. package/dist/components/actions/ButtonSplit/context.js +1 -1
  30. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  31. package/dist/components/actions/CommandMenu/styled.js +1 -1
  32. package/dist/components/actions/ItemAction/ItemAction.d.ts +2 -2
  33. package/dist/components/actions/ItemAction/ItemAction.js +15 -6
  34. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  35. package/dist/components/actions/ItemActionContext.d.ts +14 -0
  36. package/dist/components/actions/ItemActionContext.js +2 -2
  37. package/dist/components/actions/ItemActionContext.js.map +1 -1
  38. package/dist/components/actions/ItemButton/ItemButton.js +56 -46
  39. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  40. package/dist/components/actions/Link/Link.js +1 -1
  41. package/dist/components/actions/Menu/Menu.js +1 -1
  42. package/dist/components/actions/Menu/MenuItem.js +1 -1
  43. package/dist/components/actions/Menu/MenuSection.js +1 -1
  44. package/dist/components/actions/Menu/MenuTrigger.d.ts +13 -0
  45. package/dist/components/actions/Menu/MenuTrigger.js +27 -15
  46. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  47. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  48. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  49. package/dist/components/actions/Menu/context.js +1 -1
  50. package/dist/components/actions/Menu/styled.js +1 -1
  51. package/dist/components/actions/index.js +1 -1
  52. package/dist/components/actions/use-action.js +1 -1
  53. package/dist/components/actions/use-anchored-menu.js +1 -1
  54. package/dist/components/actions/use-context-menu.js +1 -1
  55. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  56. package/dist/components/content/Alert/Alert.js +1 -1
  57. package/dist/components/content/Alert/use-alert.js +1 -1
  58. package/dist/components/content/Avatar/Avatar.js +1 -1
  59. package/dist/components/content/Badge/Badge.js +1 -1
  60. package/dist/components/content/Card/Card.js +1 -1
  61. package/dist/components/content/Content.js +1 -1
  62. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  63. package/dist/components/content/CopySnippet/CopySnippet.d.ts +10 -0
  64. package/dist/components/content/CopySnippet/CopySnippet.js +7 -4
  65. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  66. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  67. package/dist/components/content/Divider.js +1 -1
  68. package/dist/components/content/Footer.js +1 -1
  69. package/dist/components/content/Header.js +1 -1
  70. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  71. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  72. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  73. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  74. package/dist/components/content/Item/Item.d.ts +2 -2
  75. package/dist/components/content/Item/Item.js +13 -58
  76. package/dist/components/content/Item/Item.js.map +1 -1
  77. package/dist/components/content/ItemBadge/ItemBadge.d.ts +1 -1
  78. package/dist/components/content/ItemBadge/ItemBadge.js +7 -4
  79. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  80. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  81. package/dist/components/content/Layout/GridLayout.js +1 -1
  82. package/dist/components/content/Layout/Layout.js +1 -1
  83. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  84. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  85. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  86. package/dist/components/content/Layout/LayoutContent.js +1 -1
  87. package/dist/components/content/Layout/LayoutContext.js +1 -1
  88. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  89. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  90. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  91. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  92. package/dist/components/content/Layout/LayoutPane.js +1 -1
  93. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  94. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  95. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  96. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  97. package/dist/components/content/Layout/index.js +1 -1
  98. package/dist/components/content/Layout/utils.js +1 -1
  99. package/dist/components/content/Paragraph.js +1 -1
  100. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  101. package/dist/components/content/PrismCode/PrismCode.d.ts +6 -0
  102. package/dist/components/content/PrismCode/PrismCode.js +12 -3
  103. package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
  104. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  105. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  106. package/dist/components/content/Result/Result.js +1 -1
  107. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  108. package/dist/components/content/Tag/Tag.js +1 -1
  109. package/dist/components/content/Text.d.ts +14 -14
  110. package/dist/components/content/Text.js +1 -1
  111. package/dist/components/content/TextItem/TextItem.js +1 -1
  112. package/dist/components/content/Title.js +1 -1
  113. package/dist/components/content/Tree/Tree.js +1 -1
  114. package/dist/components/content/Tree/TreeNode.js +1 -1
  115. package/dist/components/content/Tree/styled.js +1 -1
  116. package/dist/components/content/Tree/tree-index.js +1 -1
  117. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  118. package/dist/components/content/Tree/use-load-data.js +1 -1
  119. package/dist/components/content/highlightText.js +1 -1
  120. package/dist/components/content/use-auto-tooltip.js +1 -1
  121. package/dist/components/data/DataTable/DataTable.js +140 -21
  122. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  123. package/dist/components/data/DataTable/index.d.ts +1 -1
  124. package/dist/components/data/DataTable/types.d.ts +19 -4
  125. package/dist/components/data/ItemTable/ItemTable.js +169 -25
  126. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  127. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  128. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  129. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  130. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  131. package/dist/components/data/ItemTable/types.d.ts +7 -2
  132. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  133. package/dist/components/data/TableBase/RowCollection.js +1 -1
  134. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  135. package/dist/components/data/TableBase/TableRow.js +30 -5
  136. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  137. package/dist/components/data/TableBase/TableView.d.ts +2 -1
  138. package/dist/components/data/TableBase/TableView.js +299 -75
  139. package/dist/components/data/TableBase/TableView.js.map +1 -1
  140. package/dist/components/data/TableBase/column-menu.js +1 -1
  141. package/dist/components/data/TableBase/column-tint.js +12 -2
  142. package/dist/components/data/TableBase/column-tint.js.map +1 -1
  143. package/dist/components/data/TableBase/index.d.ts +1 -1
  144. package/dist/components/data/TableBase/row-menu.js +1 -1
  145. package/dist/components/data/TableBase/styled.d.ts +1 -2
  146. package/dist/components/data/TableBase/styled.js +75 -2
  147. package/dist/components/data/TableBase/styled.js.map +1 -1
  148. package/dist/components/data/TableBase/table-tree.js +129 -0
  149. package/dist/components/data/TableBase/table-tree.js.map +1 -0
  150. package/dist/components/data/TableBase/types.d.ts +46 -1
  151. package/dist/components/data/TableBase/types.js +1 -1
  152. package/dist/components/data/TableBase/types.js.map +1 -1
  153. package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
  154. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  155. package/dist/components/data/TableBase/use-column-order.js +1 -1
  156. package/dist/components/data/TableBase/use-container-width.js +1 -1
  157. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  158. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  159. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  160. package/dist/components/data/TableBase/use-table-search.js +4 -4
  161. package/dist/components/data/TableBase/use-table-search.js.map +1 -1
  162. package/dist/components/data/TableBase/use-table-selection.js +124 -24
  163. package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
  164. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  165. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  166. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  167. package/dist/components/data/TableBase/use-table-tree-state.js +107 -0
  168. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -0
  169. package/dist/components/data/index.d.ts +2 -2
  170. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  171. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  172. package/dist/components/fields/Checkbox/context.js +1 -1
  173. package/dist/components/fields/ColorInput/ColorInput.js +12 -7
  174. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  175. package/dist/components/fields/ColorPicker/ColorPicker.js +3 -2
  176. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  177. package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.d.ts +8 -2
  178. package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.js +14 -6
  179. package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -0
  180. package/dist/components/fields/ColorSwatch/index.d.ts +2 -0
  181. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  182. package/dist/components/fields/ComboBox/ComboBox.js +2 -6
  183. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  184. package/dist/components/fields/CommandTextArea/CommandTextArea.js +8 -25
  185. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  186. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  187. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  188. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  189. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  190. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  191. package/dist/components/fields/DatePicker/DatePickerButton.js +32 -2
  192. package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
  193. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  194. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  195. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  196. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  197. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  198. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  199. package/dist/components/fields/DatePicker/PeriodPicker.js +3 -2
  200. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  201. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  202. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  203. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  204. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  205. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  206. package/dist/components/fields/DatePicker/period.js +1 -1
  207. package/dist/components/fields/DatePicker/props.js +1 -1
  208. package/dist/components/fields/DatePicker/utils.js +1 -1
  209. package/dist/components/fields/FileInput/FileInput.js +1 -1
  210. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  211. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  212. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  213. package/dist/components/fields/Input/Input.js +1 -1
  214. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  215. package/dist/components/fields/ListBox/ListBox.js +1 -1
  216. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  217. package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
  218. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  219. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  220. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  221. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  222. package/dist/components/fields/PasswordInput/PasswordInput.js +9 -6
  223. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  224. package/dist/components/fields/Picker/Picker.js +1 -1
  225. package/dist/components/fields/Picker/Picker.js.map +1 -1
  226. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  227. package/dist/components/fields/RadioGroup/RadioGroup.js +2 -1
  228. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  229. package/dist/components/fields/RadioGroup/context.js +1 -1
  230. package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -6
  231. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  232. package/dist/components/fields/SearchInput/SearchInput.js +18 -16
  233. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  234. package/dist/components/fields/Select/Select.js +3 -6
  235. package/dist/components/fields/Select/Select.js.map +1 -1
  236. package/dist/components/fields/Slider/Gradation.js +1 -1
  237. package/dist/components/fields/Slider/HueSlider.js +15 -2
  238. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  239. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  240. package/dist/components/fields/Slider/Slider.js +1 -1
  241. package/dist/components/fields/Slider/SliderBase.js +1 -1
  242. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  243. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  244. package/dist/components/fields/Slider/elements.js +1 -1
  245. package/dist/components/fields/Slider/index.js +1 -1
  246. package/dist/components/fields/Switch/Switch.js +1 -1
  247. package/dist/components/fields/TextArea/TextArea.js +10 -29
  248. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  249. package/dist/components/fields/TextInput/TextInput.js +1 -1
  250. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  251. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +146 -0
  252. package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -0
  253. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  254. package/dist/components/fields/color/ColorPanel.js +1 -1
  255. package/dist/components/fields/color/channels.js +1 -1
  256. package/dist/components/fields/color/color.js +4 -4
  257. package/dist/components/fields/color/color.js.map +1 -1
  258. package/dist/components/fields/color/context.js +1 -1
  259. package/dist/components/fields/color/index.d.ts +0 -1
  260. package/dist/components/fields/index.d.ts +2 -1
  261. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  262. package/dist/components/form/Form/Field.js +1 -1
  263. package/dist/components/form/Form/Form.js +1 -1
  264. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  265. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  266. package/dist/components/form/Form/SubmitError.js +1 -1
  267. package/dist/components/form/Form/index.js +1 -1
  268. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  269. package/dist/components/form/Form/use-field/use-field.js +1 -1
  270. package/dist/components/form/Form/use-form.js +1 -1
  271. package/dist/components/form/Form/validation.js +1 -1
  272. package/dist/components/form/Label.js +1 -1
  273. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  274. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  275. package/dist/components/form/validation/use-validation-props.js +1 -1
  276. package/dist/components/form/wrapper.js +1 -1
  277. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  278. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  279. package/dist/components/layout/Board/Board.d.ts +38 -5
  280. package/dist/components/layout/Board/Board.js +11 -5
  281. package/dist/components/layout/Board/Board.js.map +1 -1
  282. package/dist/components/layout/Board/BoardProvider.js +1 -1
  283. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  284. package/dist/components/layout/Board/Widget.d.ts +16 -1
  285. package/dist/components/layout/Board/Widget.js +3 -2
  286. package/dist/components/layout/Board/Widget.js.map +1 -1
  287. package/dist/components/layout/Board/WidgetHost.js +92 -17
  288. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  289. package/dist/components/layout/Board/board-context.js +5 -5
  290. package/dist/components/layout/Board/board-context.js.map +1 -1
  291. package/dist/components/layout/Board/board-store.d.ts +1 -0
  292. package/dist/components/layout/Board/board-store.js +2 -2
  293. package/dist/components/layout/Board/board-store.js.map +1 -1
  294. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  295. package/dist/components/layout/Board/grid-core/collision-modes.js +186 -0
  296. package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -0
  297. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  298. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  299. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  300. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  301. package/dist/components/layout/Board/grid-core/layout.js +12 -2
  302. package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
  303. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  304. package/dist/components/layout/Board/grid-core/types.d.ts +19 -1
  305. package/dist/components/layout/Board/index.d.ts +2 -2
  306. package/dist/components/layout/Board/index.js +1 -1
  307. package/dist/components/layout/Board/index.js.map +1 -1
  308. package/dist/components/layout/Board/responsive-utils.js +1 -1
  309. package/dist/components/layout/Board/use-board-layout.js +1 -1
  310. package/dist/components/layout/Board/use-board-registry.js +137 -47
  311. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  312. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  313. package/dist/components/layout/Board/use-board-selection.js +1 -1
  314. package/dist/components/layout/Flex.js +1 -1
  315. package/dist/components/layout/Flow.js +1 -1
  316. package/dist/components/layout/Grid.js +1 -1
  317. package/dist/components/layout/Panel.js +1 -1
  318. package/dist/components/layout/Prefix.js +1 -1
  319. package/dist/components/layout/ResizablePanel.js +1 -1
  320. package/dist/components/layout/Space.js +1 -1
  321. package/dist/components/layout/Suffix.js +1 -1
  322. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  323. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  324. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  325. package/dist/components/navigation/Tabs/TabButton.js +2 -29
  326. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  327. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  328. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  329. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  330. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  331. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  332. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  333. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  334. package/dist/components/navigation/Tabs/styled.js +1 -1
  335. package/dist/components/navigation/Tabs/types.js +1 -1
  336. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  337. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  338. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  339. package/dist/components/other/Calendar/Calendar.js +1 -1
  340. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  341. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  342. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  343. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  344. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  345. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  346. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  347. package/dist/components/other/Calendar/styled.js +1 -1
  348. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  349. package/dist/components/other/NoDataIcon/NoDataIcon.d.ts +37 -0
  350. package/dist/components/other/NoDataIcon/NoDataIcon.js +56 -0
  351. package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -0
  352. package/dist/components/other/NoDataIcon/index.d.ts +2 -0
  353. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  354. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  355. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  356. package/dist/components/overlays/Dialog/Dialog.js +4 -3
  357. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  358. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  359. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  360. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +13 -0
  361. package/dist/components/overlays/Dialog/DialogTrigger.js +24 -5
  362. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  363. package/dist/components/overlays/Dialog/context.js +1 -1
  364. package/dist/components/overlays/Dialog/context.js.map +1 -1
  365. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  366. package/dist/components/overlays/Modal/Modal.d.ts +1 -2
  367. package/dist/components/overlays/Modal/Modal.js +1 -1
  368. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  369. package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
  370. package/dist/components/overlays/Modal/Overlay.js +1 -1
  371. package/dist/components/overlays/Modal/Popover.js +1 -1
  372. package/dist/components/overlays/Modal/Tray.js +1 -1
  373. package/dist/components/overlays/Modal/Underlay.js +1 -1
  374. package/dist/components/overlays/Modal/types.d.ts +0 -1
  375. package/dist/components/overlays/Notifications/Notification.js +1 -1
  376. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  377. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  378. package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
  379. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  380. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  381. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  382. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  383. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  384. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  385. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  386. package/dist/components/overlays/Notifications/index.js +1 -1
  387. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  388. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  389. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  390. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  391. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  392. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  393. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  394. package/dist/components/overlays/Toast/index.js +1 -1
  395. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  396. package/dist/components/overlays/Toast/useToast.js +1 -1
  397. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  398. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  399. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  400. package/dist/components/overlays/Tooltip/context.js +1 -1
  401. package/dist/components/portal/Portal.js +1 -1
  402. package/dist/components/portal/PortalProvider.js +1 -1
  403. package/dist/components/portal/index.d.ts +0 -1
  404. package/dist/components/portal/usePortal.js +1 -1
  405. package/dist/components/shared/DraggableCollection.js +1 -1
  406. package/dist/components/shared/InvalidIcon.js +1 -1
  407. package/dist/components/shared/ValidIcon.js +1 -1
  408. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  409. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  410. package/dist/components/status/Spin/Cube.js +1 -1
  411. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  412. package/dist/components/status/Spin/Spin.js +1 -1
  413. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  414. package/dist/data/item-themes.d.ts +1 -1
  415. package/dist/data/item-themes.js +217 -46
  416. package/dist/data/item-themes.js.map +1 -1
  417. package/dist/data/themes.js +1 -1
  418. package/dist/eslint-plugin/defaults.generated.js +41 -13
  419. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  420. package/dist/eslint-plugin/index.js +1 -1
  421. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  422. package/dist/i18n/I18nProvider.js +1 -1
  423. package/dist/i18n/createFormatter.js +1 -1
  424. package/dist/i18n/index.js +1 -1
  425. package/dist/i18n/instance.js +1 -1
  426. package/dist/i18n/locales/de-DE/uikit.js +2 -1
  427. package/dist/i18n/locales/en-US/uikit.js +2 -1
  428. package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -0
  429. package/dist/i18n/locales/es-ES/uikit.js +2 -1
  430. package/dist/i18n/locales/es-MX/uikit.js +2 -1
  431. package/dist/i18n/locales/fr-FR/uikit.js +2 -1
  432. package/dist/i18n/locales/it-IT/uikit.js +2 -1
  433. package/dist/i18n/locales/ja-JP/uikit.js +2 -1
  434. package/dist/i18n/locales/nb-NO/uikit.js +2 -1
  435. package/dist/i18n/locales/pt-BR/uikit.js +2 -1
  436. package/dist/i18n/locales/pt-PT/uikit.js +2 -1
  437. package/dist/i18n/locales/sv-SE/uikit.js +2 -1
  438. package/dist/i18n/locales/vi-VN/uikit.js +2 -1
  439. package/dist/i18n/locales.js +1 -1
  440. package/dist/i18n/useFormatter.js +1 -1
  441. package/dist/i18n/useI18n.js +1 -1
  442. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  443. package/dist/icons/AdjustmentsIcon.js +1 -1
  444. package/dist/icons/AiIcon.js +1 -1
  445. package/dist/icons/AreaChartIcon.js +1 -1
  446. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  447. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  448. package/dist/icons/BackwardIcon.js +1 -1
  449. package/dist/icons/BarChartIcon.js +1 -1
  450. package/dist/icons/BellFilledIcon.js +1 -1
  451. package/dist/icons/BellIcon.js +1 -1
  452. package/dist/icons/BooleanIcon.js +1 -1
  453. package/dist/icons/CalendarEditIcon.js +1 -1
  454. package/dist/icons/CalendarIcon.js +1 -1
  455. package/dist/icons/CaretDownIcon.js +1 -1
  456. package/dist/icons/CaretUpIcon.js +1 -1
  457. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  458. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  459. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  460. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  461. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  462. package/dist/icons/ChartBarLineIcon.js +1 -1
  463. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  464. package/dist/icons/ChartBarStackedIcon.js +1 -1
  465. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  466. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  467. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  468. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  469. package/dist/icons/ChartBubbleIcon.js +1 -1
  470. package/dist/icons/ChartDonut2Icon.js +1 -1
  471. package/dist/icons/ChartFunnelIcon.js +1 -1
  472. package/dist/icons/ChartHeatmapIcon.js +1 -1
  473. package/dist/icons/ChartKPIIcon.js +1 -1
  474. package/dist/icons/ChartPie2Icon.js +1 -1
  475. package/dist/icons/ChartScatterIcon.js +1 -1
  476. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  477. package/dist/icons/CheckCircleIcon.js +1 -1
  478. package/dist/icons/CheckIcon.js +1 -1
  479. package/dist/icons/CircleFilledIcon.js +1 -1
  480. package/dist/icons/ClearIcon.js +1 -1
  481. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  482. package/dist/icons/CloseCircleIcon.js +1 -1
  483. package/dist/icons/CloseIcon.js +1 -1
  484. package/dist/icons/CodeIcon.js +1 -1
  485. package/dist/icons/ColumnTotalIcon.js +1 -1
  486. package/dist/icons/CopyIcon.js +1 -1
  487. package/dist/icons/CountIcon.js +1 -1
  488. package/dist/icons/CubeIcon.js +1 -1
  489. package/dist/icons/CubePauseIcon.js +1 -1
  490. package/dist/icons/CubePlayIcon.js +1 -1
  491. package/dist/icons/CurrencyDollarIcon.js +1 -1
  492. package/dist/icons/DangerIcon.js +1 -1
  493. package/dist/icons/DashboardIcon.js +1 -1
  494. package/dist/icons/DatabaseIcon.js +1 -1
  495. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  496. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  497. package/dist/icons/DirectionIcon.js +1 -1
  498. package/dist/icons/DonutIcon.js +1 -1
  499. package/dist/icons/DownIcon.js +1 -1
  500. package/dist/icons/EditIcon.js +1 -1
  501. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  502. package/dist/icons/ExclamationCircleIcon.js +1 -1
  503. package/dist/icons/ExclamationIcon.js +1 -1
  504. package/dist/icons/EyeIcon.js +1 -1
  505. package/dist/icons/EyeInvisibleIcon.js +1 -1
  506. package/dist/icons/FilterIcon.js +1 -1
  507. package/dist/icons/FolderFilledIcon.js +1 -1
  508. package/dist/icons/FolderIcon.js +1 -1
  509. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  510. package/dist/icons/FolderOpenIcon.js +1 -1
  511. package/dist/icons/ForwardIcon.js +1 -1
  512. package/dist/icons/GripVerticalIcon.js +1 -1
  513. package/dist/icons/HierarchyIcon.js +1 -1
  514. package/dist/icons/HierarchyOpenIcon.js +1 -1
  515. package/dist/icons/Icon.js +1 -1
  516. package/dist/icons/InfoCircleIcon.js +1 -1
  517. package/dist/icons/InfoIcon.js +1 -1
  518. package/dist/icons/KeyIcon.js +1 -1
  519. package/dist/icons/LeftIcon.js +1 -1
  520. package/dist/icons/LineChartIcon.js +1 -1
  521. package/dist/icons/LoadingIcon.js +1 -1
  522. package/dist/icons/LockFilledIcon.js +1 -1
  523. package/dist/icons/LockIcon.js +1 -1
  524. package/dist/icons/MoreIcon.js +1 -1
  525. package/dist/icons/NotAllowedIcon.js +1 -1
  526. package/dist/icons/Number123Icon.js +1 -1
  527. package/dist/icons/NumberIcon.js +1 -1
  528. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  529. package/dist/icons/PauseCircleIcon.js +1 -1
  530. package/dist/icons/PauseIcon.js +1 -1
  531. package/dist/icons/PercentageIcon.js +1 -1
  532. package/dist/icons/PieChartIcon.js +1 -1
  533. package/dist/icons/PipetteIcon.js +1 -1
  534. package/dist/icons/PlayCircleIcon.js +1 -1
  535. package/dist/icons/PlayIcon.js +1 -1
  536. package/dist/icons/PlusIcon.js +1 -1
  537. package/dist/icons/ProgressBarIcon.js +1 -1
  538. package/dist/icons/ReloadIcon.js +1 -1
  539. package/dist/icons/ReportIcon.js +1 -1
  540. package/dist/icons/ReturnIcon.js +1 -1
  541. package/dist/icons/RightIcon.js +1 -1
  542. package/dist/icons/RowTotalsIcon.js +1 -1
  543. package/dist/icons/SchemeIcon.js +1 -1
  544. package/dist/icons/SearchIcon.js +1 -1
  545. package/dist/icons/SemanticQueryIcon.js +1 -1
  546. package/dist/icons/SettingsIcon.js +1 -1
  547. package/dist/icons/ShieldFilledIcon.js +1 -1
  548. package/dist/icons/ShieldIcon.js +1 -1
  549. package/dist/icons/SlashIcon.js +1 -1
  550. package/dist/icons/SparklesIcon.js +1 -1
  551. package/dist/icons/SqlIcon.js +1 -1
  552. package/dist/icons/StatsIcon.js +1 -1
  553. package/dist/icons/StopIcon.js +1 -1
  554. package/dist/icons/StringIcon.js +1 -1
  555. package/dist/icons/SubtotalsIcon.js +1 -1
  556. package/dist/icons/SwitchIcon.js +1 -1
  557. package/dist/icons/TableIcon.js +1 -1
  558. package/dist/icons/ThumbsDownIcon.js +1 -1
  559. package/dist/icons/ThumbsUpIcon.js +1 -1
  560. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  561. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  562. package/dist/icons/ThunderboltIcon.js +1 -1
  563. package/dist/icons/TimeIcon.js +1 -1
  564. package/dist/icons/TrashIcon.js +1 -1
  565. package/dist/icons/UnlockIcon.js +1 -1
  566. package/dist/icons/UpIcon.js +1 -1
  567. package/dist/icons/UserGroupIcon.js +1 -1
  568. package/dist/icons/UserIcon.js +1 -1
  569. package/dist/icons/UserLockIcon.js +1 -1
  570. package/dist/icons/ViewIcon.js +1 -1
  571. package/dist/icons/WarningFilledIcon.js +1 -1
  572. package/dist/icons/WarningIcon.js +1 -1
  573. package/dist/icons/wrap-icon.js +1 -1
  574. package/dist/index.d.ts +10 -7
  575. package/dist/index.js +6 -4
  576. package/dist/index.js.map +1 -1
  577. package/dist/probe/canonicalize.js +1 -1
  578. package/dist/probe/css.js +1 -1
  579. package/dist/probe/index.js +1 -1
  580. package/dist/provider.js +1 -1
  581. package/dist/providers/TrackingProvider.js +1 -1
  582. package/dist/providers/navigationAdapter.default.js +1 -1
  583. package/dist/tokens/base.js +1 -1
  584. package/dist/tokens/color-seed.d.ts +44 -0
  585. package/dist/tokens/color-seed.js +48 -0
  586. package/dist/tokens/color-seed.js.map +1 -0
  587. package/dist/tokens/color-theme.d.ts +9 -1
  588. package/dist/tokens/color-theme.js +20 -7
  589. package/dist/tokens/color-theme.js.map +1 -1
  590. package/dist/tokens/colors.js +20 -3
  591. package/dist/tokens/colors.js.map +1 -1
  592. package/dist/tokens/index.d.ts +2 -1
  593. package/dist/tokens/index.js +3 -2
  594. package/dist/tokens/index.js.map +1 -1
  595. package/dist/tokens/layout.js +1 -1
  596. package/dist/tokens/lazy-styles.js +1 -1
  597. package/dist/tokens/palette-config.d.ts +304 -77
  598. package/dist/tokens/palette-config.js +188 -49
  599. package/dist/tokens/palette-config.js.map +1 -1
  600. package/dist/tokens/palette.js +617 -163
  601. package/dist/tokens/palette.js.map +1 -1
  602. package/dist/tokens/shadows.js +1 -1
  603. package/dist/tokens/sizes.js +1 -1
  604. package/dist/tokens/spacing.js +1 -1
  605. package/dist/tokens/typography.js +1 -1
  606. package/dist/utils/ResizeSensor.js +1 -1
  607. package/dist/utils/is-dev-env.js +1 -1
  608. package/dist/utils/modules.js +1 -1
  609. package/dist/utils/promise.js +1 -1
  610. package/dist/utils/raf.js +1 -1
  611. package/dist/utils/random.js +1 -1
  612. package/dist/utils/range.js +1 -1
  613. package/dist/utils/react/RenderCache.js +1 -1
  614. package/dist/utils/react/Slots.js +1 -1
  615. package/dist/utils/react/chain.js +1 -1
  616. package/dist/utils/react/disabledProps.js +1 -1
  617. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  618. package/dist/utils/react/index.js +1 -1
  619. package/dist/utils/react/interactions.js +1 -1
  620. package/dist/utils/react/isTextOnly.js +1 -1
  621. package/dist/utils/react/mapProps.js +1 -1
  622. package/dist/utils/react/mergeProps.js +1 -1
  623. package/dist/utils/react/nullableValue.js +1 -1
  624. package/dist/utils/react/resolveIcon.js +1 -1
  625. package/dist/utils/react/sharedStore.js +1 -1
  626. package/dist/utils/react/useBufferedValue.js +1 -1
  627. package/dist/utils/react/useCombinedRefs.js +1 -1
  628. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  629. package/dist/utils/react/useEventBus.js +1 -1
  630. package/dist/utils/react/useId.js +1 -1
  631. package/dist/utils/react/useIsDarwin.js +1 -1
  632. package/dist/utils/react/useKeySymbols.js +1 -1
  633. package/dist/utils/react/useLayoutEffect.js +1 -1
  634. package/dist/utils/react/useLocalStorage.js +1 -1
  635. package/dist/utils/react/useMergeStyles.js +1 -1
  636. package/dist/utils/react/usePopoverSync.js +1 -1
  637. package/dist/utils/react/useQaProps.js +1 -1
  638. package/dist/utils/react/useViewportSize.js +1 -1
  639. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  640. package/dist/utils/selection.js +1 -1
  641. package/dist/utils/styles.js +1 -1
  642. package/dist/utils/tree.js +1 -1
  643. package/dist/utils/warnings.js +1 -1
  644. package/dist/version.js +3 -3
  645. package/docs/Introduction.md +85 -97
  646. package/docs/Theming.md +471 -83
  647. package/docs/Usage.md +63 -2
  648. package/docs/components/Root.md +1 -1
  649. package/docs/components/actions/Button.md +9 -3
  650. package/docs/components/actions/ItemAction.md +3 -3
  651. package/docs/components/actions/MenuTrigger.md +54 -2
  652. package/docs/components/actions/SubMenuTrigger.md +2 -2
  653. package/docs/components/content/CopySnippet.md +5 -5
  654. package/docs/components/content/InlineInput.md +1 -1
  655. package/docs/components/content/Item.md +10 -10
  656. package/docs/components/content/ItemBadge.md +2 -2
  657. package/docs/components/content/PrismCode.md +1 -0
  658. package/docs/components/data/DataTable.md +110 -11
  659. package/docs/components/data/ItemTable.md +63 -1
  660. package/docs/components/fields/ColorSwatch.md +155 -0
  661. package/docs/components/layout/Board.md +21 -2
  662. package/docs/components/other/NoDataIcon.md +48 -0
  663. package/docs/components/overlays/DialogTrigger.md +3 -2
  664. package/docs/components/status/LoadingAnimation.md +12 -0
  665. package/docs/glaze/api.md +155 -47
  666. package/docs/glaze/methodology.md +15 -13
  667. package/docs/glaze/migration.md +36 -0
  668. package/docs/glaze/okhst.md +4 -0
  669. package/docs/tasty/ai-agents.md +3 -0
  670. package/docs/tasty/configuration.md +11 -6
  671. package/docs/tasty/dsl.md +99 -2
  672. package/docs/tasty/styles.md +3 -1
  673. package/package.json +3 -3
  674. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
  675. package/dist/components/fields/color/ColorSwatch.js.map +0 -1
  676. package/dist/components/portal/PortalProvider.d.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"ItemTable.js","names":[],"sources":["../../../../src/components/data/ItemTable/ItemTable.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { CONTAINER_STYLES } from '@tenphi/tasty';\nimport { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { useCombinedRefs } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { clampPage, getPageInfo } from '../../navigation/Pagination';\nimport { DraggableCollection } from '../../shared/DraggableCollection';\nimport {\n ROW_MENU_COLUMN_KEY,\n ROW_MENU_COLUMN_WIDTH,\n} from '../TableBase/row-menu';\nimport { TableView } from '../TableBase/TableView';\nimport { useContainerWidth } from '../TableBase/use-container-width';\nimport {\n freezeColumnWidths,\n useTableColumns,\n} from '../TableBase/use-table-columns';\nimport { useTableSearch } from '../TableBase/use-table-search';\nimport {\n SELECTION_COLUMN_KEY,\n SELECTION_COLUMN_WIDTH,\n useTableSelection,\n} from '../TableBase/use-table-selection';\nimport { useTableSort } from '../TableBase/use-table-sort';\nimport { useTableStorage } from '../TableBase/use-table-storage';\n\nimport { ItemTableBulkBar } from './ItemTableBulkBar';\nimport { ItemTableDragPreview } from './ItemTableDragPreview';\nimport { ItemTableFooter } from './ItemTableFooter';\nimport {\n ItemTableChromeProvider,\n ItemTableSearch,\n ItemTableToolbar,\n} from './ItemTableToolbar';\n\nimport type { Key } from '@react-types/shared';\nimport type { ForwardedRef, ReactElement, ReactNode } from 'react';\nimport type {\n CubeTableColumnLayout,\n CubeTableRowContext,\n CubeTableSort,\n} from '../TableBase/types';\nimport type { CubeItemTableProps } from './types';\n\n/** Stable identity, so the uncontrolled default does not change every render. */\nconst EMPTY_WIDTHS: Record<string, number> = {};\n\nfunction defaultGetRowKey<T>(rowKey: string) {\n return (row: T, index: number): Key => {\n const value = (row as any)?.[rowKey];\n\n return value == null ? index : (value as Key);\n };\n}\n\nfunction ItemTable<T = any>(\n props: CubeItemTableProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement {\n const {\n data,\n columns,\n rowKey = 'id',\n getRowKey,\n isLoading = false,\n loadingIndicator = 'overlay',\n selectionMode,\n bulkActions,\n rowLink,\n onRowAction,\n rowMenu,\n rowContextMenu = false,\n onRowMenuAction,\n rowMenuTriggerProps,\n bulkBarPlacement = 'floating',\n bulkBarStyles,\n selectedKeys: selectedKeysProp,\n defaultSelectedKeys,\n onSelectionChange,\n selectAllMode = 'page',\n isRowSelectable,\n selectionTooltip,\n disabledKeys,\n skeletonRowCount = 6,\n emptyLabel,\n noResultsLabel,\n error,\n isFiltered,\n toolbar,\n isSearchable = false,\n searchMode = 'client',\n searchPlaceholder,\n searchValue: searchValueProp,\n defaultSearchValue,\n onSearchChange,\n searchDelay = 500,\n searchFilter,\n filters,\n actions,\n onRefresh,\n paginationMode = 'client',\n pageSize: pageSizeProp,\n defaultPageSize = 50,\n autoHidePagination = true,\n onLoadMore,\n hasMore,\n isLoadingMore,\n loadMoreMargin,\n storageKey,\n persist,\n isReorderable = false,\n onReorder,\n dropOnRow,\n getItemDragInfo,\n isResizable = false,\n columnWidths: columnWidthsProp,\n defaultColumnWidths,\n onColumnResize,\n columnContextMenu,\n onColumnMenuAction,\n columnMenuTriggerProps,\n columnMenuProps,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100, 500],\n page: pageProp,\n defaultPage,\n onPageChange,\n total: totalProp,\n totalPages,\n hasNextPage,\n summary = true,\n footer,\n footerStart,\n footerCenter,\n footerEnd,\n sortMode,\n sort: sortProp,\n defaultSort,\n onSortChange,\n shape = 'plain',\n size = 'medium',\n rowHeight,\n headerHeight,\n isStriped = false,\n isHeaderHidden = false,\n isHeaderSticky = true,\n isVirtualized = 'auto',\n virtualizeThreshold = 50,\n overscan = 20,\n getRowProps,\n ariaLabel,\n qa,\n mods,\n styles,\n headerStyles,\n headerCellStyles,\n headerPreset = 'c3',\n toolbarStyles,\n searchStyles,\n footerStyles,\n bodyStyles,\n rowStyles,\n cellStyles,\n isRowMoveAnimated,\n } = props;\n\n const { t } = useI18n();\n\n const localRef = useRef<HTMLDivElement>(null);\n const rootRef = useCombinedRefs(ref, localRef);\n\n // Held in state, not a ref: the virtualized path's scroller is created by\n // Virtuoso and arrives through a callback, and the column layout has to\n // re-derive once it does.\n const [scrollerEl, setScrollerEl] = useState<HTMLDivElement | null>(null);\n const containerWidth = useContainerWidth(scrollerEl);\n\n // Style props (`height`, `maxHeight`, `margin`, …) land on the root frame.\n // `height` matters most: there is no page-scroll mode, so bounding the table\n // is what turns the body into a scroller and pins the header.\n const rootStyles = { ...extractStyles(props, CONTAINER_STYLES), ...styles };\n\n const {\n searchValue,\n setSearchValue,\n searchedRows,\n isFiltered: isSearching,\n } = useTableSearch<T>({\n columns,\n rows: data,\n mode: searchMode,\n value: searchValueProp,\n defaultValue: defaultSearchValue,\n onChange: onSearchChange,\n delay: searchDelay,\n filter: searchFilter,\n });\n\n const storage = useTableStorage(storageKey, persist);\n\n const {\n sort,\n sortedRows,\n toggleSort,\n setColumnSort,\n mode: resolvedSortMode,\n } = useTableSort<T>({\n columns,\n rows: searchedRows,\n mode: sortMode,\n sort: sortProp,\n // Only restore what the table owns: a controlled `sort` belongs to the page,\n // and overriding it here would fight the page's own source of truth.\n defaultSort:\n sortProp === undefined && storage.has('sort')\n ? storage.initial.sort ?? defaultSort\n : defaultSort,\n onSortChange: useEvent((next: CubeTableSort | null) => {\n if (sortProp === undefined) storage.write({ sort: next });\n onSortChange?.(next);\n }),\n });\n\n // Search → sort → paginate. Paging last, so a page always reflects the rows\n // the user is actually looking at.\n //\n // Deliberately not `usePagination`: that hook owns an in-memory array, and in\n // server mode `data` is a single page. Deriving the bounds from it would clamp\n // the page to 1 and swallow every page change.\n const [pageSize, setPageSizeState] = useControlledState<number>(\n pageSizeProp as number,\n pageSizeProp === undefined && storage.has('pageSize')\n ? storage.initial.pageSize ?? defaultPageSize\n : defaultPageSize,\n onPageSizeChange as (value: number) => void,\n );\n const [page, setPageState] = useControlledState<number>(\n pageProp as number,\n defaultPage ?? 1,\n onPageChange as (value: number) => void,\n );\n\n const isInfinite = paginationMode === 'infinite';\n // Infinite scroll replaces the page control rather than adding to it.\n const isPaginated = paginationMode !== 'off' && !isInfinite;\n const isServerPaginated = paginationMode === 'server';\n const total = isServerPaginated ? totalProp ?? 0 : sortedRows.length;\n\n const pageInfo = getPageInfo({\n page,\n pageSize,\n total,\n totalPages: isServerPaginated ? totalPages : undefined,\n });\n\n const setPage = useEvent((next: number) =>\n setPageState(clampPage(next, pageInfo.totalPages)),\n );\n const setPageSize = useEvent((next: number) => {\n setPageSizeState(next);\n\n if (pageSizeProp === undefined) storage.write({ pageSize: next });\n\n // The old page index points at different rows under a new page size, so\n // staying on it would silently move the user.\n setPageState(1);\n });\n\n const visibleRows =\n paginationMode === 'client'\n ? sortedRows.slice(\n (pageInfo.page - 1) * pageSize,\n pageInfo.page * pageSize,\n )\n : sortedRows;\n\n const resolvedGetRowKey = useMemo(\n () => getRowKey ?? defaultGetRowKey<T>(rowKey),\n [getRowKey, rowKey],\n );\n\n // A bulk action with no way to select rows is a contradiction, so supplying\n // any implies multiple selection unless the consumer says otherwise.\n const resolvedSelectionMode =\n selectionMode ?? (bulkActions?.length ? 'multiple' : 'none');\n\n const selection = useTableSelection<T>({\n rows: visibleRows,\n // The wider set the header checkbox can reach under\n // `selectAllMode=\"filtered\"`. In server mode the client only ever holds one\n // page, so the two coincide.\n filteredRows: paginationMode === 'client' ? sortedRows : visibleRows,\n getRowKey: resolvedGetRowKey,\n selectionMode: resolvedSelectionMode,\n selectedKeys: selectedKeysProp,\n defaultSelectedKeys,\n onSelectionChange,\n selectAllMode,\n isRowSelectable,\n disabledKeys,\n });\n\n // A `ReactNode` menu applies to every row; a function decides per row. The\n // renderer only ever sees the function form.\n const resolveRowMenu = useMemo(\n () =>\n rowMenu == null\n ? undefined\n : typeof rowMenu === 'function'\n ? (rowMenu as (\n row: T,\n ctx: CubeTableRowContext<T>,\n ) => ReactNode | null)\n : () => rowMenu as ReactNode,\n [rowMenu],\n );\n\n const trailingColumns = useMemo(\n () =>\n resolveRowMenu && rowContextMenu === true\n ? [\n {\n key: ROW_MENU_COLUMN_KEY,\n width:\n ROW_MENU_COLUMN_WIDTH[size] ?? ROW_MENU_COLUMN_WIDTH.medium,\n align: 'center' as const,\n },\n ]\n : undefined,\n [resolveRowMenu, rowContextMenu, size],\n );\n\n const leadingColumns = useMemo(\n () =>\n selection.isEnabled\n ? [\n {\n key: SELECTION_COLUMN_KEY,\n width:\n SELECTION_COLUMN_WIDTH[size] ?? SELECTION_COLUMN_WIDTH.medium,\n align: 'center' as const,\n },\n ]\n : undefined,\n [selection.isEnabled, size],\n );\n\n /**\n * Column widths, in three layers.\n *\n * The draft exists because a resize has to be visible *while* it happens, and\n * a controlled `columnWidths` cannot be: the consumer only learns the new\n * width from `onColumnResize`, which fires when the gesture ends. Without a\n * draft a controlled table simply would not move under the pointer.\n */\n const [ownColumnWidths, setOwnColumnWidths] = useState<\n Record<string, number>\n >(\n () =>\n (columnWidthsProp === undefined && storage.has('columnWidths')\n ? storage.initial.columnWidths ?? defaultColumnWidths\n : defaultColumnWidths) ?? EMPTY_WIDTHS,\n );\n const [draftColumnWidths, setDraftColumnWidths] = useState<Record<\n string,\n number\n > | null>(null);\n\n /**\n * The same draft, in a ref.\n *\n * A keyboard resize runs `useMove`'s whole start → move → end cycle inside\n * one key press, so the end handler would read the state from before the\n * move. The ref is what it actually settles on; the state exists only to\n * trigger the render.\n */\n const draftColumnWidthsRef = useRef<Record<string, number> | null>(null);\n\n const baseColumnWidths = columnWidthsProp ?? ownColumnWidths;\n const columnWidths = draftColumnWidths ?? baseColumnWidths;\n\n /** `layout` is computed below; `useEvent` only reads this when a drag runs. */\n const layoutRef = useRef<CubeTableColumnLayout<T> | null>(null);\n\n const handleColumnResize = useEvent((key: string, width: number) => {\n // First move of a drag freezes every column, so this changes exactly one\n // width instead of re-splitting the flex pool. See `freezeColumnWidths`.\n const base =\n draftColumnWidthsRef.current ??\n freezeColumnWidths(layoutRef.current, baseColumnWidths);\n\n draftColumnWidthsRef.current = { ...base, [key]: Math.round(width) };\n setDraftColumnWidths(draftColumnWidthsRef.current);\n });\n\n // Once at the end: a callback per pixel would be unusable, and persisting\n // every frame would hammer `localStorage`.\n const handleColumnResizeEnd = useEvent((key: string) => {\n const next = draftColumnWidthsRef.current ?? baseColumnWidths;\n\n if (columnWidthsProp === undefined) {\n setOwnColumnWidths(next);\n storage.write({ columnWidths: next });\n }\n\n onColumnResize?.(key, next[key], next);\n\n // The prop (or `ownColumnWidths`) is the source of truth again. A\n // controlled consumer that ignores the callback reverts, which is what\n // being controlled means.\n draftColumnWidthsRef.current = null;\n setDraftColumnWidths(null);\n });\n\n const layout = useTableColumns<T>({\n columns,\n containerWidth,\n columnWidths,\n leadingColumns,\n trailingColumns,\n });\n\n layoutRef.current = layout;\n\n const hasBulkSelection =\n bulkActions != null &&\n bulkActions.length > 0 &&\n selection.selectedCount > 0;\n\n const bulkBar = hasBulkSelection ? (\n <ItemTableBulkBar<T>\n actions={bulkActions!}\n placement={bulkBarPlacement}\n styles={bulkBarStyles}\n />\n ) : null;\n\n const isBulkBarInToolbar = bulkBar != null && bulkBarPlacement === 'toolbar';\n\n const hasToolbar =\n toolbar !== undefined ||\n isSearchable ||\n filters != null ||\n actions != null ||\n onRefresh != null ||\n isBulkBarInToolbar;\n\n const toolbarNode = hasToolbar\n ? toolbar ?? (\n <ItemTableToolbar\n isSearchable={isSearchable}\n filters={filters}\n // The bar takes the actions group rather than sitting beside it: the\n // two compete for the same space, and while rows are selected the\n // bulk actions are what the user is reaching for.\n actions={isBulkBarInToolbar ? bulkBar : actions}\n isLoading={isLoading}\n styles={toolbarStyles}\n searchStyles={searchStyles}\n onRefresh={onRefresh}\n />\n )\n : null;\n\n /**\n * Pagination that cannot do anything is noise: one page of five rows still\n * renders \"1–5 of 5\", a page-size selector whose every option shows the same\n * five rows, and a solitary \"1\" button.\n *\n * \"Cannot do anything\" is both conditions together — a single page *and* a\n * total that even the smallest page size would not split. A 15-row single\n * page stays, because choosing \"10 / page\" would genuinely paginate it.\n */\n const smallestPageSize = pageSizeOptions?.length\n ? Math.min(...pageSizeOptions)\n : pageSize;\n\n const isPaginationUseless =\n autoHidePagination &&\n !hasNextPage &&\n pageInfo.totalPages <= 1 &&\n total <= smallestPageSize;\n\n const showPagination = isPaginated && !isPaginationUseless;\n\n const hasFooter =\n footer !== undefined ||\n showPagination ||\n footerStart != null ||\n footerCenter != null ||\n footerEnd != null;\n\n const footerNode = hasFooter\n ? footer ?? (\n <ItemTableFooter\n start={footerStart}\n center={footerCenter}\n end={footerEnd}\n styles={footerStyles}\n pagination={\n showPagination\n ? {\n page: pageInfo.page,\n pageSize,\n total,\n totalPages: pageInfo.totalPages,\n pageSizeOptions,\n summary,\n hasNextPage,\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n }\n : undefined\n }\n />\n )\n : null;\n\n const bodyRef = useRef<HTMLTableSectionElement>(null);\n\n const rowKeys = useMemo(\n () =>\n visibleRows.map((row, index) => String(resolvedGetRowKey(row, index))),\n [visibleRows, resolvedGetRowKey],\n );\n\n const handleReorder = useEvent((nextKeys: string[]) => {\n const byKey = new Map(\n visibleRows.map((row, index) => [\n String(resolvedGetRowKey(row, index)),\n row,\n ]),\n );\n\n onReorder?.(\n nextKeys,\n nextKeys\n .map((key) => byKey.get(key))\n .filter((row): row is T => row !== undefined),\n );\n });\n\n /**\n * `DraggableCollection` owns the React Aria drag/drop hooks and hands the two\n * states down. It is only mounted when reordering is on, so a plain table\n * pays nothing for it.\n *\n * `RowCollection` and the `SelectionManager` from `useTableSelection` satisfy\n * its structural `state` contract unchanged — both exist even when selection\n * itself is off.\n */\n const renderTable = (\n dragState?: any,\n dropState?: any,\n collectionProps?: Record<string, any>,\n ) => (\n <TableView<T>\n rootRef={rootRef}\n dragState={dragState}\n dropState={dropState}\n collectionProps={collectionProps}\n bodyRef={bodyRef}\n qa={qa || 'ItemTable'}\n rows={visibleRows}\n // `aria-rowindex` is document-absolute by contract: on page 3 a screen\n // reader should hear \"row 51 of 240\", not \"row 1 of 25\". Infinite scroll\n // never offsets — every loaded row is already in `visibleRows`.\n // `isPaginated` already excludes infinite scroll, where every loaded row\n // is in `visibleRows` and there is no page to offset by.\n rowIndexOffset={isPaginated ? (pageInfo.page - 1) * pageSize : 0}\n totalRowCount={total}\n getRowKey={resolvedGetRowKey}\n layout={layout}\n onScrollerRef={setScrollerEl}\n size={size}\n shape={shape}\n rowHeight={rowHeight}\n headerHeight={headerHeight}\n isHeaderHidden={isHeaderHidden}\n isHeaderSticky={isHeaderSticky}\n isVirtualized={isVirtualized}\n virtualizeThreshold={virtualizeThreshold}\n overscan={overscan}\n isStriped={isStriped}\n isRowMoveAnimated={isRowMoveAnimated}\n isLoading={isLoading}\n loadingIndicator={loadingIndicator}\n selection={selection}\n selectionTooltip={selectionTooltip}\n rowLink={rowLink}\n onRowAction={onRowAction}\n onLoadMore={isInfinite ? onLoadMore : undefined}\n hasMore={hasMore}\n isLoadingMore={isLoadingMore}\n loadMoreMargin={loadMoreMargin}\n isReorderable={isDragEnabled}\n isResizable={isResizable}\n onColumnResize={handleColumnResize}\n onColumnResizeEnd={handleColumnResizeEnd}\n rowMenu={resolveRowMenu}\n rowContextMenu={rowContextMenu}\n onRowMenuAction={onRowMenuAction}\n rowMenuTriggerProps={rowMenuTriggerProps}\n skeletonRowCount={skeletonRowCount}\n emptyLabel={emptyLabel ?? t('itemTable.noItems', 'No items')}\n noResultsLabel={\n noResultsLabel ?? t('itemTable.noResults', 'No results found')\n }\n error={error}\n toolbar={toolbarNode}\n footer={footerNode}\n isFiltered={isFiltered ?? isSearching}\n sortMode={resolvedSortMode}\n sort={sort}\n onColumnSort={toggleSort}\n onColumnSortChange={setColumnSort}\n columnContextMenu={columnContextMenu}\n onColumnMenuAction={onColumnMenuAction}\n columnMenuTriggerProps={columnMenuTriggerProps}\n columnMenuProps={columnMenuProps}\n getRowProps={getRowProps}\n ariaLabel={ariaLabel}\n styles={rootStyles}\n headerStyles={headerStyles}\n headerCellStyles={headerCellStyles}\n headerPreset={headerPreset}\n bodyStyles={bodyStyles}\n rowStyles={rowStyles}\n cellStyles={cellStyles}\n mods={mods}\n overlay={bulkBarPlacement === 'floating' ? bulkBar : null}\n />\n );\n\n const rowByKeyForDrop = useMemo(() => {\n const map = new Map<string, T>();\n\n visibleRows.forEach((row, index) =>\n map.set(String(resolvedGetRowKey(row, index)), row),\n );\n\n return map;\n }, [visibleRows, resolvedGetRowKey]);\n\n const handleItemDrop = useEvent((targetKey: Key, draggedKeys: Key[]) => {\n if (!dropOnRow) return;\n\n const target = rowByKeyForDrop.get(String(targetKey));\n\n if (!target) return;\n\n const dragged = draggedKeys\n .map((key) => rowByKeyForDrop.get(String(key)))\n // A row cannot be dropped on itself.\n .filter((row): row is T => row !== undefined && row !== target);\n\n if (!dragged.length) return;\n if (dropOnRow.isAllowed && !dropOnRow.isAllowed(dragged, target)) return;\n\n void dropOnRow.onDrop(dragged, target);\n });\n\n const renderDragPreview = useEvent((keys: Key[]) => (\n <ItemTableDragPreview<T>\n rows={keys\n .map((key) => rowByKeyForDrop.get(String(key)))\n .filter((row): row is T => row !== undefined)}\n getItemDragInfo={getItemDragInfo!}\n />\n ));\n\n const shouldAcceptItemDrop = useEvent((targetKey: Key) => {\n const target = rowByKeyForDrop.get(String(targetKey));\n\n return target != null && (dropOnRow?.isTarget(target) ?? false);\n });\n\n // Dropping onto a row and reordering both need the drag machinery.\n const isDragEnabled = isReorderable || dropOnRow != null;\n\n const table = isDragEnabled ? (\n <DraggableCollection\n state={{\n collection: selection.collection,\n selectionManager: selection.selectionManager as any,\n disabledKeys: new Set(disabledKeys ?? []),\n }}\n // The element that directly contains the rows. React Aria's\n // `ListDropTargetDelegate` measures the drop position from this element's\n // children, so pointing it at the table root would leave every drop\n // unresolvable — the row lifts but never lands.\n listRef={bodyRef}\n orderedKeys={rowKeys}\n orientation=\"vertical\"\n onReorder={isReorderable ? handleReorder : undefined}\n onItemDrop={dropOnRow ? handleItemDrop : undefined}\n shouldAcceptItemDrop={dropOnRow ? shouldAcceptItemDrop : undefined}\n renderPreview={getItemDragInfo ? renderDragPreview : undefined}\n >\n {(dragState, dropState, collectionProps) =>\n renderTable(dragState, dropState, collectionProps)\n }\n </DraggableCollection>\n ) : (\n renderTable()\n );\n\n // The provider always wraps, so `ItemTable.Search` works from a custom\n // `toolbar` as well as from the built-in one.\n return (\n <ItemTableChromeProvider\n value={{\n searchValue,\n setSearchValue,\n searchPlaceholder,\n isLoading,\n onRefresh,\n selectedKeys: selection.selectedKeys,\n selectedRows: selection.selectedRows,\n selectedCount: selection.selectedCount,\n clearSelection: selection.clearSelection,\n }}\n >\n {table}\n </ItemTableChromeProvider>\n );\n}\n\nconst _ItemTable = Object.assign(\n forwardRef(ItemTable) as unknown as (<T = any>(\n props: CubeItemTableProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n ) => ReactElement) & { displayName?: string },\n {\n /** The table's search input, bound to the table's own state. */\n Search: ItemTableSearch,\n /** The default toolbar row, for rebuilding it around extra content. */\n Toolbar: ItemTableToolbar,\n /** The selection action bar, for placing it outside the default chrome. */\n BulkBar: ItemTableBulkBar,\n },\n);\n\n_ItemTable.displayName = 'ItemTable';\n\nexport { _ItemTable as ItemTable };\n"],"mappings":"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"}
1
+ {"version":3,"file":"ItemTable.js","names":[],"sources":["../../../../src/components/data/ItemTable/ItemTable.tsx"],"sourcesContent":["import { useCollator } from '@react-aria/i18n';\nimport { useControlledState } from '@react-stately/utils';\nimport { CONTAINER_STYLES } from '@tenphi/tasty';\nimport { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { useEvent, useWarn } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { useCombinedRefs } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { clampPage, getPageInfo } from '../../navigation/Pagination';\nimport { DraggableCollection } from '../../shared/DraggableCollection';\nimport {\n ROW_MENU_COLUMN_KEY,\n ROW_MENU_COLUMN_WIDTH,\n} from '../TableBase/row-menu';\nimport {\n buildTableTree,\n filterTableTree,\n flattenTableTree,\n isTableTreeDescendant,\n reindexTableTree,\n sortTableTree,\n} from '../TableBase/table-tree';\nimport { TableView } from '../TableBase/TableView';\nimport { useContainerWidth } from '../TableBase/use-container-width';\nimport {\n freezeColumnWidths,\n getColumnText,\n useTableColumns,\n} from '../TableBase/use-table-columns';\nimport {\n matchesTableSearch,\n useTableSearch,\n} from '../TableBase/use-table-search';\nimport {\n SELECTION_COLUMN_KEY,\n SELECTION_COLUMN_WIDTH,\n useTableSelection,\n} from '../TableBase/use-table-selection';\nimport { compareByColumn, useTableSort } from '../TableBase/use-table-sort';\nimport { useTableStorage } from '../TableBase/use-table-storage';\nimport { useTableTreeState } from '../TableBase/use-table-tree-state';\n\nimport { ItemTableBulkBar } from './ItemTableBulkBar';\nimport { ItemTableDragPreview } from './ItemTableDragPreview';\nimport { ItemTableFooter } from './ItemTableFooter';\nimport {\n ItemTableChromeProvider,\n ItemTableSearch,\n ItemTableToolbar,\n} from './ItemTableToolbar';\n\nimport type { Key } from '@react-types/shared';\nimport type { ForwardedRef, ReactElement, ReactNode } from 'react';\nimport type {\n CubeTableColumnLayout,\n CubeTableRowContext,\n CubeTableSort,\n} from '../TableBase/types';\nimport type { CubeItemTableProps } from './types';\n\n/** Stable identity, so the uncontrolled default does not change every render. */\nconst EMPTY_WIDTHS: Record<string, number> = {};\n\nfunction defaultGetRowKey<T>(rowKey: string) {\n return (row: T, index: number): Key => {\n const value = (row as any)?.[rowKey];\n\n return value == null ? index : (value as Key);\n };\n}\n\nfunction ItemTable<T = any>(\n props: CubeItemTableProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement {\n const {\n data,\n columns,\n rowKey = 'id',\n getRowKey,\n getRowChildren,\n treeColumnKey,\n expandedKeys,\n defaultExpandedKeys,\n onExpand,\n isLoading = false,\n loadingIndicator = 'overlay',\n selectionMode,\n bulkActions,\n rowLink,\n onRowAction,\n rowMenu,\n rowContextMenu = false,\n onRowMenuAction,\n rowMenuTriggerProps,\n bulkBarPlacement = 'floating',\n bulkBarStyles,\n selectedKeys: selectedKeysProp,\n defaultSelectedKeys,\n onSelectionChange,\n selectAllMode = 'page',\n isRowSelectable,\n selectionTooltip,\n disabledKeys,\n treeSelectionBehavior = 'cascade',\n skeletonRowCount = 6,\n emptyLabel,\n noResultsLabel,\n error,\n isFiltered,\n toolbar,\n isSearchable = false,\n searchMode = 'client',\n searchPlaceholder,\n searchValue: searchValueProp,\n defaultSearchValue,\n onSearchChange,\n searchDelay = 500,\n searchFilter,\n filters,\n actions,\n onRefresh,\n paginationMode = 'client',\n pageSize: pageSizeProp,\n defaultPageSize = 50,\n autoHidePagination = true,\n onLoadMore,\n hasMore,\n isLoadingMore,\n loadMoreMargin,\n storageKey,\n persist,\n isReorderable = false,\n onReorder,\n dropOnRow,\n getItemDragInfo,\n isResizable = false,\n columnWidths: columnWidthsProp,\n defaultColumnWidths,\n onColumnResize,\n columnContextMenu,\n onColumnMenuAction,\n columnMenuTriggerProps,\n columnMenuProps,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100, 500],\n page: pageProp,\n defaultPage,\n onPageChange,\n total: totalProp,\n totalPages,\n hasNextPage,\n summary = true,\n footer,\n footerStart,\n footerCenter,\n footerEnd,\n sortMode,\n sort: sortProp,\n defaultSort,\n onSortChange,\n shape = 'plain',\n size = 'medium',\n rowHeight,\n headerHeight,\n isStriped = false,\n isHeaderHidden = false,\n isHeaderSticky = true,\n isAutoHeight = false,\n isVirtualized = 'auto',\n virtualizeThreshold = 50,\n overscan = 20,\n getRowProps,\n ariaLabel,\n qa,\n mods,\n styles,\n headerStyles,\n headerCellStyles,\n headerPreset = 'c3',\n toolbarStyles,\n searchStyles,\n footerStyles,\n bodyStyles,\n rowStyles,\n cellStyles,\n isRowMoveAnimated,\n } = props;\n\n const { t } = useI18n();\n\n const localRef = useRef<HTMLDivElement>(null);\n const rootRef = useCombinedRefs(ref, localRef);\n\n // Held in state, not a ref: the virtualized path's scroller is created by\n // Virtuoso and arrives through a callback, and the column layout has to\n // re-derive once it does.\n const [scrollerEl, setScrollerEl] = useState<HTMLDivElement | null>(null);\n const containerWidth = useContainerWidth(scrollerEl);\n\n // Style props (`height`, `maxHeight`, `margin`, …) land on the root frame.\n // `height` matters most: there is no page-scroll mode, so bounding the table\n // is what turns the body into a scroller and pins the header.\n const rootStyles = { ...extractStyles(props, CONTAINER_STYLES), ...styles };\n\n const resolvedGetRowKey = useMemo(\n () => getRowKey ?? defaultGetRowKey<T>(rowKey),\n [getRowKey, rowKey],\n );\n\n const treeModel = useMemo(\n () =>\n getRowChildren\n ? buildTableTree(data, getRowChildren, resolvedGetRowKey)\n : null,\n [data, getRowChildren, resolvedGetRowKey],\n );\n\n useWarn(treeModel != null && treeModel.duplicateKeys.length > 0, {\n key: ['item-table-tree-duplicate-keys'],\n args: [\n 'ItemTable:',\n 'Tree row keys must be unique across the complete hierarchy. Duplicate rows were ignored.',\n ],\n });\n useWarn(treeModel != null && treeModel.cyclicKeys.length > 0, {\n key: ['item-table-tree-cyclic-keys'],\n args: [\n 'ItemTable:',\n 'Tree data contains a cycle. Cyclic descendants were ignored.',\n ],\n });\n useWarn(treeModel != null && isReorderable, {\n key: ['item-table-tree-reorder-unsupported'],\n args: [\n 'ItemTable:',\n '`isReorderable` is ignored in tree mode. Use `dropOnRow` for folder-style moves.',\n ],\n });\n\n const resolvedTreeColumnKey = useMemo(() => {\n if (!treeModel) return undefined;\n const visibleColumns = columns.filter((column) => !column.isHidden);\n return visibleColumns.some((column) => column.key === treeColumnKey)\n ? treeColumnKey\n : visibleColumns[0]?.key;\n }, [treeModel, columns, treeColumnKey]);\n\n useWarn(\n treeModel != null &&\n treeColumnKey != null &&\n resolvedTreeColumnKey !== treeColumnKey,\n {\n key: ['item-table-tree-column-invalid', treeColumnKey],\n args: [\n 'ItemTable:',\n '`treeColumnKey` must identify a visible data column. Falling back to the first visible column.',\n ],\n },\n );\n\n const {\n searchValue,\n setSearchValue,\n searchedRows,\n query,\n isFiltered: isSearching,\n } = useTableSearch<T>({\n columns,\n rows: data,\n // Tree filtering needs to preserve ancestors and descendants, so the flat\n // hook owns only the controlled/debounced value in this mode.\n mode: treeModel ? 'server' : searchMode,\n value: searchValueProp,\n defaultValue: defaultSearchValue,\n onChange: onSearchChange,\n delay: searchDelay,\n filter: searchFilter,\n });\n\n const searchedTree = useMemo(() => {\n if (!treeModel) return null;\n if (searchMode !== 'client' || !query) {\n return { roots: treeModel.roots, forcedExpandedKeys: new Set<Key>() };\n }\n\n return filterTableTree(treeModel.roots, (node) =>\n searchFilter\n ? searchFilter(node.row, query)\n : matchesTableSearch(columns, node.row, node.sourceIndex, query),\n );\n }, [treeModel, searchMode, query, searchFilter, columns]);\n\n const storage = useTableStorage(storageKey, persist);\n\n const {\n sort,\n sortedRows,\n toggleSort,\n setColumnSort,\n mode: resolvedSortMode,\n } = useTableSort<T>({\n columns,\n rows: treeModel\n ? searchedTree?.roots.map((node) => node.row) ?? []\n : searchedRows,\n mode: treeModel ? 'server' : sortMode,\n sort: sortProp,\n // Only restore what the table owns: a controlled `sort` belongs to the page,\n // and overriding it here would fight the page's own source of truth.\n defaultSort:\n sortProp === undefined && storage.has('sort')\n ? storage.initial.sort ?? defaultSort\n : defaultSort,\n onSortChange: useEvent((next: CubeTableSort | null) => {\n if (sortProp === undefined) storage.write({ sort: next });\n onSortChange?.(next);\n }),\n });\n\n const collator = useCollator({ numeric: true, sensitivity: 'base' });\n const treeSortMode = treeModel\n ? sortMode ??\n (columns.some((column) => column.isSortable) ? 'client' : 'off')\n : resolvedSortMode;\n const processedTreeRoots = useMemo(() => {\n const roots = searchedTree?.roots ?? [];\n if (treeSortMode !== 'client' || !sort) return roots;\n const column = columns.find((entry) => entry.key === sort.columnKey);\n if (!column) return roots;\n\n return sortTableTree(roots, (a, b) => {\n const result = compareByColumn(\n column,\n collator,\n a.row,\n a.sourceIndex,\n b.row,\n b.sourceIndex,\n );\n return result * (sort.direction === 'asc' ? 1 : -1);\n });\n }, [searchedTree, treeSortMode, sort, columns, collator]);\n\n // Search → sort → paginate. Paging last, so a page always reflects the rows\n // the user is actually looking at.\n //\n // Deliberately not `usePagination`: that hook owns an in-memory array, and in\n // server mode `data` is a single page. Deriving the bounds from it would clamp\n // the page to 1 and swallow every page change.\n const [pageSize, setPageSizeState] = useControlledState<number>(\n pageSizeProp as number,\n pageSizeProp === undefined && storage.has('pageSize')\n ? storage.initial.pageSize ?? defaultPageSize\n : defaultPageSize,\n onPageSizeChange as (value: number) => void,\n );\n const [page, setPageState] = useControlledState<number>(\n pageProp as number,\n defaultPage ?? 1,\n onPageChange as (value: number) => void,\n );\n\n const isInfinite = paginationMode === 'infinite';\n // Infinite scroll replaces the page control rather than adding to it.\n const isPaginated = paginationMode !== 'off' && !isInfinite;\n const isServerPaginated = paginationMode === 'server';\n const total = isServerPaginated\n ? totalProp ?? 0\n : treeModel\n ? processedTreeRoots.length\n : sortedRows.length;\n\n const pageInfo = getPageInfo({\n page,\n pageSize,\n total,\n totalPages: isServerPaginated ? totalPages : undefined,\n });\n\n const setPage = useEvent((next: number) =>\n setPageState(clampPage(next, pageInfo.totalPages)),\n );\n const setPageSize = useEvent((next: number) => {\n setPageSizeState(next);\n\n if (pageSizeProp === undefined) storage.write({ pageSize: next });\n\n // The old page index points at different rows under a new page size, so\n // staying on it would silently move the user.\n setPageState(1);\n });\n\n const flatVisibleRows =\n paginationMode === 'client'\n ? sortedRows.slice(\n (pageInfo.page - 1) * pageSize,\n pageInfo.page * pageSize,\n )\n : sortedRows;\n\n const pageTreeRoots = useMemo(\n () =>\n reindexTableTree(\n paginationMode === 'client'\n ? processedTreeRoots.slice(\n (pageInfo.page - 1) * pageSize,\n pageInfo.page * pageSize,\n )\n : processedTreeRoots,\n ),\n [processedTreeRoots, paginationMode, pageInfo.page, pageSize],\n );\n\n const treeState = useTableTreeState<T>({\n roots: pageTreeRoots,\n allNodesByKey: treeModel?.byKey ?? new Map(),\n expandedKeys,\n defaultExpandedKeys,\n forcedExpandedKeys: searchedTree?.forcedExpandedKeys,\n disabledKeys,\n getTextValue: (node) => {\n const column = columns.find(\n (entry) => entry.key === resolvedTreeColumnKey,\n );\n return column\n ? getColumnText(column, node.row, node.sourceIndex) ?? String(node.key)\n : String(node.key);\n },\n onExpand,\n ariaLabel,\n });\n\n const visibleTreeEntries = treeModel ? treeState.visibleEntries : [];\n const visibleRows = treeModel\n ? visibleTreeEntries.map((entry) => entry.row)\n : flatVisibleRows;\n const visibleRowKeys = treeModel\n ? visibleTreeEntries.map((entry) => entry.key)\n : undefined;\n const pageTreeEntries = treeModel ? flattenTableTree(pageTreeRoots) : [];\n const filteredTreeEntries = treeModel\n ? flattenTableTree(processedTreeRoots)\n : [];\n const selectionTree = useMemo(() => {\n if (!treeModel) return undefined;\n\n // Selection follows the tree the user can currently act on. In\n // particular, a search that retains only an ancestor path must not let a\n // checked ancestor reach siblings that the search removed.\n const childrenOf = new Map<Key, Key[]>();\n const parentOf = new Map<Key, Key | null>();\n\n flattenTableTree(processedTreeRoots).forEach((node) => {\n childrenOf.set(\n node.key,\n node.children.map((child) => child.key),\n );\n parentOf.set(node.key, node.parentKey);\n });\n\n return {\n rootKeys: processedTreeRoots.map((node) => node.key),\n childrenOf,\n parentOf,\n behavior: treeSelectionBehavior,\n };\n }, [treeModel, processedTreeRoots, treeSelectionBehavior]);\n\n // A bulk action with no way to select rows is a contradiction, so supplying\n // any implies multiple selection unless the consumer says otherwise.\n const resolvedSelectionMode =\n selectionMode ?? (bulkActions?.length ? 'multiple' : 'none');\n\n const selection = useTableSelection<T>({\n rows: visibleRows,\n rowKeys: visibleRowKeys,\n pageRows: treeModel\n ? pageTreeEntries.map((entry) => entry.row)\n : visibleRows,\n pageRowKeys: treeModel\n ? pageTreeEntries.map((entry) => entry.key)\n : undefined,\n // The wider set the header checkbox can reach under\n // `selectAllMode=\"filtered\"`. In server mode the client only ever holds one\n // page, so the two coincide.\n filteredRows: treeModel\n ? (paginationMode === 'client'\n ? filteredTreeEntries\n : pageTreeEntries\n ).map((entry) => entry.row)\n : paginationMode === 'client'\n ? sortedRows\n : visibleRows,\n filteredRowKeys: treeModel\n ? (paginationMode === 'client'\n ? filteredTreeEntries\n : pageTreeEntries\n ).map((entry) => entry.key)\n : undefined,\n getRowKey: resolvedGetRowKey,\n selectionMode: resolvedSelectionMode,\n selectedKeys: selectedKeysProp,\n defaultSelectedKeys,\n onSelectionChange,\n selectAllMode,\n isRowSelectable,\n disabledKeys,\n tree: selectionTree,\n });\n\n // A `ReactNode` menu applies to every row; a function decides per row. The\n // renderer only ever sees the function form.\n const resolveRowMenu = useMemo(\n () =>\n rowMenu == null\n ? undefined\n : typeof rowMenu === 'function'\n ? (rowMenu as (\n row: T,\n ctx: CubeTableRowContext<T>,\n ) => ReactNode | null)\n : () => rowMenu as ReactNode,\n [rowMenu],\n );\n\n const trailingColumns = useMemo(\n () =>\n resolveRowMenu && rowContextMenu === true\n ? [\n {\n key: ROW_MENU_COLUMN_KEY,\n width:\n ROW_MENU_COLUMN_WIDTH[size] ?? ROW_MENU_COLUMN_WIDTH.medium,\n align: 'center' as const,\n },\n ]\n : undefined,\n [resolveRowMenu, rowContextMenu, size],\n );\n\n const leadingColumns = useMemo(\n () =>\n selection.isEnabled\n ? [\n {\n key: SELECTION_COLUMN_KEY,\n width:\n SELECTION_COLUMN_WIDTH[size] ?? SELECTION_COLUMN_WIDTH.medium,\n align: 'center' as const,\n },\n ]\n : undefined,\n [selection.isEnabled, size],\n );\n\n /**\n * Column widths, in three layers.\n *\n * The draft exists because a resize has to be visible *while* it happens, and\n * a controlled `columnWidths` cannot be: the consumer only learns the new\n * width from `onColumnResize`, which fires when the gesture ends. Without a\n * draft a controlled table simply would not move under the pointer.\n */\n const [ownColumnWidths, setOwnColumnWidths] = useState<\n Record<string, number>\n >(\n () =>\n (columnWidthsProp === undefined && storage.has('columnWidths')\n ? storage.initial.columnWidths ?? defaultColumnWidths\n : defaultColumnWidths) ?? EMPTY_WIDTHS,\n );\n const [draftColumnWidths, setDraftColumnWidths] = useState<Record<\n string,\n number\n > | null>(null);\n\n /**\n * The same draft, in a ref.\n *\n * A keyboard resize runs `useMove`'s whole start → move → end cycle inside\n * one key press, so the end handler would read the state from before the\n * move. The ref is what it actually settles on; the state exists only to\n * trigger the render.\n */\n const draftColumnWidthsRef = useRef<Record<string, number> | null>(null);\n\n const baseColumnWidths = columnWidthsProp ?? ownColumnWidths;\n const columnWidths = draftColumnWidths ?? baseColumnWidths;\n\n /** `layout` is computed below; `useEvent` only reads this when a drag runs. */\n const layoutRef = useRef<CubeTableColumnLayout<T> | null>(null);\n\n const handleColumnResize = useEvent((key: string, width: number) => {\n // First move of a drag freezes every column, so this changes exactly one\n // width instead of re-splitting the flex pool. See `freezeColumnWidths`.\n const base =\n draftColumnWidthsRef.current ??\n freezeColumnWidths(layoutRef.current, baseColumnWidths);\n\n draftColumnWidthsRef.current = { ...base, [key]: Math.round(width) };\n setDraftColumnWidths(draftColumnWidthsRef.current);\n });\n\n // Once at the end: a callback per pixel would be unusable, and persisting\n // every frame would hammer `localStorage`.\n const handleColumnResizeEnd = useEvent((key: string) => {\n const next = draftColumnWidthsRef.current ?? baseColumnWidths;\n\n if (columnWidthsProp === undefined) {\n setOwnColumnWidths(next);\n storage.write({ columnWidths: next });\n }\n\n onColumnResize?.(key, next[key], next);\n\n // The prop (or `ownColumnWidths`) is the source of truth again. A\n // controlled consumer that ignores the callback reverts, which is what\n // being controlled means.\n draftColumnWidthsRef.current = null;\n setDraftColumnWidths(null);\n });\n\n const layout = useTableColumns<T>({\n columns,\n containerWidth,\n columnWidths,\n leadingColumns,\n trailingColumns,\n });\n\n layoutRef.current = layout;\n\n const hasBulkSelection =\n bulkActions != null &&\n bulkActions.length > 0 &&\n selection.selectedCount > 0;\n\n const bulkBar = hasBulkSelection ? (\n <ItemTableBulkBar<T>\n actions={bulkActions!}\n placement={bulkBarPlacement}\n styles={bulkBarStyles}\n />\n ) : null;\n\n const isBulkBarInToolbar = bulkBar != null && bulkBarPlacement === 'toolbar';\n\n const hasToolbar =\n toolbar !== undefined ||\n isSearchable ||\n filters != null ||\n actions != null ||\n onRefresh != null ||\n isBulkBarInToolbar;\n\n const toolbarNode = hasToolbar\n ? toolbar ?? (\n <ItemTableToolbar\n isSearchable={isSearchable}\n filters={filters}\n // The bar takes the actions group rather than sitting beside it: the\n // two compete for the same space, and while rows are selected the\n // bulk actions are what the user is reaching for.\n actions={isBulkBarInToolbar ? bulkBar : actions}\n isLoading={isLoading}\n styles={toolbarStyles}\n searchStyles={searchStyles}\n onRefresh={onRefresh}\n />\n )\n : null;\n\n /**\n * Pagination that cannot do anything is noise: one page of five rows still\n * renders \"1–5 of 5\", a page-size selector whose every option shows the same\n * five rows, and a solitary \"1\" button.\n *\n * \"Cannot do anything\" is both conditions together — a single page *and* a\n * total that even the smallest page size would not split. A 15-row single\n * page stays, because choosing \"10 / page\" would genuinely paginate it.\n */\n const smallestPageSize = pageSizeOptions?.length\n ? Math.min(...pageSizeOptions)\n : pageSize;\n\n const isPaginationUseless =\n autoHidePagination &&\n !hasNextPage &&\n pageInfo.totalPages <= 1 &&\n total <= smallestPageSize;\n\n const showPagination = isPaginated && !isPaginationUseless;\n\n const hasFooter =\n footer !== undefined ||\n showPagination ||\n footerStart != null ||\n footerCenter != null ||\n footerEnd != null;\n\n const footerNode = hasFooter\n ? footer ?? (\n <ItemTableFooter\n start={footerStart}\n center={footerCenter}\n end={footerEnd}\n styles={footerStyles}\n pagination={\n showPagination\n ? {\n page: pageInfo.page,\n pageSize,\n total,\n totalPages: pageInfo.totalPages,\n pageSizeOptions,\n summary,\n hasNextPage,\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n }\n : undefined\n }\n />\n )\n : null;\n\n const bodyRef = useRef<HTMLTableSectionElement>(null);\n\n const rowKeys = useMemo(\n () =>\n visibleRows.map((row, index) =>\n String(visibleRowKeys?.[index] ?? resolvedGetRowKey(row, index)),\n ),\n [visibleRows, visibleRowKeys, resolvedGetRowKey],\n );\n\n const handleReorder = useEvent((nextKeys: string[]) => {\n const byKey = new Map(\n visibleRows.map((row, index) => [\n String(resolvedGetRowKey(row, index)),\n row,\n ]),\n );\n\n onReorder?.(\n nextKeys,\n nextKeys\n .map((key) => byKey.get(key))\n .filter((row): row is T => row !== undefined),\n );\n });\n\n /**\n * `DraggableCollection` owns the React Aria drag/drop hooks and hands the two\n * states down. It is only mounted when reordering is on, so a plain table\n * pays nothing for it.\n *\n * `RowCollection` and the `SelectionManager` from `useTableSelection` satisfy\n * its structural `state` contract unchanged — both exist even when selection\n * itself is off.\n */\n const renderTable = (\n dragState?: any,\n dropState?: any,\n collectionProps?: Record<string, any>,\n ) => (\n <TableView<T>\n rootRef={rootRef}\n dragState={dragState}\n dropState={dropState}\n collectionProps={collectionProps}\n bodyRef={bodyRef}\n qa={qa || 'ItemTable'}\n rows={visibleRows}\n rowKeys={visibleRowKeys}\n // `aria-rowindex` is document-absolute by contract: on page 3 a screen\n // reader should hear \"row 51 of 240\", not \"row 1 of 25\". Infinite scroll\n // never offsets — every loaded row is already in `visibleRows`.\n // `isPaginated` already excludes infinite scroll, where every loaded row\n // is in `visibleRows` and there is no page to offset by.\n rowIndexOffset={\n treeModel ? 0 : isPaginated ? (pageInfo.page - 1) * pageSize : 0\n }\n totalRowCount={treeModel ? visibleRows.length : total}\n getRowKey={resolvedGetRowKey}\n layout={layout}\n onScrollerRef={setScrollerEl}\n size={size}\n shape={shape}\n rowHeight={rowHeight}\n headerHeight={headerHeight}\n isHeaderHidden={isHeaderHidden}\n isHeaderSticky={isHeaderSticky}\n isAutoHeight={isAutoHeight}\n isVirtualized={isVirtualized}\n virtualizeThreshold={virtualizeThreshold}\n overscan={overscan}\n isStriped={isStriped}\n isRowMoveAnimated={isRowMoveAnimated}\n isLoading={isLoading}\n loadingIndicator={loadingIndicator}\n selection={selection}\n selectionTooltip={selectionTooltip}\n rowLink={rowLink}\n onRowAction={onRowAction}\n onLoadMore={isInfinite ? onLoadMore : undefined}\n hasMore={hasMore}\n isLoadingMore={isLoadingMore}\n loadMoreMargin={loadMoreMargin}\n isReorderable={isDragEnabled}\n isResizable={isResizable}\n onColumnResize={handleColumnResize}\n onColumnResizeEnd={handleColumnResizeEnd}\n rowMenu={resolveRowMenu}\n rowContextMenu={rowContextMenu}\n onRowMenuAction={onRowMenuAction}\n rowMenuTriggerProps={rowMenuTriggerProps}\n skeletonRowCount={skeletonRowCount}\n emptyLabel={emptyLabel ?? t('itemTable.noItems', 'No items')}\n noResultsLabel={\n noResultsLabel ?? t('itemTable.noResults', 'No results found')\n }\n error={error}\n toolbar={toolbarNode}\n footer={footerNode}\n isFiltered={isFiltered ?? isSearching}\n sortMode={treeSortMode}\n sort={sort}\n onColumnSort={toggleSort}\n onColumnSortChange={setColumnSort}\n columnContextMenu={columnContextMenu}\n onColumnMenuAction={onColumnMenuAction}\n columnMenuTriggerProps={columnMenuTriggerProps}\n columnMenuProps={columnMenuProps}\n getRowProps={getRowProps}\n ariaLabel={ariaLabel}\n styles={rootStyles}\n headerStyles={headerStyles}\n headerCellStyles={headerCellStyles}\n headerPreset={headerPreset}\n bodyStyles={bodyStyles}\n rowStyles={rowStyles}\n cellStyles={cellStyles}\n mods={mods}\n overlay={bulkBarPlacement === 'floating' ? bulkBar : null}\n tree={\n treeModel\n ? {\n state: treeState.state,\n ariaProps: treeState.ariaProps,\n nodes: treeState.visibleNodes,\n entries: visibleTreeEntries,\n columnKey: resolvedTreeColumnKey!,\n }\n : undefined\n }\n />\n );\n\n const rowByKeyForDrop = useMemo(() => {\n const map = new Map<string, T>();\n\n visibleRows.forEach((row, index) =>\n map.set(\n String(visibleRowKeys?.[index] ?? resolvedGetRowKey(row, index)),\n row,\n ),\n );\n\n return map;\n }, [visibleRows, visibleRowKeys, resolvedGetRowKey]);\n\n const handleItemDrop = useEvent((targetKey: Key, draggedKeys: Key[]) => {\n if (!dropOnRow) return;\n\n const target = rowByKeyForDrop.get(String(targetKey));\n\n if (!target) return;\n\n const draggedKeySet = new Set(draggedKeys);\n const topmostDraggedKeys = treeModel\n ? draggedKeys.filter((key) => {\n let parent = treeModel.parentOf.get(key);\n while (parent != null) {\n if (draggedKeySet.has(parent)) return false;\n parent = treeModel.parentOf.get(parent);\n }\n return true;\n })\n : draggedKeys;\n\n if (\n treeModel &&\n topmostDraggedKeys.some((key) =>\n isTableTreeDescendant(treeModel, targetKey, key),\n )\n ) {\n return;\n }\n\n const dragged = topmostDraggedKeys\n .map((key) => rowByKeyForDrop.get(String(key)))\n // A row cannot be dropped on itself.\n .filter((row): row is T => row !== undefined && row !== target);\n\n if (!dragged.length) return;\n if (dropOnRow.isAllowed && !dropOnRow.isAllowed(dragged, target)) return;\n\n void dropOnRow.onDrop(dragged, target);\n });\n\n const renderDragPreview = useEvent((keys: Key[]) => (\n <ItemTableDragPreview<T>\n rows={keys\n .map((key) => rowByKeyForDrop.get(String(key)))\n .filter((row): row is T => row !== undefined)}\n getItemDragInfo={getItemDragInfo!}\n />\n ));\n\n const shouldAcceptItemDrop = useEvent((targetKey: Key) => {\n const target = rowByKeyForDrop.get(String(targetKey));\n\n return target != null && (dropOnRow?.isTarget(target) ?? false);\n });\n\n // Dropping onto a row and reordering both need the drag machinery.\n const isDragEnabled = (!treeModel && isReorderable) || dropOnRow != null;\n\n const table = isDragEnabled ? (\n <DraggableCollection\n state={{\n collection: selection.collection,\n selectionManager: selection.selectionManager as any,\n disabledKeys: new Set(disabledKeys ?? []),\n }}\n // The element that directly contains the rows. React Aria's\n // `ListDropTargetDelegate` measures the drop position from this element's\n // children, so pointing it at the table root would leave every drop\n // unresolvable — the row lifts but never lands.\n listRef={bodyRef}\n orderedKeys={rowKeys}\n orientation=\"vertical\"\n onReorder={!treeModel && isReorderable ? handleReorder : undefined}\n onItemDrop={dropOnRow ? handleItemDrop : undefined}\n shouldAcceptItemDrop={dropOnRow ? shouldAcceptItemDrop : undefined}\n renderPreview={getItemDragInfo ? renderDragPreview : undefined}\n >\n {(dragState, dropState, collectionProps) =>\n renderTable(dragState, dropState, collectionProps)\n }\n </DraggableCollection>\n ) : (\n renderTable()\n );\n\n // The provider always wraps, so `ItemTable.Search` works from a custom\n // `toolbar` as well as from the built-in one.\n return (\n <ItemTableChromeProvider\n value={{\n searchValue,\n setSearchValue,\n searchPlaceholder,\n isLoading,\n onRefresh,\n selectedKeys: selection.selectedKeys,\n selectedRows: selection.selectedRows,\n selectedCount: selection.selectedCount,\n clearSelection: selection.clearSelection,\n }}\n >\n {table}\n </ItemTableChromeProvider>\n );\n}\n\nconst _ItemTable = Object.assign(\n forwardRef(ItemTable) as unknown as (<T = any>(\n props: CubeItemTableProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n ) => ReactElement) & { displayName?: string },\n {\n /** The table's search input, bound to the table's own state. */\n Search: ItemTableSearch,\n /** The default toolbar row, for rebuilding it around extra content. */\n Toolbar: ItemTableToolbar,\n /** The selection action bar, for placing it outside the default chrome. */\n BulkBar: ItemTableBulkBar,\n },\n);\n\n_ItemTable.displayName = 'ItemTable';\n\nexport { _ItemTable as ItemTable };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8DA,MAAM,eAAuC,EAAE;AAE/C,SAAS,iBAAoB,QAAgB;AAC3C,SAAQ,KAAQ,UAAuB;EACrC,MAAM,QAAS,MAAc;AAE7B,SAAO,SAAS,OAAO,QAAS;;;AAIpC,SAAS,UACP,OACA,KACc;CACd,MAAM,EACJ,MACA,SACA,SAAS,MACT,WACA,gBACA,eACA,cACA,qBACA,UACA,YAAY,OACZ,mBAAmB,WACnB,eACA,aACA,SACA,aACA,SACA,iBAAiB,OACjB,iBACA,qBACA,mBAAmB,YACnB,eACA,cAAc,kBACd,qBACA,mBACA,gBAAgB,QAChB,iBACA,kBACA,cACA,wBAAwB,WACxB,mBAAmB,GACnB,YACA,gBACA,OACA,YACA,SACA,eAAe,OACf,aAAa,UACb,mBACA,aAAa,iBACb,oBACA,gBACA,cAAc,KACd,cACA,SACA,SACA,WACA,iBAAiB,UACjB,UAAU,cACV,kBAAkB,IAClB,qBAAqB,MACrB,YACA,SACA,eACA,gBACA,YACA,SACA,gBAAgB,OAChB,WACA,WACA,iBACA,cAAc,OACd,cAAc,kBACd,qBACA,gBACA,mBACA,oBACA,wBACA,iBACA,kBACA,kBAAkB;EAAC;EAAI;EAAI;EAAI;EAAK;EAAI,EACxC,MAAM,UACN,aACA,cACA,OAAO,WACP,YACA,aACA,UAAU,MACV,QACA,aACA,cACA,WACA,UACA,MAAM,UACN,aACA,cACA,QAAQ,SACR,OAAO,UACP,WACA,cACA,YAAY,OACZ,iBAAiB,OACjB,iBAAiB,MACjB,eAAe,OACf,gBAAgB,QAChB,sBAAsB,IACtB,WAAW,IACX,aACA,WACA,IACA,MACA,QACA,cACA,kBACA,eAAe,MACf,eACA,cACA,cACA,YACA,WACA,YACA,sBACE;CAEJ,MAAM,EAAE,MAAM,SAAS;CAGvB,MAAM,UAAU,gBAAgB,KADf,OAAuB,KAAK,CACC;CAK9C,MAAM,CAAC,YAAY,iBAAiB,SAAgC,KAAK;CACzE,MAAM,iBAAiB,kBAAkB,WAAW;CAKpD,MAAM,aAAa;EAAE,GAAG,cAAc,OAAO,iBAAiB;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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { _Text } from "../../content/Text.js";
4
4
  import { useI18n } from "../../../i18n/useI18n.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { _Text } from "../../content/Text.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { tasty } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { _Pagination } from "../../navigation/Pagination/Pagination.js";
3
3
  import { tasty } from "@tenphi/tasty";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { ReloadIcon } from "../../../icons/ReloadIcon.js";
4
4
  import { Button } from "../../actions/index.js";
@@ -5,7 +5,7 @@ import { SizeName } from "../../../tokens/sizes.js";
5
5
  import { CubeTablePageInfo } from "../../navigation/Pagination/types.js";
6
6
  import "../../navigation/Pagination/index.js";
7
7
  import "../../../tokens/index.js";
8
- import { CubeTableColumn, CubeTableLoadingIndicator, CubeTableRowContext, CubeTableSelectAllMode, CubeTableSelectionMode, CubeTableSort } from "../TableBase/types.js";
8
+ import { CubeTableColumn, CubeTableLayoutProps, CubeTableLoadingIndicator, CubeTableRowContext, CubeTableSelectAllMode, CubeTableSelectionMode, CubeTableSort, CubeTableTreeProps } from "../TableBase/types.js";
9
9
  import { CubeTableRowRenderProps } from "../TableBase/TableView.js";
10
10
  import { CubeTablePersistKey } from "../TableBase/use-table-storage.js";
11
11
  import { BaseProps, ContainerStyleProps, Styles } from "@tenphi/tasty";
@@ -14,7 +14,7 @@ import { Key as Key$1 } from "@react-types/shared";
14
14
 
15
15
  //#region src/components/data/ItemTable/types.d.ts
16
16
  type CubeItemTableColumn<T = any> = CubeTableColumn<T>;
17
- interface CubeItemTableProps<T = any> extends BaseProps, ContainerStyleProps {
17
+ interface CubeItemTableProps<T = any> extends BaseProps, ContainerStyleProps, CubeTableLayoutProps, CubeTableTreeProps<T> {
18
18
  data: readonly T[];
19
19
  columns: CubeItemTableColumn<T>[];
20
20
  /** Property used as the row key. @default 'id' */
@@ -178,6 +178,11 @@ interface CubeItemTableProps<T = any> extends BaseProps, ContainerStyleProps {
178
178
  selectionTooltip?: string | ((row: T) => string | undefined);
179
179
  /** Rows that cannot be interacted with at all. */
180
180
  disabledKeys?: Key$1[];
181
+ /**
182
+ * Multiple-selection behavior in tree mode. `cascade` selects eligible
183
+ * descendants and derives indeterminate ancestors. @default 'cascade'
184
+ */
185
+ treeSelectionBehavior?: 'cascade' | 'independent';
181
186
  /**
182
187
  * Actions offered while rows are selected. Supplying any implies
183
188
  * `selectionMode="multiple"` — a bulk action with no way to select is a
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  //#region src/components/data/TableBase/RowCollection.ts
3
3
  /**
4
4
  * A `Collection<Node<T>>` over a plain row array.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -1,19 +1,20 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.163.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
+ import { mergeRefs } from "../../../utils/react/useCombinedRefs.js";
3
4
  import { useRef } from "react";
4
5
  import { jsx } from "react/jsx-runtime";
5
- import { useDraggableItem, useDropIndicator } from "react-aria";
6
+ import { useDraggableItem, useDropIndicator, useTreeItem } from "react-aria";
6
7
 
7
8
  //#region src/components/data/TableBase/TableRow.tsx
8
9
  function Row(props) {
9
- const { rowProps, height, measureRef, index, extra, children } = props;
10
+ const { rowProps, height, measureRef, rowRef, index, extra, children } = props;
10
11
  return /* @__PURE__ */ jsx("tr", {
11
12
  ...rowProps,
12
13
  ...extra,
13
- ref: measureRef,
14
+ ref: mergeRefs(measureRef, rowRef),
14
15
  "data-index": index,
15
16
  style: height != null ? { height } : void 0,
16
- children
17
+ children: typeof children === "function" ? children(void 0) : children
17
18
  });
18
19
  }
19
20
  /**
@@ -49,7 +50,31 @@ function DraggableRow(props) {
49
50
  }
50
51
  });
51
52
  }
53
+ function TreeRow(props) {
54
+ const { tree } = props;
55
+ const rowRef = useRef(null);
56
+ const treeItemAria = useTreeItem({
57
+ node: tree.node,
58
+ hasChildItems: tree.entry.children.length > 0,
59
+ isVirtualized: tree.isVirtualized
60
+ }, tree.state, rowRef);
61
+ const rowProps = mergeProps$1(treeItemAria.rowProps, props.rowProps);
62
+ if (props.rowProps["aria-rowindex"] !== void 0) rowProps["aria-rowindex"] = props.rowProps["aria-rowindex"];
63
+ if (props.rowProps["aria-selected"] !== void 0) rowProps["aria-selected"] = props.rowProps["aria-selected"];
64
+ rowProps["aria-level"] = tree.entry.level + 1;
65
+ rowProps["aria-posinset"] = tree.entry.siblingIndex + 1;
66
+ rowProps["aria-setsize"] = tree.entry.siblingCount;
67
+ const children = typeof props.children === "function" ? props.children(treeItemAria) : props.children;
68
+ const next = {
69
+ ...props,
70
+ rowProps,
71
+ rowRef,
72
+ children
73
+ };
74
+ return props.dragState && props.dropState ? /* @__PURE__ */ jsx(DraggableRow, { ...next }) : /* @__PURE__ */ jsx(Row, { ...next });
75
+ }
52
76
  function TableRow(props) {
77
+ if (props.tree) return /* @__PURE__ */ jsx(TreeRow, { ...props });
53
78
  return props.dragState && props.dropState ? /* @__PURE__ */ jsx(DraggableRow, { ...props }) : /* @__PURE__ */ jsx(Row, { ...props });
54
79
  }
55
80
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"TableRow.js","names":["mergeProps"],"sources":["../../../../src/components/data/TableBase/TableRow.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { useDraggableItem, useDropIndicator } from 'react-aria';\n\nimport { mergeProps } from '../../../utils/react';\n\nimport type { Key } from '@react-types/shared';\nimport type { ReactNode, Ref } from 'react';\nimport type {\n DraggableCollectionState,\n DroppableCollectionState,\n} from 'react-stately';\n\nexport interface TableRowProps {\n rowKey: Key;\n /** Everything the renderer already computed: mods, ARIA, handlers. */\n rowProps: Record<string, any>;\n height?: number;\n /** Set on the virtualized path so the virtualizer can measure the row. */\n measureRef?: Ref<HTMLTableRowElement>;\n index?: number;\n dragState?: DraggableCollectionState;\n dropState?: DroppableCollectionState;\n children: ReactNode;\n}\n\nfunction Row(props: TableRowProps & { extra?: Record<string, any> }) {\n const { rowProps, height, measureRef, index, extra, children } = props;\n\n return (\n <tr\n {...rowProps}\n {...extra}\n ref={measureRef}\n data-index={index}\n style={height != null ? { height } : undefined}\n >\n {children}\n </tr>\n );\n}\n\n/**\n * A row inside a collection that accepts drags.\n *\n * Split from the plain row so the drag hooks can be called unconditionally —\n * they are hooks, and whether a table is draggable is a prop.\n */\nfunction DraggableRow(props: TableRowProps) {\n const { rowKey, dragState, dropState } = props;\n\n const dragResult = useDraggableItem(\n { key: rowKey },\n dragState as DraggableCollectionState,\n );\n\n /**\n * Whether a drop would land *on* this row.\n *\n * `useDropIndicator` rather than asking `dropState.isDropTarget` directly:\n * the state object's identity never changes as the pointer moves, so a plain\n * read is computed once and never updates. The hook subscribes, which is what\n * makes the highlight follow the cursor.\n */\n const onRef = useRef<HTMLDivElement>(null);\n const { isDropTarget: isOnTarget } = useDropIndicator(\n { target: { type: 'item', key: rowKey, dropPosition: 'on' } },\n dropState as DroppableCollectionState,\n onRef,\n );\n\n return (\n <Row\n {...props}\n extra={{\n ...mergeProps(props.rowProps, dragResult.dragProps),\n 'data-draggable': '',\n 'data-dragging': dragResult.isDragging ? '' : undefined,\n 'data-drop-target': isOnTarget ? '' : undefined,\n }}\n />\n );\n}\n\nexport function TableRow(props: TableRowProps) {\n return props.dragState && props.dropState ? (\n <DraggableRow {...props} />\n ) : (\n <Row {...props} />\n );\n}\n\nexport interface TableRowDropIndicatorProps {\n rowKey: Key;\n dropPosition: 'before' | 'after';\n dropState: DroppableCollectionState;\n columnCount: number;\n}\n\n/**\n * The line showing where a dragged row would land.\n *\n * Its own `<tr>`, because a native table cannot hold an arbitrary element\n * between two rows — the same shape `ListBox` uses with `<li>`. It renders\n * nothing at all unless a drag is in flight, so the table's normal structure is\n * untouched the rest of the time.\n */\nexport function TableRowDropIndicator(props: TableRowDropIndicatorProps) {\n const { rowKey, dropPosition, dropState, columnCount } = props;\n const ref = useRef<HTMLDivElement>(null);\n const { dropIndicatorProps, isHidden, isDropTarget } = useDropIndicator(\n { target: { type: 'item', key: rowKey, dropPosition } },\n dropState,\n ref,\n );\n\n if (isHidden) return null;\n\n return (\n <tr data-element=\"DropIndicatorRow\">\n <td data-element=\"DropIndicatorCell\" colSpan={Math.max(columnCount, 1)}>\n <div\n {...dropIndicatorProps}\n ref={ref}\n data-element=\"DropIndicator\"\n data-drop-target={isDropTarget ? '' : undefined}\n />\n </td>\n </tr>\n );\n}\n"],"mappings":";;;;;;;AAyBA,SAAS,IAAI,OAAwD;CACnE,MAAM,EAAE,UAAU,QAAQ,YAAY,OAAO,OAAO,aAAa;AAEjE,QACE,oBAAC;EACC,GAAI;EACJ,GAAI;EACJ,KAAK;EACL,cAAY;EACZ,OAAO,UAAU,OAAO,EAAE,QAAQ,GAAG;EAEpC;GACE;;;;;;;;AAUT,SAAS,aAAa,OAAsB;CAC1C,MAAM,EAAE,QAAQ,WAAW,cAAc;CAEzC,MAAM,aAAa,iBACjB,EAAE,KAAK,QAAQ,EACf,UACD;;;;;;;;;CAUD,MAAM,QAAQ,OAAuB,KAAK;CAC1C,MAAM,EAAE,cAAc,eAAe,iBACnC,EAAE,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAQ,cAAc;EAAM,EAAE,EAC7D,WACA,MACD;AAED,QACE,oBAAC;EACC,GAAI;EACJ,OAAO;GACL,GAAGA,aAAW,MAAM,UAAU,WAAW,UAAU;GACnD,kBAAkB;GAClB,iBAAiB,WAAW,aAAa,KAAK;GAC9C,oBAAoB,aAAa,KAAK;GACvC;GACD;;AAIN,SAAgB,SAAS,OAAsB;AAC7C,QAAO,MAAM,aAAa,MAAM,YAC9B,oBAAC,gBAAa,GAAI,QAAS,GAE3B,oBAAC,OAAI,GAAI,QAAS;;;;;;;;;;AAmBtB,SAAgB,sBAAsB,OAAmC;CACvE,MAAM,EAAE,QAAQ,cAAc,WAAW,gBAAgB;CACzD,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,EAAE,oBAAoB,UAAU,iBAAiB,iBACrD,EAAE,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAQ;EAAc,EAAE,EACvD,WACA,IACD;AAED,KAAI,SAAU,QAAO;AAErB,QACE,oBAAC;EAAG,gBAAa;YACf,oBAAC;GAAG,gBAAa;GAAoB,SAAS,KAAK,IAAI,aAAa,EAAE;aACpE,oBAAC;IACC,GAAI;IACC;IACL,gBAAa;IACb,oBAAkB,eAAe,KAAK;KACtC;IACC;GACF"}
1
+ {"version":3,"file":"TableRow.js","names":["mergeProps"],"sources":["../../../../src/components/data/TableBase/TableRow.tsx"],"sourcesContent":["import { useRef } from 'react';\nimport { useDraggableItem, useDropIndicator, useTreeItem } from 'react-aria';\n\nimport { mergeProps, mergeRefs } from '../../../utils/react';\n\nimport type { Key, Node } from '@react-types/shared';\nimport type { ReactNode, Ref } from 'react';\nimport type {\n DraggableCollectionState,\n DroppableCollectionState,\n TreeState,\n} from 'react-stately';\nimport type { TableTreeNode } from './table-tree';\n\nexport interface TableRowTreeProps<T = any> {\n state: TreeState<TableTreeNode<T>>;\n node: Node<TableTreeNode<T>>;\n entry: TableTreeNode<T>;\n isVirtualized: boolean;\n}\n\nexport interface TableRowProps<T = any> {\n rowKey: Key;\n /** Everything the renderer already computed: mods, ARIA, handlers. */\n rowProps: Record<string, any>;\n height?: number;\n /** Set on the virtualized path so the virtualizer can measure the row. */\n measureRef?: Ref<HTMLTableRowElement>;\n /** Internal React Aria row ref in tree mode. */\n rowRef?: Ref<HTMLTableRowElement>;\n index?: number;\n dragState?: DraggableCollectionState;\n dropState?: DroppableCollectionState;\n tree?: TableRowTreeProps<T>;\n children:\n | ReactNode\n | ((treeItemAria: ReturnType<typeof useTreeItem> | undefined) => ReactNode);\n}\n\nfunction Row(\n props: TableRowProps & {\n extra?: Record<string, any>;\n rowRef?: Ref<HTMLTableRowElement>;\n },\n) {\n const { rowProps, height, measureRef, rowRef, index, extra, children } =\n props;\n\n return (\n <tr\n {...rowProps}\n {...extra}\n ref={mergeRefs(measureRef, rowRef)}\n data-index={index}\n style={height != null ? { height } : undefined}\n >\n {typeof children === 'function' ? children(undefined) : children}\n </tr>\n );\n}\n\n/**\n * A row inside a collection that accepts drags.\n *\n * Split from the plain row so the drag hooks can be called unconditionally —\n * they are hooks, and whether a table is draggable is a prop.\n */\nfunction DraggableRow(props: TableRowProps) {\n const { rowKey, dragState, dropState } = props;\n\n const dragResult = useDraggableItem(\n { key: rowKey },\n dragState as DraggableCollectionState,\n );\n\n /**\n * Whether a drop would land *on* this row.\n *\n * `useDropIndicator` rather than asking `dropState.isDropTarget` directly:\n * the state object's identity never changes as the pointer moves, so a plain\n * read is computed once and never updates. The hook subscribes, which is what\n * makes the highlight follow the cursor.\n */\n const onRef = useRef<HTMLDivElement>(null);\n const { isDropTarget: isOnTarget } = useDropIndicator(\n { target: { type: 'item', key: rowKey, dropPosition: 'on' } },\n dropState as DroppableCollectionState,\n onRef,\n );\n\n return (\n <Row\n {...props}\n extra={{\n ...mergeProps(props.rowProps, dragResult.dragProps),\n 'data-draggable': '',\n 'data-dragging': dragResult.isDragging ? '' : undefined,\n 'data-drop-target': isOnTarget ? '' : undefined,\n }}\n />\n );\n}\n\nfunction TreeRow<T>(props: TableRowProps<T>) {\n const { tree } = props;\n const rowRef = useRef<HTMLTableRowElement>(null);\n const treeItemAria = useTreeItem(\n {\n node: tree!.node,\n hasChildItems: tree!.entry.children.length > 0,\n isVirtualized: tree!.isVirtualized,\n },\n tree!.state,\n rowRef,\n );\n\n const rowProps = mergeProps(treeItemAria.rowProps, props.rowProps);\n\n // Table geometry and ItemTable selection are separate from React Aria's\n // internal focus-only selection manager, so the renderer's values win.\n if (props.rowProps['aria-rowindex'] !== undefined) {\n rowProps['aria-rowindex'] = props.rowProps['aria-rowindex'];\n }\n if (props.rowProps['aria-selected'] !== undefined) {\n rowProps['aria-selected'] = props.rowProps['aria-selected'];\n }\n rowProps['aria-level'] = tree!.entry.level + 1;\n rowProps['aria-posinset'] = tree!.entry.siblingIndex + 1;\n rowProps['aria-setsize'] = tree!.entry.siblingCount;\n\n const children =\n typeof props.children === 'function'\n ? props.children(treeItemAria)\n : props.children;\n const next = { ...props, rowProps, rowRef, children };\n\n return props.dragState && props.dropState ? (\n <DraggableRow {...next} />\n ) : (\n <Row {...next} />\n );\n}\n\nexport function TableRow<T>(props: TableRowProps<T>) {\n if (props.tree) return <TreeRow {...props} />;\n\n return props.dragState && props.dropState ? (\n <DraggableRow {...props} />\n ) : (\n <Row {...props} />\n );\n}\n\nexport interface TableRowDropIndicatorProps {\n rowKey: Key;\n dropPosition: 'before' | 'after';\n dropState: DroppableCollectionState;\n columnCount: number;\n}\n\n/**\n * The line showing where a dragged row would land.\n *\n * Its own `<tr>`, because a native table cannot hold an arbitrary element\n * between two rows — the same shape `ListBox` uses with `<li>`. It renders\n * nothing at all unless a drag is in flight, so the table's normal structure is\n * untouched the rest of the time.\n */\nexport function TableRowDropIndicator(props: TableRowDropIndicatorProps) {\n const { rowKey, dropPosition, dropState, columnCount } = props;\n const ref = useRef<HTMLDivElement>(null);\n const { dropIndicatorProps, isHidden, isDropTarget } = useDropIndicator(\n { target: { type: 'item', key: rowKey, dropPosition } },\n dropState,\n ref,\n );\n\n if (isHidden) return null;\n\n return (\n <tr data-element=\"DropIndicatorRow\">\n <td data-element=\"DropIndicatorCell\" colSpan={Math.max(columnCount, 1)}>\n <div\n {...dropIndicatorProps}\n ref={ref}\n data-element=\"DropIndicator\"\n data-drop-target={isDropTarget ? '' : undefined}\n />\n </td>\n </tr>\n );\n}\n"],"mappings":";;;;;;;;AAuCA,SAAS,IACP,OAIA;CACA,MAAM,EAAE,UAAU,QAAQ,YAAY,QAAQ,OAAO,OAAO,aAC1D;AAEF,QACE,oBAAC;EACC,GAAI;EACJ,GAAI;EACJ,KAAK,UAAU,YAAY,OAAO;EAClC,cAAY;EACZ,OAAO,UAAU,OAAO,EAAE,QAAQ,GAAG;YAEpC,OAAO,aAAa,aAAa,SAAS,OAAU,GAAG;GACrD;;;;;;;;AAUT,SAAS,aAAa,OAAsB;CAC1C,MAAM,EAAE,QAAQ,WAAW,cAAc;CAEzC,MAAM,aAAa,iBACjB,EAAE,KAAK,QAAQ,EACf,UACD;;;;;;;;;CAUD,MAAM,QAAQ,OAAuB,KAAK;CAC1C,MAAM,EAAE,cAAc,eAAe,iBACnC,EAAE,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAQ,cAAc;EAAM,EAAE,EAC7D,WACA,MACD;AAED,QACE,oBAAC;EACC,GAAI;EACJ,OAAO;GACL,GAAGA,aAAW,MAAM,UAAU,WAAW,UAAU;GACnD,kBAAkB;GAClB,iBAAiB,WAAW,aAAa,KAAK;GAC9C,oBAAoB,aAAa,KAAK;GACvC;GACD;;AAIN,SAAS,QAAW,OAAyB;CAC3C,MAAM,EAAE,SAAS;CACjB,MAAM,SAAS,OAA4B,KAAK;CAChD,MAAM,eAAe,YACnB;EACE,MAAM,KAAM;EACZ,eAAe,KAAM,MAAM,SAAS,SAAS;EAC7C,eAAe,KAAM;EACtB,EACD,KAAM,OACN,OACD;CAED,MAAM,WAAWA,aAAW,aAAa,UAAU,MAAM,SAAS;AAIlE,KAAI,MAAM,SAAS,qBAAqB,OACtC,UAAS,mBAAmB,MAAM,SAAS;AAE7C,KAAI,MAAM,SAAS,qBAAqB,OACtC,UAAS,mBAAmB,MAAM,SAAS;AAE7C,UAAS,gBAAgB,KAAM,MAAM,QAAQ;AAC7C,UAAS,mBAAmB,KAAM,MAAM,eAAe;AACvD,UAAS,kBAAkB,KAAM,MAAM;CAEvC,MAAM,WACJ,OAAO,MAAM,aAAa,aACtB,MAAM,SAAS,aAAa,GAC5B,MAAM;CACZ,MAAM,OAAO;EAAE,GAAG;EAAO;EAAU;EAAQ;EAAU;AAErD,QAAO,MAAM,aAAa,MAAM,YAC9B,oBAAC,gBAAa,GAAI,OAAQ,GAE1B,oBAAC,OAAI,GAAI,OAAQ;;AAIrB,SAAgB,SAAY,OAAyB;AACnD,KAAI,MAAM,KAAM,QAAO,oBAAC,WAAQ,GAAI,QAAS;AAE7C,QAAO,MAAM,aAAa,MAAM,YAC9B,oBAAC,gBAAa,GAAI,QAAS,GAE3B,oBAAC,OAAI,GAAI,QAAS;;;;;;;;;;AAmBtB,SAAgB,sBAAsB,OAAmC;CACvE,MAAM,EAAE,QAAQ,cAAc,WAAW,gBAAgB;CACzD,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,EAAE,oBAAoB,UAAU,iBAAiB,iBACrD,EAAE,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAQ;EAAc,EAAE,EACvD,WACA,IACD;AAED,KAAI,SAAU,QAAO;AAErB,QACE,oBAAC;EAAG,gBAAa;YACf,oBAAC;GAAG,gBAAa;GAAoB,SAAS,KAAK,IAAI,aAAa,EAAE;aACpE,oBAAC;IACC,GAAI;IACC;IACL,gBAAa;IACb,oBAAkB,eAAe,KAAK;KACtC;IACC;GACF"}
@@ -5,7 +5,8 @@ import "./use-table-selection.js";
5
5
  import { Styles } from "@tenphi/tasty";
6
6
  import { ReactNode, RefObject } from "react";
7
7
  import "react/jsx-runtime";
8
- import { Key as Key$1 } from "@react-types/shared";
8
+ import { TreeState } from "react-stately";
9
+ import { Key as Key$1, Node } from "@react-types/shared";
9
10
 
10
11
  //#region src/components/data/TableBase/TableView.d.ts
11
12
  /** Visual/behavioural overrides a table adapter may attach to a single row. */