@cube-dev/ui-kit 0.157.3 → 0.159.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 (575) hide show
  1. package/dist/CHANGELOG.md +155 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +10 -4
  20. package/dist/components/actions/Button/Button.js.map +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  23. package/dist/components/actions/ButtonSplit/context.js +1 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  25. package/dist/components/actions/CommandMenu/styled.js +1 -1
  26. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  27. package/dist/components/actions/ItemActionContext.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  29. package/dist/components/actions/Link/Link.js +1 -1
  30. package/dist/components/actions/Menu/Menu.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/index.js +1 -1
  39. package/dist/components/actions/use-action.js +1 -1
  40. package/dist/components/actions/use-anchored-menu.js +1 -1
  41. package/dist/components/actions/use-context-menu.js +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.d.ts +7 -0
  59. package/dist/components/content/Item/Item.js +13 -6
  60. package/dist/components/content/Item/Item.js.map +1 -1
  61. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  62. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  63. package/dist/components/content/Layout/GridLayout.js +1 -1
  64. package/dist/components/content/Layout/Layout.js +1 -1
  65. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  66. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  67. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  68. package/dist/components/content/Layout/LayoutContent.js +1 -1
  69. package/dist/components/content/Layout/LayoutContext.js +1 -1
  70. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  71. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  72. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  73. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutPane.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  78. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  79. package/dist/components/content/Layout/index.js +1 -1
  80. package/dist/components/content/Layout/utils.js +1 -1
  81. package/dist/components/content/Paragraph.js +1 -1
  82. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  83. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  84. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  85. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  86. package/dist/components/content/Result/Result.js +1 -1
  87. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  88. package/dist/components/content/Tag/Tag.js +1 -1
  89. package/dist/components/content/Text.d.ts +14 -14
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/styled.js +1 -1
  96. package/dist/components/content/Tree/tree-index.js +1 -1
  97. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  98. package/dist/components/content/Tree/use-load-data.js +1 -1
  99. package/dist/components/content/highlightText.js +1 -1
  100. package/dist/components/content/use-auto-tooltip.js +41 -32
  101. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  102. package/dist/components/data/DataTable/DataTable.js +82 -24
  103. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  104. package/dist/components/data/DataTable/types.d.ts +56 -1
  105. package/dist/components/data/ItemTable/ItemTable.js +13 -5
  106. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  107. package/dist/components/data/ItemTable/ItemTableBulkBar.js +3 -7
  108. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
  109. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  110. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  111. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  112. package/dist/components/data/ItemTable/types.d.ts +19 -0
  113. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  114. package/dist/components/data/TableBase/RowCollection.js +5 -3
  115. package/dist/components/data/TableBase/RowCollection.js.map +1 -1
  116. package/dist/components/data/TableBase/TableHeaderCell.js +115 -0
  117. package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -0
  118. package/dist/components/data/TableBase/TableRow.js +1 -1
  119. package/dist/components/data/TableBase/TableView.js +195 -33
  120. package/dist/components/data/TableBase/TableView.js.map +1 -1
  121. package/dist/components/data/TableBase/column-menu.d.ts +36 -0
  122. package/dist/components/data/TableBase/column-menu.js +104 -0
  123. package/dist/components/data/TableBase/column-menu.js.map +1 -0
  124. package/dist/components/data/TableBase/column-tint.js +168 -0
  125. package/dist/components/data/TableBase/column-tint.js.map +1 -0
  126. package/dist/components/data/TableBase/index.d.ts +3 -2
  127. package/dist/components/data/TableBase/row-menu.js +11 -6
  128. package/dist/components/data/TableBase/row-menu.js.map +1 -1
  129. package/dist/components/data/TableBase/styled.js +45 -16
  130. package/dist/components/data/TableBase/styled.js.map +1 -1
  131. package/dist/components/data/TableBase/types.d.ts +104 -6
  132. package/dist/components/data/TableBase/types.js +1 -1
  133. package/dist/components/data/TableBase/types.js.map +1 -1
  134. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  135. package/dist/components/data/TableBase/use-column-order.js +100 -0
  136. package/dist/components/data/TableBase/use-column-order.js.map +1 -0
  137. package/dist/components/data/TableBase/use-container-width.js +1 -1
  138. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  139. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  140. package/dist/components/data/TableBase/use-table-columns.js +24 -2
  141. package/dist/components/data/TableBase/use-table-columns.js.map +1 -1
  142. package/dist/components/data/TableBase/use-table-search.js +1 -1
  143. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  144. package/dist/components/data/TableBase/use-table-sort.js +20 -1
  145. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  146. package/dist/components/data/TableBase/use-table-sorts.js +40 -1
  147. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  148. package/dist/components/data/TableBase/use-table-storage.d.ts +1 -1
  149. package/dist/components/data/TableBase/use-table-storage.js +6 -2
  150. package/dist/components/data/TableBase/use-table-storage.js.map +1 -1
  151. package/dist/components/data/index.d.ts +2 -1
  152. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  153. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  154. package/dist/components/fields/Checkbox/context.js +1 -1
  155. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  156. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  157. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  158. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  159. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  160. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  161. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  162. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  163. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  164. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  165. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  166. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  167. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  168. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  169. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  170. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  171. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  172. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  173. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  174. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  175. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  176. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  178. package/dist/components/fields/DatePicker/period.js +1 -1
  179. package/dist/components/fields/DatePicker/props.js +1 -1
  180. package/dist/components/fields/DatePicker/utils.js +1 -1
  181. package/dist/components/fields/FileInput/FileInput.js +1 -1
  182. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  183. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  184. package/dist/components/fields/Input/Input.js +1 -1
  185. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  186. package/dist/components/fields/ListBox/ListBox.js +1 -1
  187. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  188. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  189. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  190. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  191. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  192. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  193. package/dist/components/fields/Picker/Picker.js +1 -1
  194. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  195. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  196. package/dist/components/fields/RadioGroup/context.js +1 -1
  197. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  198. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  199. package/dist/components/fields/Select/Select.js +1 -1
  200. package/dist/components/fields/Slider/Gradation.js +1 -1
  201. package/dist/components/fields/Slider/HueSlider.js +1 -1
  202. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  203. package/dist/components/fields/Slider/Slider.js +1 -1
  204. package/dist/components/fields/Slider/SliderBase.js +1 -1
  205. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  206. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  207. package/dist/components/fields/Slider/elements.js +1 -1
  208. package/dist/components/fields/Slider/index.js +1 -1
  209. package/dist/components/fields/Switch/Switch.js +1 -1
  210. package/dist/components/fields/TextArea/TextArea.js +1 -1
  211. package/dist/components/fields/TextInput/TextInput.js +1 -1
  212. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  213. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  214. package/dist/components/fields/color/ColorPanel.js +1 -1
  215. package/dist/components/fields/color/ColorSwatch.js +1 -1
  216. package/dist/components/fields/color/channels.js +1 -1
  217. package/dist/components/fields/color/color.js +1 -1
  218. package/dist/components/fields/color/context.js +1 -1
  219. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  220. package/dist/components/form/Form/Field.js +1 -1
  221. package/dist/components/form/Form/Form.js +1 -1
  222. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  223. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  224. package/dist/components/form/Form/SubmitError.js +1 -1
  225. package/dist/components/form/Form/index.js +1 -1
  226. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  227. package/dist/components/form/Form/use-field/use-field.js +1 -1
  228. package/dist/components/form/Form/use-form.js +1 -1
  229. package/dist/components/form/Form/validation.js +1 -1
  230. package/dist/components/form/Label.js +1 -1
  231. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  232. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  233. package/dist/components/form/validation/use-validation-props.js +1 -1
  234. package/dist/components/form/wrapper.js +1 -1
  235. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  236. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  237. package/dist/components/layout/Board/Board.js +1 -1
  238. package/dist/components/layout/Board/BoardProvider.js +1 -1
  239. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  240. package/dist/components/layout/Board/Widget.js +1 -1
  241. package/dist/components/layout/Board/WidgetHost.js +1 -1
  242. package/dist/components/layout/Board/board-context.js +1 -1
  243. package/dist/components/layout/Board/board-store.js +1 -1
  244. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  245. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  246. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  247. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  248. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  249. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  250. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  251. package/dist/components/layout/Board/index.js +1 -1
  252. package/dist/components/layout/Board/responsive-utils.js +1 -1
  253. package/dist/components/layout/Board/use-board-layout.js +1 -1
  254. package/dist/components/layout/Board/use-board-registry.js +1 -1
  255. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  256. package/dist/components/layout/Board/use-board-selection.js +1 -1
  257. package/dist/components/layout/Flex.js +1 -1
  258. package/dist/components/layout/Flow.js +1 -1
  259. package/dist/components/layout/Grid.js +1 -1
  260. package/dist/components/layout/Panel.js +1 -1
  261. package/dist/components/layout/Prefix.js +1 -1
  262. package/dist/components/layout/ResizablePanel.js +1 -1
  263. package/dist/components/layout/Space.js +1 -1
  264. package/dist/components/layout/Suffix.js +1 -1
  265. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  266. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  267. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  268. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  269. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  270. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  271. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  272. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  273. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  274. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  275. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  276. package/dist/components/navigation/Tabs/styled.js +1 -1
  277. package/dist/components/navigation/Tabs/types.js +1 -1
  278. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  279. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  280. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  281. package/dist/components/other/Calendar/Calendar.js +1 -1
  282. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  283. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  284. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  285. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  286. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  287. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  288. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  289. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  290. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  291. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  292. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  293. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  294. package/dist/components/overlays/Dialog/context.js +1 -1
  295. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  296. package/dist/components/overlays/Modal/Modal.js +1 -1
  297. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  298. package/dist/components/overlays/Modal/Overlay.js +1 -1
  299. package/dist/components/overlays/Modal/Popover.js +1 -1
  300. package/dist/components/overlays/Modal/Tray.js +1 -1
  301. package/dist/components/overlays/Modal/Underlay.js +1 -1
  302. package/dist/components/overlays/Notifications/Notification.js +1 -1
  303. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  304. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  305. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  306. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  307. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  308. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  309. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  310. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  311. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  312. package/dist/components/overlays/Notifications/index.js +1 -1
  313. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  314. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  315. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  316. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  317. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  318. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  319. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  320. package/dist/components/overlays/Toast/index.js +1 -1
  321. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  322. package/dist/components/overlays/Toast/useToast.js +1 -1
  323. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  324. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  325. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  326. package/dist/components/overlays/Tooltip/context.js +1 -1
  327. package/dist/components/portal/Portal.js +1 -1
  328. package/dist/components/portal/PortalProvider.js +1 -1
  329. package/dist/components/portal/usePortal.js +1 -1
  330. package/dist/components/shared/DraggableCollection.js +1 -1
  331. package/dist/components/shared/InvalidIcon.js +1 -1
  332. package/dist/components/shared/ValidIcon.js +1 -1
  333. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  334. package/dist/components/status/Spin/Cube.js +1 -1
  335. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  336. package/dist/components/status/Spin/Spin.js +1 -1
  337. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  338. package/dist/data/item-themes.js +1 -1
  339. package/dist/data/themes.js +1 -1
  340. package/dist/eslint-plugin/defaults.generated.js +13 -1
  341. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  342. package/dist/eslint-plugin/index.js +1 -1
  343. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  344. package/dist/i18n/I18nProvider.js +1 -1
  345. package/dist/i18n/createFormatter.js +1 -1
  346. package/dist/i18n/index.js +1 -1
  347. package/dist/i18n/instance.js +1 -1
  348. package/dist/i18n/locales/de-DE/uikit.js +5 -1
  349. package/dist/i18n/locales/en-US/uikit.js +5 -1
  350. package/dist/i18n/locales/en-US/uikit.json.d.ts +4 -0
  351. package/dist/i18n/locales/es-ES/uikit.js +5 -1
  352. package/dist/i18n/locales/es-MX/uikit.js +5 -1
  353. package/dist/i18n/locales/fr-FR/uikit.js +5 -1
  354. package/dist/i18n/locales/it-IT/uikit.js +5 -1
  355. package/dist/i18n/locales/ja-JP/uikit.js +5 -1
  356. package/dist/i18n/locales/nb-NO/uikit.js +5 -1
  357. package/dist/i18n/locales/pt-BR/uikit.js +5 -1
  358. package/dist/i18n/locales/pt-PT/uikit.js +5 -1
  359. package/dist/i18n/locales/sv-SE/uikit.js +5 -1
  360. package/dist/i18n/locales/vi-VN/uikit.js +5 -1
  361. package/dist/i18n/locales.js +1 -1
  362. package/dist/i18n/useFormatter.js +1 -1
  363. package/dist/i18n/useI18n.js +1 -1
  364. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  365. package/dist/icons/AdjustmentsIcon.js +1 -1
  366. package/dist/icons/AiIcon.js +1 -1
  367. package/dist/icons/AreaChartIcon.js +1 -1
  368. package/dist/icons/ArrowNarrowDownIcon.d.ts +12 -0
  369. package/dist/icons/ArrowNarrowDownIcon.js +11 -0
  370. package/dist/icons/ArrowNarrowDownIcon.js.map +1 -0
  371. package/dist/icons/ArrowNarrowUpIcon.d.ts +12 -0
  372. package/dist/icons/ArrowNarrowUpIcon.js +11 -0
  373. package/dist/icons/ArrowNarrowUpIcon.js.map +1 -0
  374. package/dist/icons/BackwardIcon.js +1 -1
  375. package/dist/icons/BarChartIcon.js +1 -1
  376. package/dist/icons/BellFilledIcon.js +1 -1
  377. package/dist/icons/BellIcon.js +1 -1
  378. package/dist/icons/BooleanIcon.js +1 -1
  379. package/dist/icons/CalendarEditIcon.js +1 -1
  380. package/dist/icons/CalendarIcon.js +1 -1
  381. package/dist/icons/CaretDownIcon.js +1 -1
  382. package/dist/icons/CaretUpIcon.js +1 -1
  383. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  384. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  385. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  386. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  387. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  388. package/dist/icons/ChartBarLineIcon.js +1 -1
  389. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  390. package/dist/icons/ChartBarStackedIcon.js +1 -1
  391. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  392. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  393. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  394. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  395. package/dist/icons/ChartBubbleIcon.js +1 -1
  396. package/dist/icons/ChartDonut2Icon.js +1 -1
  397. package/dist/icons/ChartFunnelIcon.js +1 -1
  398. package/dist/icons/ChartHeatmapIcon.js +1 -1
  399. package/dist/icons/ChartKPIIcon.js +1 -1
  400. package/dist/icons/ChartPie2Icon.js +1 -1
  401. package/dist/icons/ChartScatterIcon.js +1 -1
  402. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  403. package/dist/icons/CheckCircleIcon.js +1 -1
  404. package/dist/icons/CheckIcon.js +1 -1
  405. package/dist/icons/CircleFilledIcon.js +1 -1
  406. package/dist/icons/ClearIcon.js +1 -1
  407. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  408. package/dist/icons/CloseCircleIcon.js +1 -1
  409. package/dist/icons/CloseIcon.js +1 -1
  410. package/dist/icons/CodeIcon.js +1 -1
  411. package/dist/icons/ColumnTotalIcon.js +1 -1
  412. package/dist/icons/CopyIcon.js +1 -1
  413. package/dist/icons/CountIcon.js +1 -1
  414. package/dist/icons/CubeIcon.js +1 -1
  415. package/dist/icons/CubePauseIcon.js +1 -1
  416. package/dist/icons/CubePlayIcon.js +1 -1
  417. package/dist/icons/CurrencyDollarIcon.js +1 -1
  418. package/dist/icons/DangerIcon.js +1 -1
  419. package/dist/icons/DashboardIcon.js +1 -1
  420. package/dist/icons/DatabaseIcon.js +1 -1
  421. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  422. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  423. package/dist/icons/DirectionIcon.js +1 -1
  424. package/dist/icons/DonutIcon.js +1 -1
  425. package/dist/icons/DownIcon.js +1 -1
  426. package/dist/icons/EditIcon.js +1 -1
  427. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  428. package/dist/icons/ExclamationCircleIcon.js +1 -1
  429. package/dist/icons/ExclamationIcon.js +1 -1
  430. package/dist/icons/EyeIcon.js +1 -1
  431. package/dist/icons/EyeInvisibleIcon.js +1 -1
  432. package/dist/icons/FilterIcon.js +1 -1
  433. package/dist/icons/FolderFilledIcon.js +1 -1
  434. package/dist/icons/FolderIcon.js +1 -1
  435. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  436. package/dist/icons/FolderOpenIcon.js +1 -1
  437. package/dist/icons/ForwardIcon.js +1 -1
  438. package/dist/icons/GripVerticalIcon.js +1 -1
  439. package/dist/icons/HierarchyIcon.js +1 -1
  440. package/dist/icons/HierarchyOpenIcon.js +1 -1
  441. package/dist/icons/Icon.js +1 -1
  442. package/dist/icons/InfoCircleIcon.js +1 -1
  443. package/dist/icons/InfoIcon.js +1 -1
  444. package/dist/icons/KeyIcon.js +1 -1
  445. package/dist/icons/LeftIcon.js +1 -1
  446. package/dist/icons/LineChartIcon.js +1 -1
  447. package/dist/icons/LoadingIcon.js +1 -1
  448. package/dist/icons/LockFilledIcon.js +1 -1
  449. package/dist/icons/LockIcon.js +1 -1
  450. package/dist/icons/MoreIcon.js +1 -1
  451. package/dist/icons/NotAllowedIcon.js +1 -1
  452. package/dist/icons/Number123Icon.js +1 -1
  453. package/dist/icons/NumberIcon.js +1 -1
  454. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  455. package/dist/icons/PauseCircleIcon.js +1 -1
  456. package/dist/icons/PauseIcon.js +1 -1
  457. package/dist/icons/PercentageIcon.js +1 -1
  458. package/dist/icons/PieChartIcon.js +1 -1
  459. package/dist/icons/PipetteIcon.js +1 -1
  460. package/dist/icons/PlayCircleIcon.js +1 -1
  461. package/dist/icons/PlayIcon.js +1 -1
  462. package/dist/icons/PlusIcon.js +1 -1
  463. package/dist/icons/ProgressBarIcon.js +1 -1
  464. package/dist/icons/ReloadIcon.js +1 -1
  465. package/dist/icons/ReportIcon.js +1 -1
  466. package/dist/icons/ReturnIcon.js +1 -1
  467. package/dist/icons/RightIcon.js +1 -1
  468. package/dist/icons/RowTotalsIcon.js +1 -1
  469. package/dist/icons/SchemeIcon.js +1 -1
  470. package/dist/icons/SearchIcon.js +1 -1
  471. package/dist/icons/SemanticQueryIcon.js +1 -1
  472. package/dist/icons/SettingsIcon.js +1 -1
  473. package/dist/icons/ShieldFilledIcon.js +1 -1
  474. package/dist/icons/ShieldIcon.js +1 -1
  475. package/dist/icons/SlashIcon.js +1 -1
  476. package/dist/icons/SparklesIcon.js +1 -1
  477. package/dist/icons/SqlIcon.js +1 -1
  478. package/dist/icons/StatsIcon.js +1 -1
  479. package/dist/icons/StopIcon.js +1 -1
  480. package/dist/icons/StringIcon.js +1 -1
  481. package/dist/icons/SubtotalsIcon.js +1 -1
  482. package/dist/icons/SwitchIcon.js +1 -1
  483. package/dist/icons/TableIcon.js +1 -1
  484. package/dist/icons/ThumbsDownIcon.js +1 -1
  485. package/dist/icons/ThumbsUpIcon.js +1 -1
  486. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  487. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  488. package/dist/icons/ThunderboltIcon.js +1 -1
  489. package/dist/icons/TimeIcon.js +1 -1
  490. package/dist/icons/TrashIcon.js +1 -1
  491. package/dist/icons/UnlockIcon.js +1 -1
  492. package/dist/icons/UpIcon.js +1 -1
  493. package/dist/icons/UserGroupIcon.js +1 -1
  494. package/dist/icons/UserIcon.js +1 -1
  495. package/dist/icons/UserLockIcon.js +1 -1
  496. package/dist/icons/ViewIcon.js +1 -1
  497. package/dist/icons/WarningFilledIcon.js +1 -1
  498. package/dist/icons/WarningIcon.js +1 -1
  499. package/dist/icons/index.d.ts +2 -0
  500. package/dist/icons/wrap-icon.js +1 -1
  501. package/dist/index.d.ts +7 -2
  502. package/dist/index.js +7 -2
  503. package/dist/index.js.map +1 -1
  504. package/dist/provider.js +1 -1
  505. package/dist/providers/TrackingProvider.js +1 -1
  506. package/dist/providers/navigationAdapter.default.js +1 -1
  507. package/dist/tokens/base.js +1 -1
  508. package/dist/tokens/color-theme.d.ts +86 -0
  509. package/dist/tokens/color-theme.js +156 -0
  510. package/dist/tokens/color-theme.js.map +1 -0
  511. package/dist/tokens/colors.js +1 -1
  512. package/dist/tokens/index.d.ts +1 -0
  513. package/dist/tokens/index.js +2 -1
  514. package/dist/tokens/index.js.map +1 -1
  515. package/dist/tokens/layout.js +1 -1
  516. package/dist/tokens/lazy-styles.js +1 -1
  517. package/dist/tokens/palette-config.d.ts +1 -1
  518. package/dist/tokens/palette-config.js +17 -5
  519. package/dist/tokens/palette-config.js.map +1 -1
  520. package/dist/tokens/palette.d.ts +1 -1
  521. package/dist/tokens/palette.js +44 -2
  522. package/dist/tokens/palette.js.map +1 -1
  523. package/dist/tokens/shadows.js +1 -1
  524. package/dist/tokens/sizes.js +1 -1
  525. package/dist/tokens/spacing.js +1 -1
  526. package/dist/tokens/typography.js +1 -1
  527. package/dist/utils/ResizeSensor.js +1 -1
  528. package/dist/utils/index.d.ts +1 -0
  529. package/dist/utils/is-dev-env.js +1 -1
  530. package/dist/utils/modules.js +1 -1
  531. package/dist/utils/promise.js +1 -1
  532. package/dist/utils/raf.js +1 -1
  533. package/dist/utils/random.js +1 -1
  534. package/dist/utils/range.js +1 -1
  535. package/dist/utils/react/RenderCache.js +1 -1
  536. package/dist/utils/react/Slots.js +1 -1
  537. package/dist/utils/react/chain.js +1 -1
  538. package/dist/utils/react/disabledProps.d.ts +49 -0
  539. package/dist/utils/react/disabledProps.js +82 -0
  540. package/dist/utils/react/disabledProps.js.map +1 -0
  541. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  542. package/dist/utils/react/index.d.ts +1 -0
  543. package/dist/utils/react/index.js +2 -1
  544. package/dist/utils/react/interactions.js +1 -1
  545. package/dist/utils/react/isTextOnly.js +1 -1
  546. package/dist/utils/react/mapProps.js +1 -1
  547. package/dist/utils/react/mergeProps.js +1 -1
  548. package/dist/utils/react/nullableValue.js +1 -1
  549. package/dist/utils/react/resolveIcon.js +1 -1
  550. package/dist/utils/react/sharedStore.js +1 -1
  551. package/dist/utils/react/useBufferedValue.js +1 -1
  552. package/dist/utils/react/useCombinedRefs.js +1 -1
  553. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  554. package/dist/utils/react/useEventBus.js +1 -1
  555. package/dist/utils/react/useId.js +1 -1
  556. package/dist/utils/react/useIsDarwin.js +1 -1
  557. package/dist/utils/react/useKeySymbols.js +1 -1
  558. package/dist/utils/react/useLayoutEffect.js +1 -1
  559. package/dist/utils/react/useLocalStorage.js +1 -1
  560. package/dist/utils/react/useMergeStyles.js +1 -1
  561. package/dist/utils/react/usePopoverSync.js +1 -1
  562. package/dist/utils/react/useQaProps.js +1 -1
  563. package/dist/utils/react/useViewportSize.js +1 -1
  564. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  565. package/dist/utils/selection.js +1 -1
  566. package/dist/utils/styles.js +1 -1
  567. package/dist/utils/tree.js +1 -1
  568. package/dist/utils/warnings.js +1 -1
  569. package/dist/version.js +2 -2
  570. package/docs/Theming.md +20 -13
  571. package/docs/components/actions/Button.md +17 -0
  572. package/docs/components/content/Item.md +8 -1
  573. package/docs/components/data/DataTable.md +118 -2
  574. package/docs/components/data/ItemTable.md +37 -5
  575. package/package.json +1 -1
@@ -0,0 +1,115 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.159.0 | Cube Dev Team */
2
+ import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+ import { useDraggableItem, useDropIndicator } from "react-aria";
6
+
7
+ //#region src/components/data/TableBase/TableHeaderCell.tsx
8
+ /**
9
+ * Controls inside the header that own their own press, and must never start a
10
+ * column drag.
11
+ *
12
+ * Drag-source resolution walks the DOM tree, not the React event path, so
13
+ * `Item`'s `Actions` slot calling `stopPropagation` does nothing here — the
14
+ * `<th>` is still the drag source as far as the browser is concerned. Only
15
+ * `preventDefault` on `dragstart` stops it, which is what the capture handler
16
+ * below does.
17
+ */
18
+ const NO_DRAG_SELECTOR = "[data-element=\"Resizer\"], [data-element=\"Actions\"], a, button, input, select, textarea, [role=\"button\"], [role=\"menuitem\"]";
19
+ function HeaderCell(props) {
20
+ const { cellProps, extra, children } = props;
21
+ return /* @__PURE__ */ jsx("th", {
22
+ ...cellProps,
23
+ ...extra,
24
+ children
25
+ });
26
+ }
27
+ /**
28
+ * A header cell inside a collection that accepts drags.
29
+ *
30
+ * Split from the plain one so the drag hooks can be called unconditionally —
31
+ * they are hooks, and whether a table reorders its columns is a prop.
32
+ */
33
+ function DraggableHeaderCell(props) {
34
+ const { columnKey, hasAction, isLastDraggable, dragState, dropState } = props;
35
+ const { dragProps, isDragging } = useDraggableItem({
36
+ key: columnKey,
37
+ hasAction
38
+ }, dragState);
39
+ return /* @__PURE__ */ jsxs(HeaderCell, {
40
+ ...props,
41
+ extra: {
42
+ ...mergeProps$1(props.cellProps, dragProps, { onDragStartCapture: (event) => {
43
+ if (event.target?.closest?.(NO_DRAG_SELECTOR)) {
44
+ event.preventDefault();
45
+ event.stopPropagation();
46
+ }
47
+ } }),
48
+ "data-draggable": "",
49
+ "data-dragging": isDragging ? "" : void 0
50
+ },
51
+ children: [
52
+ /* @__PURE__ */ jsx(ColumnDropIndicator, {
53
+ columnKey,
54
+ dropPosition: "before",
55
+ dropState
56
+ }),
57
+ props.children,
58
+ isLastDraggable ? /* @__PURE__ */ jsx(ColumnDropIndicator, {
59
+ columnKey,
60
+ dropPosition: "after",
61
+ dropState
62
+ }) : null
63
+ ]
64
+ });
65
+ }
66
+ function TableHeaderCell(props) {
67
+ return props.dragState && props.dropState ? /* @__PURE__ */ jsx(DraggableHeaderCell, { ...props }) : /* @__PURE__ */ jsx(HeaderCell, { ...props });
68
+ }
69
+ /**
70
+ * The line showing where a dragged column would land.
71
+ *
72
+ * Lives INSIDE the `<th>`, absolutely positioned on one of its edges — a `<tr>`
73
+ * may only contain `<th>`/`<td>`, so there is nowhere between two header cells
74
+ * to put it. Being absolute also means mounting one cannot shift the layout,
75
+ * which is the bug class the row indicator had to be careful about.
76
+ *
77
+ * `useDropIndicator` reports `isHidden` unless this is the active target, so a
78
+ * table merely capable of reordering keeps its exact DOM until a drag starts.
79
+ */
80
+ function ColumnDropIndicator({ columnKey, dropPosition, dropState }) {
81
+ const ref = useRef(null);
82
+ const { dropIndicatorProps, isHidden, isDropTarget } = useDropIndicator({ target: {
83
+ type: "item",
84
+ key: columnKey,
85
+ dropPosition
86
+ } }, dropState, ref);
87
+ /**
88
+ * Re-register the drop targets when the header's geometry changes.
89
+ *
90
+ * React Aria's `ListDropTargetDelegate` measures every `[data-key]` at the
91
+ * moment a drag starts. A column resized mid-drag — or a scrollbar appearing —
92
+ * leaves those rects stale, and the drop lands in the wrong place. Same trick
93
+ * `TabDropIndicator` uses.
94
+ */
95
+ const [, forceUpdate] = useState(0);
96
+ useEffect(() => {
97
+ const row = ref.current?.closest("[data-element=\"HeadRow\"]");
98
+ if (!row || typeof ResizeObserver === "undefined") return;
99
+ const observer = new ResizeObserver(() => forceUpdate((n) => n + 1));
100
+ observer.observe(row);
101
+ return () => observer.disconnect();
102
+ }, []);
103
+ if (isHidden) return null;
104
+ return /* @__PURE__ */ jsx("div", {
105
+ ...dropIndicatorProps,
106
+ ref,
107
+ "data-element": "ColumnDropIndicator",
108
+ "data-position": dropPosition,
109
+ "data-drop-target": isDropTarget ? "" : void 0
110
+ });
111
+ }
112
+
113
+ //#endregion
114
+ export { TableHeaderCell };
115
+ //# sourceMappingURL=TableHeaderCell.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableHeaderCell.js","names":["mergeProps"],"sources":["../../../../src/components/data/TableBase/TableHeaderCell.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { useDraggableItem, useDropIndicator } from 'react-aria';\n\nimport { mergeProps } from '../../../utils/react';\n\nimport type { ReactNode } from 'react';\nimport type {\n DraggableCollectionState,\n DroppableCollectionState,\n} from 'react-stately';\n\n/**\n * Controls inside the header that own their own press, and must never start a\n * column drag.\n *\n * Drag-source resolution walks the DOM tree, not the React event path, so\n * `Item`'s `Actions` slot calling `stopPropagation` does nothing here — the\n * `<th>` is still the drag source as far as the browser is concerned. Only\n * `preventDefault` on `dragstart` stops it, which is what the capture handler\n * below does.\n */\nconst NO_DRAG_SELECTOR =\n '[data-element=\"Resizer\"], [data-element=\"Actions\"], a, button, input, select, textarea, [role=\"button\"], [role=\"menuitem\"]';\n\nexport interface TableHeaderCellProps {\n columnKey: string;\n /** Everything the renderer already computed: mods, ARIA, handlers, styles. */\n cellProps: Record<string, any>;\n /** Whether the header itself responds to Enter — i.e. it sorts. */\n hasAction: boolean;\n isLastDraggable: boolean;\n dragState?: DraggableCollectionState;\n dropState?: DroppableCollectionState;\n children: ReactNode;\n}\n\nfunction HeaderCell(\n props: TableHeaderCellProps & { extra?: Record<string, any> },\n) {\n const { cellProps, extra, children } = props;\n\n return (\n <th {...cellProps} {...extra}>\n {children}\n </th>\n );\n}\n\n/**\n * A header cell inside a collection that accepts drags.\n *\n * Split from the plain one so the drag hooks can be called unconditionally —\n * they are hooks, and whether a table reorders its columns is a prop.\n */\nfunction DraggableHeaderCell(props: TableHeaderCellProps) {\n const { columnKey, hasAction, isLastDraggable, dragState, dropState } = props;\n\n const { dragProps, isDragging } = useDraggableItem(\n // `hasAction` re-gates React Aria's Enter/Space capture behind Alt, so plain\n // Enter still reaches the header's own sort handler instead of starting a\n // keyboard drag session.\n { key: columnKey, hasAction },\n dragState as DraggableCollectionState,\n );\n\n return (\n <HeaderCell\n {...props}\n extra={{\n // `dragProps` last for `draggable`, which is a value rather than a\n // handler — `mergeProps` chains handlers but takes the later value. The\n // sort `onClick` survives: `useDraggableItem` only deletes its own.\n ...mergeProps(props.cellProps, dragProps, {\n // Capture, so this runs before React Aria's own `onDragStart` on the\n // same node and can cancel it.\n onDragStartCapture: (event: any) => {\n if ((event.target as HTMLElement)?.closest?.(NO_DRAG_SELECTOR)) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n }),\n 'data-draggable': '',\n 'data-dragging': isDragging ? '' : undefined,\n }}\n >\n <ColumnDropIndicator\n columnKey={columnKey}\n dropPosition=\"before\"\n dropState={dropState as DroppableCollectionState}\n />\n {props.children}\n {isLastDraggable ? (\n <ColumnDropIndicator\n columnKey={columnKey}\n dropPosition=\"after\"\n dropState={dropState as DroppableCollectionState}\n />\n ) : null}\n </HeaderCell>\n );\n}\n\nexport function TableHeaderCell(props: TableHeaderCellProps) {\n return props.dragState && props.dropState ? (\n <DraggableHeaderCell {...props} />\n ) : (\n <HeaderCell {...props} />\n );\n}\n\ninterface ColumnDropIndicatorProps {\n columnKey: string;\n dropPosition: 'before' | 'after';\n dropState: DroppableCollectionState;\n}\n\n/**\n * The line showing where a dragged column would land.\n *\n * Lives INSIDE the `<th>`, absolutely positioned on one of its edges — a `<tr>`\n * may only contain `<th>`/`<td>`, so there is nowhere between two header cells\n * to put it. Being absolute also means mounting one cannot shift the layout,\n * which is the bug class the row indicator had to be careful about.\n *\n * `useDropIndicator` reports `isHidden` unless this is the active target, so a\n * table merely capable of reordering keeps its exact DOM until a drag starts.\n */\nfunction ColumnDropIndicator({\n columnKey,\n dropPosition,\n dropState,\n}: ColumnDropIndicatorProps) {\n const ref = useRef<HTMLDivElement>(null);\n const { dropIndicatorProps, isHidden, isDropTarget } = useDropIndicator(\n { target: { type: 'item', key: columnKey, dropPosition } },\n dropState,\n ref,\n );\n\n /**\n * Re-register the drop targets when the header's geometry changes.\n *\n * React Aria's `ListDropTargetDelegate` measures every `[data-key]` at the\n * moment a drag starts. A column resized mid-drag — or a scrollbar appearing —\n * leaves those rects stale, and the drop lands in the wrong place. Same trick\n * `TabDropIndicator` uses.\n */\n const [, forceUpdate] = useState(0);\n\n useEffect(() => {\n const row = ref.current?.closest('[data-element=\"HeadRow\"]');\n\n if (!row || typeof ResizeObserver === 'undefined') return;\n\n const observer = new ResizeObserver(() => forceUpdate((n) => n + 1));\n\n observer.observe(row);\n\n return () => observer.disconnect();\n }, []);\n\n if (isHidden) return null;\n\n return (\n <div\n {...dropIndicatorProps}\n ref={ref}\n data-element=\"ColumnDropIndicator\"\n data-position={dropPosition}\n data-drop-target={isDropTarget ? '' : undefined}\n />\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAqBA,MAAM,mBACJ;AAcF,SAAS,WACP,OACA;CACA,MAAM,EAAE,WAAW,OAAO,aAAa;AAEvC,QACE,oBAAC;EAAG,GAAI;EAAW,GAAI;EACpB;GACE;;;;;;;;AAUT,SAAS,oBAAoB,OAA6B;CACxD,MAAM,EAAE,WAAW,WAAW,iBAAiB,WAAW,cAAc;CAExE,MAAM,EAAE,WAAW,eAAe,iBAIhC;EAAE,KAAK;EAAW;EAAW,EAC7B,UACD;AAED,QACE,qBAAC;EACC,GAAI;EACJ,OAAO;GAIL,GAAGA,aAAW,MAAM,WAAW,WAAW,EAGxC,qBAAqB,UAAe;AAClC,QAAK,MAAM,QAAwB,UAAU,iBAAiB,EAAE;AAC9D,WAAM,gBAAgB;AACtB,WAAM,iBAAiB;;MAG5B,CAAC;GACF,kBAAkB;GAClB,iBAAiB,aAAa,KAAK;GACpC;;GAED,oBAAC;IACY;IACX,cAAa;IACF;KACX;GACD,MAAM;GACN,kBACC,oBAAC;IACY;IACX,cAAa;IACF;KACX,GACA;;GACO;;AAIjB,SAAgB,gBAAgB,OAA6B;AAC3D,QAAO,MAAM,aAAa,MAAM,YAC9B,oBAAC,uBAAoB,GAAI,QAAS,GAElC,oBAAC,cAAW,GAAI,QAAS;;;;;;;;;;;;;AAqB7B,SAAS,oBAAoB,EAC3B,WACA,cACA,aAC2B;CAC3B,MAAM,MAAM,OAAuB,KAAK;CACxC,MAAM,EAAE,oBAAoB,UAAU,iBAAiB,iBACrD,EAAE,QAAQ;EAAE,MAAM;EAAQ,KAAK;EAAW;EAAc,EAAE,EAC1D,WACA,IACD;;;;;;;;;CAUD,MAAM,GAAG,eAAe,SAAS,EAAE;AAEnC,iBAAgB;EACd,MAAM,MAAM,IAAI,SAAS,QAAQ,6BAA2B;AAE5D,MAAI,CAAC,OAAO,OAAO,mBAAmB,YAAa;EAEnD,MAAM,WAAW,IAAI,qBAAqB,aAAa,MAAM,IAAI,EAAE,CAAC;AAEpE,WAAS,QAAQ,IAAI;AAErB,eAAa,SAAS,YAAY;IACjC,EAAE,CAAC;AAEN,KAAI,SAAU,QAAO;AAErB,QACE,oBAAC;EACC,GAAI;EACC;EACL,gBAAa;EACb,iBAAe;EACf,oBAAkB,eAAe,KAAK;GACtC"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.157.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.159.0 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useRef } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,25 +1,33 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.157.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.159.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
4
4
  import { TextItem } from "../../content/TextItem/TextItem.js";
5
5
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
6
6
  import { useI18n } from "../../../i18n/useI18n.js";
7
- import { UpIcon } from "../../../icons/UpIcon.js";
7
+ import { ArrowNarrowDownIcon } from "../../../icons/ArrowNarrowDownIcon.js";
8
+ import { ArrowNarrowUpIcon } from "../../../icons/ArrowNarrowUpIcon.js";
8
9
  import { MoreIcon } from "../../../icons/MoreIcon.js";
9
10
  import { _MenuTrigger } from "../../actions/Menu/MenuTrigger.js";
10
11
  import { __Menu } from "../../actions/Menu/Menu.js";
11
12
  import { Action } from "../../actions/Action/Action.js";
12
13
  import { useContextMenu } from "../../actions/use-context-menu.js";
13
14
  import { useToast } from "../../overlays/Toast/useToast.js";
15
+ import { usePaletteVersion } from "../../../tokens/palette-config.js";
16
+ import { SIZES, SIZE_NAME_TO_KEY } from "../../../tokens/sizes.js";
17
+ import { getColorTheme, useColorTheme } from "../../../tokens/color-theme.js";
14
18
  import { __Checkbox } from "../../fields/Checkbox/Checkbox.js";
15
19
  import { Placeholder } from "../../content/Placeholder/Placeholder.js";
16
20
  import { Skeleton } from "../../content/Skeleton/Skeleton.js";
17
- import { ColumnResizer } from "./ColumnResizer.js";
18
21
  import { ROW_MENU_COLUMN_KEY, isMenuEmpty, normalizeMenuAction } from "./row-menu.js";
22
+ import { COLUMN_MENU_SORT_DIRECTION, isColumnMenuSortKey, processColumnMenuItems } from "./column-menu.js";
23
+ import { buildColumnTints, tintSlot } from "./column-tint.js";
24
+ import { ColumnResizer } from "./ColumnResizer.js";
19
25
  import { TableElement, TableHeaderItem } from "./styled.js";
26
+ import { TableHeaderCell } from "./TableHeaderCell.js";
20
27
  import { TableRow, TableRowDropIndicator } from "./TableRow.js";
21
28
  import { selectionRowKey } from "./types.js";
22
29
  import { toTsv } from "./use-cell-selection.js";
30
+ import { getDraggableColumnKeys, isColumnDraggable } from "./use-column-order.js";
23
31
  import { useRowMoveAnimation } from "./use-row-move-animation.js";
24
32
  import { useScrollability } from "./use-scrollability.js";
25
33
  import { getColumnText, getColumnValue } from "./use-table-columns.js";
@@ -48,6 +56,23 @@ const ARIA_SORT = {
48
56
  desc: "descending"
49
57
  };
50
58
  /**
59
+ * Registers one column tint's tokens.
60
+ *
61
+ * A component per theme rather than a loop of `useColorTheme` calls: the number
62
+ * of tinted columns is data-dependent, and hooks cannot be called in a loop. Each
63
+ * of these has a fixed hook count, and mounting a different NUMBER of them is
64
+ * fine. Keyed on the theme name, so remounting only happens when the set of
65
+ * colours actually changes.
66
+ *
67
+ * Renders nothing — `useColorTheme` injects into a global slot keyed by the
68
+ * theme's own hash, so two tables sharing a colour share one injection and
69
+ * neither can evict the other's.
70
+ */
71
+ function ColumnTintRegistrar({ config }) {
72
+ useColorTheme(config);
73
+ return null;
74
+ }
75
+ /**
51
76
  * Content height per size step, mirroring `$row-height` in `styled.ts`. Only the
52
77
  * initial estimate — every rendered row is measured, so a wrong guess costs a
53
78
  * scrollbar adjustment, not a layout bug. The `+ 1` is the row separator.
@@ -83,13 +108,32 @@ function pinStyle(column) {
83
108
  * bookkeeping and the tasty sub-element contract have a single implementation.
84
109
  */
85
110
  function TableView(props) {
86
- const { qa, rows, getRowKey, layout, onScrollerRef, rootRef, size = "medium", shape = "plain", rowHeight, headerHeight, isHeaderHidden = false, isStriped = false, hasColumnDividers, isRowMoveAnimated = true, isHeaderSticky = true, isVirtualized = "auto", virtualizeThreshold = 50, overscan = 20, isLoading = false, loadingIndicator = "overlay", skeletonRowCount = 6, selection, selectionTooltip, overlay, rowMenu, rowContextMenu = false, onRowMenuAction, rowMenuTriggerProps, rowLink, onRowAction, onLoadMore, hasMore = false, isLoadingMore = false, loadMoreMargin, pinnedTopRows, pinnedBottomRows, cellSelection, rowNumberOffset = 0, rowIndexOffset = 0, totalRowCount, isReorderable = false, dragState, dropState, collectionProps, bodyRef, isResizable = false, onColumnResize, onColumnResizeEnd, emptyLabel, noResultsLabel, error, isFiltered = false, sortMode = "off", sort, sorts, onColumnSort, getRowProps, headerPreset, contentPreset, toolbar, footer, ariaLabel, styles, headerStyles, headerCellStyles, bodyStyles, rowStyles, cellStyles, mods } = props;
111
+ const { qa, rows, getRowKey, layout, onScrollerRef, rootRef, size = "medium", shape = "plain", rowSize, rowHeight, headerHeight, isHeaderHidden = false, isStriped = false, hasColumnDividers, isRowMoveAnimated = true, isHeaderSticky = true, isVirtualized = "auto", virtualizeThreshold = 50, overscan = 20, isLoading = false, loadingIndicator = "overlay", skeletonRowCount = 6, selection, selectionTooltip, overlay, rowMenu, rowContextMenu = false, onRowMenuAction, rowMenuTriggerProps, rowLink, onRowAction, onLoadMore, hasMore = false, isLoadingMore = false, loadMoreMargin, pinnedTopRows, pinnedBottomRows, cellSelection, rowNumberOffset = 0, rowIndexOffset = 0, totalRowCount, isReorderable = false, dragState, dropState, collectionProps, isColumnReorderable = false, columnDragState, columnDropState, headCollectionProps, headRowRef, onColumnFocus, bodyRef, isResizable = false, onColumnResize, onColumnResizeEnd, emptyLabel, noResultsLabel, error, isFiltered = false, sortMode = "off", sort, sorts, onColumnSort, onColumnSortChange, columnContextMenu = true, onColumnMenuAction, columnMenuTriggerProps, columnMenuProps, getRowProps, headerPreset, contentPreset, toolbar, footer, ariaLabel, styles, headerStyles, headerCellStyles, bodyStyles, rowStyles, cellStyles, mods } = props;
87
112
  const { columns } = layout;
88
113
  const columnCount = columns.length;
114
+ /**
115
+ * `rowSize` resolved to the size scale, or `null` when it was not given.
116
+ *
117
+ * Both halves come from `SIZE_NAME_TO_KEY` rather than being written out
118
+ * twice: the CSS keeps the token so it follows the scale, and the virtualizer
119
+ * needs the number, and the two must not drift.
120
+ */
121
+ const rowSizeKey = rowSize ? SIZE_NAME_TO_KEY[rowSize] : null;
122
+ const lastDraggableKey = isColumnReorderable ? getDraggableColumnKeys(columns, true).at(-1) ?? null : null;
89
123
  const { t } = useI18n();
90
124
  const toast = useToast();
91
125
  const [scrollerEl, setScrollerEl] = useState(null);
92
126
  const scrollerRef = useRef(null);
127
+ /**
128
+ * The column whose menu is open, held for the whole table rather than per
129
+ * header cell.
130
+ *
131
+ * `renderHeaderCell` is a closure inside this component, not a component of
132
+ * its own, so it cannot hold state — and only one column menu can be open at a
133
+ * time anyway. Controlled rather than letting `MenuTrigger` own it: Shift+F10
134
+ * has to be able to open it from the `<th>`, and the trigger is not a tab stop.
135
+ */
136
+ const [openMenuColumnKey, setOpenMenuColumnKey] = useState(null);
93
137
  const localBodyRef = useRef(null);
94
138
  const handleBodyRef = useCallback((element) => {
95
139
  localBodyRef.current = element;
@@ -108,18 +152,23 @@ function TableView(props) {
108
152
  const bodyRowIndex = (rowIndex) => headerRowCount + pinnedTopCount + rowIndexOffset + rowIndex + 1;
109
153
  /** 1-based `aria-rowindex` for the i-th pinned row at `edge`. */
110
154
  const pinnedRowIndex = (index, edge) => edge === "top" ? headerRowCount + index + 1 : headerRowCount + pinnedTopCount + bodyRowCount + index + 1;
155
+ const tints = useMemo(() => buildColumnTints(columns, { resolveTheme: getColorTheme }), [columns, usePaletteVersion()]);
111
156
  const mergedStyles = useMemo(() => ({
112
157
  ...styles,
113
158
  ...contentPreset ? { Table: { preset: contentPreset } } : null,
114
159
  ...headerStyles ? { HeadRow: headerStyles } : null,
115
- ...headerPreset || headerCellStyles ? { HeaderCell: {
160
+ ...headerPreset || headerCellStyles || tints.headerCellStyles ? { HeaderCell: {
116
161
  ...headerPreset ? { preset: headerPreset } : null,
162
+ ...tints.headerCellStyles,
117
163
  ...headerCellStyles
118
164
  } } : null,
119
165
  ...bodyStyles ? { Body: bodyStyles } : null,
120
166
  ...rowStyles ? { Row: rowStyles } : null,
121
- ...cellStyles ? { Cell: cellStyles } : null,
122
- ...rowHeight != null ? { "$row-height": `${rowHeight}px` } : null,
167
+ ...cellStyles || tints.cellStyles ? { Cell: {
168
+ ...tints.cellStyles,
169
+ ...cellStyles
170
+ } } : null,
171
+ ...rowHeight != null ? { "$row-height": `${rowHeight}px` } : rowSizeKey ? { "$row-height": `$size-${rowSizeKey.toLowerCase()}` } : null,
123
172
  ...headerHeight != null ? { "$header-height": `${headerHeight}px` } : null
124
173
  }), [
125
174
  styles,
@@ -130,8 +179,10 @@ function TableView(props) {
130
179
  bodyStyles,
131
180
  rowStyles,
132
181
  cellStyles,
182
+ rowSizeKey,
133
183
  rowHeight,
134
- headerHeight
184
+ headerHeight,
185
+ tints
135
186
  ]);
136
187
  /**
137
188
  * Whether a cell is inside the current range.
@@ -212,6 +263,21 @@ function TableView(props) {
212
263
  if (column.index === 0) return "start";
213
264
  if (column.index === columns.length - 1) return "end";
214
265
  }
266
+ /**
267
+ * The row band, mirrored from the `<tr>` onto its cells.
268
+ *
269
+ * `Row` already carries `data-odd` and publishes `#row-base` from it, which is
270
+ * all an untinted cell needs. A TINTED cell has to pick its own band, and a
271
+ * sub-element's state keys resolve against the table root rather than its DOM
272
+ * parent — so the flag has to be on the cell itself. Same reason `data-pinned`
273
+ * is mirrored.
274
+ *
275
+ * Pinned rows are exempt: they carry no `data-odd` on the `<tr>` either, and
276
+ * banding a totals row would be wrong.
277
+ */
278
+ function cellBandFlag(rowIndex, pinnedEdge) {
279
+ return pinnedEdge == null && isStriped && rowIndex % 2 === 1 ? "" : void 0;
280
+ }
215
281
  function renderStateRow(content) {
216
282
  return /* @__PURE__ */ jsx("tr", {
217
283
  "data-element": "Row",
@@ -290,6 +356,7 @@ function TableView(props) {
290
356
  "data-pin-edge": column.isPinEdge ? "" : void 0,
291
357
  "data-last-row": isLastRow ? "" : void 0,
292
358
  "data-pinned": pinnedEdge,
359
+ "data-odd": cellBandFlag(rowIndex, pinnedEdge),
293
360
  "data-last-column": lastColumnFlag(column),
294
361
  "data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
295
362
  role: "gridcell",
@@ -316,6 +383,7 @@ function TableView(props) {
316
383
  "data-pin-edge": column.isPinEdge ? "" : void 0,
317
384
  "data-last-row": isLastRow ? "" : void 0,
318
385
  "data-pinned": pinnedEdge,
386
+ "data-odd": cellBandFlag(rowIndex, pinnedEdge),
319
387
  "data-last-column": lastColumnFlag(column),
320
388
  "data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
321
389
  role: "gridcell",
@@ -383,12 +451,33 @@ function TableView(props) {
383
451
  "data-sorted": isSorted ? "" : void 0,
384
452
  "data-dir": activeSort?.direction,
385
453
  "aria-hidden": "true",
386
- children: /* @__PURE__ */ jsx(UpIcon, {})
454
+ children: activeSort?.direction === "desc" ? /* @__PURE__ */ jsx(ArrowNarrowDownIcon, {}) : /* @__PURE__ */ jsx(ArrowNarrowUpIcon, {})
387
455
  }) : null;
388
456
  const hasCustomRightIcon = header?.rightIcon != null;
389
457
  const rightIcon = hasCustomRightIcon ? header.rightIcon : sortIndicator;
390
458
  const suffixContent = hasCustomRightIcon ? sortIndicator : null;
391
459
  const suffix = header?.suffix != null || suffixContent ? /* @__PURE__ */ jsxs(Fragment$1, { children: [header?.suffix, suffixContent] }) : void 0;
460
+ const menuItems = resolveColumnMenu(column);
461
+ const hasMenu = menuItems != null;
462
+ const isContextOnly = columnContextMenu === "context-only";
463
+ const menuAction = hasMenu && !isContextOnly ? /* @__PURE__ */ jsxs(_MenuTrigger, {
464
+ isOpen: openMenuColumnKey === column.key,
465
+ placement: "bottom end",
466
+ onOpenChange: (open) => setOpenMenuColumnKey(open ? column.key : null),
467
+ children: [/* @__PURE__ */ jsx(ItemAction, {
468
+ tabIndex: -1,
469
+ icon: /* @__PURE__ */ jsx(MoreIcon, {}),
470
+ "aria-label": t("itemTable.columnMenu", "Column menu"),
471
+ ...columnMenuTriggerProps,
472
+ ...header?.menuTriggerProps
473
+ }), /* @__PURE__ */ jsx(__Menu, {
474
+ ...columnMenuProps,
475
+ ...header?.menuProps,
476
+ onAction: columnMenuActionHandler(column, false),
477
+ children: processColumnMenuItems(menuItems, columnMenuContext(column, isSortable, activeSort))
478
+ })]
479
+ }) : null;
480
+ const actions = header?.actions != null || menuAction ? /* @__PURE__ */ jsxs(Fragment$1, { children: [header?.actions, menuAction] }) : void 0;
392
481
  const content = header?.render ? header.render(ctx) : column.title == null && !header ? null : /* @__PURE__ */ jsx(TableHeaderItem, {
393
482
  icon: header?.icon,
394
483
  rightIcon,
@@ -398,33 +487,57 @@ function TableView(props) {
398
487
  descriptionPlacement: header?.descriptionPlacement,
399
488
  tooltip: header?.tooltip ?? true,
400
489
  theme: header?.theme,
401
- actions: header?.actions,
490
+ actions,
402
491
  autoHideActions: header?.autoHideActions ?? true,
492
+ preserveActionsSpace: actions != null,
403
493
  styles: header?.styles,
404
494
  children: column.title
405
495
  });
406
- return /* @__PURE__ */ jsxs("th", {
407
- "data-element": "HeaderCell",
408
- "data-key": column.key,
409
- "data-pin": column.pin,
410
- "data-pin-edge": column.isPinEdge ? "" : void 0,
411
- "data-align": header?.align ?? column.align,
412
- "data-sortable": isSortable ? "" : void 0,
413
- "data-resizable": canResize ? "" : void 0,
414
- "data-last-column": lastColumnFlag(column),
415
- "data-sorted": isSorted ? "" : void 0,
416
- role: "columnheader",
417
- scope: "col",
418
- tabIndex: isSortable ? 0 : -1,
419
- "aria-colindex": column.ariaColIndex,
420
- "aria-sort": activeSort ? ARIA_SORT[activeSort.direction] : void 0,
421
- style: pinStyle(column),
422
- onClick: isSortable ? () => onColumnSort?.(column.key) : void 0,
423
- onKeyDown: isSortable ? (event) => {
424
- if (event.key !== "Enter" && event.key !== " ") return;
425
- event.preventDefault();
426
- onColumnSort?.(column.key);
427
- } : void 0,
496
+ const isDraggable = isColumnDraggable(column, isColumnReorderable);
497
+ return /* @__PURE__ */ jsxs(TableHeaderCell, {
498
+ columnKey: column.key,
499
+ hasAction: isSortable,
500
+ isLastDraggable: isDraggable && column.key === lastDraggableKey,
501
+ dragState: isDraggable ? columnDragState : void 0,
502
+ dropState: isDraggable ? columnDropState : void 0,
503
+ cellProps: {
504
+ "data-element": "HeaderCell",
505
+ "data-key": column.key,
506
+ "data-pin": column.pin,
507
+ "data-pin-edge": column.isPinEdge ? "" : void 0,
508
+ "data-align": header?.align ?? column.align,
509
+ "data-sortable": isSortable ? "" : void 0,
510
+ "data-resizable": canResize ? "" : void 0,
511
+ "data-last-column": lastColumnFlag(column),
512
+ "data-sorted": isSorted ? "" : void 0,
513
+ "data-menu-open": openMenuColumnKey === column.key ? "" : void 0,
514
+ "data-tint": tintSlot(tints, column.key, "header"),
515
+ role: "columnheader",
516
+ scope: "col",
517
+ tabIndex: isSortable || hasMenu || isDraggable ? 0 : -1,
518
+ "aria-colindex": column.ariaColIndex,
519
+ "aria-sort": activeSort ? ARIA_SORT[activeSort.direction] : void 0,
520
+ "aria-haspopup": hasMenu ? "menu" : void 0,
521
+ style: pinStyle(column),
522
+ onFocus: isColumnReorderable ? () => onColumnFocus?.(isDraggable ? column.key : null) : void 0,
523
+ onClick: isSortable ? () => onColumnSort?.(column.key) : void 0,
524
+ onContextMenu: hasMenu ? (event) => openColumnContextMenu(column, isSortable, activeSort, event) : void 0,
525
+ onKeyDown: isSortable || hasMenu ? (event) => {
526
+ if (event.key === "F10" && event.shiftKey && hasMenu) {
527
+ if (isContextOnly) openColumnContextMenu(column, isSortable, activeSort, event);
528
+ else {
529
+ event.preventDefault();
530
+ event.stopPropagation();
531
+ setOpenMenuColumnKey(column.key);
532
+ }
533
+ return;
534
+ }
535
+ if (!isSortable) return;
536
+ if (event.key !== "Enter" && event.key !== " ") return;
537
+ event.preventDefault();
538
+ onColumnSort?.(column.key);
539
+ } : void 0
540
+ },
428
541
  children: [content, canResize ? /* @__PURE__ */ jsx(ColumnResizer, {
429
542
  column,
430
543
  label: t("itemTable.resizeColumn", "Resize column"),
@@ -442,6 +555,7 @@ function TableView(props) {
442
555
  "data-kind": "row-number",
443
556
  "data-last-row": isLastRow ? "" : void 0,
444
557
  "data-pinned": pinnedEdge,
558
+ "data-odd": cellBandFlag(rowIndex, pinnedEdge),
445
559
  "data-last-column": lastColumnFlag(column),
446
560
  "data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
447
561
  role: "gridcell",
@@ -476,6 +590,8 @@ function TableView(props) {
476
590
  "data-link": link !== void 0 ? "" : void 0,
477
591
  "data-last-row": isLastRow ? "" : void 0,
478
592
  "data-pinned": pinnedEdge,
593
+ "data-odd": cellBandFlag(rowIndex, pinnedEdge),
594
+ "data-tint": tintSlot(tints, column.key, pinnedEdge == null ? "body" : "totals"),
479
595
  "data-last-column": lastColumnFlag(column),
480
596
  "data-corner": bottomCornerFlag(column, rowIndex, isLastRow, pinnedEdge),
481
597
  "data-cell-selected": isCellSelected(rangeKey, column.key) ? "" : void 0,
@@ -619,7 +735,7 @@ function TableView(props) {
619
735
  count: shouldVirtualize ? rows.length : 0,
620
736
  getScrollElement: () => scrollerRef.current,
621
737
  getItemKey: (index) => String(getRowKey(rowsRef.current[index], index)),
622
- estimateSize: () => (rowHeight ?? ESTIMATED_ROW_HEIGHT[size ?? "medium"]) + 1,
738
+ estimateSize: () => (rowHeight ?? (rowSizeKey ? SIZES[rowSizeKey] : ESTIMATED_ROW_HEIGHT[size ?? "medium"])) + 1,
623
739
  measureElement: (element) => element.getBoundingClientRect().height,
624
740
  overscan
625
741
  });
@@ -744,6 +860,45 @@ function TableView(props) {
744
860
  onAction: menuActionHandler(row, rowKey, true)
745
861
  }, void 0, "clientX" in event.nativeEvent ? event.nativeEvent : void 0);
746
862
  });
863
+ function resolveColumnMenu(column) {
864
+ if (columnContextMenu === false || column.isStructural) return null;
865
+ const items = column.header?.menu;
866
+ return isMenuEmpty(items) ? null : items;
867
+ }
868
+ /** The reserved sort keys, labelled here so `column-menu.ts` stays pure. */
869
+ function columnMenuContext(column, isSortable, activeSort) {
870
+ return {
871
+ isSortable,
872
+ sort: activeSort?.direction ?? null,
873
+ disallowSortRemoval: column.disallowSortRemoval === true,
874
+ labels: {
875
+ "sort-asc": t("itemTable.sortAscending", "Sort ascending"),
876
+ "sort-desc": t("itemTable.sortDescending", "Sort descending"),
877
+ "clear-sort": t("itemTable.clearSort", "Clear sort")
878
+ }
879
+ };
880
+ }
881
+ function columnMenuActionHandler(column, closeAfter) {
882
+ return (action) => {
883
+ const normalized = normalizeMenuAction(action);
884
+ if (isColumnMenuSortKey(normalized)) onColumnSortChange?.(column.key, COLUMN_MENU_SORT_DIRECTION[normalized]);
885
+ column.header?.onMenuAction?.(normalized);
886
+ onColumnMenuAction?.(normalized, column.key);
887
+ if (closeAfter) contextMenu.close();
888
+ };
889
+ }
890
+ const openColumnContextMenu = useEvent((column, isSortable, activeSort, event) => {
891
+ const items = resolveColumnMenu(column);
892
+ if (items == null) return;
893
+ event.preventDefault();
894
+ event.stopPropagation();
895
+ contextMenu.open({
896
+ ...columnMenuProps,
897
+ ...column.header?.menuProps,
898
+ children: processColumnMenuItems(items, columnMenuContext(column, isSortable, activeSort)),
899
+ onAction: columnMenuActionHandler(column, true)
900
+ }, void 0, "clientX" in event.nativeEvent ? event.nativeEvent : void 0);
901
+ });
747
902
  /** Resolves the row a pointer or keyboard event landed in. */
748
903
  function rowFromEvent(target) {
749
904
  const element = target?.closest?.("tr[data-element=\"Row\"][data-key]");
@@ -764,6 +919,12 @@ function TableView(props) {
764
919
  "data-element": "HeadRow",
765
920
  role: "row",
766
921
  "aria-rowindex": 1,
922
+ ref: headRowRef,
923
+ ...headCollectionProps,
924
+ onKeyDownCapture: (event) => {
925
+ if (event.target?.closest?.("[data-element=\"Resizer\"]")) return;
926
+ headCollectionProps?.onKeyDownCapture?.(event);
927
+ },
767
928
  children: columns.map(renderHeaderCell)
768
929
  });
769
930
  const tableProps = {
@@ -911,6 +1072,7 @@ function TableView(props) {
911
1072
  }) }),
912
1073
  overlay,
913
1074
  contextMenu.rendered,
1075
+ tints.configs.map((config, index) => /* @__PURE__ */ jsx(ColumnTintRegistrar, { config }, index)),
914
1076
  footer
915
1077
  ]
916
1078
  });