@cube-dev/ui-kit 0.155.0 → 0.157.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 (652) hide show
  1. package/dist/CHANGELOG.md +284 -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 +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.d.ts +10 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +4 -3
  25. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +42 -44
  43. package/dist/components/actions/use-context-menu.js.map +1 -1
  44. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  45. package/dist/components/content/Alert/Alert.js +1 -1
  46. package/dist/components/content/Alert/use-alert.js +1 -1
  47. package/dist/components/content/Avatar/Avatar.js +1 -1
  48. package/dist/components/content/Badge/Badge.js +1 -1
  49. package/dist/components/content/Card/Card.js +1 -1
  50. package/dist/components/content/Content.js +1 -1
  51. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  52. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  53. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  54. package/dist/components/content/Divider.js +1 -1
  55. package/dist/components/content/Footer.js +1 -1
  56. package/dist/components/content/Header.js +1 -1
  57. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  58. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  59. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  60. package/dist/components/content/Item/Item.js +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 +2 -2
  89. package/dist/components/content/Tag/Tag.js.map +1 -1
  90. package/dist/components/content/Text.d.ts +14 -14
  91. package/dist/components/content/Text.js +1 -1
  92. package/dist/components/content/TextItem/TextItem.js +1 -1
  93. package/dist/components/content/Title.js +1 -1
  94. package/dist/components/content/Tree/Tree.js +1 -1
  95. package/dist/components/content/Tree/TreeNode.js +1 -1
  96. package/dist/components/content/Tree/styled.js +1 -1
  97. package/dist/components/content/Tree/tree-index.js +1 -1
  98. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  99. package/dist/components/content/Tree/use-load-data.js +1 -1
  100. package/dist/components/content/highlightText.js +1 -1
  101. package/dist/components/content/use-auto-tooltip.js +1 -1
  102. package/dist/components/data/DataTable/DataTable.d.ts +13 -0
  103. package/dist/components/data/DataTable/DataTable.js +246 -0
  104. package/dist/components/data/DataTable/DataTable.js.map +1 -0
  105. package/dist/components/data/DataTable/index.d.ts +3 -0
  106. package/dist/components/data/DataTable/types.d.ts +145 -0
  107. package/dist/components/data/ItemTable/ItemTable.d.ts +19 -0
  108. package/dist/components/data/ItemTable/ItemTable.js +350 -0
  109. package/dist/components/data/ItemTable/ItemTable.js.map +1 -0
  110. package/dist/components/data/ItemTable/ItemTableBulkBar.d.ts +23 -0
  111. package/dist/components/data/ItemTable/ItemTableBulkBar.js +131 -0
  112. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -0
  113. package/dist/components/data/ItemTable/ItemTableDragPreview.js +46 -0
  114. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -0
  115. package/dist/components/data/ItemTable/ItemTableFooter.js +79 -0
  116. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -0
  117. package/dist/components/data/ItemTable/ItemTableToolbar.d.ts +34 -0
  118. package/dist/components/data/ItemTable/ItemTableToolbar.js +91 -0
  119. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -0
  120. package/dist/components/data/ItemTable/index.d.ts +4 -0
  121. package/dist/components/data/ItemTable/types.d.ts +327 -0
  122. package/dist/components/data/TableBase/ColumnResizer.js +70 -0
  123. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -0
  124. package/dist/components/data/TableBase/RowCollection.js +99 -0
  125. package/dist/components/data/TableBase/RowCollection.js.map +1 -0
  126. package/dist/components/data/TableBase/TableRow.js +89 -0
  127. package/dist/components/data/TableBase/TableRow.js.map +1 -0
  128. package/dist/components/data/TableBase/TableView.d.ts +22 -0
  129. package/dist/components/data/TableBase/TableView.js +921 -0
  130. package/dist/components/data/TableBase/TableView.js.map +1 -0
  131. package/dist/components/data/TableBase/index.d.ts +5 -0
  132. package/dist/components/data/TableBase/row-menu.js +40 -0
  133. package/dist/components/data/TableBase/row-menu.js.map +1 -0
  134. package/dist/components/data/TableBase/styled.d.ts +5 -0
  135. package/dist/components/data/TableBase/styled.js +532 -0
  136. package/dist/components/data/TableBase/styled.js.map +1 -0
  137. package/dist/components/data/TableBase/types.d.ts +160 -0
  138. package/dist/components/data/TableBase/types.js +31 -0
  139. package/dist/components/data/TableBase/types.js.map +1 -0
  140. package/dist/components/data/TableBase/use-cell-selection.d.ts +3 -0
  141. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  142. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -0
  143. package/dist/components/data/TableBase/use-container-width.js +35 -0
  144. package/dist/components/data/TableBase/use-container-width.js.map +1 -0
  145. package/dist/components/data/TableBase/use-row-move-animation.js +90 -0
  146. package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -0
  147. package/dist/components/data/TableBase/use-scrollability.js +49 -0
  148. package/dist/components/data/TableBase/use-scrollability.js.map +1 -0
  149. package/dist/components/data/TableBase/use-table-columns.d.ts +2 -0
  150. package/dist/components/data/TableBase/use-table-columns.js +166 -0
  151. package/dist/components/data/TableBase/use-table-columns.js.map +1 -0
  152. package/dist/components/data/TableBase/use-table-search.js +64 -0
  153. package/dist/components/data/TableBase/use-table-search.js.map +1 -0
  154. package/dist/components/data/TableBase/use-table-selection.d.ts +4 -0
  155. package/dist/components/data/TableBase/use-table-selection.js +233 -0
  156. package/dist/components/data/TableBase/use-table-selection.js.map +1 -0
  157. package/dist/components/data/TableBase/use-table-sort.js +91 -0
  158. package/dist/components/data/TableBase/use-table-sort.js.map +1 -0
  159. package/dist/components/data/TableBase/use-table-sorts.js +97 -0
  160. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -0
  161. package/dist/components/data/TableBase/use-table-storage.d.ts +8 -0
  162. package/dist/components/data/TableBase/use-table-storage.js +58 -0
  163. package/dist/components/data/TableBase/use-table-storage.js.map +1 -0
  164. package/dist/components/data/index.d.ts +10 -0
  165. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  166. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  167. package/dist/components/fields/Checkbox/context.js +1 -1
  168. package/dist/components/fields/ColorInput/ColorInput.d.ts +67 -0
  169. package/dist/components/fields/ColorInput/ColorInput.js +230 -0
  170. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -0
  171. package/dist/components/fields/ColorInput/index.d.ts +2 -0
  172. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +64 -0
  173. package/dist/components/fields/ColorPicker/ColorPicker.js +189 -0
  174. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -0
  175. package/dist/components/fields/ColorPicker/index.d.ts +2 -0
  176. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +50 -0
  177. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +269 -0
  178. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -0
  179. package/dist/components/fields/ColorSwatchGroup/index.d.ts +2 -0
  180. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  181. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  182. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  183. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  184. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  185. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  186. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  187. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  188. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  189. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  190. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  191. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  192. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  193. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  194. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  195. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  196. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  197. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  198. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  199. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  200. package/dist/components/fields/DatePicker/period.js +1 -1
  201. package/dist/components/fields/DatePicker/props.js +1 -1
  202. package/dist/components/fields/DatePicker/utils.js +1 -1
  203. package/dist/components/fields/FileInput/FileInput.js +1 -1
  204. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +3 -3
  205. package/dist/components/fields/FilterListBox/FilterListBox.js +8 -6
  206. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  207. package/dist/components/fields/FilterPicker/FilterPicker.js +6 -1
  208. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  209. package/dist/components/fields/Input/Input.js +2 -2
  210. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  211. package/dist/components/fields/ListBox/ListBox.d.ts +7 -0
  212. package/dist/components/fields/ListBox/ListBox.js +4 -3
  213. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  214. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  215. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  216. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  217. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  218. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  219. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -2
  220. package/dist/components/fields/PasswordInput/PasswordInput.js +12 -2
  221. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  222. package/dist/components/fields/Picker/Picker.js +6 -1
  223. package/dist/components/fields/Picker/Picker.js.map +1 -1
  224. package/dist/components/fields/RadioGroup/Radio.d.ts +2 -2
  225. package/dist/components/fields/RadioGroup/Radio.js +4 -4
  226. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  227. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  228. package/dist/components/fields/RadioGroup/context.js +1 -1
  229. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  230. package/dist/components/fields/SearchInput/SearchInput.d.ts +2 -2
  231. package/dist/components/fields/SearchInput/SearchInput.js +17 -4
  232. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  233. package/dist/components/fields/Select/Select.js +1 -1
  234. package/dist/components/fields/Slider/Gradation.js +1 -1
  235. package/dist/components/fields/Slider/HueSlider.js +1 -1
  236. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  237. package/dist/components/fields/Slider/Slider.js +1 -1
  238. package/dist/components/fields/Slider/SliderBase.js +1 -1
  239. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  240. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  241. package/dist/components/fields/Slider/elements.js +1 -1
  242. package/dist/components/fields/Slider/index.js +1 -1
  243. package/dist/components/fields/Switch/Switch.js +1 -1
  244. package/dist/components/fields/TextArea/TextArea.d.ts +2 -2
  245. package/dist/components/fields/TextArea/TextArea.js +12 -5
  246. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  247. package/dist/components/fields/TextInput/TextInput.d.ts +2 -2
  248. package/dist/components/fields/TextInput/TextInput.js +15 -3
  249. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  250. package/dist/components/fields/TextInput/TextInputBase.d.ts +17 -1
  251. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  252. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  253. package/dist/components/fields/TextInput/index.d.ts +1 -1
  254. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  255. package/dist/components/fields/color/ColorPanel.js +152 -0
  256. package/dist/components/fields/color/ColorPanel.js.map +1 -0
  257. package/dist/components/fields/color/ColorSwatch.d.ts +22 -0
  258. package/dist/components/fields/color/ColorSwatch.js +58 -0
  259. package/dist/components/fields/color/ColorSwatch.js.map +1 -0
  260. package/dist/components/fields/color/channels.d.ts +13 -0
  261. package/dist/components/fields/color/channels.js +194 -0
  262. package/dist/components/fields/color/channels.js.map +1 -0
  263. package/dist/components/fields/color/color.d.ts +21 -0
  264. package/dist/components/fields/color/color.js +282 -0
  265. package/dist/components/fields/color/color.js.map +1 -0
  266. package/dist/components/fields/color/context.js +20 -0
  267. package/dist/components/fields/color/context.js.map +1 -0
  268. package/dist/components/fields/color/index.d.ts +4 -0
  269. package/dist/components/fields/index.d.ts +11 -1
  270. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  271. package/dist/components/form/Form/Field.js +1 -1
  272. package/dist/components/form/Form/Form.js +1 -1
  273. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  274. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  275. package/dist/components/form/Form/SubmitError.js +1 -1
  276. package/dist/components/form/Form/index.js +1 -1
  277. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  278. package/dist/components/form/Form/use-field/use-field.js +1 -1
  279. package/dist/components/form/Form/use-form.js +1 -1
  280. package/dist/components/form/Form/validation.js +1 -1
  281. package/dist/components/form/Label.js +1 -1
  282. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  283. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  284. package/dist/components/form/validation/use-validation-props.js +1 -1
  285. package/dist/components/form/wrapper.js +1 -1
  286. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  287. package/dist/components/helpers/IconSwitch/IconSwitch.d.ts +26 -0
  288. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  289. package/dist/components/layout/Board/Board.d.ts +55 -1
  290. package/dist/components/layout/Board/Board.js +278 -75
  291. package/dist/components/layout/Board/Board.js.map +1 -1
  292. package/dist/components/layout/Board/BoardProvider.js +1 -1
  293. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  294. package/dist/components/layout/Board/Widget.d.ts +16 -0
  295. package/dist/components/layout/Board/Widget.js +6 -3
  296. package/dist/components/layout/Board/Widget.js.map +1 -1
  297. package/dist/components/layout/Board/WidgetHost.js +81 -14
  298. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  299. package/dist/components/layout/Board/board-context.js +1 -1
  300. package/dist/components/layout/Board/board-context.js.map +1 -1
  301. package/dist/components/layout/Board/board-store.js +2 -2
  302. package/dist/components/layout/Board/board-store.js.map +1 -1
  303. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  304. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  305. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  306. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  307. package/dist/components/layout/Board/grid-core/group-move.js +132 -0
  308. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -0
  309. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  310. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  311. package/dist/components/layout/Board/index.d.ts +2 -1
  312. package/dist/components/layout/Board/index.js +2 -2
  313. package/dist/components/layout/Board/index.js.map +1 -1
  314. package/dist/components/layout/Board/responsive-utils.js +1 -1
  315. package/dist/components/layout/Board/use-board-layout.js +17 -12
  316. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  317. package/dist/components/layout/Board/use-board-registry.js +139 -20
  318. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  319. package/dist/components/layout/Board/use-board-select-modifier-key.js +24 -0
  320. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -0
  321. package/dist/components/layout/Board/use-board-selection.d.ts +8 -0
  322. package/dist/components/layout/Board/use-board-selection.js +113 -0
  323. package/dist/components/layout/Board/use-board-selection.js.map +1 -0
  324. package/dist/components/layout/Flex.js +1 -1
  325. package/dist/components/layout/Flow.js +1 -1
  326. package/dist/components/layout/Grid.js +1 -1
  327. package/dist/components/layout/Panel.js +1 -1
  328. package/dist/components/layout/Prefix.js +1 -1
  329. package/dist/components/layout/ResizablePanel.js +1 -1
  330. package/dist/components/layout/Space.js +1 -1
  331. package/dist/components/layout/Suffix.js +1 -1
  332. package/dist/components/navigation/Pagination/Pagination.d.ts +9 -0
  333. package/dist/components/navigation/Pagination/Pagination.js +258 -0
  334. package/dist/components/navigation/Pagination/Pagination.js.map +1 -0
  335. package/dist/components/navigation/Pagination/index.d.ts +4 -0
  336. package/dist/components/navigation/Pagination/types.d.ts +81 -0
  337. package/dist/components/navigation/Pagination/use-pagination.d.ts +52 -0
  338. package/dist/components/navigation/Pagination/use-pagination.js +83 -0
  339. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -0
  340. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  341. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  342. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  343. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  344. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  345. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  346. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  347. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  348. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  349. package/dist/components/navigation/Tabs/styled.js +1 -1
  350. package/dist/components/navigation/Tabs/types.js +1 -1
  351. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  352. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  353. package/dist/components/navigation/index.d.ts +5 -1
  354. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  355. package/dist/components/other/Calendar/Calendar.js +1 -1
  356. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  357. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  358. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  359. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  360. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  361. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  362. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  363. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  364. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  365. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  366. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  367. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  368. package/dist/components/overlays/Dialog/context.js +1 -1
  369. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  370. package/dist/components/overlays/Modal/Modal.js +1 -1
  371. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  372. package/dist/components/overlays/Modal/Overlay.js +1 -1
  373. package/dist/components/overlays/Modal/Popover.js +1 -1
  374. package/dist/components/overlays/Modal/Tray.js +1 -1
  375. package/dist/components/overlays/Modal/Underlay.js +1 -1
  376. package/dist/components/overlays/Notifications/Notification.js +1 -1
  377. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  378. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  379. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  380. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  381. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  382. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  383. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  384. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  385. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  386. package/dist/components/overlays/Notifications/index.js +1 -1
  387. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  388. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  389. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  390. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  391. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  392. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  393. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  394. package/dist/components/overlays/Toast/index.js +1 -1
  395. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  396. package/dist/components/overlays/Toast/useToast.js +1 -1
  397. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  398. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  399. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  400. package/dist/components/overlays/Tooltip/context.js +1 -1
  401. package/dist/components/portal/Portal.js +1 -1
  402. package/dist/components/portal/PortalProvider.js +1 -1
  403. package/dist/components/portal/usePortal.js +1 -1
  404. package/dist/components/shared/DraggableCollection.js +24 -8
  405. package/dist/components/shared/DraggableCollection.js.map +1 -1
  406. package/dist/components/shared/InvalidIcon.js +1 -1
  407. package/dist/components/shared/ValidIcon.js +1 -1
  408. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  409. package/dist/components/status/Spin/Cube.js +1 -1
  410. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  411. package/dist/components/status/Spin/Spin.js +1 -1
  412. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  413. package/dist/data/item-themes.js +1 -1
  414. package/dist/data/themes.js +1 -1
  415. package/dist/eslint-plugin/defaults.generated.js +227 -5
  416. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  417. package/dist/eslint-plugin/index.js +1 -1
  418. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  419. package/dist/i18n/I18nProvider.js +1 -1
  420. package/dist/i18n/createFormatter.js +1 -1
  421. package/dist/i18n/index.js +1 -1
  422. package/dist/i18n/instance.js +1 -1
  423. package/dist/i18n/locales/de-DE/uikit.js +44 -1
  424. package/dist/i18n/locales/en-US/uikit.js +44 -1
  425. package/dist/i18n/locales/en-US/uikit.json.d.ts +49 -1
  426. package/dist/i18n/locales/es-ES/uikit.js +44 -1
  427. package/dist/i18n/locales/es-MX/uikit.js +44 -1
  428. package/dist/i18n/locales/fr-FR/uikit.js +44 -1
  429. package/dist/i18n/locales/it-IT/uikit.js +44 -1
  430. package/dist/i18n/locales/ja-JP/uikit.js +44 -1
  431. package/dist/i18n/locales/nb-NO/uikit.js +44 -1
  432. package/dist/i18n/locales/pt-BR/uikit.js +44 -1
  433. package/dist/i18n/locales/pt-PT/uikit.js +44 -1
  434. package/dist/i18n/locales/sv-SE/uikit.js +44 -1
  435. package/dist/i18n/locales/vi-VN/uikit.js +44 -1
  436. package/dist/i18n/locales.js +1 -1
  437. package/dist/i18n/useFormatter.js +1 -1
  438. package/dist/i18n/useI18n.js +1 -1
  439. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  440. package/dist/icons/AdjustmentsIcon.js +1 -1
  441. package/dist/icons/AiIcon.js +1 -1
  442. package/dist/icons/AreaChartIcon.js +1 -1
  443. package/dist/icons/BackwardIcon.js +1 -1
  444. package/dist/icons/BarChartIcon.js +1 -1
  445. package/dist/icons/BellFilledIcon.js +1 -1
  446. package/dist/icons/BellIcon.js +1 -1
  447. package/dist/icons/BooleanIcon.js +1 -1
  448. package/dist/icons/CalendarEditIcon.js +1 -1
  449. package/dist/icons/CalendarIcon.js +1 -1
  450. package/dist/icons/CaretDownIcon.js +1 -1
  451. package/dist/icons/CaretUpIcon.js +1 -1
  452. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  453. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  454. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  455. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  456. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  457. package/dist/icons/ChartBarLineIcon.js +1 -1
  458. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  459. package/dist/icons/ChartBarStackedIcon.js +1 -1
  460. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  461. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  462. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  463. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  464. package/dist/icons/ChartBubbleIcon.js +1 -1
  465. package/dist/icons/ChartDonut2Icon.js +1 -1
  466. package/dist/icons/ChartFunnelIcon.js +1 -1
  467. package/dist/icons/ChartHeatmapIcon.js +1 -1
  468. package/dist/icons/ChartKPIIcon.js +1 -1
  469. package/dist/icons/ChartPie2Icon.js +1 -1
  470. package/dist/icons/ChartScatterIcon.js +1 -1
  471. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  472. package/dist/icons/CheckCircleIcon.js +1 -1
  473. package/dist/icons/CheckIcon.js +1 -1
  474. package/dist/icons/CircleFilledIcon.js +1 -1
  475. package/dist/icons/ClearIcon.js +1 -1
  476. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  477. package/dist/icons/CloseCircleIcon.js +1 -1
  478. package/dist/icons/CloseIcon.js +1 -1
  479. package/dist/icons/CodeIcon.js +1 -1
  480. package/dist/icons/ColumnTotalIcon.js +1 -1
  481. package/dist/icons/CopyIcon.js +1 -1
  482. package/dist/icons/CountIcon.js +1 -1
  483. package/dist/icons/CubeIcon.js +1 -1
  484. package/dist/icons/CubePauseIcon.js +1 -1
  485. package/dist/icons/CubePlayIcon.js +1 -1
  486. package/dist/icons/CurrencyDollarIcon.js +1 -1
  487. package/dist/icons/DangerIcon.js +1 -1
  488. package/dist/icons/DashboardIcon.js +1 -1
  489. package/dist/icons/DatabaseIcon.js +1 -1
  490. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  491. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  492. package/dist/icons/DirectionIcon.js +1 -1
  493. package/dist/icons/DonutIcon.js +1 -1
  494. package/dist/icons/DownIcon.js +1 -1
  495. package/dist/icons/EditIcon.js +1 -1
  496. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  497. package/dist/icons/ExclamationCircleIcon.js +1 -1
  498. package/dist/icons/ExclamationIcon.js +1 -1
  499. package/dist/icons/EyeIcon.js +1 -1
  500. package/dist/icons/EyeInvisibleIcon.js +1 -1
  501. package/dist/icons/FilterIcon.js +1 -1
  502. package/dist/icons/FolderFilledIcon.js +1 -1
  503. package/dist/icons/FolderIcon.js +1 -1
  504. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  505. package/dist/icons/FolderOpenIcon.js +1 -1
  506. package/dist/icons/ForwardIcon.js +1 -1
  507. package/dist/icons/GripVerticalIcon.js +1 -1
  508. package/dist/icons/HierarchyIcon.js +1 -1
  509. package/dist/icons/HierarchyOpenIcon.js +1 -1
  510. package/dist/icons/Icon.js +1 -1
  511. package/dist/icons/InfoCircleIcon.js +1 -1
  512. package/dist/icons/InfoIcon.js +1 -1
  513. package/dist/icons/KeyIcon.js +1 -1
  514. package/dist/icons/LeftIcon.js +1 -1
  515. package/dist/icons/LineChartIcon.js +1 -1
  516. package/dist/icons/LoadingIcon.js +1 -1
  517. package/dist/icons/LockFilledIcon.js +1 -1
  518. package/dist/icons/LockIcon.js +1 -1
  519. package/dist/icons/MoreIcon.js +1 -1
  520. package/dist/icons/NotAllowedIcon.js +1 -1
  521. package/dist/icons/Number123Icon.js +1 -1
  522. package/dist/icons/NumberIcon.js +1 -1
  523. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  524. package/dist/icons/PauseCircleIcon.js +1 -1
  525. package/dist/icons/PauseIcon.js +1 -1
  526. package/dist/icons/PercentageIcon.js +1 -1
  527. package/dist/icons/PieChartIcon.js +1 -1
  528. package/dist/icons/PipetteIcon.d.ts +12 -0
  529. package/dist/icons/PipetteIcon.js +11 -0
  530. package/dist/icons/PipetteIcon.js.map +1 -0
  531. package/dist/icons/PlayCircleIcon.js +1 -1
  532. package/dist/icons/PlayIcon.js +1 -1
  533. package/dist/icons/PlusIcon.js +1 -1
  534. package/dist/icons/ProgressBarIcon.js +1 -1
  535. package/dist/icons/ReloadIcon.js +1 -1
  536. package/dist/icons/ReportIcon.js +1 -1
  537. package/dist/icons/ReturnIcon.js +1 -1
  538. package/dist/icons/RightIcon.js +1 -1
  539. package/dist/icons/RowTotalsIcon.js +1 -1
  540. package/dist/icons/SchemeIcon.js +1 -1
  541. package/dist/icons/SearchIcon.js +1 -1
  542. package/dist/icons/SemanticQueryIcon.js +1 -1
  543. package/dist/icons/SettingsIcon.js +1 -1
  544. package/dist/icons/ShieldFilledIcon.js +1 -1
  545. package/dist/icons/ShieldIcon.js +1 -1
  546. package/dist/icons/SlashIcon.js +1 -1
  547. package/dist/icons/SparklesIcon.js +1 -1
  548. package/dist/icons/SqlIcon.js +1 -1
  549. package/dist/icons/StatsIcon.js +1 -1
  550. package/dist/icons/StopIcon.js +1 -1
  551. package/dist/icons/StringIcon.js +1 -1
  552. package/dist/icons/SubtotalsIcon.js +1 -1
  553. package/dist/icons/SwitchIcon.js +1 -1
  554. package/dist/icons/TableIcon.js +1 -1
  555. package/dist/icons/ThumbsDownIcon.js +1 -1
  556. package/dist/icons/ThumbsUpIcon.js +1 -1
  557. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  558. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  559. package/dist/icons/ThunderboltIcon.js +1 -1
  560. package/dist/icons/TimeIcon.js +1 -1
  561. package/dist/icons/TrashIcon.js +1 -1
  562. package/dist/icons/UnlockIcon.js +1 -1
  563. package/dist/icons/UpIcon.js +1 -1
  564. package/dist/icons/UserGroupIcon.js +1 -1
  565. package/dist/icons/UserIcon.js +1 -1
  566. package/dist/icons/UserLockIcon.js +1 -1
  567. package/dist/icons/ViewIcon.js +1 -1
  568. package/dist/icons/WarningFilledIcon.js +1 -1
  569. package/dist/icons/WarningIcon.js +1 -1
  570. package/dist/icons/index.d.ts +1 -0
  571. package/dist/icons/wrap-icon.js +1 -1
  572. package/dist/index.d.ts +31 -12
  573. package/dist/index.js +24 -11
  574. package/dist/index.js.map +1 -1
  575. package/dist/provider.js +1 -1
  576. package/dist/providers/TrackingProvider.js +1 -1
  577. package/dist/providers/navigationAdapter.default.js +1 -1
  578. package/dist/tokens/base.js +1 -1
  579. package/dist/tokens/colors.js +1 -1
  580. package/dist/tokens/index.js +1 -1
  581. package/dist/tokens/layout.js +1 -1
  582. package/dist/tokens/lazy-styles.js +1 -1
  583. package/dist/tokens/palette-config.js +1 -1
  584. package/dist/tokens/palette.js +1 -1
  585. package/dist/tokens/shadows.js +1 -1
  586. package/dist/tokens/sizes.js +1 -1
  587. package/dist/tokens/spacing.js +1 -1
  588. package/dist/tokens/typography.d.ts +1 -1
  589. package/dist/tokens/typography.js +11 -2
  590. package/dist/tokens/typography.js.map +1 -1
  591. package/dist/utils/ResizeSensor.js +1 -1
  592. package/dist/utils/index.d.ts +1 -0
  593. package/dist/utils/is-dev-env.js +1 -1
  594. package/dist/utils/modules.js +1 -1
  595. package/dist/utils/promise.js +1 -1
  596. package/dist/utils/raf.js +1 -1
  597. package/dist/utils/random.js +1 -1
  598. package/dist/utils/range.js +1 -1
  599. package/dist/utils/react/RenderCache.js +1 -1
  600. package/dist/utils/react/Slots.js +1 -1
  601. package/dist/utils/react/chain.js +1 -1
  602. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  603. package/dist/utils/react/index.d.ts +1 -0
  604. package/dist/utils/react/index.js +2 -1
  605. package/dist/utils/react/interactions.js +1 -1
  606. package/dist/utils/react/isTextOnly.js +1 -1
  607. package/dist/utils/react/mapProps.js +1 -1
  608. package/dist/utils/react/mergeProps.js +1 -1
  609. package/dist/utils/react/nullableValue.js +1 -1
  610. package/dist/utils/react/resolveIcon.js +1 -1
  611. package/dist/utils/react/sharedStore.js +1 -1
  612. package/dist/utils/react/useBufferedValue.d.ts +56 -0
  613. package/dist/utils/react/useBufferedValue.js +86 -0
  614. package/dist/utils/react/useBufferedValue.js.map +1 -0
  615. package/dist/utils/react/useCombinedRefs.js +1 -1
  616. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  617. package/dist/utils/react/useEventBus.js +1 -1
  618. package/dist/utils/react/useId.js +1 -1
  619. package/dist/utils/react/useIsDarwin.js +1 -1
  620. package/dist/utils/react/useKeySymbols.js +1 -1
  621. package/dist/utils/react/useLayoutEffect.js +1 -1
  622. package/dist/utils/react/useLocalStorage.js +1 -1
  623. package/dist/utils/react/useMergeStyles.js +1 -1
  624. package/dist/utils/react/usePopoverSync.js +1 -1
  625. package/dist/utils/react/useQaProps.js +1 -1
  626. package/dist/utils/react/useViewportSize.js +1 -1
  627. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  628. package/dist/utils/selection.js +1 -1
  629. package/dist/utils/styles.js +1 -1
  630. package/dist/utils/tree.js +1 -1
  631. package/dist/utils/warnings.js +1 -1
  632. package/dist/version.js +2 -2
  633. package/docs/components/actions/ButtonGroup.md +1 -1
  634. package/docs/components/data/DataTable.md +298 -0
  635. package/docs/components/data/ItemTable.md +984 -0
  636. package/docs/components/fields/ColorInput.md +284 -0
  637. package/docs/components/fields/ColorPicker.md +212 -0
  638. package/docs/components/fields/ColorSwatchGroup.md +206 -0
  639. package/docs/components/fields/FilterPicker.md +1 -1
  640. package/docs/components/fields/ListBox.md +4 -0
  641. package/docs/components/fields/PasswordInput.md +1 -0
  642. package/docs/components/fields/Picker.md +1 -1
  643. package/docs/components/fields/SearchInput.md +1 -0
  644. package/docs/components/fields/TextArea.md +1 -0
  645. package/docs/components/fields/TextInput.md +1 -0
  646. package/docs/components/layout/Board.md +154 -6
  647. package/docs/components/navigation/Pagination.md +245 -0
  648. package/package.json +8 -3
  649. package/dist/components/organisms/FileTabs/FileTabs.d.ts +0 -54
  650. package/dist/components/organisms/FileTabs/FileTabs.js +0 -282
  651. package/dist/components/organisms/FileTabs/FileTabs.js.map +0 -1
  652. package/docs/components/organisms/FileTabs.md +0 -51
@@ -0,0 +1,350 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.157.0 | Cube Dev Team */
2
+ import { extractStyles } from "../../../utils/styles.js";
3
+ import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
5
+ import { useI18n } from "../../../i18n/useI18n.js";
6
+ import { DraggableCollection } from "../../shared/DraggableCollection.js";
7
+ import { clampPage, getPageInfo } from "../../navigation/Pagination/use-pagination.js";
8
+ import { ItemTableFooter } from "./ItemTableFooter.js";
9
+ import { ROW_MENU_COLUMN_KEY, ROW_MENU_COLUMN_WIDTH } from "../TableBase/row-menu.js";
10
+ import { useTableColumns } from "../TableBase/use-table-columns.js";
11
+ import { SELECTION_COLUMN_KEY, SELECTION_COLUMN_WIDTH, useTableSelection } from "../TableBase/use-table-selection.js";
12
+ import { TableView } from "../TableBase/TableView.js";
13
+ import { useContainerWidth } from "../TableBase/use-container-width.js";
14
+ import { useTableSort } from "../TableBase/use-table-sort.js";
15
+ import { useTableStorage } from "../TableBase/use-table-storage.js";
16
+ import { useTableSearch } from "../TableBase/use-table-search.js";
17
+ import { ItemTableChromeProvider, ItemTableSearch, ItemTableToolbar } from "./ItemTableToolbar.js";
18
+ import { ItemTableBulkBar } from "./ItemTableBulkBar.js";
19
+ import { ItemTableDragPreview } from "./ItemTableDragPreview.js";
20
+ import { CONTAINER_STYLES } from "@tenphi/tasty";
21
+ import { forwardRef, useMemo, useRef, useState } from "react";
22
+ import { jsx } from "react/jsx-runtime";
23
+ import { useControlledState } from "@react-stately/utils";
24
+
25
+ //#region src/components/data/ItemTable/ItemTable.tsx
26
+ /** Stable identity, so the uncontrolled default does not change every render. */
27
+ const EMPTY_WIDTHS = {};
28
+ function defaultGetRowKey(rowKey) {
29
+ return (row, index) => {
30
+ const value = row?.[rowKey];
31
+ return value == null ? index : value;
32
+ };
33
+ }
34
+ function ItemTable(props, ref) {
35
+ const { data, columns, rowKey = "id", getRowKey, isLoading = false, loadingIndicator = "overlay", selectionMode, bulkActions, rowLink, onRowAction, rowMenu, rowContextMenu = false, onRowMenuAction, rowMenuTriggerProps, bulkBarPlacement = "floating", bulkBarStyles, selectedKeys: selectedKeysProp, defaultSelectedKeys, onSelectionChange, selectAllMode = "page", isRowSelectable, selectionTooltip, disabledKeys, skeletonRowCount = 6, emptyLabel, noResultsLabel, error, isFiltered, toolbar, isSearchable = false, searchMode = "client", searchPlaceholder, searchValue: searchValueProp, defaultSearchValue, onSearchChange, searchDelay = 500, searchFilter, filters, actions, onRefresh, paginationMode = "client", pageSize: pageSizeProp, defaultPageSize = 50, autoHidePagination = true, onLoadMore, hasMore, isLoadingMore, loadMoreMargin, storageKey, persist, isReorderable = false, onReorder, dropOnRow, getItemDragInfo, isResizable = false, columnWidths: columnWidthsProp, defaultColumnWidths, onColumnResize, onPageSizeChange, pageSizeOptions = [
36
+ 10,
37
+ 20,
38
+ 50,
39
+ 100,
40
+ 500
41
+ ], page: pageProp, defaultPage, onPageChange, total: totalProp, totalPages, hasNextPage, summary = true, footer, footerStart, footerCenter, footerEnd, sortMode, sort: sortProp, defaultSort, onSortChange, shape = "plain", size = "medium", rowHeight, headerHeight, isStriped = false, isHeaderHidden = false, isHeaderSticky = true, isVirtualized = "auto", virtualizeThreshold = 50, overscan = 20, getRowProps, ariaLabel, qa, mods, styles, headerStyles, headerCellStyles, headerPreset = "c3", toolbarStyles, searchStyles, footerStyles, bodyStyles, rowStyles, cellStyles, isRowMoveAnimated } = props;
42
+ const { t } = useI18n();
43
+ const rootRef = useCombinedRefs(ref, useRef(null));
44
+ const [scrollerEl, setScrollerEl] = useState(null);
45
+ const containerWidth = useContainerWidth(scrollerEl);
46
+ const rootStyles = {
47
+ ...extractStyles(props, CONTAINER_STYLES),
48
+ ...styles
49
+ };
50
+ const { searchValue, setSearchValue, searchedRows, isFiltered: isSearching } = useTableSearch({
51
+ columns,
52
+ rows: data,
53
+ mode: searchMode,
54
+ value: searchValueProp,
55
+ defaultValue: defaultSearchValue,
56
+ onChange: onSearchChange,
57
+ delay: searchDelay,
58
+ filter: searchFilter
59
+ });
60
+ const storage = useTableStorage(storageKey, persist);
61
+ const { sort, sortedRows, toggleSort, mode: resolvedSortMode } = useTableSort({
62
+ columns,
63
+ rows: searchedRows,
64
+ mode: sortMode,
65
+ sort: sortProp,
66
+ defaultSort: sortProp === void 0 && storage.has("sort") ? storage.initial.sort ?? defaultSort : defaultSort,
67
+ onSortChange: useEvent((next) => {
68
+ if (sortProp === void 0) storage.write({ sort: next });
69
+ onSortChange?.(next);
70
+ })
71
+ });
72
+ const [pageSize, setPageSizeState] = useControlledState(pageSizeProp, pageSizeProp === void 0 && storage.has("pageSize") ? storage.initial.pageSize ?? defaultPageSize : defaultPageSize, onPageSizeChange);
73
+ const [page, setPageState] = useControlledState(pageProp, defaultPage ?? 1, onPageChange);
74
+ const isInfinite = paginationMode === "infinite";
75
+ const isPaginated = paginationMode !== "off" && !isInfinite;
76
+ const isServerPaginated = paginationMode === "server";
77
+ const total = isServerPaginated ? totalProp ?? 0 : sortedRows.length;
78
+ const pageInfo = getPageInfo({
79
+ page,
80
+ pageSize,
81
+ total,
82
+ totalPages: isServerPaginated ? totalPages : void 0
83
+ });
84
+ const setPage = useEvent((next) => setPageState(clampPage(next, pageInfo.totalPages)));
85
+ const setPageSize = useEvent((next) => {
86
+ setPageSizeState(next);
87
+ if (pageSizeProp === void 0) storage.write({ pageSize: next });
88
+ setPageState(1);
89
+ });
90
+ const visibleRows = paginationMode === "client" ? sortedRows.slice((pageInfo.page - 1) * pageSize, pageInfo.page * pageSize) : sortedRows;
91
+ const resolvedGetRowKey = useMemo(() => getRowKey ?? defaultGetRowKey(rowKey), [getRowKey, rowKey]);
92
+ const resolvedSelectionMode = selectionMode ?? (bulkActions?.length ? "multiple" : "none");
93
+ const selection = useTableSelection({
94
+ rows: visibleRows,
95
+ filteredRows: paginationMode === "client" ? sortedRows : visibleRows,
96
+ getRowKey: resolvedGetRowKey,
97
+ selectionMode: resolvedSelectionMode,
98
+ selectedKeys: selectedKeysProp,
99
+ defaultSelectedKeys,
100
+ onSelectionChange,
101
+ selectAllMode,
102
+ isRowSelectable,
103
+ disabledKeys
104
+ });
105
+ const resolveRowMenu = useMemo(() => rowMenu == null ? void 0 : typeof rowMenu === "function" ? rowMenu : () => rowMenu, [rowMenu]);
106
+ const trailingColumns = useMemo(() => resolveRowMenu && rowContextMenu === true ? [{
107
+ key: ROW_MENU_COLUMN_KEY,
108
+ width: ROW_MENU_COLUMN_WIDTH[size] ?? ROW_MENU_COLUMN_WIDTH.medium,
109
+ align: "center"
110
+ }] : void 0, [
111
+ resolveRowMenu,
112
+ rowContextMenu,
113
+ size
114
+ ]);
115
+ const leadingColumns = useMemo(() => selection.isEnabled ? [{
116
+ key: SELECTION_COLUMN_KEY,
117
+ width: SELECTION_COLUMN_WIDTH[size] ?? SELECTION_COLUMN_WIDTH.medium,
118
+ align: "center"
119
+ }] : void 0, [selection.isEnabled, size]);
120
+ /**
121
+ * Column widths, in three layers.
122
+ *
123
+ * The draft exists because a resize has to be visible *while* it happens, and
124
+ * a controlled `columnWidths` cannot be: the consumer only learns the new
125
+ * width from `onColumnResize`, which fires when the gesture ends. Without a
126
+ * draft a controlled table simply would not move under the pointer.
127
+ */
128
+ const [ownColumnWidths, setOwnColumnWidths] = useState(() => (columnWidthsProp === void 0 && storage.has("columnWidths") ? storage.initial.columnWidths ?? defaultColumnWidths : defaultColumnWidths) ?? EMPTY_WIDTHS);
129
+ const [draftColumnWidths, setDraftColumnWidths] = useState(null);
130
+ /**
131
+ * The same draft, in a ref.
132
+ *
133
+ * A keyboard resize runs `useMove`'s whole start → move → end cycle inside
134
+ * one key press, so the end handler would read the state from before the
135
+ * move. The ref is what it actually settles on; the state exists only to
136
+ * trigger the render.
137
+ */
138
+ const draftColumnWidthsRef = useRef(null);
139
+ const baseColumnWidths = columnWidthsProp ?? ownColumnWidths;
140
+ const columnWidths = draftColumnWidths ?? baseColumnWidths;
141
+ const handleColumnResize = useEvent((key, width) => {
142
+ draftColumnWidthsRef.current = {
143
+ ...draftColumnWidthsRef.current ?? baseColumnWidths,
144
+ [key]: Math.round(width)
145
+ };
146
+ setDraftColumnWidths(draftColumnWidthsRef.current);
147
+ });
148
+ const handleColumnResizeEnd = useEvent((key) => {
149
+ const next = draftColumnWidthsRef.current ?? baseColumnWidths;
150
+ if (columnWidthsProp === void 0) {
151
+ setOwnColumnWidths(next);
152
+ storage.write({ columnWidths: next });
153
+ }
154
+ onColumnResize?.(key, next[key], next);
155
+ draftColumnWidthsRef.current = null;
156
+ setDraftColumnWidths(null);
157
+ });
158
+ const layout = useTableColumns({
159
+ columns,
160
+ containerWidth,
161
+ columnWidths,
162
+ leadingColumns,
163
+ trailingColumns
164
+ });
165
+ const bulkBar = bulkActions != null && bulkActions.length > 0 && selection.selectedCount > 0 ? /* @__PURE__ */ jsx(ItemTableBulkBar, {
166
+ actions: bulkActions,
167
+ placement: bulkBarPlacement,
168
+ styles: bulkBarStyles
169
+ }) : null;
170
+ const isBulkBarInToolbar = bulkBar != null && bulkBarPlacement === "toolbar";
171
+ const toolbarNode = toolbar !== void 0 || isSearchable || filters != null || actions != null || onRefresh != null || isBulkBarInToolbar ? toolbar ?? /* @__PURE__ */ jsx(ItemTableToolbar, {
172
+ isSearchable,
173
+ filters,
174
+ actions: isBulkBarInToolbar ? bulkBar : actions,
175
+ isLoading,
176
+ styles: toolbarStyles,
177
+ searchStyles,
178
+ onRefresh
179
+ }) : null;
180
+ /**
181
+ * Pagination that cannot do anything is noise: one page of five rows still
182
+ * renders "1–5 of 5", a page-size selector whose every option shows the same
183
+ * five rows, and a solitary "1" button.
184
+ *
185
+ * "Cannot do anything" is both conditions together — a single page *and* a
186
+ * total that even the smallest page size would not split. A 15-row single
187
+ * page stays, because choosing "10 / page" would genuinely paginate it.
188
+ */
189
+ const smallestPageSize = pageSizeOptions?.length ? Math.min(...pageSizeOptions) : pageSize;
190
+ const isPaginationUseless = autoHidePagination && !hasNextPage && pageInfo.totalPages <= 1 && total <= smallestPageSize;
191
+ const showPagination = isPaginated && !isPaginationUseless;
192
+ const footerNode = footer !== void 0 || showPagination || footerStart != null || footerCenter != null || footerEnd != null ? footer ?? /* @__PURE__ */ jsx(ItemTableFooter, {
193
+ start: footerStart,
194
+ center: footerCenter,
195
+ end: footerEnd,
196
+ styles: footerStyles,
197
+ pagination: showPagination ? {
198
+ page: pageInfo.page,
199
+ pageSize,
200
+ total,
201
+ totalPages: pageInfo.totalPages,
202
+ pageSizeOptions,
203
+ summary,
204
+ hasNextPage,
205
+ onPageChange: setPage,
206
+ onPageSizeChange: setPageSize
207
+ } : void 0
208
+ }) : null;
209
+ const bodyRef = useRef(null);
210
+ const rowKeys = useMemo(() => visibleRows.map((row, index) => String(resolvedGetRowKey(row, index))), [visibleRows, resolvedGetRowKey]);
211
+ const handleReorder = useEvent((nextKeys) => {
212
+ const byKey = new Map(visibleRows.map((row, index) => [String(resolvedGetRowKey(row, index)), row]));
213
+ onReorder?.(nextKeys, nextKeys.map((key) => byKey.get(key)).filter((row) => row !== void 0));
214
+ });
215
+ /**
216
+ * `DraggableCollection` owns the React Aria drag/drop hooks and hands the two
217
+ * states down. It is only mounted when reordering is on, so a plain table
218
+ * pays nothing for it.
219
+ *
220
+ * `RowCollection` and the `SelectionManager` from `useTableSelection` satisfy
221
+ * its structural `state` contract unchanged — both exist even when selection
222
+ * itself is off.
223
+ */
224
+ const renderTable = (dragState, dropState, collectionProps) => /* @__PURE__ */ jsx(TableView, {
225
+ rootRef,
226
+ dragState,
227
+ dropState,
228
+ collectionProps,
229
+ bodyRef,
230
+ qa: qa || "ItemTable",
231
+ rows: visibleRows,
232
+ rowIndexOffset: isPaginated ? (pageInfo.page - 1) * pageSize : 0,
233
+ totalRowCount: total,
234
+ getRowKey: resolvedGetRowKey,
235
+ layout,
236
+ onScrollerRef: setScrollerEl,
237
+ size,
238
+ shape,
239
+ rowHeight,
240
+ headerHeight,
241
+ isHeaderHidden,
242
+ isHeaderSticky,
243
+ isVirtualized,
244
+ virtualizeThreshold,
245
+ overscan,
246
+ isStriped,
247
+ isRowMoveAnimated,
248
+ isLoading,
249
+ loadingIndicator,
250
+ selection,
251
+ selectionTooltip,
252
+ rowLink,
253
+ onRowAction,
254
+ onLoadMore: isInfinite ? onLoadMore : void 0,
255
+ hasMore,
256
+ isLoadingMore,
257
+ loadMoreMargin,
258
+ isReorderable: isDragEnabled,
259
+ isResizable,
260
+ onColumnResize: handleColumnResize,
261
+ onColumnResizeEnd: handleColumnResizeEnd,
262
+ rowMenu: resolveRowMenu,
263
+ rowContextMenu,
264
+ onRowMenuAction,
265
+ rowMenuTriggerProps,
266
+ skeletonRowCount,
267
+ emptyLabel: emptyLabel ?? t("itemTable.noItems", "No items"),
268
+ noResultsLabel: noResultsLabel ?? t("itemTable.noResults", "No results found"),
269
+ error,
270
+ toolbar: toolbarNode,
271
+ footer: footerNode,
272
+ isFiltered: isFiltered ?? isSearching,
273
+ sortMode: resolvedSortMode,
274
+ sort,
275
+ onColumnSort: toggleSort,
276
+ getRowProps,
277
+ ariaLabel,
278
+ styles: rootStyles,
279
+ headerStyles,
280
+ headerCellStyles,
281
+ headerPreset,
282
+ bodyStyles,
283
+ rowStyles,
284
+ cellStyles,
285
+ mods,
286
+ overlay: bulkBarPlacement === "floating" ? bulkBar : null
287
+ });
288
+ const rowByKeyForDrop = useMemo(() => {
289
+ const map = /* @__PURE__ */ new Map();
290
+ visibleRows.forEach((row, index) => map.set(String(resolvedGetRowKey(row, index)), row));
291
+ return map;
292
+ }, [visibleRows, resolvedGetRowKey]);
293
+ const handleItemDrop = useEvent((targetKey, draggedKeys) => {
294
+ if (!dropOnRow) return;
295
+ const target = rowByKeyForDrop.get(String(targetKey));
296
+ if (!target) return;
297
+ const dragged = draggedKeys.map((key) => rowByKeyForDrop.get(String(key))).filter((row) => row !== void 0 && row !== target);
298
+ if (!dragged.length) return;
299
+ if (dropOnRow.isAllowed && !dropOnRow.isAllowed(dragged, target)) return;
300
+ dropOnRow.onDrop(dragged, target);
301
+ });
302
+ const renderDragPreview = useEvent((keys) => /* @__PURE__ */ jsx(ItemTableDragPreview, {
303
+ rows: keys.map((key) => rowByKeyForDrop.get(String(key))).filter((row) => row !== void 0),
304
+ getItemDragInfo
305
+ }));
306
+ const shouldAcceptItemDrop = useEvent((targetKey) => {
307
+ const target = rowByKeyForDrop.get(String(targetKey));
308
+ return target != null && (dropOnRow?.isTarget(target) ?? false);
309
+ });
310
+ const isDragEnabled = isReorderable || dropOnRow != null;
311
+ const table = isDragEnabled ? /* @__PURE__ */ jsx(DraggableCollection, {
312
+ state: {
313
+ collection: selection.collection,
314
+ selectionManager: selection.selectionManager,
315
+ disabledKeys: new Set(disabledKeys ?? [])
316
+ },
317
+ listRef: bodyRef,
318
+ orderedKeys: rowKeys,
319
+ orientation: "vertical",
320
+ onReorder: isReorderable ? handleReorder : void 0,
321
+ onItemDrop: dropOnRow ? handleItemDrop : void 0,
322
+ shouldAcceptItemDrop: dropOnRow ? shouldAcceptItemDrop : void 0,
323
+ renderPreview: getItemDragInfo ? renderDragPreview : void 0,
324
+ children: (dragState, dropState, collectionProps) => renderTable(dragState, dropState, collectionProps)
325
+ }) : renderTable();
326
+ return /* @__PURE__ */ jsx(ItemTableChromeProvider, {
327
+ value: {
328
+ searchValue,
329
+ setSearchValue,
330
+ searchPlaceholder,
331
+ isLoading,
332
+ onRefresh,
333
+ selectedKeys: selection.selectedKeys,
334
+ selectedRows: selection.selectedRows,
335
+ selectedCount: selection.selectedCount,
336
+ clearSelection: selection.clearSelection
337
+ },
338
+ children: table
339
+ });
340
+ }
341
+ const _ItemTable = Object.assign(forwardRef(ItemTable), {
342
+ Search: ItemTableSearch,
343
+ Toolbar: ItemTableToolbar,
344
+ BulkBar: ItemTableBulkBar
345
+ });
346
+ _ItemTable.displayName = "ItemTable";
347
+
348
+ //#endregion
349
+ export { _ItemTable };
350
+ //# sourceMappingURL=ItemTable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ItemTable.js","names":[],"sources":["../../../../src/components/data/ItemTable/ItemTable.tsx"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { CONTAINER_STYLES } from '@tenphi/tasty';\nimport { forwardRef, useMemo, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { useCombinedRefs } from '../../../utils/react';\nimport { extractStyles } from '../../../utils/styles';\nimport { clampPage, getPageInfo } from '../../navigation/Pagination';\nimport { DraggableCollection } from '../../shared/DraggableCollection';\nimport {\n ROW_MENU_COLUMN_KEY,\n ROW_MENU_COLUMN_WIDTH,\n} from '../TableBase/row-menu';\nimport { TableView } from '../TableBase/TableView';\nimport { useContainerWidth } from '../TableBase/use-container-width';\nimport { useTableColumns } from '../TableBase/use-table-columns';\nimport { useTableSearch } from '../TableBase/use-table-search';\nimport {\n SELECTION_COLUMN_KEY,\n SELECTION_COLUMN_WIDTH,\n useTableSelection,\n} from '../TableBase/use-table-selection';\nimport { useTableSort } from '../TableBase/use-table-sort';\nimport { useTableStorage } from '../TableBase/use-table-storage';\n\nimport { ItemTableBulkBar } from './ItemTableBulkBar';\nimport { ItemTableDragPreview } from './ItemTableDragPreview';\nimport { ItemTableFooter } from './ItemTableFooter';\nimport {\n ItemTableChromeProvider,\n ItemTableSearch,\n ItemTableToolbar,\n} from './ItemTableToolbar';\n\nimport type { Key } from '@react-types/shared';\nimport type { ForwardedRef, ReactElement, ReactNode } from 'react';\nimport type { CubeTableRowContext, CubeTableSort } from '../TableBase/types';\nimport type { CubeItemTableProps } from './types';\n\n/** Stable identity, so the uncontrolled default does not change every render. */\nconst EMPTY_WIDTHS: Record<string, number> = {};\n\nfunction defaultGetRowKey<T>(rowKey: string) {\n return (row: T, index: number): Key => {\n const value = (row as any)?.[rowKey];\n\n return value == null ? index : (value as Key);\n };\n}\n\nfunction ItemTable<T = any>(\n props: CubeItemTableProps<T>,\n ref: ForwardedRef<HTMLDivElement>,\n): ReactElement {\n const {\n data,\n columns,\n rowKey = 'id',\n getRowKey,\n isLoading = false,\n loadingIndicator = 'overlay',\n selectionMode,\n bulkActions,\n rowLink,\n onRowAction,\n rowMenu,\n rowContextMenu = false,\n onRowMenuAction,\n rowMenuTriggerProps,\n bulkBarPlacement = 'floating',\n bulkBarStyles,\n selectedKeys: selectedKeysProp,\n defaultSelectedKeys,\n onSelectionChange,\n selectAllMode = 'page',\n isRowSelectable,\n selectionTooltip,\n disabledKeys,\n skeletonRowCount = 6,\n emptyLabel,\n noResultsLabel,\n error,\n isFiltered,\n toolbar,\n isSearchable = false,\n searchMode = 'client',\n searchPlaceholder,\n searchValue: searchValueProp,\n defaultSearchValue,\n onSearchChange,\n searchDelay = 500,\n searchFilter,\n filters,\n actions,\n onRefresh,\n paginationMode = 'client',\n pageSize: pageSizeProp,\n defaultPageSize = 50,\n autoHidePagination = true,\n onLoadMore,\n hasMore,\n isLoadingMore,\n loadMoreMargin,\n storageKey,\n persist,\n isReorderable = false,\n onReorder,\n dropOnRow,\n getItemDragInfo,\n isResizable = false,\n columnWidths: columnWidthsProp,\n defaultColumnWidths,\n onColumnResize,\n onPageSizeChange,\n pageSizeOptions = [10, 20, 50, 100, 500],\n page: pageProp,\n defaultPage,\n onPageChange,\n total: totalProp,\n totalPages,\n hasNextPage,\n summary = true,\n footer,\n footerStart,\n footerCenter,\n footerEnd,\n sortMode,\n sort: sortProp,\n defaultSort,\n onSortChange,\n shape = 'plain',\n size = 'medium',\n rowHeight,\n headerHeight,\n isStriped = false,\n isHeaderHidden = false,\n isHeaderSticky = true,\n isVirtualized = 'auto',\n virtualizeThreshold = 50,\n overscan = 20,\n getRowProps,\n ariaLabel,\n qa,\n mods,\n styles,\n headerStyles,\n headerCellStyles,\n headerPreset = 'c3',\n toolbarStyles,\n searchStyles,\n footerStyles,\n bodyStyles,\n rowStyles,\n cellStyles,\n isRowMoveAnimated,\n } = props;\n\n const { t } = useI18n();\n\n const localRef = useRef<HTMLDivElement>(null);\n const rootRef = useCombinedRefs(ref, localRef);\n\n // Held in state, not a ref: the virtualized path's scroller is created by\n // Virtuoso and arrives through a callback, and the column layout has to\n // re-derive once it does.\n const [scrollerEl, setScrollerEl] = useState<HTMLDivElement | null>(null);\n const containerWidth = useContainerWidth(scrollerEl);\n\n // Style props (`height`, `maxHeight`, `margin`, …) land on the root frame.\n // `height` matters most: there is no page-scroll mode, so bounding the table\n // is what turns the body into a scroller and pins the header.\n const rootStyles = { ...extractStyles(props, CONTAINER_STYLES), ...styles };\n\n const {\n searchValue,\n setSearchValue,\n searchedRows,\n isFiltered: isSearching,\n } = useTableSearch<T>({\n columns,\n rows: data,\n mode: searchMode,\n value: searchValueProp,\n defaultValue: defaultSearchValue,\n onChange: onSearchChange,\n delay: searchDelay,\n filter: searchFilter,\n });\n\n const storage = useTableStorage(storageKey, persist);\n\n const {\n sort,\n sortedRows,\n toggleSort,\n mode: resolvedSortMode,\n } = useTableSort<T>({\n columns,\n rows: searchedRows,\n mode: sortMode,\n sort: sortProp,\n // Only restore what the table owns: a controlled `sort` belongs to the page,\n // and overriding it here would fight the page's own source of truth.\n defaultSort:\n sortProp === undefined && storage.has('sort')\n ? storage.initial.sort ?? defaultSort\n : defaultSort,\n onSortChange: useEvent((next: CubeTableSort | null) => {\n if (sortProp === undefined) storage.write({ sort: next });\n onSortChange?.(next);\n }),\n });\n\n // Search → sort → paginate. Paging last, so a page always reflects the rows\n // the user is actually looking at.\n //\n // Deliberately not `usePagination`: that hook owns an in-memory array, and in\n // server mode `data` is a single page. Deriving the bounds from it would clamp\n // the page to 1 and swallow every page change.\n const [pageSize, setPageSizeState] = useControlledState<number>(\n pageSizeProp as number,\n pageSizeProp === undefined && storage.has('pageSize')\n ? storage.initial.pageSize ?? defaultPageSize\n : defaultPageSize,\n onPageSizeChange as (value: number) => void,\n );\n const [page, setPageState] = useControlledState<number>(\n pageProp as number,\n defaultPage ?? 1,\n onPageChange as (value: number) => void,\n );\n\n const isInfinite = paginationMode === 'infinite';\n // Infinite scroll replaces the page control rather than adding to it.\n const isPaginated = paginationMode !== 'off' && !isInfinite;\n const isServerPaginated = paginationMode === 'server';\n const total = isServerPaginated ? totalProp ?? 0 : sortedRows.length;\n\n const pageInfo = getPageInfo({\n page,\n pageSize,\n total,\n totalPages: isServerPaginated ? totalPages : undefined,\n });\n\n const setPage = useEvent((next: number) =>\n setPageState(clampPage(next, pageInfo.totalPages)),\n );\n const setPageSize = useEvent((next: number) => {\n setPageSizeState(next);\n\n if (pageSizeProp === undefined) storage.write({ pageSize: next });\n\n // The old page index points at different rows under a new page size, so\n // staying on it would silently move the user.\n setPageState(1);\n });\n\n const visibleRows =\n paginationMode === 'client'\n ? sortedRows.slice(\n (pageInfo.page - 1) * pageSize,\n pageInfo.page * pageSize,\n )\n : sortedRows;\n\n const resolvedGetRowKey = useMemo(\n () => getRowKey ?? defaultGetRowKey<T>(rowKey),\n [getRowKey, rowKey],\n );\n\n // A bulk action with no way to select rows is a contradiction, so supplying\n // any implies multiple selection unless the consumer says otherwise.\n const resolvedSelectionMode =\n selectionMode ?? (bulkActions?.length ? 'multiple' : 'none');\n\n const selection = useTableSelection<T>({\n rows: visibleRows,\n // The wider set the header checkbox can reach under\n // `selectAllMode=\"filtered\"`. In server mode the client only ever holds one\n // page, so the two coincide.\n filteredRows: paginationMode === 'client' ? sortedRows : visibleRows,\n getRowKey: resolvedGetRowKey,\n selectionMode: resolvedSelectionMode,\n selectedKeys: selectedKeysProp,\n defaultSelectedKeys,\n onSelectionChange,\n selectAllMode,\n isRowSelectable,\n disabledKeys,\n });\n\n // A `ReactNode` menu applies to every row; a function decides per row. The\n // renderer only ever sees the function form.\n const resolveRowMenu = useMemo(\n () =>\n rowMenu == null\n ? undefined\n : typeof rowMenu === 'function'\n ? (rowMenu as (\n row: T,\n ctx: CubeTableRowContext<T>,\n ) => ReactNode | null)\n : () => rowMenu as ReactNode,\n [rowMenu],\n );\n\n const trailingColumns = useMemo(\n () =>\n resolveRowMenu && rowContextMenu === true\n ? [\n {\n key: ROW_MENU_COLUMN_KEY,\n width:\n ROW_MENU_COLUMN_WIDTH[size] ?? ROW_MENU_COLUMN_WIDTH.medium,\n align: 'center' as const,\n },\n ]\n : undefined,\n [resolveRowMenu, rowContextMenu, size],\n );\n\n const leadingColumns = useMemo(\n () =>\n selection.isEnabled\n ? [\n {\n key: SELECTION_COLUMN_KEY,\n width:\n SELECTION_COLUMN_WIDTH[size] ?? SELECTION_COLUMN_WIDTH.medium,\n align: 'center' as const,\n },\n ]\n : undefined,\n [selection.isEnabled, size],\n );\n\n /**\n * Column widths, in three layers.\n *\n * The draft exists because a resize has to be visible *while* it happens, and\n * a controlled `columnWidths` cannot be: the consumer only learns the new\n * width from `onColumnResize`, which fires when the gesture ends. Without a\n * draft a controlled table simply would not move under the pointer.\n */\n const [ownColumnWidths, setOwnColumnWidths] = useState<\n Record<string, number>\n >(\n () =>\n (columnWidthsProp === undefined && storage.has('columnWidths')\n ? storage.initial.columnWidths ?? defaultColumnWidths\n : defaultColumnWidths) ?? EMPTY_WIDTHS,\n );\n const [draftColumnWidths, setDraftColumnWidths] = useState<Record<\n string,\n number\n > | null>(null);\n\n /**\n * The same draft, in a ref.\n *\n * A keyboard resize runs `useMove`'s whole start → move → end cycle inside\n * one key press, so the end handler would read the state from before the\n * move. The ref is what it actually settles on; the state exists only to\n * trigger the render.\n */\n const draftColumnWidthsRef = useRef<Record<string, number> | null>(null);\n\n const baseColumnWidths = columnWidthsProp ?? ownColumnWidths;\n const columnWidths = draftColumnWidths ?? baseColumnWidths;\n\n const handleColumnResize = useEvent((key: string, width: number) => {\n draftColumnWidthsRef.current = {\n ...(draftColumnWidthsRef.current ?? baseColumnWidths),\n [key]: Math.round(width),\n };\n setDraftColumnWidths(draftColumnWidthsRef.current);\n });\n\n // Once at the end: a callback per pixel would be unusable, and persisting\n // every frame would hammer `localStorage`.\n const handleColumnResizeEnd = useEvent((key: string) => {\n const next = draftColumnWidthsRef.current ?? baseColumnWidths;\n\n if (columnWidthsProp === undefined) {\n setOwnColumnWidths(next);\n storage.write({ columnWidths: next });\n }\n\n onColumnResize?.(key, next[key], next);\n\n // The prop (or `ownColumnWidths`) is the source of truth again. A\n // controlled consumer that ignores the callback reverts, which is what\n // being controlled means.\n draftColumnWidthsRef.current = null;\n setDraftColumnWidths(null);\n });\n\n const layout = useTableColumns<T>({\n columns,\n containerWidth,\n columnWidths,\n leadingColumns,\n trailingColumns,\n });\n\n const hasBulkSelection =\n bulkActions != null &&\n bulkActions.length > 0 &&\n selection.selectedCount > 0;\n\n const bulkBar = hasBulkSelection ? (\n <ItemTableBulkBar<T>\n actions={bulkActions!}\n placement={bulkBarPlacement}\n styles={bulkBarStyles}\n />\n ) : null;\n\n const isBulkBarInToolbar = bulkBar != null && bulkBarPlacement === 'toolbar';\n\n const hasToolbar =\n toolbar !== undefined ||\n isSearchable ||\n filters != null ||\n actions != null ||\n onRefresh != null ||\n isBulkBarInToolbar;\n\n const toolbarNode = hasToolbar\n ? toolbar ?? (\n <ItemTableToolbar\n isSearchable={isSearchable}\n filters={filters}\n // The bar takes the actions group rather than sitting beside it: the\n // two compete for the same space, and while rows are selected the\n // bulk actions are what the user is reaching for.\n actions={isBulkBarInToolbar ? bulkBar : actions}\n isLoading={isLoading}\n styles={toolbarStyles}\n searchStyles={searchStyles}\n onRefresh={onRefresh}\n />\n )\n : null;\n\n /**\n * Pagination that cannot do anything is noise: one page of five rows still\n * renders \"1–5 of 5\", a page-size selector whose every option shows the same\n * five rows, and a solitary \"1\" button.\n *\n * \"Cannot do anything\" is both conditions together — a single page *and* a\n * total that even the smallest page size would not split. A 15-row single\n * page stays, because choosing \"10 / page\" would genuinely paginate it.\n */\n const smallestPageSize = pageSizeOptions?.length\n ? Math.min(...pageSizeOptions)\n : pageSize;\n\n const isPaginationUseless =\n autoHidePagination &&\n !hasNextPage &&\n pageInfo.totalPages <= 1 &&\n total <= smallestPageSize;\n\n const showPagination = isPaginated && !isPaginationUseless;\n\n const hasFooter =\n footer !== undefined ||\n showPagination ||\n footerStart != null ||\n footerCenter != null ||\n footerEnd != null;\n\n const footerNode = hasFooter\n ? footer ?? (\n <ItemTableFooter\n start={footerStart}\n center={footerCenter}\n end={footerEnd}\n styles={footerStyles}\n pagination={\n showPagination\n ? {\n page: pageInfo.page,\n pageSize,\n total,\n totalPages: pageInfo.totalPages,\n pageSizeOptions,\n summary,\n hasNextPage,\n onPageChange: setPage,\n onPageSizeChange: setPageSize,\n }\n : undefined\n }\n />\n )\n : null;\n\n const bodyRef = useRef<HTMLTableSectionElement>(null);\n\n const rowKeys = useMemo(\n () =>\n visibleRows.map((row, index) => String(resolvedGetRowKey(row, index))),\n [visibleRows, resolvedGetRowKey],\n );\n\n const handleReorder = useEvent((nextKeys: string[]) => {\n const byKey = new Map(\n visibleRows.map((row, index) => [\n String(resolvedGetRowKey(row, index)),\n row,\n ]),\n );\n\n onReorder?.(\n nextKeys,\n nextKeys\n .map((key) => byKey.get(key))\n .filter((row): row is T => row !== undefined),\n );\n });\n\n /**\n * `DraggableCollection` owns the React Aria drag/drop hooks and hands the two\n * states down. It is only mounted when reordering is on, so a plain table\n * pays nothing for it.\n *\n * `RowCollection` and the `SelectionManager` from `useTableSelection` satisfy\n * its structural `state` contract unchanged — both exist even when selection\n * itself is off.\n */\n const renderTable = (\n dragState?: any,\n dropState?: any,\n collectionProps?: Record<string, any>,\n ) => (\n <TableView<T>\n rootRef={rootRef}\n dragState={dragState}\n dropState={dropState}\n collectionProps={collectionProps}\n bodyRef={bodyRef}\n qa={qa || 'ItemTable'}\n rows={visibleRows}\n // `aria-rowindex` is document-absolute by contract: on page 3 a screen\n // reader should hear \"row 51 of 240\", not \"row 1 of 25\". Infinite scroll\n // never offsets — every loaded row is already in `visibleRows`.\n // `isPaginated` already excludes infinite scroll, where every loaded row\n // is in `visibleRows` and there is no page to offset by.\n rowIndexOffset={isPaginated ? (pageInfo.page - 1) * pageSize : 0}\n totalRowCount={total}\n getRowKey={resolvedGetRowKey}\n layout={layout}\n onScrollerRef={setScrollerEl}\n size={size}\n shape={shape}\n rowHeight={rowHeight}\n headerHeight={headerHeight}\n isHeaderHidden={isHeaderHidden}\n isHeaderSticky={isHeaderSticky}\n isVirtualized={isVirtualized}\n virtualizeThreshold={virtualizeThreshold}\n overscan={overscan}\n isStriped={isStriped}\n isRowMoveAnimated={isRowMoveAnimated}\n isLoading={isLoading}\n loadingIndicator={loadingIndicator}\n selection={selection}\n selectionTooltip={selectionTooltip}\n rowLink={rowLink}\n onRowAction={onRowAction}\n onLoadMore={isInfinite ? onLoadMore : undefined}\n hasMore={hasMore}\n isLoadingMore={isLoadingMore}\n loadMoreMargin={loadMoreMargin}\n isReorderable={isDragEnabled}\n isResizable={isResizable}\n onColumnResize={handleColumnResize}\n onColumnResizeEnd={handleColumnResizeEnd}\n rowMenu={resolveRowMenu}\n rowContextMenu={rowContextMenu}\n onRowMenuAction={onRowMenuAction}\n rowMenuTriggerProps={rowMenuTriggerProps}\n skeletonRowCount={skeletonRowCount}\n emptyLabel={emptyLabel ?? t('itemTable.noItems', 'No items')}\n noResultsLabel={\n noResultsLabel ?? t('itemTable.noResults', 'No results found')\n }\n error={error}\n toolbar={toolbarNode}\n footer={footerNode}\n isFiltered={isFiltered ?? isSearching}\n sortMode={resolvedSortMode}\n sort={sort}\n onColumnSort={toggleSort}\n getRowProps={getRowProps}\n ariaLabel={ariaLabel}\n styles={rootStyles}\n headerStyles={headerStyles}\n headerCellStyles={headerCellStyles}\n headerPreset={headerPreset}\n bodyStyles={bodyStyles}\n rowStyles={rowStyles}\n cellStyles={cellStyles}\n mods={mods}\n overlay={bulkBarPlacement === 'floating' ? bulkBar : null}\n />\n );\n\n const rowByKeyForDrop = useMemo(() => {\n const map = new Map<string, T>();\n\n visibleRows.forEach((row, index) =>\n map.set(String(resolvedGetRowKey(row, index)), row),\n );\n\n return map;\n }, [visibleRows, resolvedGetRowKey]);\n\n const handleItemDrop = useEvent((targetKey: Key, draggedKeys: Key[]) => {\n if (!dropOnRow) return;\n\n const target = rowByKeyForDrop.get(String(targetKey));\n\n if (!target) return;\n\n const dragged = draggedKeys\n .map((key) => rowByKeyForDrop.get(String(key)))\n // A row cannot be dropped on itself.\n .filter((row): row is T => row !== undefined && row !== target);\n\n if (!dragged.length) return;\n if (dropOnRow.isAllowed && !dropOnRow.isAllowed(dragged, target)) return;\n\n void dropOnRow.onDrop(dragged, target);\n });\n\n const renderDragPreview = useEvent((keys: Key[]) => (\n <ItemTableDragPreview<T>\n rows={keys\n .map((key) => rowByKeyForDrop.get(String(key)))\n .filter((row): row is T => row !== undefined)}\n getItemDragInfo={getItemDragInfo!}\n />\n ));\n\n const shouldAcceptItemDrop = useEvent((targetKey: Key) => {\n const target = rowByKeyForDrop.get(String(targetKey));\n\n return target != null && (dropOnRow?.isTarget(target) ?? false);\n });\n\n // Dropping onto a row and reordering both need the drag machinery.\n const isDragEnabled = isReorderable || dropOnRow != null;\n\n const table = isDragEnabled ? (\n <DraggableCollection\n state={{\n collection: selection.collection,\n selectionManager: selection.selectionManager as any,\n disabledKeys: new Set(disabledKeys ?? []),\n }}\n // The element that directly contains the rows. React Aria's\n // `ListDropTargetDelegate` measures the drop position from this element's\n // children, so pointing it at the table root would leave every drop\n // unresolvable — the row lifts but never lands.\n listRef={bodyRef}\n orderedKeys={rowKeys}\n orientation=\"vertical\"\n onReorder={isReorderable ? handleReorder : undefined}\n onItemDrop={dropOnRow ? handleItemDrop : undefined}\n shouldAcceptItemDrop={dropOnRow ? shouldAcceptItemDrop : undefined}\n renderPreview={getItemDragInfo ? renderDragPreview : undefined}\n >\n {(dragState, dropState, collectionProps) =>\n renderTable(dragState, dropState, collectionProps)\n }\n </DraggableCollection>\n ) : (\n renderTable()\n );\n\n // The provider always wraps, so `ItemTable.Search` works from a custom\n // `toolbar` as well as from the built-in one.\n return (\n <ItemTableChromeProvider\n value={{\n searchValue,\n setSearchValue,\n searchPlaceholder,\n isLoading,\n onRefresh,\n selectedKeys: selection.selectedKeys,\n selectedRows: selection.selectedRows,\n selectedCount: selection.selectedCount,\n clearSelection: selection.clearSelection,\n }}\n >\n {table}\n </ItemTableChromeProvider>\n );\n}\n\nconst _ItemTable = Object.assign(\n forwardRef(ItemTable) as unknown as (<T = any>(\n props: CubeItemTableProps<T> & { ref?: ForwardedRef<HTMLDivElement> },\n ) => ReactElement) & { displayName?: string },\n {\n /** The table's search input, bound to the table's own state. */\n Search: ItemTableSearch,\n /** The default toolbar row, for rebuilding it around extra content. */\n Toolbar: ItemTableToolbar,\n /** The selection action bar, for placing it outside the default chrome. */\n BulkBar: ItemTableBulkBar,\n },\n);\n\n_ItemTable.displayName = 'ItemTable';\n\nexport { _ItemTable as ItemTable };\n"],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+
2
+ import { CubeTableBulkAction } from "./types.js";
3
+ import { Styles } from "@tenphi/tasty";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
+
6
+ //#region src/components/data/ItemTable/ItemTableBulkBar.d.ts
7
+ interface ItemTableBulkBarProps<T = any> {
8
+ actions: CubeTableBulkAction<T>[];
9
+ /** @default 'floating' */
10
+ placement?: 'floating' | 'toolbar';
11
+ styles?: Styles;
12
+ }
13
+ /**
14
+ * The action bar shown while rows are selected.
15
+ *
16
+ * Reads the selection from context rather than props, so a consumer rebuilding
17
+ * the toolbar can drop `<ItemTable.BulkBar>` wherever it likes and still have
18
+ * one owner of the selection.
19
+ */
20
+ declare function ItemTableBulkBar<T = any>(props: ItemTableBulkBarProps<T>): react_jsx_runtime0.JSX.Element | null;
21
+ //#endregion
22
+ export { ItemTableBulkBar };
23
+ //# sourceMappingURL=ItemTableBulkBar.d.ts.map
@@ -0,0 +1,131 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.157.0 | Cube Dev Team */
2
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
3
+ import { _Text } from "../../content/Text.js";
4
+ import { TooltipProvider } from "../../overlays/Tooltip/TooltipProvider.js";
5
+ import { useI18n } from "../../../i18n/useI18n.js";
6
+ import { CloseIcon } from "../../../icons/CloseIcon.js";
7
+ import { Button } from "../../actions/index.js";
8
+ import { useItemTableChrome } from "./ItemTableToolbar.js";
9
+ import { tasty } from "@tenphi/tasty";
10
+ import { useState } from "react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+
13
+ //#region src/components/data/ItemTable/ItemTableBulkBar.tsx
14
+ const BarElement = tasty({
15
+ qa: "ItemTableBulkBar",
16
+ as: "div",
17
+ styles: {
18
+ display: "flex",
19
+ flow: "row",
20
+ gap: "1x",
21
+ placeItems: "center",
22
+ boxSizing: "border-box",
23
+ position: {
24
+ "": "static",
25
+ floating: "absolute"
26
+ },
27
+ inset: {
28
+ "": "auto",
29
+ floating: "auto auto 2x 50%"
30
+ },
31
+ translate: {
32
+ "": false,
33
+ floating: "-50% 0"
34
+ },
35
+ zIndex: {
36
+ "": "auto",
37
+ floating: 10
38
+ },
39
+ fill: {
40
+ "": "#clear",
41
+ floating: "#surface"
42
+ },
43
+ color: "#surface-text",
44
+ border: {
45
+ "": false,
46
+ floating: true
47
+ },
48
+ radius: {
49
+ "": 0,
50
+ floating: "1cr"
51
+ },
52
+ shadow: {
53
+ "": false,
54
+ floating: "0 1x 3x #shadow"
55
+ },
56
+ padding: {
57
+ "": 0,
58
+ floating: "1x 1.5x"
59
+ },
60
+ width: {
61
+ "": "auto",
62
+ floating: "max (100% - 4x)"
63
+ }
64
+ }
65
+ });
66
+ /**
67
+ * The action bar shown while rows are selected.
68
+ *
69
+ * Reads the selection from context rather than props, so a consumer rebuilding
70
+ * the toolbar can drop `<ItemTable.BulkBar>` wherever it likes and still have
71
+ * one owner of the selection.
72
+ */
73
+ function ItemTableBulkBar(props) {
74
+ const { actions, placement = "floating", styles } = props;
75
+ const { t } = useI18n();
76
+ const { selectedRows, selectedCount, clearSelection } = useItemTableChrome("ItemTable.BulkBar");
77
+ const [loadingKeys, setLoadingKeys] = useState({});
78
+ const run = useEvent(async (action) => {
79
+ const setLoading = (value) => setLoadingKeys((current) => ({
80
+ ...current,
81
+ [action.key]: value
82
+ }));
83
+ try {
84
+ await action.onAction(selectedRows, { setLoading });
85
+ if (action.deselectAfter !== false) clearSelection();
86
+ } finally {
87
+ setLoading(false);
88
+ }
89
+ });
90
+ if (selectedCount === 0) return null;
91
+ return /* @__PURE__ */ jsxs(BarElement, {
92
+ role: "toolbar",
93
+ "aria-label": t("itemTable.bulkActions", "Bulk actions"),
94
+ styles,
95
+ mods: { floating: placement === "floating" },
96
+ children: [
97
+ /* @__PURE__ */ jsx(_Text, {
98
+ nowrap: true,
99
+ children: t("itemTable.selectedCount", "{{count}} selected", { count: selectedCount })
100
+ }),
101
+ actions.map((action) => {
102
+ const isDisabled = action.isDisabled?.(selectedRows) ?? false;
103
+ const button = /* @__PURE__ */ jsx(Button, {
104
+ size: "small",
105
+ type: action.type ?? "outline",
106
+ theme: action.theme,
107
+ icon: action.icon,
108
+ isDisabled,
109
+ isLoading: loadingKeys[action.key],
110
+ onPress: () => run(action),
111
+ children: action.label
112
+ }, action.key);
113
+ return isDisabled && action.disabledTooltip ? /* @__PURE__ */ jsx(TooltipProvider, {
114
+ title: action.disabledTooltip,
115
+ children: button
116
+ }, action.key) : button;
117
+ }),
118
+ /* @__PURE__ */ jsx(Button, {
119
+ size: "small",
120
+ type: "clear",
121
+ icon: /* @__PURE__ */ jsx(CloseIcon, {}),
122
+ "aria-label": t("itemTable.clearSelection", "Clear selection"),
123
+ onPress: clearSelection
124
+ })
125
+ ]
126
+ });
127
+ }
128
+
129
+ //#endregion
130
+ export { ItemTableBulkBar };
131
+ //# sourceMappingURL=ItemTableBulkBar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ItemTableBulkBar.js","names":["Text"],"sources":["../../../../src/components/data/ItemTable/ItemTableBulkBar.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\nimport { useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon } from '../../../icons';\nimport { Button } from '../../actions';\nimport { Text } from '../../content/Text';\nimport { TooltipProvider } from '../../overlays/Tooltip/TooltipProvider';\n\nimport { useItemTableChrome } from './ItemTableToolbar';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { CubeTableBulkAction } from './types';\n\nconst BarElement = tasty({\n qa: 'ItemTableBulkBar',\n as: 'div',\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center',\n boxSizing: 'border-box',\n\n /**\n * `floating` lifts the bar out of the grid and centres it over the body, so\n * it never changes the table's height — a bar that pushed the rows down\n * would move the very row the user is about to click.\n */\n position: { '': 'static', floating: 'absolute' },\n inset: { '': 'auto', floating: 'auto auto 2x 50%' },\n translate: { '': false, floating: '-50% 0' },\n zIndex: { '': 'auto', floating: 10 },\n // A raised surface rather than an inverted \"toast\": `#dark` flips to a light\n // colour under the dark theme, which would put white text on a light bar.\n fill: { '': '#clear', floating: '#surface' },\n color: '#surface-text',\n border: { '': false, floating: true },\n radius: { '': 0, floating: '1cr' },\n shadow: { '': false, floating: '0 1x 3x #shadow' },\n padding: { '': 0, floating: '1x 1.5x' },\n width: { '': 'auto', floating: 'max (100% - 4x)' },\n },\n});\n\nexport interface ItemTableBulkBarProps<T = any> {\n actions: CubeTableBulkAction<T>[];\n /** @default 'floating' */\n placement?: 'floating' | 'toolbar';\n styles?: Styles;\n}\n\n/**\n * The action bar shown while rows are selected.\n *\n * Reads the selection from context rather than props, so a consumer rebuilding\n * the toolbar can drop `<ItemTable.BulkBar>` wherever it likes and still have\n * one owner of the selection.\n */\nexport function ItemTableBulkBar<T = any>(props: ItemTableBulkBarProps<T>) {\n const { actions, placement = 'floating', styles } = props;\n const { t } = useI18n();\n const chrome = useItemTableChrome('ItemTable.BulkBar');\n const { selectedRows, selectedCount, clearSelection } = chrome;\n\n // Per-action, so one slow request cannot disable the others.\n const [loadingKeys, setLoadingKeys] = useState<Record<string, boolean>>({});\n\n const run = useEvent(async (action: CubeTableBulkAction<T>) => {\n const setLoading = (value: boolean) =>\n setLoadingKeys((current) => ({ ...current, [action.key]: value }));\n\n try {\n await action.onAction(selectedRows as T[], { setLoading });\n\n // Deselecting is the default because the rows an action just deleted or\n // moved are usually gone; an action that only reads keeps the selection\n // by opting out.\n if (action.deselectAfter !== false) clearSelection();\n } finally {\n setLoading(false);\n }\n });\n\n if (selectedCount === 0) return null;\n\n return (\n <BarElement\n role=\"toolbar\"\n aria-label={t('itemTable.bulkActions', 'Bulk actions')}\n styles={styles}\n mods={{ floating: placement === 'floating' }}\n >\n <Text nowrap>\n {t('itemTable.selectedCount', '{{count}} selected', {\n count: selectedCount,\n })}\n </Text>\n\n {actions.map((action) => {\n const isDisabled = action.isDisabled?.(selectedRows as T[]) ?? false;\n const button = (\n <Button\n key={action.key}\n size=\"small\"\n type={action.type ?? 'outline'}\n theme={action.theme}\n icon={action.icon}\n isDisabled={isDisabled}\n isLoading={loadingKeys[action.key]}\n onPress={() => run(action)}\n >\n {action.label}\n </Button>\n );\n\n return isDisabled && action.disabledTooltip ? (\n <TooltipProvider key={action.key} title={action.disabledTooltip}>\n {button}\n </TooltipProvider>\n ) : (\n button\n );\n })}\n\n <Button\n size=\"small\"\n type=\"clear\"\n icon={<CloseIcon />}\n aria-label={t('itemTable.clearSelection', 'Clear selection')}\n onPress={clearSelection}\n />\n </BarElement>\n );\n}\n"],"mappings":";;;;;;;;;;;;;AAeA,MAAM,aAAa,MAAM;CACvB,IAAI;CACJ,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,MAAM;EACN,KAAK;EACL,YAAY;EACZ,WAAW;EAOX,UAAU;GAAE,IAAI;GAAU,UAAU;GAAY;EAChD,OAAO;GAAE,IAAI;GAAQ,UAAU;GAAoB;EACnD,WAAW;GAAE,IAAI;GAAO,UAAU;GAAU;EAC5C,QAAQ;GAAE,IAAI;GAAQ,UAAU;GAAI;EAGpC,MAAM;GAAE,IAAI;GAAU,UAAU;GAAY;EAC5C,OAAO;EACP,QAAQ;GAAE,IAAI;GAAO,UAAU;GAAM;EACrC,QAAQ;GAAE,IAAI;GAAG,UAAU;GAAO;EAClC,QAAQ;GAAE,IAAI;GAAO,UAAU;GAAmB;EAClD,SAAS;GAAE,IAAI;GAAG,UAAU;GAAW;EACvC,OAAO;GAAE,IAAI;GAAQ,UAAU;GAAmB;EACnD;CACF,CAAC;;;;;;;;AAgBF,SAAgB,iBAA0B,OAAiC;CACzE,MAAM,EAAE,SAAS,YAAY,YAAY,WAAW;CACpD,MAAM,EAAE,MAAM,SAAS;CAEvB,MAAM,EAAE,cAAc,eAAe,mBADtB,mBAAmB,oBAAoB;CAItD,MAAM,CAAC,aAAa,kBAAkB,SAAkC,EAAE,CAAC;CAE3E,MAAM,MAAM,SAAS,OAAO,WAAmC;EAC7D,MAAM,cAAc,UAClB,gBAAgB,aAAa;GAAE,GAAG;IAAU,OAAO,MAAM;GAAO,EAAE;AAEpE,MAAI;AACF,SAAM,OAAO,SAAS,cAAqB,EAAE,YAAY,CAAC;AAK1D,OAAI,OAAO,kBAAkB,MAAO,iBAAgB;YAC5C;AACR,cAAW,MAAM;;GAEnB;AAEF,KAAI,kBAAkB,EAAG,QAAO;AAEhC,QACE,qBAAC;EACC,MAAK;EACL,cAAY,EAAE,yBAAyB,eAAe;EAC9C;EACR,MAAM,EAAE,UAAU,cAAc,YAAY;;GAE5C,oBAACA;IAAK;cACH,EAAE,2BAA2B,sBAAsB,EAClD,OAAO,eACR,CAAC;KACG;GAEN,QAAQ,KAAK,WAAW;IACvB,MAAM,aAAa,OAAO,aAAa,aAAoB,IAAI;IAC/D,MAAM,SACJ,oBAAC;KAEC,MAAK;KACL,MAAM,OAAO,QAAQ;KACrB,OAAO,OAAO;KACd,MAAM,OAAO;KACD;KACZ,WAAW,YAAY,OAAO;KAC9B,eAAe,IAAI,OAAO;eAEzB,OAAO;OATH,OAAO,IAUL;AAGX,WAAO,cAAc,OAAO,kBAC1B,oBAAC;KAAiC,OAAO,OAAO;eAC7C;OADmB,OAAO,IAEX,GAElB;KAEF;GAEF,oBAAC;IACC,MAAK;IACL,MAAK;IACL,MAAM,oBAAC,cAAY;IACnB,cAAY,EAAE,4BAA4B,kBAAkB;IAC5D,SAAS;KACT;;GACS"}
@@ -0,0 +1,46 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.157.0 | Cube Dev Team */
2
+ import { _Text } from "../../content/Text.js";
3
+ import { useI18n } from "../../../i18n/useI18n.js";
4
+ import { tasty } from "@tenphi/tasty";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+
7
+ //#region src/components/data/ItemTable/ItemTableDragPreview.tsx
8
+ const PreviewElement = tasty({
9
+ qa: "ItemTableDragPreview",
10
+ as: "div",
11
+ styles: {
12
+ display: "flex",
13
+ flow: "row",
14
+ gap: "1x",
15
+ placeItems: "center",
16
+ padding: ".5x 1x",
17
+ radius: "1cr",
18
+ fill: "#surface",
19
+ color: "#surface-text",
20
+ border: true,
21
+ shadow: "0 1x 3x #shadow",
22
+ preset: "t3",
23
+ width: "max 40x",
24
+ whiteSpace: "nowrap",
25
+ overflow: "hidden",
26
+ textOverflow: "ellipsis"
27
+ }
28
+ });
29
+ /**
30
+ * What the cursor drags.
31
+ *
32
+ * One row shows its icon and label. Several show a count — a single chip cannot
33
+ * honestly represent five different rows, and Cloud settled on the same answer.
34
+ */
35
+ function ItemTableDragPreview(props) {
36
+ const { rows, getItemDragInfo } = props;
37
+ const { t } = useI18n();
38
+ if (!rows.length) return null;
39
+ if (rows.length > 1) return /* @__PURE__ */ jsx(PreviewElement, { children: /* @__PURE__ */ jsx(_Text, { children: t("itemTable.dragCount", "{{count}} items", { count: rows.length }) }) });
40
+ const info = getItemDragInfo(rows[0]);
41
+ return /* @__PURE__ */ jsxs(PreviewElement, { children: [info.icon, /* @__PURE__ */ jsx(_Text, { children: info.label })] });
42
+ }
43
+
44
+ //#endregion
45
+ export { ItemTableDragPreview };
46
+ //# sourceMappingURL=ItemTableDragPreview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ItemTableDragPreview.js","names":["Text"],"sources":["../../../../src/components/data/ItemTable/ItemTableDragPreview.tsx"],"sourcesContent":["import { tasty } from '@tenphi/tasty';\n\nimport { useI18n } from '../../../i18n';\nimport { Text } from '../../content/Text';\n\nimport type { ReactNode } from 'react';\n\nconst PreviewElement = tasty({\n qa: 'ItemTableDragPreview',\n as: 'div',\n styles: {\n display: 'flex',\n flow: 'row',\n gap: '1x',\n placeItems: 'center',\n padding: '.5x 1x',\n radius: '1cr',\n fill: '#surface',\n color: '#surface-text',\n border: true,\n shadow: '0 1x 3x #shadow',\n preset: 't3',\n // A chip, not a copy of the row: the default browser preview is a snapshot\n // of the source element, which for a full-width table row is a page-wide\n // slab that hides whatever it is being dragged over.\n width: 'max 40x',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n },\n});\n\nexport interface ItemTableDragPreviewProps<T = any> {\n rows: T[];\n getItemDragInfo: (row: T) => { label: ReactNode; icon?: ReactNode };\n}\n\n/**\n * What the cursor drags.\n *\n * One row shows its icon and label. Several show a count — a single chip cannot\n * honestly represent five different rows, and Cloud settled on the same answer.\n */\nexport function ItemTableDragPreview<T>(props: ItemTableDragPreviewProps<T>) {\n const { rows, getItemDragInfo } = props;\n const { t } = useI18n();\n\n if (!rows.length) return null;\n\n if (rows.length > 1) {\n return (\n <PreviewElement>\n <Text>\n {t('itemTable.dragCount', '{{count}} items', { count: rows.length })}\n </Text>\n </PreviewElement>\n );\n }\n\n const info = getItemDragInfo(rows[0]);\n\n return (\n <PreviewElement>\n {info.icon}\n <Text>{info.label}</Text>\n </PreviewElement>\n );\n}\n"],"mappings":";;;;;;;AAOA,MAAM,iBAAiB,MAAM;CAC3B,IAAI;CACJ,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,MAAM;EACN,KAAK;EACL,YAAY;EACZ,SAAS;EACT,QAAQ;EACR,MAAM;EACN,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,QAAQ;EAIR,OAAO;EACP,YAAY;EACZ,UAAU;EACV,cAAc;EACf;CACF,CAAC;;;;;;;AAaF,SAAgB,qBAAwB,OAAqC;CAC3E,MAAM,EAAE,MAAM,oBAAoB;CAClC,MAAM,EAAE,MAAM,SAAS;AAEvB,KAAI,CAAC,KAAK,OAAQ,QAAO;AAEzB,KAAI,KAAK,SAAS,EAChB,QACE,oBAAC,4BACC,oBAACA,mBACE,EAAE,uBAAuB,mBAAmB,EAAE,OAAO,KAAK,QAAQ,CAAC,GAC/D,GACQ;CAIrB,MAAM,OAAO,gBAAgB,KAAK,GAAG;AAErC,QACE,qBAAC,6BACE,KAAK,MACN,oBAACA,mBAAM,KAAK,QAAa,IACV"}