@cube-dev/ui-kit 0.0.0-canary-34ce1a4 → 0.0.0-canary-7dc6906

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 (564) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +10 -4
  19. package/dist/components/actions/Button/Button.js.map +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/index.js +1 -1
  38. package/dist/components/actions/use-action.js +1 -1
  39. package/dist/components/actions/use-anchored-menu.js +1 -1
  40. package/dist/components/actions/use-context-menu.js +1 -1
  41. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  42. package/dist/components/content/Alert/Alert.js +1 -1
  43. package/dist/components/content/Alert/use-alert.js +1 -1
  44. package/dist/components/content/Avatar/Avatar.js +1 -1
  45. package/dist/components/content/Badge/Badge.js +1 -1
  46. package/dist/components/content/Card/Card.js +1 -1
  47. package/dist/components/content/Content.js +1 -1
  48. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  49. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  50. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  51. package/dist/components/content/Divider.js +1 -1
  52. package/dist/components/content/Footer.js +1 -1
  53. package/dist/components/content/Header.js +1 -1
  54. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  55. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  56. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  57. package/dist/components/content/Item/Item.d.ts +7 -0
  58. package/dist/components/content/Item/Item.js +13 -6
  59. package/dist/components/content/Item/Item.js.map +1 -1
  60. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  61. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  62. package/dist/components/content/Layout/GridLayout.js +1 -1
  63. package/dist/components/content/Layout/Layout.js +1 -1
  64. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  65. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  66. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  67. package/dist/components/content/Layout/LayoutContent.js +1 -1
  68. package/dist/components/content/Layout/LayoutContext.js +1 -1
  69. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  70. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  71. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  72. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutPane.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  77. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  78. package/dist/components/content/Layout/index.js +1 -1
  79. package/dist/components/content/Layout/utils.js +1 -1
  80. package/dist/components/content/Paragraph.js +1 -1
  81. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  82. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  83. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  84. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  85. package/dist/components/content/Result/Result.js +1 -1
  86. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  87. package/dist/components/content/Tag/Tag.js +1 -1
  88. package/dist/components/content/Text.d.ts +14 -14
  89. package/dist/components/content/Text.js +1 -1
  90. package/dist/components/content/TextItem/TextItem.js +1 -1
  91. package/dist/components/content/Title.js +1 -1
  92. package/dist/components/content/Tree/Tree.js +1 -1
  93. package/dist/components/content/Tree/TreeNode.js +1 -1
  94. package/dist/components/content/Tree/styled.js +1 -1
  95. package/dist/components/content/Tree/tree-index.js +1 -1
  96. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  97. package/dist/components/content/Tree/use-load-data.js +1 -1
  98. package/dist/components/content/highlightText.js +1 -1
  99. package/dist/components/content/use-auto-tooltip.js +41 -32
  100. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  101. package/dist/components/data/DataTable/DataTable.js +24 -82
  102. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  103. package/dist/components/data/DataTable/types.d.ts +1 -56
  104. package/dist/components/data/ItemTable/ItemTable.js +5 -13
  105. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  106. package/dist/components/data/ItemTable/ItemTableBulkBar.js +3 -7
  107. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
  108. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  110. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  111. package/dist/components/data/ItemTable/types.d.ts +0 -19
  112. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  113. package/dist/components/data/TableBase/RowCollection.js +3 -5
  114. package/dist/components/data/TableBase/RowCollection.js.map +1 -1
  115. package/dist/components/data/TableBase/TableRow.js +1 -1
  116. package/dist/components/data/TableBase/TableView.js +31 -192
  117. package/dist/components/data/TableBase/TableView.js.map +1 -1
  118. package/dist/components/data/TableBase/index.d.ts +2 -3
  119. package/dist/components/data/TableBase/row-menu.js +6 -11
  120. package/dist/components/data/TableBase/row-menu.js.map +1 -1
  121. package/dist/components/data/TableBase/styled.js +11 -44
  122. package/dist/components/data/TableBase/styled.js.map +1 -1
  123. package/dist/components/data/TableBase/types.d.ts +6 -104
  124. package/dist/components/data/TableBase/types.js +1 -1
  125. package/dist/components/data/TableBase/types.js.map +1 -1
  126. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  127. package/dist/components/data/TableBase/use-container-width.js +1 -1
  128. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  129. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  130. package/dist/components/data/TableBase/use-table-columns.js +2 -24
  131. package/dist/components/data/TableBase/use-table-columns.js.map +1 -1
  132. package/dist/components/data/TableBase/use-table-search.js +1 -1
  133. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  134. package/dist/components/data/TableBase/use-table-sort.js +1 -20
  135. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  136. package/dist/components/data/TableBase/use-table-sorts.js +1 -40
  137. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  138. package/dist/components/data/TableBase/use-table-storage.d.ts +1 -1
  139. package/dist/components/data/TableBase/use-table-storage.js +2 -6
  140. package/dist/components/data/TableBase/use-table-storage.js.map +1 -1
  141. package/dist/components/data/index.d.ts +1 -2
  142. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  143. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  144. package/dist/components/fields/Checkbox/context.js +1 -1
  145. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  146. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  147. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  148. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  149. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  150. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  151. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  152. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  153. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  154. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  155. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  156. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  157. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  158. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  159. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  160. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  161. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  162. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  163. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  164. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  165. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  166. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  167. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  168. package/dist/components/fields/DatePicker/period.js +1 -1
  169. package/dist/components/fields/DatePicker/props.js +1 -1
  170. package/dist/components/fields/DatePicker/utils.js +1 -1
  171. package/dist/components/fields/FileInput/FileInput.js +1 -1
  172. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  173. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  174. package/dist/components/fields/Input/Input.js +1 -1
  175. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  176. package/dist/components/fields/ListBox/ListBox.js +1 -1
  177. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  178. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  179. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  180. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  181. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  182. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  183. package/dist/components/fields/Picker/Picker.js +1 -1
  184. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  185. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  186. package/dist/components/fields/RadioGroup/context.js +1 -1
  187. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  188. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  189. package/dist/components/fields/Select/Select.js +1 -1
  190. package/dist/components/fields/Slider/Gradation.js +1 -1
  191. package/dist/components/fields/Slider/HueSlider.js +1 -1
  192. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  193. package/dist/components/fields/Slider/Slider.js +1 -1
  194. package/dist/components/fields/Slider/SliderBase.js +1 -1
  195. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  196. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  197. package/dist/components/fields/Slider/elements.js +1 -1
  198. package/dist/components/fields/Slider/index.js +1 -1
  199. package/dist/components/fields/Switch/Switch.js +1 -1
  200. package/dist/components/fields/TextArea/TextArea.js +1 -1
  201. package/dist/components/fields/TextInput/TextInput.js +1 -1
  202. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  203. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  204. package/dist/components/fields/color/ColorPanel.js +1 -1
  205. package/dist/components/fields/color/ColorSwatch.js +1 -1
  206. package/dist/components/fields/color/channels.js +1 -1
  207. package/dist/components/fields/color/color.js +1 -1
  208. package/dist/components/fields/color/context.js +1 -1
  209. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  210. package/dist/components/form/Form/Field.js +1 -1
  211. package/dist/components/form/Form/Form.js +1 -1
  212. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  213. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  214. package/dist/components/form/Form/SubmitError.js +1 -1
  215. package/dist/components/form/Form/index.js +1 -1
  216. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  217. package/dist/components/form/Form/use-field/use-field.js +1 -1
  218. package/dist/components/form/Form/use-form.js +1 -1
  219. package/dist/components/form/Form/validation.js +1 -1
  220. package/dist/components/form/Label.js +1 -1
  221. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  222. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  223. package/dist/components/form/validation/use-validation-props.js +1 -1
  224. package/dist/components/form/wrapper.js +1 -1
  225. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  226. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  227. package/dist/components/layout/Board/Board.js +1 -1
  228. package/dist/components/layout/Board/BoardProvider.js +1 -1
  229. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  230. package/dist/components/layout/Board/Widget.js +1 -1
  231. package/dist/components/layout/Board/WidgetHost.js +1 -1
  232. package/dist/components/layout/Board/board-context.js +1 -1
  233. package/dist/components/layout/Board/board-store.js +1 -1
  234. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  235. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  236. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  237. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  238. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  239. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  240. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  241. package/dist/components/layout/Board/index.js +1 -1
  242. package/dist/components/layout/Board/responsive-utils.js +1 -1
  243. package/dist/components/layout/Board/use-board-layout.js +1 -1
  244. package/dist/components/layout/Board/use-board-registry.js +1 -1
  245. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  246. package/dist/components/layout/Board/use-board-selection.js +1 -1
  247. package/dist/components/layout/Flex.js +1 -1
  248. package/dist/components/layout/Flow.js +1 -1
  249. package/dist/components/layout/Grid.js +1 -1
  250. package/dist/components/layout/Panel.js +1 -1
  251. package/dist/components/layout/Prefix.js +1 -1
  252. package/dist/components/layout/ResizablePanel.js +1 -1
  253. package/dist/components/layout/Space.js +1 -1
  254. package/dist/components/layout/Suffix.js +1 -1
  255. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  256. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  257. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  258. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  259. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  260. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  261. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  262. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  263. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  264. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  265. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  266. package/dist/components/navigation/Tabs/styled.js +1 -1
  267. package/dist/components/navigation/Tabs/types.js +1 -1
  268. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  269. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  270. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  271. package/dist/components/other/Calendar/Calendar.js +1 -1
  272. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  273. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  274. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  275. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  276. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  277. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  278. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  279. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  280. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  281. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  282. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  283. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  284. package/dist/components/overlays/Dialog/context.js +1 -1
  285. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  286. package/dist/components/overlays/Modal/Modal.js +1 -1
  287. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  288. package/dist/components/overlays/Modal/Overlay.js +1 -1
  289. package/dist/components/overlays/Modal/Popover.js +1 -1
  290. package/dist/components/overlays/Modal/Tray.js +1 -1
  291. package/dist/components/overlays/Modal/Underlay.js +1 -1
  292. package/dist/components/overlays/Notifications/Notification.js +1 -1
  293. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  294. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  295. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  296. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  297. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  298. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  299. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  300. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  301. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  302. package/dist/components/overlays/Notifications/index.js +1 -1
  303. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  304. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  305. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  306. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  307. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  308. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  309. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  310. package/dist/components/overlays/Toast/index.js +1 -1
  311. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  312. package/dist/components/overlays/Toast/useToast.js +1 -1
  313. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  314. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  315. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  316. package/dist/components/overlays/Tooltip/context.js +1 -1
  317. package/dist/components/portal/Portal.js +1 -1
  318. package/dist/components/portal/PortalProvider.js +1 -1
  319. package/dist/components/portal/usePortal.js +1 -1
  320. package/dist/components/shared/DraggableCollection.js +1 -1
  321. package/dist/components/shared/InvalidIcon.js +1 -1
  322. package/dist/components/shared/ValidIcon.js +1 -1
  323. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  324. package/dist/components/status/Spin/Cube.js +1 -1
  325. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  326. package/dist/components/status/Spin/Spin.js +1 -1
  327. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  328. package/dist/data/item-themes.js +1 -1
  329. package/dist/data/themes.js +1 -1
  330. package/dist/eslint-plugin/defaults.generated.js +1 -13
  331. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  332. package/dist/eslint-plugin/index.js +1 -1
  333. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  334. package/dist/i18n/I18nProvider.js +1 -1
  335. package/dist/i18n/createFormatter.js +1 -1
  336. package/dist/i18n/index.js +1 -1
  337. package/dist/i18n/instance.js +1 -1
  338. package/dist/i18n/locales/de-DE/uikit.js +1 -5
  339. package/dist/i18n/locales/en-US/uikit.js +1 -5
  340. package/dist/i18n/locales/en-US/uikit.json.d.ts +0 -4
  341. package/dist/i18n/locales/es-ES/uikit.js +1 -5
  342. package/dist/i18n/locales/es-MX/uikit.js +1 -5
  343. package/dist/i18n/locales/fr-FR/uikit.js +1 -5
  344. package/dist/i18n/locales/it-IT/uikit.js +1 -5
  345. package/dist/i18n/locales/ja-JP/uikit.js +1 -5
  346. package/dist/i18n/locales/nb-NO/uikit.js +1 -5
  347. package/dist/i18n/locales/pt-BR/uikit.js +1 -5
  348. package/dist/i18n/locales/pt-PT/uikit.js +1 -5
  349. package/dist/i18n/locales/sv-SE/uikit.js +1 -5
  350. package/dist/i18n/locales/vi-VN/uikit.js +1 -5
  351. package/dist/i18n/locales.js +1 -1
  352. package/dist/i18n/useFormatter.js +1 -1
  353. package/dist/i18n/useI18n.js +1 -1
  354. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  355. package/dist/icons/AdjustmentsIcon.js +1 -1
  356. package/dist/icons/AiIcon.js +1 -1
  357. package/dist/icons/AreaChartIcon.js +1 -1
  358. package/dist/icons/BackwardIcon.js +1 -1
  359. package/dist/icons/BarChartIcon.js +1 -1
  360. package/dist/icons/BellFilledIcon.js +1 -1
  361. package/dist/icons/BellIcon.js +1 -1
  362. package/dist/icons/BooleanIcon.js +1 -1
  363. package/dist/icons/CalendarEditIcon.js +1 -1
  364. package/dist/icons/CalendarIcon.js +1 -1
  365. package/dist/icons/CaretDownIcon.js +1 -1
  366. package/dist/icons/CaretUpIcon.js +1 -1
  367. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  368. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  369. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  370. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  371. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  372. package/dist/icons/ChartBarLineIcon.js +1 -1
  373. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  374. package/dist/icons/ChartBarStackedIcon.js +1 -1
  375. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  376. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  377. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  378. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  379. package/dist/icons/ChartBubbleIcon.js +1 -1
  380. package/dist/icons/ChartDonut2Icon.js +1 -1
  381. package/dist/icons/ChartFunnelIcon.js +1 -1
  382. package/dist/icons/ChartHeatmapIcon.js +1 -1
  383. package/dist/icons/ChartKPIIcon.js +1 -1
  384. package/dist/icons/ChartPie2Icon.js +1 -1
  385. package/dist/icons/ChartScatterIcon.js +1 -1
  386. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  387. package/dist/icons/CheckCircleIcon.js +1 -1
  388. package/dist/icons/CheckIcon.js +1 -1
  389. package/dist/icons/CircleFilledIcon.js +1 -1
  390. package/dist/icons/ClearIcon.js +1 -1
  391. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  392. package/dist/icons/CloseCircleIcon.js +1 -1
  393. package/dist/icons/CloseIcon.js +1 -1
  394. package/dist/icons/CodeIcon.js +1 -1
  395. package/dist/icons/ColumnTotalIcon.js +1 -1
  396. package/dist/icons/CopyIcon.js +1 -1
  397. package/dist/icons/CountIcon.js +1 -1
  398. package/dist/icons/CubeIcon.js +1 -1
  399. package/dist/icons/CubePauseIcon.js +1 -1
  400. package/dist/icons/CubePlayIcon.js +1 -1
  401. package/dist/icons/CurrencyDollarIcon.js +1 -1
  402. package/dist/icons/DangerIcon.js +1 -1
  403. package/dist/icons/DashboardIcon.js +1 -1
  404. package/dist/icons/DatabaseIcon.js +1 -1
  405. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  406. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  407. package/dist/icons/DirectionIcon.js +1 -1
  408. package/dist/icons/DonutIcon.js +1 -1
  409. package/dist/icons/DownIcon.js +1 -1
  410. package/dist/icons/EditIcon.js +1 -1
  411. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  412. package/dist/icons/ExclamationCircleIcon.js +1 -1
  413. package/dist/icons/ExclamationIcon.js +1 -1
  414. package/dist/icons/EyeIcon.js +1 -1
  415. package/dist/icons/EyeInvisibleIcon.js +1 -1
  416. package/dist/icons/FilterIcon.js +1 -1
  417. package/dist/icons/FolderFilledIcon.js +1 -1
  418. package/dist/icons/FolderIcon.js +1 -1
  419. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  420. package/dist/icons/FolderOpenIcon.js +1 -1
  421. package/dist/icons/ForwardIcon.js +1 -1
  422. package/dist/icons/GripVerticalIcon.js +1 -1
  423. package/dist/icons/HierarchyIcon.js +1 -1
  424. package/dist/icons/HierarchyOpenIcon.js +1 -1
  425. package/dist/icons/Icon.js +1 -1
  426. package/dist/icons/InfoCircleIcon.js +1 -1
  427. package/dist/icons/InfoIcon.js +1 -1
  428. package/dist/icons/KeyIcon.js +1 -1
  429. package/dist/icons/LeftIcon.js +1 -1
  430. package/dist/icons/LineChartIcon.js +1 -1
  431. package/dist/icons/LoadingIcon.js +1 -1
  432. package/dist/icons/LockFilledIcon.js +1 -1
  433. package/dist/icons/LockIcon.js +1 -1
  434. package/dist/icons/MoreIcon.js +1 -1
  435. package/dist/icons/NotAllowedIcon.js +1 -1
  436. package/dist/icons/Number123Icon.js +1 -1
  437. package/dist/icons/NumberIcon.js +1 -1
  438. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  439. package/dist/icons/PauseCircleIcon.js +1 -1
  440. package/dist/icons/PauseIcon.js +1 -1
  441. package/dist/icons/PercentageIcon.js +1 -1
  442. package/dist/icons/PieChartIcon.js +1 -1
  443. package/dist/icons/PipetteIcon.js +1 -1
  444. package/dist/icons/PlayCircleIcon.js +1 -1
  445. package/dist/icons/PlayIcon.js +1 -1
  446. package/dist/icons/PlusIcon.js +1 -1
  447. package/dist/icons/ProgressBarIcon.js +1 -1
  448. package/dist/icons/ReloadIcon.js +1 -1
  449. package/dist/icons/ReportIcon.js +1 -1
  450. package/dist/icons/ReturnIcon.js +1 -1
  451. package/dist/icons/RightIcon.js +1 -1
  452. package/dist/icons/RowTotalsIcon.js +1 -1
  453. package/dist/icons/SchemeIcon.js +1 -1
  454. package/dist/icons/SearchIcon.js +1 -1
  455. package/dist/icons/SemanticQueryIcon.js +1 -1
  456. package/dist/icons/SettingsIcon.js +1 -1
  457. package/dist/icons/ShieldFilledIcon.js +1 -1
  458. package/dist/icons/ShieldIcon.js +1 -1
  459. package/dist/icons/SlashIcon.js +1 -1
  460. package/dist/icons/SparklesIcon.js +1 -1
  461. package/dist/icons/SqlIcon.js +1 -1
  462. package/dist/icons/StatsIcon.js +1 -1
  463. package/dist/icons/StopIcon.js +1 -1
  464. package/dist/icons/StringIcon.js +1 -1
  465. package/dist/icons/SubtotalsIcon.js +1 -1
  466. package/dist/icons/SwitchIcon.js +1 -1
  467. package/dist/icons/TableIcon.js +1 -1
  468. package/dist/icons/ThumbsDownIcon.js +1 -1
  469. package/dist/icons/ThumbsUpIcon.js +1 -1
  470. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  471. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  472. package/dist/icons/ThunderboltIcon.js +1 -1
  473. package/dist/icons/TimeIcon.js +1 -1
  474. package/dist/icons/TrashIcon.js +1 -1
  475. package/dist/icons/UnlockIcon.js +1 -1
  476. package/dist/icons/UpIcon.js +1 -1
  477. package/dist/icons/UserGroupIcon.js +1 -1
  478. package/dist/icons/UserIcon.js +1 -1
  479. package/dist/icons/UserLockIcon.js +1 -1
  480. package/dist/icons/ViewIcon.js +1 -1
  481. package/dist/icons/WarningFilledIcon.js +1 -1
  482. package/dist/icons/WarningIcon.js +1 -1
  483. package/dist/icons/wrap-icon.js +1 -1
  484. package/dist/index.d.ts +3 -4
  485. package/dist/index.js +3 -4
  486. package/dist/index.js.map +1 -1
  487. package/dist/provider.js +1 -1
  488. package/dist/providers/TrackingProvider.js +1 -1
  489. package/dist/providers/navigationAdapter.default.js +1 -1
  490. package/dist/tokens/base.js +1 -1
  491. package/dist/tokens/colors.js +1 -1
  492. package/dist/tokens/index.d.ts +0 -1
  493. package/dist/tokens/index.js +1 -2
  494. package/dist/tokens/index.js.map +1 -1
  495. package/dist/tokens/layout.js +1 -1
  496. package/dist/tokens/lazy-styles.js +1 -1
  497. package/dist/tokens/palette-config.js +2 -2
  498. package/dist/tokens/palette.d.ts +1 -1
  499. package/dist/tokens/palette.js +2 -44
  500. package/dist/tokens/palette.js.map +1 -1
  501. package/dist/tokens/shadows.js +1 -1
  502. package/dist/tokens/sizes.js +1 -1
  503. package/dist/tokens/spacing.js +1 -1
  504. package/dist/tokens/typography.js +1 -1
  505. package/dist/utils/ResizeSensor.js +1 -1
  506. package/dist/utils/index.d.ts +1 -0
  507. package/dist/utils/is-dev-env.js +1 -1
  508. package/dist/utils/modules.js +1 -1
  509. package/dist/utils/promise.js +1 -1
  510. package/dist/utils/raf.js +1 -1
  511. package/dist/utils/random.js +1 -1
  512. package/dist/utils/range.js +1 -1
  513. package/dist/utils/react/RenderCache.js +1 -1
  514. package/dist/utils/react/Slots.js +1 -1
  515. package/dist/utils/react/chain.js +1 -1
  516. package/dist/utils/react/disabledProps.d.ts +49 -0
  517. package/dist/utils/react/disabledProps.js +82 -0
  518. package/dist/utils/react/disabledProps.js.map +1 -0
  519. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  520. package/dist/utils/react/index.d.ts +1 -0
  521. package/dist/utils/react/index.js +2 -1
  522. package/dist/utils/react/interactions.js +1 -1
  523. package/dist/utils/react/isTextOnly.js +1 -1
  524. package/dist/utils/react/mapProps.js +1 -1
  525. package/dist/utils/react/mergeProps.js +1 -1
  526. package/dist/utils/react/nullableValue.js +1 -1
  527. package/dist/utils/react/resolveIcon.js +1 -1
  528. package/dist/utils/react/sharedStore.js +1 -1
  529. package/dist/utils/react/useBufferedValue.js +1 -1
  530. package/dist/utils/react/useCombinedRefs.js +1 -1
  531. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  532. package/dist/utils/react/useEventBus.js +1 -1
  533. package/dist/utils/react/useId.js +1 -1
  534. package/dist/utils/react/useIsDarwin.js +1 -1
  535. package/dist/utils/react/useKeySymbols.js +1 -1
  536. package/dist/utils/react/useLayoutEffect.js +1 -1
  537. package/dist/utils/react/useLocalStorage.js +1 -1
  538. package/dist/utils/react/useMergeStyles.js +1 -1
  539. package/dist/utils/react/usePopoverSync.js +1 -1
  540. package/dist/utils/react/useQaProps.js +1 -1
  541. package/dist/utils/react/useViewportSize.js +1 -1
  542. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  543. package/dist/utils/selection.js +1 -1
  544. package/dist/utils/styles.js +1 -1
  545. package/dist/utils/tree.js +1 -1
  546. package/dist/utils/warnings.js +1 -1
  547. package/dist/version.js +2 -2
  548. package/docs/components/actions/Button.md +17 -0
  549. package/docs/components/content/Item.md +8 -1
  550. package/docs/components/data/DataTable.md +2 -118
  551. package/docs/components/data/ItemTable.md +5 -37
  552. package/package.json +1 -1
  553. package/dist/components/data/TableBase/TableHeaderCell.js +0 -115
  554. package/dist/components/data/TableBase/TableHeaderCell.js.map +0 -1
  555. package/dist/components/data/TableBase/column-menu.d.ts +0 -36
  556. package/dist/components/data/TableBase/column-menu.js +0 -104
  557. package/dist/components/data/TableBase/column-menu.js.map +0 -1
  558. package/dist/components/data/TableBase/column-tint.js +0 -168
  559. package/dist/components/data/TableBase/column-tint.js.map +0 -1
  560. package/dist/components/data/TableBase/use-column-order.js +0 -100
  561. package/dist/components/data/TableBase/use-column-order.js.map +0 -1
  562. package/dist/tokens/color-theme.d.ts +0 -86
  563. package/dist/tokens/color-theme.js +0 -156
  564. package/dist/tokens/color-theme.js.map +0 -1
@@ -189,14 +189,6 @@ pivots, totals. Use `ListBox` when there is only one column.
189
189
  - **`defaultColumnWidths`** `Record<string, number>` — Initial widths.
190
190
  - **`onColumnResize`** `(columnKey, width, all) => void` — Fires once the
191
191
  gesture ends, not on every pixel.
192
- - **`columnContextMenu`** `boolean | 'context-only'` (default: `true`) — Where a
193
- column's `header.menu` is exposed: a `⋮` trigger plus right-click and
194
- Shift+F10, right-click only, or nowhere.
195
- - **`onColumnMenuAction`** `(action, columnKey) => void` — The pressed
196
- `Menu.Item` key, as written. Fires for the reserved sort keys too, after the
197
- table has applied them.
198
- - **`columnMenuTriggerProps`** `Record<string, any>` — Props for the `⋮` trigger.
199
- - **`columnMenuProps`** `Record<string, any>` — Props for the `Menu`.
200
192
  - **`storageKey`** `string` — Persists the table's own state under
201
193
  `cube-ui-kit:table:${storageKey}`. Controlled state is never stored — a
202
194
  controlled `pageSize` or `sort` belongs to the page, and restoring it would
@@ -233,7 +225,7 @@ interface CubeItemTableColumn<T> {
233
225
  cellProps?: (ctx) => Record<string, any> | undefined;
234
226
 
235
227
  align?: 'start' | 'center' | 'end';
236
- isSortable?: boolean; // opt in per column (default false)
228
+ isSortable?: boolean;
237
229
  isSearchable?: boolean; // include in the built-in search (default true)
238
230
  isCopyable?: boolean; // include in TSV copy (default true)
239
231
  autoHeight?: boolean; // wrap text and let the row grow
@@ -413,11 +405,10 @@ search sets it for you.
413
405
 
414
406
  ### Sorting
415
407
 
416
- Sorting is **opt in, per column**: a table with no `isSortable` column has inert
417
- headers and `sortMode` resolves to `'off'`. Mark columns `isSortable` and
418
- clicking a header cycles `ascending → descending → unsorted`. The third state
419
- matters whenever the source order is meaningful, which is why it is the default
420
- cycle; set `disallowSortRemoval` on a column to reduce it to `asc ↔ desc`.
408
+ Mark columns `isSortable` and clicking a header cycles
409
+ `ascending → descending → unsorted`. The third state matters whenever the source
410
+ order is meaningful, which is why it is the default cycle; set
411
+ `disallowSortRemoval` on a column to reduce it to `asc ↔ desc`.
421
412
 
422
413
  ```jsx
423
414
  <ItemTable
@@ -431,29 +422,6 @@ cycle; set `disallowSortRemoval` on a column to reduce it to `asc ↔ desc`.
431
422
  />
432
423
  ```
433
424
 
434
- #### A fixed order the user cannot change
435
-
436
- For a list that arrives in a meaningful order — most of them — leave every column
437
- alone and pass the order you want. `sortMode="client"` keeps the engine sorting
438
- while the headers stay inert, so nothing is clickable and no header takes a tab
439
- stop:
440
-
441
- ```jsx
442
- <ItemTable
443
- data={rows}
444
- columns={[{ key: 'name', title: 'Name' }]}
445
- sortMode="client"
446
- sort={{ columnKey: 'name', direction: 'asc' }}
447
- />
448
- ```
449
-
450
- The sorted column still carries `aria-sort`, so a screen reader announces the
451
- order even though the header cannot be operated. It is **not** drawn — the sort
452
- arrow belongs to the clickable affordance — so add your own marker through
453
- `header.suffix` if sighted users need to see which column the order follows.
454
-
455
- Data already in the right order needs none of this: pass it and set nothing.
456
-
457
425
  Client-side sorting compares raw `getValue` results — numerically for numbers,
458
426
  chronologically for dates — and falls back to a locale-aware collator over the
459
427
  column's display text, so a formatted column sorts the way it reads. `compare`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.0.0-canary-34ce1a4",
3
+ "version": "0.0.0-canary-7dc6906",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {
@@ -1,115 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-34ce1a4 | 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
@@ -1 +0,0 @@
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,36 +0,0 @@
1
-
2
- import "./types.js";
3
- import { ReactNode } from "react";
4
-
5
- //#region src/components/data/TableBase/column-menu.d.ts
6
- /**
7
- * Menu keys the table itself honours.
8
- *
9
- * Sorting is the only capability the table owns, so it is the only thing that
10
- * can be a reserved key. `pin` and `hide` deliberately are not: `column.pin` and
11
- * `column.isHidden` are read-only declarative inputs with no controlled state
12
- * behind them, and reserving those keys would fix an API in string literals
13
- * before the state that backs it exists. They stay ordinary consumer keys and
14
- * are reported through `onColumnMenuAction` like anything else.
15
- */
16
- declare const COLUMN_MENU_SORT_KEYS: readonly ["sort-asc", "sort-desc", "clear-sort"];
17
- type CubeColumnMenuSortKey = (typeof COLUMN_MENU_SORT_KEYS)[number];
18
- /**
19
- * The reserved sort items, ready to drop into `header.menu`.
20
- *
21
- * ```tsx
22
- * header: { menu: <>{columnSortMenu()}<Menu.Item key="pin">Pin</Menu.Item></> }
23
- * ```
24
- *
25
- * Exists because `Menu.Item` requires `children` — it comes from react-stately's
26
- * `ItemProps` — so `<Menu.Item key="sort-asc" />` does not typecheck, and a
27
- * consumer filling the label in by hand would hardcode one language and lose the
28
- * translated one the table supplies. Passing `null` satisfies the type and reads
29
- * as "the table fills this in", which `processColumnMenuItems` then does.
30
- *
31
- * Hand-written keys still work — this is a convenience, not the only route.
32
- */
33
- declare function columnSortMenu(keys?: readonly CubeColumnMenuSortKey[]): ReactNode;
34
- //#endregion
35
- export { COLUMN_MENU_SORT_KEYS, CubeColumnMenuSortKey, columnSortMenu };
36
- //# sourceMappingURL=column-menu.d.ts.map
@@ -1,104 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-34ce1a4 | Cube Dev Team */
2
- import { __Menu } from "../../actions/Menu/Menu.js";
3
- import { normalizeMenuAction } from "./row-menu.js";
4
- import { Children, cloneElement, isValidElement } from "react";
5
- import { jsx } from "react/jsx-runtime";
6
-
7
- //#region src/components/data/TableBase/column-menu.tsx
8
- /**
9
- * Menu keys the table itself honours.
10
- *
11
- * Sorting is the only capability the table owns, so it is the only thing that
12
- * can be a reserved key. `pin` and `hide` deliberately are not: `column.pin` and
13
- * `column.isHidden` are read-only declarative inputs with no controlled state
14
- * behind them, and reserving those keys would fix an API in string literals
15
- * before the state that backs it exists. They stay ordinary consumer keys and
16
- * are reported through `onColumnMenuAction` like anything else.
17
- */
18
- const COLUMN_MENU_SORT_KEYS = [
19
- "sort-asc",
20
- "sort-desc",
21
- "clear-sort"
22
- ];
23
- function isColumnMenuSortKey(key) {
24
- return COLUMN_MENU_SORT_KEYS.includes(key);
25
- }
26
- /** The direction a reserved key asks for. `clear-sort` asks for none. */
27
- const COLUMN_MENU_SORT_DIRECTION = {
28
- "sort-asc": "asc",
29
- "sort-desc": "desc",
30
- "clear-sort": null
31
- };
32
- /**
33
- * Whether a reserved key would do nothing if pressed.
34
- *
35
- * Redundancy is signalled by disabling the item rather than by ticking the
36
- * active one. A tick would mean `isSelected`, which `MenuItem` only honours when
37
- * the whole `Menu` runs at `selectionMode !== 'none'` (`MenuItem.tsx:43`) — and
38
- * switching the menu into a selection mode would turn the consumer's own items
39
- * into radios too, and could be overridden from `menuProps`. Disabling is local
40
- * to the item and cannot leak.
41
- */
42
- function isSortKeyRedundant(key, ctx) {
43
- if (!ctx.isSortable) return true;
44
- if (key === "clear-sort") return ctx.sort == null || ctx.disallowSortRemoval;
45
- return ctx.sort === COLUMN_MENU_SORT_DIRECTION[key];
46
- }
47
- /**
48
- * Fills in default labels and disabled state for the reserved sort keys.
49
- *
50
- * `Children.forEach` rather than `Children.toArray`, because `toArray` rewrites
51
- * every key with a `.$` prefix — which breaks `selectedKeys` matching inside
52
- * `Menu`. Same reason `TabButton` does it this way.
53
- *
54
- * A label or an `isDisabled` the consumer wrote always wins; this only supplies
55
- * what was left out, so `<Menu.Item key="sort-asc" />` is the short form and
56
- * `<Menu.Item key="sort-asc">Oldest first</Menu.Item>` still says what it says.
57
- */
58
- function processColumnMenuItems(children, ctx) {
59
- const result = [];
60
- Children.forEach(children, (child) => {
61
- if (!isValidElement(child)) {
62
- result.push(child);
63
- return;
64
- }
65
- const element = child;
66
- const childProps = element.props;
67
- const key = element.key == null ? null : normalizeMenuAction(element.key);
68
- if (key != null && isColumnMenuSortKey(key)) {
69
- result.push(cloneElement(element, {
70
- children: childProps.children ?? ctx.labels[key],
71
- isDisabled: childProps.isDisabled ?? isSortKeyRedundant(key, ctx)
72
- }));
73
- return;
74
- }
75
- if (childProps.children != null && typeof childProps.children !== "string" && typeof childProps.children !== "number") {
76
- result.push(cloneElement(element, { children: processColumnMenuItems(childProps.children, ctx) }));
77
- return;
78
- }
79
- result.push(child);
80
- });
81
- return result;
82
- }
83
- /**
84
- * The reserved sort items, ready to drop into `header.menu`.
85
- *
86
- * ```tsx
87
- * header: { menu: <>{columnSortMenu()}<Menu.Item key="pin">Pin</Menu.Item></> }
88
- * ```
89
- *
90
- * Exists because `Menu.Item` requires `children` — it comes from react-stately's
91
- * `ItemProps` — so `<Menu.Item key="sort-asc" />` does not typecheck, and a
92
- * consumer filling the label in by hand would hardcode one language and lose the
93
- * translated one the table supplies. Passing `null` satisfies the type and reads
94
- * as "the table fills this in", which `processColumnMenuItems` then does.
95
- *
96
- * Hand-written keys still work — this is a convenience, not the only route.
97
- */
98
- function columnSortMenu(keys = COLUMN_MENU_SORT_KEYS) {
99
- return keys.map((key) => /* @__PURE__ */ jsx(__Menu.Item, { children: null }, key));
100
- }
101
-
102
- //#endregion
103
- export { COLUMN_MENU_SORT_DIRECTION, COLUMN_MENU_SORT_KEYS, columnSortMenu, isColumnMenuSortKey, processColumnMenuItems };
104
- //# sourceMappingURL=column-menu.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"column-menu.js","names":["Menu"],"sources":["../../../../src/components/data/TableBase/column-menu.tsx"],"sourcesContent":["import { Children, cloneElement, isValidElement } from 'react';\n\nimport { Menu } from '../../actions/Menu';\n\nimport { normalizeMenuAction } from './row-menu';\n\nimport type { ReactElement, ReactNode } from 'react';\nimport type { CubeTableSortDirection } from './types';\n\n/**\n * Menu keys the table itself honours.\n *\n * Sorting is the only capability the table owns, so it is the only thing that\n * can be a reserved key. `pin` and `hide` deliberately are not: `column.pin` and\n * `column.isHidden` are read-only declarative inputs with no controlled state\n * behind them, and reserving those keys would fix an API in string literals\n * before the state that backs it exists. They stay ordinary consumer keys and\n * are reported through `onColumnMenuAction` like anything else.\n */\nexport const COLUMN_MENU_SORT_KEYS = [\n 'sort-asc',\n 'sort-desc',\n 'clear-sort',\n] as const;\n\nexport type CubeColumnMenuSortKey = (typeof COLUMN_MENU_SORT_KEYS)[number];\n\nexport function isColumnMenuSortKey(key: string): key is CubeColumnMenuSortKey {\n return (COLUMN_MENU_SORT_KEYS as readonly string[]).includes(key);\n}\n\n/** The direction a reserved key asks for. `clear-sort` asks for none. */\nexport const COLUMN_MENU_SORT_DIRECTION: Record<\n CubeColumnMenuSortKey,\n CubeTableSortDirection | null\n> = {\n 'sort-asc': 'asc',\n 'sort-desc': 'desc',\n 'clear-sort': null,\n};\n\nexport interface CubeColumnMenuContext {\n isSortable: boolean;\n /** This column's current direction, or `null` when it is unsorted. */\n sort: CubeTableSortDirection | null;\n disallowSortRemoval: boolean;\n /** Default labels, so `TableView` owns the i18n lookup and this stays pure. */\n labels: Record<CubeColumnMenuSortKey, string>;\n}\n\ninterface MenuItemLikeProps {\n children?: ReactNode;\n isDisabled?: boolean;\n}\n\n/**\n * Whether a reserved key would do nothing if pressed.\n *\n * Redundancy is signalled by disabling the item rather than by ticking the\n * active one. A tick would mean `isSelected`, which `MenuItem` only honours when\n * the whole `Menu` runs at `selectionMode !== 'none'` (`MenuItem.tsx:43`) — and\n * switching the menu into a selection mode would turn the consumer's own items\n * into radios too, and could be overridden from `menuProps`. Disabling is local\n * to the item and cannot leak.\n */\nfunction isSortKeyRedundant(\n key: CubeColumnMenuSortKey,\n ctx: CubeColumnMenuContext,\n): boolean {\n if (!ctx.isSortable) return true;\n\n if (key === 'clear-sort') {\n return ctx.sort == null || ctx.disallowSortRemoval;\n }\n\n return ctx.sort === COLUMN_MENU_SORT_DIRECTION[key];\n}\n\n/**\n * Fills in default labels and disabled state for the reserved sort keys.\n *\n * `Children.forEach` rather than `Children.toArray`, because `toArray` rewrites\n * every key with a `.$` prefix — which breaks `selectedKeys` matching inside\n * `Menu`. Same reason `TabButton` does it this way.\n *\n * A label or an `isDisabled` the consumer wrote always wins; this only supplies\n * what was left out, so `<Menu.Item key=\"sort-asc\" />` is the short form and\n * `<Menu.Item key=\"sort-asc\">Oldest first</Menu.Item>` still says what it says.\n */\nexport function processColumnMenuItems(\n children: ReactNode,\n ctx: CubeColumnMenuContext,\n): ReactNode {\n const result: ReactNode[] = [];\n\n Children.forEach(children, (child) => {\n if (!isValidElement(child)) {\n result.push(child);\n\n return;\n }\n\n const element = child as ReactElement<MenuItemLikeProps>;\n const childProps = element.props;\n const key = element.key == null ? null : normalizeMenuAction(element.key);\n\n if (key != null && isColumnMenuSortKey(key)) {\n result.push(\n cloneElement(element, {\n children: childProps.children ?? ctx.labels[key],\n isDisabled: childProps.isDisabled ?? isSortKeyRedundant(key, ctx),\n }),\n );\n\n return;\n }\n\n // A `Menu.Section` holds the items; recurse so a reserved key inside one is\n // still resolved. Guarded on a non-text child so an ordinary item whose\n // label happens to be an element is not walked for no reason.\n if (\n childProps.children != null &&\n typeof childProps.children !== 'string' &&\n typeof childProps.children !== 'number'\n ) {\n result.push(\n cloneElement(element, {\n children: processColumnMenuItems(childProps.children, ctx),\n }),\n );\n\n return;\n }\n\n result.push(child);\n });\n\n // `Children.forEach` preserves order, and each entry keeps the key it was\n // written with — so React still reconciles these by key, not by index.\n return result;\n}\n\n/**\n * The reserved sort items, ready to drop into `header.menu`.\n *\n * ```tsx\n * header: { menu: <>{columnSortMenu()}<Menu.Item key=\"pin\">Pin</Menu.Item></> }\n * ```\n *\n * Exists because `Menu.Item` requires `children` — it comes from react-stately's\n * `ItemProps` — so `<Menu.Item key=\"sort-asc\" />` does not typecheck, and a\n * consumer filling the label in by hand would hardcode one language and lose the\n * translated one the table supplies. Passing `null` satisfies the type and reads\n * as \"the table fills this in\", which `processColumnMenuItems` then does.\n *\n * Hand-written keys still work — this is a convenience, not the only route.\n */\nexport function columnSortMenu(\n keys: readonly CubeColumnMenuSortKey[] = COLUMN_MENU_SORT_KEYS,\n): ReactNode {\n return keys.map((key) => <Menu.Item key={key}>{null}</Menu.Item>);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAa,wBAAwB;CACnC;CACA;CACA;CACD;AAID,SAAgB,oBAAoB,KAA2C;AAC7E,QAAQ,sBAA4C,SAAS,IAAI;;;AAInE,MAAa,6BAGT;CACF,YAAY;CACZ,aAAa;CACb,cAAc;CACf;;;;;;;;;;;AA0BD,SAAS,mBACP,KACA,KACS;AACT,KAAI,CAAC,IAAI,WAAY,QAAO;AAE5B,KAAI,QAAQ,aACV,QAAO,IAAI,QAAQ,QAAQ,IAAI;AAGjC,QAAO,IAAI,SAAS,2BAA2B;;;;;;;;;;;;;AAcjD,SAAgB,uBACd,UACA,KACW;CACX,MAAM,SAAsB,EAAE;AAE9B,UAAS,QAAQ,WAAW,UAAU;AACpC,MAAI,CAAC,eAAe,MAAM,EAAE;AAC1B,UAAO,KAAK,MAAM;AAElB;;EAGF,MAAM,UAAU;EAChB,MAAM,aAAa,QAAQ;EAC3B,MAAM,MAAM,QAAQ,OAAO,OAAO,OAAO,oBAAoB,QAAQ,IAAI;AAEzE,MAAI,OAAO,QAAQ,oBAAoB,IAAI,EAAE;AAC3C,UAAO,KACL,aAAa,SAAS;IACpB,UAAU,WAAW,YAAY,IAAI,OAAO;IAC5C,YAAY,WAAW,cAAc,mBAAmB,KAAK,IAAI;IAClE,CAAC,CACH;AAED;;AAMF,MACE,WAAW,YAAY,QACvB,OAAO,WAAW,aAAa,YAC/B,OAAO,WAAW,aAAa,UAC/B;AACA,UAAO,KACL,aAAa,SAAS,EACpB,UAAU,uBAAuB,WAAW,UAAU,IAAI,EAC3D,CAAC,CACH;AAED;;AAGF,SAAO,KAAK,MAAM;GAClB;AAIF,QAAO;;;;;;;;;;;;;;;;;AAkBT,SAAgB,eACd,OAAyC,uBAC9B;AACX,QAAO,KAAK,KAAK,QAAQ,oBAACA,OAAK,kBAAgB,QAAN,IAAuB,CAAC"}
@@ -1,168 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-34ce1a4 | Cube Dev Team */
2
- import { getPaletteConfig } from "../../../tokens/palette-config.js";
3
- import { hashString } from "../../../tokens/color-theme.js";
4
-
5
- //#region src/components/data/TableBase/column-tint.ts
6
- const THEMES = new Set([
7
- "primary",
8
- "purple",
9
- "success",
10
- "danger",
11
- "warning",
12
- "note"
13
- ]);
14
- const DEFAULT_SCOPE = [
15
- "header",
16
- "body",
17
- "totals"
18
- ];
19
- const EMPTY = {
20
- slots: /* @__PURE__ */ new Map(),
21
- scopes: /* @__PURE__ */ new Map(),
22
- configs: [],
23
- cellStyles: null,
24
- headerCellStyles: null
25
- };
26
- /**
27
- * A theme name is only a theme name when the palette has one — otherwise the
28
- * string is a colour. `'note'` is a theme; `'#0ea5e9'` and `'red'` are colours.
29
- */
30
- function isThemeName(value) {
31
- return THEMES.has(value);
32
- }
33
- /**
34
- * The seed for a palette theme, read from the live palette config so a re-seeded
35
- * `success` hue moves the columns tinted with it.
36
- *
37
- * `primary` and `purple` are the brand itself, which is why they read `hue`
38
- * rather than a `themes` entry — the palette derives them from the brand hue too.
39
- */
40
- function themeSeed(theme) {
41
- const config = getPaletteConfig();
42
- if (theme === "primary" || theme === "purple") return {
43
- hue: config.hue,
44
- saturation: config.saturation
45
- };
46
- return config.themes[theme];
47
- }
48
- /** Normalizes any spec into a theme config, or `null` for the manual form. */
49
- function tintConfig(color) {
50
- if (typeof color === "string") return isThemeName(color) ? themeSeed(color) : { hue: color };
51
- if ("fill" in color) return null;
52
- return {
53
- hue: color.hue,
54
- saturation: color.saturation
55
- };
56
- }
57
- /**
58
- * A stable identity for a spec, so two columns asking for the same colour share
59
- * one slot — and therefore one set of generated rules.
60
- *
61
- * For a derived spec that identity is the theme's own content hash, which makes it
62
- * shared across TABLES as well: the tokens are registered globally under the same
63
- * name. The manual form has no theme, so it is keyed on its literal values.
64
- */
65
- function manualKey(paint) {
66
- return `raw-${hashString(`${paint.fill}|${paint.fillBand}|${paint.text}|${paint.headerText}`)}`;
67
- }
68
- /**
69
- * Maps a table's columns onto tint slots and the style maps that paint them.
70
- *
71
- * Pure. The colour maths lives in `src/tokens/color-theme.ts`; this is only the
72
- * mapping from columns to `data-tint` values and tasty state maps.
73
- */
74
- function buildColumnTints(columns, { resolveTheme }) {
75
- const tinted = columns.filter((column) => !column.isStructural && column.color != null);
76
- if (!tinted.length) return EMPTY;
77
- const slots = /* @__PURE__ */ new Map();
78
- const scopes = /* @__PURE__ */ new Map();
79
- const configs = [];
80
- const paints = /* @__PURE__ */ new Map();
81
- for (const column of tinted) {
82
- const color = column.color;
83
- const config = tintConfig(color);
84
- let slot;
85
- let paint;
86
- if (config) {
87
- const theme = resolveTheme(config);
88
- slot = theme.name;
89
- paint = {
90
- fill: theme.colors.surface,
91
- fillBand: theme.colors["surface-2"],
92
- text: theme.colors["surface-2-text"],
93
- headerText: theme.colors["surface-2-text-soft"]
94
- };
95
- if (!paints.has(slot)) configs.push(config);
96
- } else {
97
- const manual = color;
98
- paint = {
99
- fill: manual.fill,
100
- fillBand: manual.fillBand ?? manual.fill,
101
- text: manual.text ?? "#row-text",
102
- headerText: manual.text ?? "#row-text"
103
- };
104
- slot = manualKey(paint);
105
- }
106
- slots.set(column.key, slot);
107
- scopes.set(column.key, column.colorScope ?? DEFAULT_SCOPE);
108
- paints.set(slot, paint);
109
- }
110
- return {
111
- slots,
112
- scopes,
113
- configs,
114
- cellStyles: cellTintStyles(paints),
115
- headerCellStyles: headerTintStyles(paints)
116
- };
117
- }
118
- /**
119
- * `#cell-base` / `#cell-text` for the body.
120
- *
121
- * The band and the pinned-total fill share ONE grouped key rather than two
122
- * entries with the same value: tasty coalesces entries in a state map that
123
- * serialize identically, promotes them to the group's maximum priority and
124
- * negates them against everything below — which would silently turn the plain
125
- * tint branch into `false`. See `src/components/data/AGENTS.md`.
126
- */
127
- function cellTintStyles(paints) {
128
- const base = { "": "#row-base" };
129
- const text = { "": "#row-text" };
130
- for (const [slot, paint] of paints) {
131
- base[`@own(tint=${slot})`] = paint.fill;
132
- if (paint.fillBand !== paint.fill) base[`@own(tint=${slot}) & (@own(odd) | @own(pinned))`] = paint.fillBand;
133
- text[`@own(tint=${slot})`] = paint.text;
134
- }
135
- return {
136
- "#cell-base": base,
137
- "#cell-text": text
138
- };
139
- }
140
- /**
141
- * The header takes the deeper band unconditionally, mirroring how the neutral
142
- * header sits on `#surface-2` rather than `#surface`.
143
- */
144
- function headerTintStyles(paints) {
145
- const base = { "": "#row-base" };
146
- const text = { "": "#row-text" };
147
- for (const [slot, paint] of paints) {
148
- base[`@own(tint=${slot})`] = paint.fillBand;
149
- text[`@own(tint=${slot})`] = paint.headerText;
150
- }
151
- return {
152
- "#cell-base": base,
153
- "#cell-text": text
154
- };
155
- }
156
- /**
157
- * The `data-tint` value for one part of a column, or `undefined` when the column
158
- * is untinted or its scope excludes that part.
159
- */
160
- function tintSlot(tints, columnKey, scope) {
161
- const slot = tints.slots.get(columnKey);
162
- if (slot == null) return void 0;
163
- return tints.scopes.get(columnKey)?.includes(scope) ? slot : void 0;
164
- }
165
-
166
- //#endregion
167
- export { buildColumnTints, tintSlot };
168
- //# sourceMappingURL=column-tint.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"column-tint.js","names":[],"sources":["../../../../src/components/data/TableBase/column-tint.ts"],"sourcesContent":["import { hashString } from '../../../tokens/color-theme';\nimport { getPaletteConfig } from '../../../tokens/palette-config';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { ColorThemeConfig } from '../../../tokens/color-theme';\nimport type {\n CubeResolvedColumn,\n CubeTableColumnColor,\n CubeTableColumnColorScope,\n CubeTableColumnTheme,\n} from './types';\n\nconst THEMES = new Set<string>([\n 'primary',\n 'purple',\n 'success',\n 'danger',\n 'warning',\n 'note',\n]);\n\nconst DEFAULT_SCOPE: readonly CubeTableColumnColorScope[] = [\n 'header',\n 'body',\n 'totals',\n];\n\n/** The three paint values a tinted cell needs, as tasty colour strings. */\ninterface TintPaint {\n fill: string;\n fillBand: string;\n text: string;\n /** The header's text — muted, to match an untinted header. */\n headerText: string;\n}\n\nexport interface ColumnTints {\n /** `columnKey` → `data-tint` value. Absent means the column is not tinted. */\n slots: Map<string, string>;\n /** Which scopes each column's tint applies to. */\n scopes: Map<string, readonly CubeTableColumnColorScope[]>;\n /**\n * Theme configs to register with `useColorTheme`, one per distinct derived\n * spec. Empty when every column used the `{ fill, text }` escape hatch.\n */\n configs: ColorThemeConfig[];\n /** Merge into `styles.Cell`. */\n cellStyles: Styles | null;\n /** Merge into `styles.HeaderCell`. */\n headerCellStyles: Styles | null;\n}\n\nconst EMPTY: ColumnTints = {\n slots: new Map(),\n scopes: new Map(),\n configs: [],\n cellStyles: null,\n headerCellStyles: null,\n};\n\n/**\n * A theme name is only a theme name when the palette has one — otherwise the\n * string is a colour. `'note'` is a theme; `'#0ea5e9'` and `'red'` are colours.\n */\nfunction isThemeName(value: string): value is CubeTableColumnTheme {\n return THEMES.has(value);\n}\n\n/**\n * The seed for a palette theme, read from the live palette config so a re-seeded\n * `success` hue moves the columns tinted with it.\n *\n * `primary` and `purple` are the brand itself, which is why they read `hue`\n * rather than a `themes` entry — the palette derives them from the brand hue too.\n */\nfunction themeSeed(theme: CubeTableColumnTheme): {\n hue: number;\n saturation: number;\n} {\n const config = getPaletteConfig();\n\n if (theme === 'primary' || theme === 'purple') {\n return { hue: config.hue, saturation: config.saturation };\n }\n\n return config.themes[theme];\n}\n\n/** Normalizes any spec into a theme config, or `null` for the manual form. */\nexport function tintConfig(\n color: CubeTableColumnColor,\n): ColorThemeConfig | null {\n if (typeof color === 'string') {\n return isThemeName(color) ? themeSeed(color) : { hue: color };\n }\n\n if ('fill' in color) return null;\n\n return { hue: color.hue, saturation: color.saturation };\n}\n\n/**\n * A stable identity for a spec, so two columns asking for the same colour share\n * one slot — and therefore one set of generated rules.\n *\n * For a derived spec that identity is the theme's own content hash, which makes it\n * shared across TABLES as well: the tokens are registered globally under the same\n * name. The manual form has no theme, so it is keyed on its literal values.\n */\nfunction manualKey(paint: TintPaint): string {\n // Hashed, not literal: the values contain `#`, `.` and `|`, none of which\n // survive being interpolated into a tasty `@own(tint=…)` state key.\n return `raw-${hashString(\n `${paint.fill}|${paint.fillBand}|${paint.text}|${paint.headerText}`,\n )}`;\n}\n\nexport interface BuildColumnTintsOptions {\n /**\n * Resolves a derived spec to its theme. Injected rather than imported so the\n * caller — which is a component and can run hooks — owns registration, and so\n * this stays a pure function.\n */\n resolveTheme: (config: ColorThemeConfig) => {\n name: string;\n colors: Record<string, string>;\n };\n}\n\n/**\n * Maps a table's columns onto tint slots and the style maps that paint them.\n *\n * Pure. The colour maths lives in `src/tokens/color-theme.ts`; this is only the\n * mapping from columns to `data-tint` values and tasty state maps.\n */\nexport function buildColumnTints<T>(\n columns: readonly CubeResolvedColumn<T>[],\n { resolveTheme }: BuildColumnTintsOptions,\n): ColumnTints {\n const tinted = columns.filter(\n (column) => !column.isStructural && column.color != null,\n );\n\n if (!tinted.length) return EMPTY;\n\n const slots = new Map<string, string>();\n const scopes = new Map<string, readonly CubeTableColumnColorScope[]>();\n const configs: ColorThemeConfig[] = [];\n const paints = new Map<string, TintPaint>();\n\n for (const column of tinted) {\n const color = column.color as CubeTableColumnColor;\n const config = tintConfig(color);\n let slot: string;\n let paint: TintPaint;\n\n if (config) {\n const theme = resolveTheme(config);\n\n slot = theme.name;\n paint = {\n fill: theme.colors.surface,\n fillBand: theme.colors['surface-2'],\n text: theme.colors['surface-2-text'],\n headerText: theme.colors['surface-2-text-soft'],\n };\n\n if (!paints.has(slot)) configs.push(config);\n } else {\n const manual = color as {\n fill: string;\n fillBand?: string;\n text?: string;\n };\n\n paint = {\n fill: manual.fill,\n // Without a band the column simply does not band — the caller asked for\n // exactly these values, so inventing a second one would be a surprise.\n fillBand: manual.fillBand ?? manual.fill,\n text: manual.text ?? '#row-text',\n // The manual form derives nothing, so the header takes the same text.\n headerText: manual.text ?? '#row-text',\n };\n slot = manualKey(paint);\n }\n\n slots.set(column.key, slot);\n scopes.set(column.key, column.colorScope ?? DEFAULT_SCOPE);\n paints.set(slot, paint);\n }\n\n return {\n slots,\n scopes,\n configs,\n cellStyles: cellTintStyles(paints),\n headerCellStyles: headerTintStyles(paints),\n };\n}\n\n/**\n * `#cell-base` / `#cell-text` for the body.\n *\n * The band and the pinned-total fill share ONE grouped key rather than two\n * entries with the same value: tasty coalesces entries in a state map that\n * serialize identically, promotes them to the group's maximum priority and\n * negates them against everything below — which would silently turn the plain\n * tint branch into `false`. See `src/components/data/AGENTS.md`.\n */\nfunction cellTintStyles(paints: Map<string, TintPaint>): Styles {\n const base: Record<string, string> = { '': '#row-base' };\n const text: Record<string, string> = { '': '#row-text' };\n\n for (const [slot, paint] of paints) {\n base[`@own(tint=${slot})`] = paint.fill;\n // Only worth a rule when it differs; an identical value here is exactly what\n // the coalescing trap eats.\n if (paint.fillBand !== paint.fill) {\n base[`@own(tint=${slot}) & (@own(odd) | @own(pinned))`] = paint.fillBand;\n }\n text[`@own(tint=${slot})`] = paint.text;\n }\n\n return { '#cell-base': base, '#cell-text': text };\n}\n\n/**\n * The header takes the deeper band unconditionally, mirroring how the neutral\n * header sits on `#surface-2` rather than `#surface`.\n */\nfunction headerTintStyles(paints: Map<string, TintPaint>): Styles {\n const base: Record<string, string> = { '': '#row-base' };\n const text: Record<string, string> = { '': '#row-text' };\n\n for (const [slot, paint] of paints) {\n base[`@own(tint=${slot})`] = paint.fillBand;\n text[`@own(tint=${slot})`] = paint.headerText;\n }\n\n return { '#cell-base': base, '#cell-text': text };\n}\n\n/**\n * The `data-tint` value for one part of a column, or `undefined` when the column\n * is untinted or its scope excludes that part.\n */\nexport function tintSlot(\n tints: ColumnTints,\n columnKey: string,\n scope: CubeTableColumnColorScope,\n): string | undefined {\n const slot = tints.slots.get(columnKey);\n\n if (slot == null) return undefined;\n\n return tints.scopes.get(columnKey)?.includes(scope) ? slot : undefined;\n}\n"],"mappings":";;;;;AAYA,MAAM,SAAS,IAAI,IAAY;CAC7B;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,MAAM,gBAAsD;CAC1D;CACA;CACA;CACD;AA2BD,MAAM,QAAqB;CACzB,uBAAO,IAAI,KAAK;CAChB,wBAAQ,IAAI,KAAK;CACjB,SAAS,EAAE;CACX,YAAY;CACZ,kBAAkB;CACnB;;;;;AAMD,SAAS,YAAY,OAA8C;AACjE,QAAO,OAAO,IAAI,MAAM;;;;;;;;;AAU1B,SAAS,UAAU,OAGjB;CACA,MAAM,SAAS,kBAAkB;AAEjC,KAAI,UAAU,aAAa,UAAU,SACnC,QAAO;EAAE,KAAK,OAAO;EAAK,YAAY,OAAO;EAAY;AAG3D,QAAO,OAAO,OAAO;;;AAIvB,SAAgB,WACd,OACyB;AACzB,KAAI,OAAO,UAAU,SACnB,QAAO,YAAY,MAAM,GAAG,UAAU,MAAM,GAAG,EAAE,KAAK,OAAO;AAG/D,KAAI,UAAU,MAAO,QAAO;AAE5B,QAAO;EAAE,KAAK,MAAM;EAAK,YAAY,MAAM;EAAY;;;;;;;;;;AAWzD,SAAS,UAAU,OAA0B;AAG3C,QAAO,OAAO,WACZ,GAAG,MAAM,KAAK,GAAG,MAAM,SAAS,GAAG,MAAM,KAAK,GAAG,MAAM,aACxD;;;;;;;;AAqBH,SAAgB,iBACd,SACA,EAAE,gBACW;CACb,MAAM,SAAS,QAAQ,QACpB,WAAW,CAAC,OAAO,gBAAgB,OAAO,SAAS,KACrD;AAED,KAAI,CAAC,OAAO,OAAQ,QAAO;CAE3B,MAAM,wBAAQ,IAAI,KAAqB;CACvC,MAAM,yBAAS,IAAI,KAAmD;CACtE,MAAM,UAA8B,EAAE;CACtC,MAAM,yBAAS,IAAI,KAAwB;AAE3C,MAAK,MAAM,UAAU,QAAQ;EAC3B,MAAM,QAAQ,OAAO;EACrB,MAAM,SAAS,WAAW,MAAM;EAChC,IAAI;EACJ,IAAI;AAEJ,MAAI,QAAQ;GACV,MAAM,QAAQ,aAAa,OAAO;AAElC,UAAO,MAAM;AACb,WAAQ;IACN,MAAM,MAAM,OAAO;IACnB,UAAU,MAAM,OAAO;IACvB,MAAM,MAAM,OAAO;IACnB,YAAY,MAAM,OAAO;IAC1B;AAED,OAAI,CAAC,OAAO,IAAI,KAAK,CAAE,SAAQ,KAAK,OAAO;SACtC;GACL,MAAM,SAAS;AAMf,WAAQ;IACN,MAAM,OAAO;IAGb,UAAU,OAAO,YAAY,OAAO;IACpC,MAAM,OAAO,QAAQ;IAErB,YAAY,OAAO,QAAQ;IAC5B;AACD,UAAO,UAAU,MAAM;;AAGzB,QAAM,IAAI,OAAO,KAAK,KAAK;AAC3B,SAAO,IAAI,OAAO,KAAK,OAAO,cAAc,cAAc;AAC1D,SAAO,IAAI,MAAM,MAAM;;AAGzB,QAAO;EACL;EACA;EACA;EACA,YAAY,eAAe,OAAO;EAClC,kBAAkB,iBAAiB,OAAO;EAC3C;;;;;;;;;;;AAYH,SAAS,eAAe,QAAwC;CAC9D,MAAM,OAA+B,EAAE,IAAI,aAAa;CACxD,MAAM,OAA+B,EAAE,IAAI,aAAa;AAExD,MAAK,MAAM,CAAC,MAAM,UAAU,QAAQ;AAClC,OAAK,aAAa,KAAK,MAAM,MAAM;AAGnC,MAAI,MAAM,aAAa,MAAM,KAC3B,MAAK,aAAa,KAAK,mCAAmC,MAAM;AAElE,OAAK,aAAa,KAAK,MAAM,MAAM;;AAGrC,QAAO;EAAE,cAAc;EAAM,cAAc;EAAM;;;;;;AAOnD,SAAS,iBAAiB,QAAwC;CAChE,MAAM,OAA+B,EAAE,IAAI,aAAa;CACxD,MAAM,OAA+B,EAAE,IAAI,aAAa;AAExD,MAAK,MAAM,CAAC,MAAM,UAAU,QAAQ;AAClC,OAAK,aAAa,KAAK,MAAM,MAAM;AACnC,OAAK,aAAa,KAAK,MAAM,MAAM;;AAGrC,QAAO;EAAE,cAAc;EAAM,cAAc;EAAM;;;;;;AAOnD,SAAgB,SACd,OACA,WACA,OACoB;CACpB,MAAM,OAAO,MAAM,MAAM,IAAI,UAAU;AAEvC,KAAI,QAAQ,KAAM,QAAO;AAEzB,QAAO,MAAM,OAAO,IAAI,UAAU,EAAE,SAAS,MAAM,GAAG,OAAO"}
@@ -1,100 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-34ce1a4 | Cube Dev Team */
2
- import { useEvent } from "../../../_internal/hooks/use-event.js";
3
- import { useMemo, useState } from "react";
4
- import { useControlledState } from "@react-stately/utils";
5
-
6
- //#region src/components/data/TableBase/use-column-order.ts
7
- /**
8
- * Reorders the source columns to match `order`.
9
- *
10
- * Rank-based rather than filter-then-concat, because `order` is routinely
11
- * *stale*: it was persisted or lifted into page state before the current
12
- * `columns` array existed. A column missing from it inherits the rank of the
13
- * nearest preceding known column plus a half step, so it lands immediately after
14
- * the neighbour it had in the source array instead of being swept to the end. A
15
- * new leading column keeps its lead.
16
- *
17
- * Applied to the SOURCE array, before `useTableColumns` — so hidden-column
18
- * filtering, structural injection, pinned hoisting and `aria-colindex` all still
19
- * happen downstream, and `columnOrder` can never fight `pin`.
20
- */
21
- function applyColumnOrder(columns, order) {
22
- if (!order?.length) return columns;
23
- const present = new Set(columns.map((column) => column.key));
24
- const rank = /* @__PURE__ */ new Map();
25
- order.forEach((key, index) => {
26
- if (present.has(key) && !rank.has(key)) rank.set(key, index);
27
- });
28
- if (!rank.size) return columns;
29
- let carried = -1;
30
- return columns.map((column, sourceIndex) => {
31
- const own = rank.get(column.key);
32
- if (own != null) carried = own;
33
- return {
34
- column,
35
- sourceIndex,
36
- rank: own ?? carried + .5
37
- };
38
- }).sort((a, b) => a.rank - b.rank || a.sourceIndex - b.sourceIndex).map((entry) => entry.column);
39
- }
40
- /**
41
- * Whether a column can be picked up and moved.
42
- *
43
- * The single shared predicate: `DataTable` builds the draggable key list from
44
- * it and `TableView` decides which `<th>` is a drag source from it, so the two
45
- * cannot drift. A renderer disagreeing with the state behind it is exactly how
46
- * the drop indicator that never matched its selector happened.
47
- *
48
- * Pinned columns are excluded, for three reasons that all point the same way: a
49
- * pinned `<th>` is `position: sticky`, so under horizontal scroll its rect sits
50
- * on top of columns it is nowhere near and React Aria's drop-target binary
51
- * search goes wrong; `use-table-columns` hoists pinned columns to the edges
52
- * regardless of source order, so a cross-boundary drop would be undone
53
- * immediately; and `pin` is already the ordering authority there. What that buys
54
- * is a draggable set that is one contiguous, non-sticky run — every permutation
55
- * of which stays monotonic, which is what the delegate needs.
56
- */
57
- function isColumnDraggable(column, isEnabled) {
58
- return isEnabled && !column.isStructural && column.pin == null && (column.isReorderable ?? true);
59
- }
60
- function getDraggableColumnKeys(columns, isEnabled) {
61
- return columns.filter((column) => isColumnDraggable(column, isEnabled)).map((column) => column.key);
62
- }
63
- /**
64
- * Folds a permutation of the draggable subset back into the full order.
65
- *
66
- * Only the slots the draggable keys already occupy are rewritten, so a hidden
67
- * column, a pinned one, or one that opted out keeps its absolute index and
68
- * cannot be displaced by a drag it took no part in.
69
- *
70
- * The visible consequence, worth knowing: a hidden column between two draggable
71
- * ones keeps its slot rather than following a neighbour, so it may come back
72
- * between different columns than it left. Predictable beats clever.
73
- */
74
- function projectReorder(fullOrder, nextDraggable) {
75
- const draggable = new Set(nextDraggable);
76
- const next = [...fullOrder];
77
- let cursor = 0;
78
- for (let slot = 0; slot < next.length; slot++) if (draggable.has(next[slot])) next[slot] = nextDraggable[cursor++];
79
- return next;
80
- }
81
- const EMPTY_ORDER = [];
82
- function useColumnOrder({ columns, columnOrder, defaultColumnOrder, onColumnOrderChange, storage }) {
83
- const [storedOrder] = useState(() => columnOrder === void 0 && storage.has("columnOrder") ? storage.initial.columnOrder : void 0);
84
- const [order, setOrder] = useControlledState(columnOrder, defaultColumnOrder ?? storedOrder ?? EMPTY_ORDER, onColumnOrderChange);
85
- const ordered = useMemo(() => applyColumnOrder(columns, order), [columns, order]);
86
- const fullOrder = useMemo(() => ordered.map((column) => column.key), [ordered]);
87
- return {
88
- columns: ordered,
89
- order: fullOrder,
90
- reorder: useEvent((nextDraggable) => {
91
- const next = projectReorder(fullOrder, nextDraggable);
92
- setOrder(next);
93
- if (columnOrder === void 0) storage.write({ columnOrder: next });
94
- })
95
- };
96
- }
97
-
98
- //#endregion
99
- export { getDraggableColumnKeys, isColumnDraggable, useColumnOrder };
100
- //# sourceMappingURL=use-column-order.js.map