@cube-dev/ui-kit 0.185.3 → 0.186.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 (627) hide show
  1. package/dist/CHANGELOG.md +16 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +23 -21
  13. package/dist/components/GlobalStyles.js.map +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/Banner/Banner.js.map +1 -1
  20. package/dist/components/actions/Button/Button.js +1 -1
  21. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  22. package/dist/components/actions/ButtonSplit/ButtonSplit.js +128 -66
  23. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  24. package/dist/components/actions/ButtonSplit/context.js +1 -1
  25. package/dist/components/actions/CommandMenu/CommandMenu.js +451 -280
  26. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  27. package/dist/components/actions/CommandMenu/styled.js +1 -1
  28. package/dist/components/actions/ItemAction/ItemAction.js +57 -93
  29. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  30. package/dist/components/actions/ItemActionContext.js +1 -1
  31. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  32. package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
  33. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  34. package/dist/components/actions/Link/Link.js +1 -1
  35. package/dist/components/actions/Menu/Menu.js +49 -69
  36. package/dist/components/actions/Menu/Menu.js.map +1 -1
  37. package/dist/components/actions/Menu/MenuItem.js +1 -1
  38. package/dist/components/actions/Menu/MenuSection.js +1 -1
  39. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  40. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  41. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  42. package/dist/components/actions/Menu/context.js +1 -1
  43. package/dist/components/actions/Menu/styled.js +1 -1
  44. package/dist/components/actions/actions-run.js +1 -1
  45. package/dist/components/actions/index.js +1 -1
  46. package/dist/components/actions/use-action.js +1 -1
  47. package/dist/components/actions/use-anchored-menu.js +1 -1
  48. package/dist/components/actions/use-context-menu.js +1 -1
  49. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/dist/components/content/Alert/Alert.js +1 -1
  51. package/dist/components/content/Alert/use-alert.js +1 -1
  52. package/dist/components/content/Avatar/Avatar.js +1 -1
  53. package/dist/components/content/Badge/Badge.js +5 -2
  54. package/dist/components/content/Badge/Badge.js.map +1 -1
  55. package/dist/components/content/Card/Card.js +1 -1
  56. package/dist/components/content/Content.js +1 -1
  57. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  58. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  59. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  60. package/dist/components/content/Disclosure/Disclosure.js +44 -60
  61. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  62. package/dist/components/content/Divider.js +1 -1
  63. package/dist/components/content/Footer.js +1 -1
  64. package/dist/components/content/Header.js +1 -1
  65. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  66. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  67. package/dist/components/content/InlineInput/InlineInput.js +39 -65
  68. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  69. package/dist/components/content/Item/Item.js +208 -263
  70. package/dist/components/content/Item/Item.js.map +1 -1
  71. package/dist/components/content/ItemBadge/ItemBadge.js +70 -145
  72. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  73. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  74. package/dist/components/content/Layout/GridLayout.js +1 -1
  75. package/dist/components/content/Layout/Layout.js +1 -1
  76. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  77. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  78. package/dist/components/content/Layout/LayoutContainer.js +39 -18
  79. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  80. package/dist/components/content/Layout/LayoutContent.js +100 -48
  81. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  82. package/dist/components/content/Layout/LayoutContext.js +211 -95
  83. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  84. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  85. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  86. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  87. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  88. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  89. package/dist/components/content/Layout/LayoutPane.js +240 -123
  90. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  91. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  92. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  93. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  94. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  95. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  96. package/dist/components/content/Layout/hooks/useTinyScrollbar.js.map +1 -1
  97. package/dist/components/content/Layout/index.js +1 -1
  98. package/dist/components/content/Layout/utils.js +1 -1
  99. package/dist/components/content/Paragraph.js +1 -1
  100. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  101. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  102. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  103. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  104. package/dist/components/content/Result/Result.js +28 -48
  105. package/dist/components/content/Result/Result.js.map +1 -1
  106. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  107. package/dist/components/content/Tag/Tag.js +1 -1
  108. package/dist/components/content/Text.d.ts +14 -14
  109. package/dist/components/content/Text.js +1 -1
  110. package/dist/components/content/TextItem/TextItem.js +9 -17
  111. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  112. package/dist/components/content/Title.js +1 -1
  113. package/dist/components/content/Tree/Tree.js +1 -1
  114. package/dist/components/content/Tree/TreeNode.js +1 -1
  115. package/dist/components/content/Tree/styled.js +1 -1
  116. package/dist/components/content/Tree/tree-index.js +1 -1
  117. package/dist/components/content/Tree/use-checkbox-tree.js +68 -105
  118. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
  119. package/dist/components/content/Tree/use-load-data.js +1 -1
  120. package/dist/components/content/highlightText.js +1 -1
  121. package/dist/components/content/use-auto-tooltip.js +106 -138
  122. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  123. package/dist/components/data/DataTable/DataTable.js +1 -1
  124. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  125. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  126. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  127. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  128. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  129. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  130. package/dist/components/data/TableBase/RowCollection.js +1 -1
  131. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  132. package/dist/components/data/TableBase/TableRow.js +1 -1
  133. package/dist/components/data/TableBase/TableView.js +1 -1
  134. package/dist/components/data/TableBase/column-menu.js +1 -1
  135. package/dist/components/data/TableBase/column-tint.js +1 -1
  136. package/dist/components/data/TableBase/row-menu.js +1 -1
  137. package/dist/components/data/TableBase/styled.js +1 -1
  138. package/dist/components/data/TableBase/table-tree.js +1 -1
  139. package/dist/components/data/TableBase/types.js +1 -1
  140. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  141. package/dist/components/data/TableBase/use-column-order.js +30 -31
  142. package/dist/components/data/TableBase/use-column-order.js.map +1 -1
  143. package/dist/components/data/TableBase/use-container-width.js +1 -1
  144. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  145. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  146. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  147. package/dist/components/data/TableBase/use-table-search.js +1 -1
  148. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  149. package/dist/components/data/TableBase/use-table-sort.js +38 -42
  150. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  151. package/dist/components/data/TableBase/use-table-sorts.js +19 -57
  152. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  153. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  154. package/dist/components/data/TableBase/use-table-tree-state.js +55 -64
  155. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
  156. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  157. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  158. package/dist/components/fields/Checkbox/context.js +1 -1
  159. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  160. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  161. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  162. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  163. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  164. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  165. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  166. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  167. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  168. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  169. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  170. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  171. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  172. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  173. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  174. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  175. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  176. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  177. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  178. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  179. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  180. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  181. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  182. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  183. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  184. package/dist/components/fields/DatePicker/period.js +1 -1
  185. package/dist/components/fields/DatePicker/props.js +1 -1
  186. package/dist/components/fields/DatePicker/utils.js +1 -1
  187. package/dist/components/fields/FileInput/FileInput.js +1 -1
  188. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  189. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  190. package/dist/components/fields/Input/Input.js +1 -1
  191. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  192. package/dist/components/fields/ListBox/ListBox.js +1 -1
  193. package/dist/components/fields/ListBox/optionId.js +1 -1
  194. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +111 -108
  195. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  196. package/dist/components/fields/ListBoxPopover/listNavigation.js +4 -3
  197. package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
  198. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +1 -1
  199. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +109 -69
  200. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  201. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  202. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  203. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  204. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  205. package/dist/components/fields/Picker/Picker.js +1 -1
  206. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  207. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  208. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  209. package/dist/components/fields/RadioGroup/context.js +1 -1
  210. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  211. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  212. package/dist/components/fields/Select/Select.js +1 -1
  213. package/dist/components/fields/Slider/Gradation.js +1 -1
  214. package/dist/components/fields/Slider/HueSlider.js +1 -1
  215. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  216. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  217. package/dist/components/fields/Slider/Slider.js +1 -1
  218. package/dist/components/fields/Slider/SliderBase.js +1 -1
  219. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  220. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  221. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  222. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  223. package/dist/components/fields/Slider/elements.js +1 -1
  224. package/dist/components/fields/Slider/index.js +1 -1
  225. package/dist/components/fields/Switch/Switch.js +1 -1
  226. package/dist/components/fields/TagInput/TagInput.d.ts +9 -2
  227. package/dist/components/fields/TagInput/TagInput.js +849 -1156
  228. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  229. package/dist/components/fields/TagInput/TagList.js +1 -1
  230. package/dist/components/fields/TextArea/TextArea.js +1 -1
  231. package/dist/components/fields/TextInput/TextInput.js +1 -1
  232. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  233. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  234. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  235. package/dist/components/fields/TriggerActions.js +1 -1
  236. package/dist/components/fields/color/ColorPanel.js +1 -1
  237. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  238. package/dist/components/fields/color/channels.js +1 -1
  239. package/dist/components/fields/color/color.js +1 -1
  240. package/dist/components/fields/color/context.js +1 -1
  241. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  242. package/dist/components/form/Form/Field.js +10 -15
  243. package/dist/components/form/Form/Field.js.map +1 -1
  244. package/dist/components/form/Form/Form.js +1 -1
  245. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  246. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  247. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  248. package/dist/components/form/Form/SubmitError.js +1 -1
  249. package/dist/components/form/Form/backend.js +1 -1
  250. package/dist/components/form/Form/index.js +1 -1
  251. package/dist/components/form/Form/modern/actions.js +1 -1
  252. package/dist/components/form/Form/modern/context.js +1 -1
  253. package/dist/components/form/Form/modern/controller.js +1 -1
  254. package/dist/components/form/Form/modern/field-binding.js +1 -1
  255. package/dist/components/form/Form/modern/field.js +1 -1
  256. package/dist/components/form/Form/modern/react.js +1 -1
  257. package/dist/components/form/Form/modern/react.js.map +1 -1
  258. package/dist/components/form/Form/modern/store.js +1 -1
  259. package/dist/components/form/Form/modern/validation.js +1 -1
  260. package/dist/components/form/Form/modern/values.js +1 -1
  261. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  262. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  263. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  264. package/dist/components/form/Form/use-field/use-field.js +1 -1
  265. package/dist/components/form/Form/use-form.js +1 -1
  266. package/dist/components/form/Form/validation.js +1 -1
  267. package/dist/components/form/Label.js +1 -1
  268. package/dist/components/form/legacy-tooltip.js +1 -1
  269. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  270. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  271. package/dist/components/form/validation/use-validation-props.js +1 -1
  272. package/dist/components/form/wrapper.js +1 -1
  273. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  274. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  275. package/dist/components/layout/Board/Board.js +1 -1
  276. package/dist/components/layout/Board/BoardProvider.js +1 -1
  277. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  278. package/dist/components/layout/Board/Widget.js +1 -1
  279. package/dist/components/layout/Board/WidgetHost.js +1 -1
  280. package/dist/components/layout/Board/board-context.js +1 -1
  281. package/dist/components/layout/Board/board-store.js +1 -1
  282. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  283. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  284. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  285. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  286. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  287. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  288. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  289. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  290. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  291. package/dist/components/layout/Board/index.js +1 -1
  292. package/dist/components/layout/Board/responsive-utils.js +1 -1
  293. package/dist/components/layout/Board/use-board-layout.js +1 -1
  294. package/dist/components/layout/Board/use-board-registry.js +1 -1
  295. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  296. package/dist/components/layout/Board/use-board-selection.js +1 -1
  297. package/dist/components/layout/Flex.js +1 -1
  298. package/dist/components/layout/Flow.js +1 -1
  299. package/dist/components/layout/Grid.js +1 -1
  300. package/dist/components/layout/Panel.js +129 -48
  301. package/dist/components/layout/Panel.js.map +1 -1
  302. package/dist/components/layout/Prefix.js +1 -1
  303. package/dist/components/layout/ResizablePanel.js +1 -1
  304. package/dist/components/layout/Space.js +1 -1
  305. package/dist/components/layout/Suffix.js +1 -1
  306. package/dist/components/navigation/Pagination/Pagination.js +227 -347
  307. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  308. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  309. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
  310. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  311. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  312. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  313. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  314. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  315. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  316. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  317. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  318. package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
  319. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  320. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  321. package/dist/components/navigation/Tabs/styled.js +1 -1
  322. package/dist/components/navigation/Tabs/types.js +1 -1
  323. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  324. package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
  325. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  326. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  327. package/dist/components/other/Calendar/Calendar.js +1 -1
  328. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  329. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  330. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  331. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  332. package/dist/components/other/Calendar/CalendarPanel.js +497 -515
  333. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
  334. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  335. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  336. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  337. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  338. package/dist/components/other/Calendar/styled.js +1 -1
  339. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  340. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  341. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  342. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  343. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  344. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  345. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  346. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  347. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  348. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  349. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  350. package/dist/components/overlays/Dialog/context.js +1 -1
  351. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  352. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  353. package/dist/components/overlays/Modal/Modal.js +1 -1
  354. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  355. package/dist/components/overlays/Modal/Overlay.js +1 -1
  356. package/dist/components/overlays/Modal/Popover.js +1 -1
  357. package/dist/components/overlays/Modal/Tray.js +1 -1
  358. package/dist/components/overlays/Modal/Underlay.js +1 -1
  359. package/dist/components/overlays/Notifications/Notification.js +1 -1
  360. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  361. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  362. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  363. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  364. package/dist/components/overlays/Notifications/OverlayContainer.js +266 -161
  365. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  366. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  367. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  368. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  369. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  370. package/dist/components/overlays/Notifications/index.js +1 -1
  371. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  372. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  373. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  374. package/dist/components/overlays/Notifications/use-persistent-notifications.js +18 -9
  375. package/dist/components/overlays/Notifications/use-persistent-notifications.js.map +1 -1
  376. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  377. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  378. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  379. package/dist/components/overlays/Toast/index.js +1 -1
  380. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  381. package/dist/components/overlays/Toast/useToast.js +1 -1
  382. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  383. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  384. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  385. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  386. package/dist/components/overlays/Tooltip/context.js +1 -1
  387. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  388. package/dist/components/portal/Portal.js +1 -1
  389. package/dist/components/portal/PortalProvider.js +1 -1
  390. package/dist/components/portal/usePortal.js +1 -1
  391. package/dist/components/shared/DraggableCollection.js +1 -1
  392. package/dist/components/shared/InvalidIcon.js +1 -1
  393. package/dist/components/shared/ValidIcon.js +1 -1
  394. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  395. package/dist/components/status/Spin/Cube.js +1 -1
  396. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  397. package/dist/components/status/Spin/Spin.js +1 -1
  398. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  399. package/dist/data/item-themes.js +1 -1
  400. package/dist/data/themes.js +1 -1
  401. package/dist/eslint-plugin/defaults.generated.js +1 -1
  402. package/dist/eslint-plugin/index.js +1 -1
  403. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  404. package/dist/i18n/I18nProvider.js +1 -1
  405. package/dist/i18n/createFormatter.js +1 -1
  406. package/dist/i18n/index.js +1 -1
  407. package/dist/i18n/instance.js +1 -1
  408. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  409. package/dist/i18n/locales/en-US/uikit.js +1 -1
  410. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  411. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  412. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  413. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  414. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  415. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  416. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  417. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  418. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  419. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  420. package/dist/i18n/locales.js +1 -1
  421. package/dist/i18n/useFormatter.js +1 -1
  422. package/dist/i18n/useFormatter.js.map +1 -1
  423. package/dist/i18n/useI18n.js +1 -1
  424. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  425. package/dist/icons/AdjustmentsIcon.js +1 -1
  426. package/dist/icons/AiIcon.js +1 -1
  427. package/dist/icons/AreaChartIcon.js +1 -1
  428. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  429. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  430. package/dist/icons/BackwardIcon.js +1 -1
  431. package/dist/icons/BarChartIcon.js +1 -1
  432. package/dist/icons/BellFilledIcon.js +1 -1
  433. package/dist/icons/BellIcon.js +1 -1
  434. package/dist/icons/BooleanIcon.js +1 -1
  435. package/dist/icons/CalendarEditIcon.js +1 -1
  436. package/dist/icons/CalendarIcon.js +1 -1
  437. package/dist/icons/CaretDownIcon.js +1 -1
  438. package/dist/icons/CaretUpIcon.js +1 -1
  439. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  440. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  441. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  442. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  443. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  444. package/dist/icons/ChartBarLineIcon.js +1 -1
  445. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  446. package/dist/icons/ChartBarStackedIcon.js +1 -1
  447. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  448. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  449. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  450. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  451. package/dist/icons/ChartBubbleIcon.js +1 -1
  452. package/dist/icons/ChartDonut2Icon.js +1 -1
  453. package/dist/icons/ChartFunnelIcon.js +1 -1
  454. package/dist/icons/ChartHeatmapIcon.js +1 -1
  455. package/dist/icons/ChartKPIIcon.js +1 -1
  456. package/dist/icons/ChartPie2Icon.js +1 -1
  457. package/dist/icons/ChartScatterIcon.js +1 -1
  458. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  459. package/dist/icons/CheckCircleIcon.js +1 -1
  460. package/dist/icons/CheckIcon.js +1 -1
  461. package/dist/icons/CircleFilledIcon.js +1 -1
  462. package/dist/icons/ClearIcon.js +1 -1
  463. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  464. package/dist/icons/CloseCircleIcon.js +1 -1
  465. package/dist/icons/CloseIcon.js +1 -1
  466. package/dist/icons/CodeIcon.js +1 -1
  467. package/dist/icons/ColumnTotalIcon.js +1 -1
  468. package/dist/icons/CopyIcon.js +1 -1
  469. package/dist/icons/CountIcon.js +1 -1
  470. package/dist/icons/CubeIcon.js +1 -1
  471. package/dist/icons/CubePauseIcon.js +1 -1
  472. package/dist/icons/CubePlayIcon.js +1 -1
  473. package/dist/icons/CurrencyDollarIcon.js +1 -1
  474. package/dist/icons/DangerIcon.js +1 -1
  475. package/dist/icons/DashboardIcon.js +1 -1
  476. package/dist/icons/DatabaseIcon.js +1 -1
  477. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  478. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  479. package/dist/icons/DirectionIcon.js +1 -1
  480. package/dist/icons/DonutIcon.js +1 -1
  481. package/dist/icons/DownIcon.js +1 -1
  482. package/dist/icons/EditIcon.js +1 -1
  483. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  484. package/dist/icons/ExclamationCircleIcon.js +1 -1
  485. package/dist/icons/ExclamationIcon.js +1 -1
  486. package/dist/icons/EyeIcon.js +1 -1
  487. package/dist/icons/EyeInvisibleIcon.js +1 -1
  488. package/dist/icons/FilterIcon.js +1 -1
  489. package/dist/icons/FolderFilledIcon.js +1 -1
  490. package/dist/icons/FolderIcon.js +1 -1
  491. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  492. package/dist/icons/FolderOpenIcon.js +1 -1
  493. package/dist/icons/ForwardIcon.js +1 -1
  494. package/dist/icons/GripVerticalIcon.js +1 -1
  495. package/dist/icons/HierarchyIcon.js +1 -1
  496. package/dist/icons/HierarchyOpenIcon.js +1 -1
  497. package/dist/icons/Icon.js +1 -1
  498. package/dist/icons/InfoCircleIcon.js +1 -1
  499. package/dist/icons/InfoIcon.js +1 -1
  500. package/dist/icons/KeyIcon.js +1 -1
  501. package/dist/icons/LeftIcon.js +1 -1
  502. package/dist/icons/LineChartIcon.js +1 -1
  503. package/dist/icons/LoadingIcon.js +1 -1
  504. package/dist/icons/LockFilledIcon.js +1 -1
  505. package/dist/icons/LockIcon.js +1 -1
  506. package/dist/icons/MoreIcon.js +1 -1
  507. package/dist/icons/NotAllowedIcon.js +1 -1
  508. package/dist/icons/Number123Icon.js +1 -1
  509. package/dist/icons/NumberIcon.js +1 -1
  510. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  511. package/dist/icons/PauseCircleIcon.js +1 -1
  512. package/dist/icons/PauseIcon.js +1 -1
  513. package/dist/icons/PercentageIcon.js +1 -1
  514. package/dist/icons/PieChartIcon.js +1 -1
  515. package/dist/icons/PipetteIcon.js +1 -1
  516. package/dist/icons/PlayCircleIcon.js +1 -1
  517. package/dist/icons/PlayIcon.js +1 -1
  518. package/dist/icons/PlusIcon.js +1 -1
  519. package/dist/icons/ProgressBarIcon.js +1 -1
  520. package/dist/icons/ReloadIcon.js +1 -1
  521. package/dist/icons/ReportIcon.js +1 -1
  522. package/dist/icons/ReturnIcon.js +1 -1
  523. package/dist/icons/RightIcon.js +1 -1
  524. package/dist/icons/RowTotalsIcon.js +1 -1
  525. package/dist/icons/SchemeIcon.js +1 -1
  526. package/dist/icons/SearchIcon.js +1 -1
  527. package/dist/icons/SemanticQueryIcon.js +1 -1
  528. package/dist/icons/SettingsIcon.js +1 -1
  529. package/dist/icons/ShieldFilledIcon.js +1 -1
  530. package/dist/icons/ShieldIcon.js +1 -1
  531. package/dist/icons/SlashIcon.js +1 -1
  532. package/dist/icons/SparklesIcon.js +1 -1
  533. package/dist/icons/SqlIcon.js +1 -1
  534. package/dist/icons/StatsIcon.js +1 -1
  535. package/dist/icons/StopIcon.js +1 -1
  536. package/dist/icons/StringIcon.js +1 -1
  537. package/dist/icons/SubtotalsIcon.js +1 -1
  538. package/dist/icons/SwitchIcon.js +1 -1
  539. package/dist/icons/TableIcon.js +1 -1
  540. package/dist/icons/ThumbsDownIcon.js +1 -1
  541. package/dist/icons/ThumbsUpIcon.js +1 -1
  542. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  543. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  544. package/dist/icons/ThunderboltIcon.js +1 -1
  545. package/dist/icons/TimeIcon.js +1 -1
  546. package/dist/icons/TrashIcon.js +1 -1
  547. package/dist/icons/UnlockIcon.js +1 -1
  548. package/dist/icons/UpIcon.js +1 -1
  549. package/dist/icons/UserGroupIcon.js +1 -1
  550. package/dist/icons/UserIcon.js +1 -1
  551. package/dist/icons/UserLockIcon.js +1 -1
  552. package/dist/icons/ViewIcon.js +1 -1
  553. package/dist/icons/WarningFilledIcon.js +1 -1
  554. package/dist/icons/WarningIcon.js +1 -1
  555. package/dist/icons/wrap-icon.js +1 -1
  556. package/dist/index.js +1 -1
  557. package/dist/probe/canonicalize.js +1 -1
  558. package/dist/probe/css.js +1 -1
  559. package/dist/probe/index.js +1 -1
  560. package/dist/provider.js +1 -1
  561. package/dist/providers/TrackingProvider.js +1 -1
  562. package/dist/providers/navigationAdapter.default.js +1 -1
  563. package/dist/tokens/all-tokens.js +1 -1
  564. package/dist/tokens/base.js +1 -1
  565. package/dist/tokens/color-seed.js +1 -1
  566. package/dist/tokens/color-theme.js +1 -1
  567. package/dist/tokens/colors.js +1 -1
  568. package/dist/tokens/layout.js +1 -1
  569. package/dist/tokens/lazy-styles.js +1 -1
  570. package/dist/tokens/legacy-color.js +1 -1
  571. package/dist/tokens/palette-config.js +1 -1
  572. package/dist/tokens/palette.js +1 -1
  573. package/dist/tokens/resolve.js +1 -1
  574. package/dist/tokens/shadows.js +1 -1
  575. package/dist/tokens/sizes.js +1 -1
  576. package/dist/tokens/spacing.js +1 -1
  577. package/dist/tokens/typography.js +1 -1
  578. package/dist/utils/ResizeSensor.js +1 -1
  579. package/dist/utils/colors.js +1 -1
  580. package/dist/utils/dotize.js +1 -1
  581. package/dist/utils/is-dev-env.js +1 -1
  582. package/dist/utils/modules.js +1 -1
  583. package/dist/utils/promise.js +1 -1
  584. package/dist/utils/raf.js +1 -1
  585. package/dist/utils/random.js +1 -1
  586. package/dist/utils/range.js +1 -1
  587. package/dist/utils/react/RenderCache.js +1 -1
  588. package/dist/utils/react/Slots.js +1 -1
  589. package/dist/utils/react/chain.js +1 -1
  590. package/dist/utils/react/disabledProps.js +1 -1
  591. package/dist/utils/react/escapePropagation.js +1 -1
  592. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  593. package/dist/utils/react/index.js +1 -1
  594. package/dist/utils/react/interactions.js +1 -1
  595. package/dist/utils/react/isTextOnly.js +1 -1
  596. package/dist/utils/react/mapProps.js +1 -1
  597. package/dist/utils/react/mergeProps.js +1 -1
  598. package/dist/utils/react/nullableValue.js +1 -1
  599. package/dist/utils/react/programmaticFocus.js +1 -1
  600. package/dist/utils/react/resolveIcon.js +1 -1
  601. package/dist/utils/react/sharedStore.js +1 -1
  602. package/dist/utils/react/useBufferedValue.js +1 -1
  603. package/dist/utils/react/useCombinedRefs.js +1 -1
  604. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  605. package/dist/utils/react/useEventBus.js +1 -1
  606. package/dist/utils/react/useId.js +1 -1
  607. package/dist/utils/react/useIsDarwin.js +1 -1
  608. package/dist/utils/react/useKeySymbols.js +1 -1
  609. package/dist/utils/react/useKeySymbols.js.map +1 -1
  610. package/dist/utils/react/useLayoutEffect.js +1 -1
  611. package/dist/utils/react/useLocalStorage.js +1 -1
  612. package/dist/utils/react/useMergeStyles.js +1 -1
  613. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  614. package/dist/utils/react/usePopoverSync.js +1 -1
  615. package/dist/utils/react/usePopoverSync.js.map +1 -1
  616. package/dist/utils/react/useQaProps.js +1 -1
  617. package/dist/utils/react/useScheme.js +1 -1
  618. package/dist/utils/react/useViewportSize.js +1 -1
  619. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  620. package/dist/utils/selection.js +1 -1
  621. package/dist/utils/styles.js +1 -1
  622. package/dist/utils/tree.js +1 -1
  623. package/dist/utils/warnings.js +1 -1
  624. package/dist/version.js +2 -2
  625. package/docs/CreateComponent.md +3 -1
  626. package/docs/components/fields/TagInput.md +8 -8
  627. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"use-column-order.js","names":["useControlledState","useMemo","useState","useEvent","CubeResolvedColumn","CubeTableColumn","useTableStorage","applyColumnOrder","columns","T","order","length","present","Set","map","column","key","rank","Map","forEach","index","has","set","size","carried","sourceIndex","own","get","sort","a","b","entry","isColumnDraggable","Pick","isEnabled","isStructural","pin","isReorderable","getDraggableColumnKeys","filter","projectReorder","fullOrder","nextDraggable","draggable","next","cursor","slot","EMPTY_ORDER","UseColumnOrderOptions","columnOrder","defaultColumnOrder","onColumnOrderChange","storage","ReturnType","UseColumnOrderResult","reorder","useColumnOrder","t0","$","_c","t1","undefined","initial","storedOrder","setOrder","value","t2","ordered","t3","_temp","t4","write","t5"],"sources":["../../../../src/components/data/TableBase/use-column-order.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useMemo, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { CubeResolvedColumn, CubeTableColumn } from './types';\nimport type { useTableStorage } from './use-table-storage';\n\n/**\n * Reorders the source columns to match `order`.\n *\n * Rank-based rather than filter-then-concat, because `order` is routinely\n * *stale*: it was persisted or lifted into page state before the current\n * `columns` array existed. A column missing from it inherits the rank of the\n * nearest preceding known column plus a half step, so it lands immediately after\n * the neighbour it had in the source array instead of being swept to the end. A\n * new leading column keeps its lead.\n *\n * Applied to the SOURCE array, before `useTableColumns` — so hidden-column\n * filtering, structural injection, pinned hoisting and `aria-colindex` all still\n * happen downstream, and `columnOrder` can never fight `pin`.\n */\nexport function applyColumnOrder<T>(\n columns: CubeTableColumn<T>[],\n order?: readonly string[],\n): CubeTableColumn<T>[] {\n if (!order?.length) return columns;\n\n const present = new Set(columns.map((column) => column.key));\n const rank = new Map<string, number>();\n\n order.forEach((key, index) => {\n // A key for a column that no longer exists is ignored rather than treated as\n // a gap, and a duplicate keeps its first position.\n if (present.has(key) && !rank.has(key)) rank.set(key, index);\n });\n\n if (!rank.size) return columns;\n\n let carried = -1;\n\n return columns\n .map((column, sourceIndex) => {\n const own = rank.get(column.key);\n\n if (own != null) carried = own;\n\n return { column, sourceIndex, rank: own ?? carried + 0.5 };\n })\n .sort((a, b) => a.rank - b.rank || a.sourceIndex - b.sourceIndex)\n .map((entry) => entry.column);\n}\n\n/**\n * Whether a column can be picked up and moved.\n *\n * The single shared predicate: `DataTable` builds the draggable key list from\n * it and `TableView` decides which `<th>` is a drag source from it, so the two\n * cannot drift. A renderer disagreeing with the state behind it is exactly how\n * the drop indicator that never matched its selector happened.\n *\n * Pinned columns are excluded, for three reasons that all point the same way: a\n * pinned `<th>` is `position: sticky`, so under horizontal scroll its rect sits\n * on top of columns it is nowhere near and React Aria's drop-target binary\n * search goes wrong; `use-table-columns` hoists pinned columns to the edges\n * regardless of source order, so a cross-boundary drop would be undone\n * immediately; and `pin` is already the ordering authority there. What that buys\n * is a draggable set that is one contiguous, non-sticky run — every permutation\n * of which stays monotonic, which is what the delegate needs.\n */\nexport function isColumnDraggable<T>(\n column: Pick<CubeResolvedColumn<T>, 'isStructural' | 'pin' | 'isReorderable'>,\n isEnabled: boolean,\n): boolean {\n return (\n isEnabled &&\n !column.isStructural &&\n column.pin == null &&\n (column.isReorderable ?? true)\n );\n}\n\nexport function getDraggableColumnKeys<T>(\n columns: readonly CubeResolvedColumn<T>[],\n isEnabled: boolean,\n): string[] {\n return columns\n .filter((column) => isColumnDraggable(column, isEnabled))\n .map((column) => column.key);\n}\n\n/**\n * Folds a permutation of the draggable subset back into the full order.\n *\n * Only the slots the draggable keys already occupy are rewritten, so a hidden\n * column, a pinned one, or one that opted out keeps its absolute index and\n * cannot be displaced by a drag it took no part in.\n *\n * The visible consequence, worth knowing: a hidden column between two draggable\n * ones keeps its slot rather than following a neighbour, so it may come back\n * between different columns than it left. Predictable beats clever.\n */\nexport function projectReorder(\n fullOrder: readonly string[],\n nextDraggable: readonly string[],\n): string[] {\n const draggable = new Set(nextDraggable);\n const next = [...fullOrder];\n let cursor = 0;\n\n for (let slot = 0; slot < next.length; slot++) {\n if (draggable.has(next[slot])) next[slot] = nextDraggable[cursor++];\n }\n\n return next;\n}\n\nconst EMPTY_ORDER: string[] = [];\n\nexport interface UseColumnOrderOptions<T> {\n columns: CubeTableColumn<T>[];\n columnOrder?: string[];\n defaultColumnOrder?: string[];\n onColumnOrderChange?: (order: string[]) => void;\n storage: ReturnType<typeof useTableStorage>;\n}\n\nexport interface UseColumnOrderResult<T> {\n /** `columns`, reordered. Feed this to `useTableColumns`. */\n columns: CubeTableColumn<T>[];\n /** The full key list in its current order, including hidden and pinned keys. */\n order: string[];\n /** Takes the reordered DRAGGABLE keys and commits the full order. */\n reorder: (nextDraggable: string[]) => void;\n}\n\nexport function useColumnOrder<T>({\n columns,\n columnOrder,\n defaultColumnOrder,\n onColumnOrderChange,\n storage,\n}: UseColumnOrderOptions<T>): UseColumnOrderResult<T> {\n // Seeded once, like `ownColumnWidths`: a controlled `columnOrder` belongs to\n // the page, so restoring over it would fight the page's own source of truth.\n const [storedOrder] = useState(() =>\n columnOrder === undefined && storage.has('columnOrder')\n ? storage.initial.columnOrder\n : undefined,\n );\n\n // An empty array means \"no order\", which `applyColumnOrder` treats as a\n // no-op — same shape `useTableSorts` uses for its own empty default, and it\n // keeps `useControlledState` off the `undefined` overload.\n const [order, setOrder] = useControlledState<string[]>(\n columnOrder as string[],\n defaultColumnOrder ?? storedOrder ?? EMPTY_ORDER,\n onColumnOrderChange as (value: string[]) => void,\n );\n\n const ordered = useMemo(\n () => applyColumnOrder(columns, order),\n [columns, order],\n );\n\n // Always the FULL source key list, in current order — so a key never drops out\n // of persisted state just because its column happened to be hidden.\n const fullOrder = useMemo(\n () => ordered.map((column) => column.key),\n [ordered],\n );\n\n const reorder = useEvent((nextDraggable: string[]) => {\n const next = projectReorder(fullOrder, nextDraggable);\n\n setOrder(next);\n\n // Only what the table OWNS is persisted — a controlled order belongs to the\n // page, and storing it would fight the page on the next mount. Same rule\n // `handleColumnResizeEnd` follows for widths.\n if (columnOrder === undefined) storage.write({ columnOrder: next });\n });\n\n return { columns: ordered, order: fullOrder, reorder };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-column-order.js","names":["useControlledState","useState","useEvent","CubeResolvedColumn","CubeTableColumn","useTableStorage","applyColumnOrder","columns","T","order","length","present","Set","map","column","key","rank","Map","forEach","index","has","set","size","carried","sourceIndex","own","get","sort","a","b","entry","isColumnDraggable","Pick","isEnabled","isStructural","pin","isReorderable","getDraggableColumnKeys","filter","projectReorder","fullOrder","nextDraggable","draggable","next","cursor","slot","EMPTY_ORDER","UseColumnOrderOptions","columnOrder","defaultColumnOrder","onColumnOrderChange","storage","ReturnType","UseColumnOrderResult","reorder","useColumnOrder","t0","$","_c","t1","undefined","initial","storedOrder","setOrder","value","ordered","t2","_temp","t3","write","t4"],"sources":["../../../../src/components/data/TableBase/use-column-order.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { CubeResolvedColumn, CubeTableColumn } from './types';\nimport type { useTableStorage } from './use-table-storage';\n\n/**\n * Reorders the source columns to match `order`.\n *\n * Rank-based rather than filter-then-concat, because `order` is routinely\n * *stale*: it was persisted or lifted into page state before the current\n * `columns` array existed. A column missing from it inherits the rank of the\n * nearest preceding known column plus a half step, so it lands immediately after\n * the neighbour it had in the source array instead of being swept to the end. A\n * new leading column keeps its lead.\n *\n * Applied to the SOURCE array, before `useTableColumns` — so hidden-column\n * filtering, structural injection, pinned hoisting and `aria-colindex` all still\n * happen downstream, and `columnOrder` can never fight `pin`.\n */\nexport function applyColumnOrder<T>(\n columns: CubeTableColumn<T>[],\n order?: readonly string[],\n): CubeTableColumn<T>[] {\n if (!order?.length) return columns;\n\n const present = new Set(columns.map((column) => column.key));\n const rank = new Map<string, number>();\n\n order.forEach((key, index) => {\n // A key for a column that no longer exists is ignored rather than treated as\n // a gap, and a duplicate keeps its first position.\n if (present.has(key) && !rank.has(key)) rank.set(key, index);\n });\n\n if (!rank.size) return columns;\n\n let carried = -1;\n\n return columns\n .map((column, sourceIndex) => {\n const own = rank.get(column.key);\n\n if (own != null) carried = own;\n\n return { column, sourceIndex, rank: own ?? carried + 0.5 };\n })\n .sort((a, b) => a.rank - b.rank || a.sourceIndex - b.sourceIndex)\n .map((entry) => entry.column);\n}\n\n/**\n * Whether a column can be picked up and moved.\n *\n * The single shared predicate: `DataTable` builds the draggable key list from\n * it and `TableView` decides which `<th>` is a drag source from it, so the two\n * cannot drift. A renderer disagreeing with the state behind it is exactly how\n * the drop indicator that never matched its selector happened.\n *\n * Pinned columns are excluded, for three reasons that all point the same way: a\n * pinned `<th>` is `position: sticky`, so under horizontal scroll its rect sits\n * on top of columns it is nowhere near and React Aria's drop-target binary\n * search goes wrong; `use-table-columns` hoists pinned columns to the edges\n * regardless of source order, so a cross-boundary drop would be undone\n * immediately; and `pin` is already the ordering authority there. What that buys\n * is a draggable set that is one contiguous, non-sticky run — every permutation\n * of which stays monotonic, which is what the delegate needs.\n */\nexport function isColumnDraggable<T>(\n column: Pick<CubeResolvedColumn<T>, 'isStructural' | 'pin' | 'isReorderable'>,\n isEnabled: boolean,\n): boolean {\n return (\n isEnabled &&\n !column.isStructural &&\n column.pin == null &&\n (column.isReorderable ?? true)\n );\n}\n\nexport function getDraggableColumnKeys<T>(\n columns: readonly CubeResolvedColumn<T>[],\n isEnabled: boolean,\n): string[] {\n return columns\n .filter((column) => isColumnDraggable(column, isEnabled))\n .map((column) => column.key);\n}\n\n/**\n * Folds a permutation of the draggable subset back into the full order.\n *\n * Only the slots the draggable keys already occupy are rewritten, so a hidden\n * column, a pinned one, or one that opted out keeps its absolute index and\n * cannot be displaced by a drag it took no part in.\n *\n * The visible consequence, worth knowing: a hidden column between two draggable\n * ones keeps its slot rather than following a neighbour, so it may come back\n * between different columns than it left. Predictable beats clever.\n */\nexport function projectReorder(\n fullOrder: readonly string[],\n nextDraggable: readonly string[],\n): string[] {\n const draggable = new Set(nextDraggable);\n const next = [...fullOrder];\n let cursor = 0;\n\n for (let slot = 0; slot < next.length; slot++) {\n if (draggable.has(next[slot])) next[slot] = nextDraggable[cursor++];\n }\n\n return next;\n}\n\nconst EMPTY_ORDER: string[] = [];\n\nexport interface UseColumnOrderOptions<T> {\n columns: CubeTableColumn<T>[];\n columnOrder?: string[];\n defaultColumnOrder?: string[];\n onColumnOrderChange?: (order: string[]) => void;\n storage: ReturnType<typeof useTableStorage>;\n}\n\nexport interface UseColumnOrderResult<T> {\n /** `columns`, reordered. Feed this to `useTableColumns`. */\n columns: CubeTableColumn<T>[];\n /** The full key list in its current order, including hidden and pinned keys. */\n order: string[];\n /** Takes the reordered DRAGGABLE keys and commits the full order. */\n reorder: (nextDraggable: string[]) => void;\n}\n\nexport function useColumnOrder<T>({\n columns,\n columnOrder,\n defaultColumnOrder,\n onColumnOrderChange,\n storage,\n}: UseColumnOrderOptions<T>): UseColumnOrderResult<T> {\n // Seeded once, like `ownColumnWidths`: a controlled `columnOrder` belongs to\n // the page, so restoring over it would fight the page's own source of truth.\n const [storedOrder] = useState(() =>\n columnOrder === undefined && storage.has('columnOrder')\n ? storage.initial.columnOrder\n : undefined,\n );\n\n // An empty array means \"no order\", which `applyColumnOrder` treats as a\n // no-op — same shape `useTableSorts` uses for its own empty default, and it\n // keeps `useControlledState` off the `undefined` overload.\n const [order, setOrder] = useControlledState<string[]>(\n columnOrder as string[],\n defaultColumnOrder ?? storedOrder ?? EMPTY_ORDER,\n onColumnOrderChange as (value: string[]) => void,\n );\n\n const ordered = applyColumnOrder(columns, order);\n\n // Always the FULL source key list, in current order — so a key never drops out\n // of persisted state just because its column happened to be hidden.\n const fullOrder = ordered.map((column) => column.key);\n\n const reorder = useEvent((nextDraggable: string[]) => {\n const next = projectReorder(fullOrder, nextDraggable);\n\n setOrder(next);\n\n // Only what the table OWNS is persisted — a controlled order belongs to the\n // page, and storing it would fight the page on the next mount. Same rule\n // `handleColumnResizeEnd` follows for widths.\n if (columnOrder === undefined) storage.write({ columnOrder: next });\n });\n\n return { columns: ordered, order: fullOrder, reorder };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useLayoutEffect, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useLayoutEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useLayoutEffect, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
 
4
4
  //#region src/components/data/TableBase/use-table-columns.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useDebouncedValue } from "../../../_internal/hooks/use-debounced-value.js";
4
4
  import { getColumnText } from "./use-table-columns.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { RowCollection } from "./RowCollection.js";
4
4
  import { useCallback, useMemo, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { getColumnText, getColumnValue } from "./use-table-columns.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -15,7 +15,7 @@ import { useControlledState } from "@react-stately/utils";
15
15
  * column reduces it to `asc ↔ desc`.
16
16
  */
17
17
  function useTableSort(t0) {
18
- const $ = c(28);
18
+ const $ = c(26);
19
19
  const { columns, rows, mode, sort: sortProp, defaultSort, onSortChange } = t0;
20
20
  let t1;
21
21
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
@@ -92,28 +92,7 @@ function useTableSort(t0) {
92
92
  const setColumnSort = useEvent(t4);
93
93
  let t5;
94
94
  if ($[13] !== collator || $[14] !== columns || $[15] !== resolvedMode || $[16] !== rows || $[17] !== sort) {
95
- bb0: {
96
- if (resolvedMode !== "client" || !sort) {
97
- t5 = rows;
98
- break bb0;
99
- }
100
- let t6;
101
- if ($[19] !== sort) {
102
- t6 = (entry_1) => entry_1.key === sort.columnKey;
103
- $[19] = sort;
104
- $[20] = t6;
105
- } else t6 = $[20];
106
- const column_3 = columns.find(t6);
107
- if (!column_3) {
108
- t5 = rows;
109
- break bb0;
110
- }
111
- const direction_0 = sort.direction === "asc" ? 1 : -1;
112
- t5 = rows.map(_temp2).sort((a, b) => {
113
- const result = compareByColumn(column_3, collator, a.row, a.index, b.row, b.index);
114
- return result !== 0 ? result * direction_0 : a.index - b.index;
115
- }).map(_temp3);
116
- }
95
+ t5 = resolvedMode === "client" && sort ? sortRows(rows, [sort], columns, collator) : rows;
117
96
  $[13] = collator;
118
97
  $[14] = columns;
119
98
  $[15] = resolvedMode;
@@ -123,7 +102,7 @@ function useTableSort(t0) {
123
102
  } else t5 = $[18];
124
103
  const sortedRows = t5;
125
104
  let t6;
126
- if ($[21] !== isSortable || $[22] !== resolvedMode || $[23] !== setColumnSort || $[24] !== sort || $[25] !== sortedRows || $[26] !== toggleSort) {
105
+ if ($[19] !== isSortable || $[20] !== resolvedMode || $[21] !== setColumnSort || $[22] !== sort || $[23] !== sortedRows || $[24] !== toggleSort) {
127
106
  t6 = {
128
107
  sort,
129
108
  sortedRows,
@@ -132,27 +111,44 @@ function useTableSort(t0) {
132
111
  isSortable,
133
112
  mode: resolvedMode
134
113
  };
135
- $[21] = isSortable;
136
- $[22] = resolvedMode;
137
- $[23] = setColumnSort;
138
- $[24] = sort;
139
- $[25] = sortedRows;
140
- $[26] = toggleSort;
141
- $[27] = t6;
142
- } else t6 = $[27];
114
+ $[19] = isSortable;
115
+ $[20] = resolvedMode;
116
+ $[21] = setColumnSort;
117
+ $[22] = sort;
118
+ $[23] = sortedRows;
119
+ $[24] = toggleSort;
120
+ $[25] = t6;
121
+ } else t6 = $[25];
143
122
  return t6;
144
123
  }
145
- function _temp3(entry_2) {
146
- return entry_2.row;
124
+ /**
125
+ * `rows` ordered by `sorts`, the first sort taking precedence. Sorts naming a
126
+ * column the table does not have are skipped, and `rows` itself comes back when
127
+ * none is left.
128
+ *
129
+ * `map`/`sort`/`map` rather than sorting in place: `rows` is the caller's array
130
+ * and `Array.prototype.sort` mutates. Carrying the original index also makes the
131
+ * sort stable across engines, including when every sort ties.
132
+ */
133
+ function _temp(column) {
134
+ return column.isSortable;
147
135
  }
148
- function _temp2(row, index) {
149
- return {
136
+ function sortRows(rows, sorts, columns, collator) {
137
+ const active = sorts.map((sort) => ({
138
+ sort,
139
+ column: columns.find((entry) => entry.key === sort.columnKey)
140
+ })).filter((entry) => entry.column != null);
141
+ if (!active.length) return rows;
142
+ return rows.map((row, index) => ({
150
143
  row,
151
144
  index
152
- };
153
- }
154
- function _temp(column) {
155
- return column.isSortable;
145
+ })).sort((a, b) => {
146
+ for (const { sort, column } of active) {
147
+ const result = compareByColumn(column, collator, a.row, a.index, b.row, b.index);
148
+ if (result !== 0) return result * (sort.direction === "asc" ? 1 : -1);
149
+ }
150
+ return a.index - b.index;
151
+ }).map((entry) => entry.row);
156
152
  }
157
153
  function compareByColumn(column, collator, rowA, indexA, rowB, indexB) {
158
154
  const valueA = getColumnValue(column, rowA, indexA);
@@ -170,5 +166,5 @@ function compareByColumn(column, collator, rowA, indexA, rowB, indexB) {
170
166
  }
171
167
 
172
168
  //#endregion
173
- export { compareByColumn, useTableSort };
169
+ export { compareByColumn, sortRows, useTableSort };
174
170
  //# sourceMappingURL=use-table-sort.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-table-sort.js","names":["useControlledState","useMemo","useCollator","useEvent","getColumnText","getColumnValue","CubeTableColumn","CubeTableSort","CubeTableSortDirection","CubeTableSortMode","UseTableSortOptions","columns","T","rows","mode","sort","defaultSort","onSortChange","UseTableSortResult","sortedRows","toggleSort","columnKey","setColumnSort","direction","isSortable","column","useTableSort","t0","$","_c","sortProp","t1","Symbol","for","numeric","sensitivity","collator","setSort","value","hasSortableColumn","some","_temp","resolvedMode","t2","column_0","t3","column_1","find","entry","key","disallowSortRemoval","t4","columnKey_0","column_2","entry_0","t5","bb0","t6","entry_1","column_3","direction_0","map","_temp2","a","b","result","compareByColumn","row","index","_temp3","entry_2","Intl","Collator","rowA","indexA","rowB","indexB","valueA","valueB","compare","Number","Date","getTime","textA","String","textB"],"sources":["../../../../src/components/data/TableBase/use-table-sort.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useMemo } from 'react';\nimport { useCollator } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { getColumnText, getColumnValue } from './use-table-columns';\n\nimport type {\n CubeTableColumn,\n CubeTableSort,\n CubeTableSortDirection,\n} from './types';\n\nexport type CubeTableSortMode = 'client' | 'server' | 'off';\n\nexport interface UseTableSortOptions<T> {\n columns: CubeTableColumn<T>[];\n rows: readonly T[];\n /** @default 'client' when any column is sortable, else 'off' */\n mode?: CubeTableSortMode;\n sort?: CubeTableSort | null;\n defaultSort?: CubeTableSort | null;\n onSortChange?: (sort: CubeTableSort | null) => void;\n}\n\nexport interface UseTableSortResult<T> {\n sort: CubeTableSort | null;\n /** `rows` reordered in client mode; the original array otherwise. */\n sortedRows: readonly T[];\n /** Advances a column through the sort cycle. */\n toggleSort: (columnKey: string) => void;\n /**\n * Sets a column's direction outright. `null` clears it.\n *\n * For the column menu's reserved sort keys, which have to reach a specific\n * direction in one step rather than cycling to it.\n */\n setColumnSort: (\n columnKey: string,\n direction: CubeTableSortDirection | null,\n ) => void;\n isSortable: (column: CubeTableColumn<T>) => boolean;\n /**\n * The mode after defaulting. The renderer needs this exact answer to decide\n * whether a header is clickable, and deriving it a second time at the call\n * site is how `DataTable` ended up sorting on `defaultSorts` but ignoring\n * every click.\n */\n mode: CubeTableSortMode;\n}\n\n/**\n * Sort state plus, in client mode, the reordered rows.\n *\n * The cycle is tri-state — `asc → desc → unsorted` — matching ag-grid's default\n * `sortingOrder`, because losing the ability to get back to the source order is\n * a real loss when the source order is meaningful. `disallowSortRemoval` on a\n * column reduces it to `asc ↔ desc`.\n */\nexport function useTableSort<T>({\n columns,\n rows,\n mode,\n sort: sortProp,\n defaultSort,\n onSortChange,\n}: UseTableSortOptions<T>): UseTableSortResult<T> {\n // A collator gives locale-correct, case-insensitive ordering — \"Ä\" sorts next\n // to \"A\" rather than after \"Z\", which a raw `<` comparison gets wrong.\n const collator = useCollator({ numeric: true, sensitivity: 'base' });\n\n const [sort, setSort] = useControlledState<CubeTableSort | null>(\n sortProp as CubeTableSort | null,\n defaultSort ?? null,\n onSortChange as (value: CubeTableSort | null) => void,\n );\n\n const hasSortableColumn = columns.some((column) => column.isSortable);\n const resolvedMode: CubeTableSortMode =\n mode ?? (hasSortableColumn ? 'client' : 'off');\n\n const isSortable = useEvent(\n (column: CubeTableColumn<T>) =>\n resolvedMode !== 'off' && column.isSortable === true,\n );\n\n const toggleSort = useEvent((columnKey: string) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n if (sort?.columnKey !== columnKey) {\n setSort({ columnKey, direction: 'asc' });\n\n return;\n }\n\n if (sort.direction === 'asc') {\n setSort({ columnKey, direction: 'desc' });\n\n return;\n }\n\n setSort(\n column.disallowSortRemoval ? { columnKey, direction: 'asc' } : null,\n );\n });\n\n /**\n * Set the column's direction outright instead of advancing the cycle — see\n * `use-table-sorts.ts` for why the column menu cannot reuse `toggleSort`.\n */\n const setColumnSort = useEvent(\n (columnKey: string, direction: CubeTableSortDirection | null) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n if (direction == null) {\n // Clearing a column that is not the sorted one is a no-op rather than a\n // reset, and `disallowSortRemoval` refuses the clear outright.\n if (sort?.columnKey !== columnKey || column.disallowSortRemoval) return;\n\n setSort(null);\n\n return;\n }\n\n if (sort?.columnKey === columnKey && sort.direction === direction) return;\n\n setSort({ columnKey, direction });\n },\n );\n\n const sortedRows = useMemo(() => {\n if (resolvedMode !== 'client' || !sort) return rows;\n\n const column = columns.find((entry) => entry.key === sort.columnKey);\n\n if (!column) return rows;\n\n const direction = sort.direction === 'asc' ? 1 : -1;\n\n // `map`/`sort`/`map` rather than sorting in place: `rows` is the caller's\n // array and `Array.prototype.sort` mutates. Carrying the original index also\n // makes the sort stable across engines.\n return rows\n .map((row, index) => ({ row, index }))\n .sort((a, b) => {\n const result = compareByColumn(\n column,\n collator,\n a.row,\n a.index,\n b.row,\n b.index,\n );\n\n return result !== 0 ? result * direction : a.index - b.index;\n })\n .map((entry) => entry.row);\n }, [resolvedMode, sort, rows, columns, collator]);\n\n // The resolved mode is returned rather than left for the caller to derive\n // again: the renderer needs the same answer to decide whether a header is\n // clickable, and two independent derivations drift.\n return {\n sort,\n sortedRows,\n toggleSort,\n setColumnSort,\n isSortable,\n mode: resolvedMode,\n };\n}\n\nexport function compareByColumn<T>(\n column: CubeTableColumn<T>,\n collator: Intl.Collator,\n rowA: T,\n indexA: number,\n rowB: T,\n indexB: number,\n): number {\n const valueA = getColumnValue(column, rowA, indexA);\n const valueB = getColumnValue(column, rowB, indexB);\n\n if (column.compare) return column.compare(valueA, valueB, rowA, rowB);\n\n // Nullish always sorts first, then gets flipped with the direction. Mixing\n // them into the value comparison instead produces an unstable order.\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return valueA - valueB;\n }\n if (typeof valueA === 'boolean' && typeof valueB === 'boolean') {\n return Number(valueA) - Number(valueB);\n }\n if (valueA instanceof Date && valueB instanceof Date) {\n return valueA.getTime() - valueB.getTime();\n }\n\n // Fall back to display text, so a column with a `format` sorts the way it\n // reads rather than the way it is stored.\n const textA = getColumnText(column, rowA, indexA) ?? String(valueA);\n const textB = getColumnText(column, rowB, indexB) ?? String(valueB);\n\n return collator.compare(textA, textB);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-table-sort.js","names":["useControlledState","useCollator","useEvent","getColumnText","getColumnValue","CubeTableColumn","CubeTableSort","CubeTableSortDirection","CubeTableSortMode","UseTableSortOptions","columns","T","rows","mode","sort","defaultSort","onSortChange","UseTableSortResult","sortedRows","toggleSort","columnKey","setColumnSort","direction","isSortable","column","useTableSort","t0","$","_c","sortProp","t1","Symbol","for","numeric","sensitivity","collator","setSort","value","hasSortableColumn","some","_temp","resolvedMode","t2","column_0","t3","column_1","find","entry","key","disallowSortRemoval","t4","columnKey_0","column_2","entry_0","t5","sortRows","t6","sorts","Intl","Collator","active","map","filter","length","row","index","a","b","result","compareByColumn","rowA","indexA","rowB","indexB","valueA","valueB","compare","Number","Date","getTime","textA","String","textB"],"sources":["../../../../src/components/data/TableBase/use-table-sort.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useCollator } from 'react-aria';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { getColumnText, getColumnValue } from './use-table-columns';\n\nimport type {\n CubeTableColumn,\n CubeTableSort,\n CubeTableSortDirection,\n} from './types';\n\nexport type CubeTableSortMode = 'client' | 'server' | 'off';\n\nexport interface UseTableSortOptions<T> {\n columns: CubeTableColumn<T>[];\n rows: readonly T[];\n /** @default 'client' when any column is sortable, else 'off' */\n mode?: CubeTableSortMode;\n sort?: CubeTableSort | null;\n defaultSort?: CubeTableSort | null;\n onSortChange?: (sort: CubeTableSort | null) => void;\n}\n\nexport interface UseTableSortResult<T> {\n sort: CubeTableSort | null;\n /** `rows` reordered in client mode; the original array otherwise. */\n sortedRows: readonly T[];\n /** Advances a column through the sort cycle. */\n toggleSort: (columnKey: string) => void;\n /**\n * Sets a column's direction outright. `null` clears it.\n *\n * For the column menu's reserved sort keys, which have to reach a specific\n * direction in one step rather than cycling to it.\n */\n setColumnSort: (\n columnKey: string,\n direction: CubeTableSortDirection | null,\n ) => void;\n isSortable: (column: CubeTableColumn<T>) => boolean;\n /**\n * The mode after defaulting. The renderer needs this exact answer to decide\n * whether a header is clickable, and deriving it a second time at the call\n * site is how `DataTable` ended up sorting on `defaultSorts` but ignoring\n * every click.\n */\n mode: CubeTableSortMode;\n}\n\n/**\n * Sort state plus, in client mode, the reordered rows.\n *\n * The cycle is tri-state — `asc → desc → unsorted` — matching ag-grid's default\n * `sortingOrder`, because losing the ability to get back to the source order is\n * a real loss when the source order is meaningful. `disallowSortRemoval` on a\n * column reduces it to `asc ↔ desc`.\n */\nexport function useTableSort<T>({\n columns,\n rows,\n mode,\n sort: sortProp,\n defaultSort,\n onSortChange,\n}: UseTableSortOptions<T>): UseTableSortResult<T> {\n // A collator gives locale-correct, case-insensitive ordering — \"Ä\" sorts next\n // to \"A\" rather than after \"Z\", which a raw `<` comparison gets wrong.\n const collator = useCollator({ numeric: true, sensitivity: 'base' });\n\n const [sort, setSort] = useControlledState<CubeTableSort | null>(\n sortProp as CubeTableSort | null,\n defaultSort ?? null,\n onSortChange as (value: CubeTableSort | null) => void,\n );\n\n const hasSortableColumn = columns.some((column) => column.isSortable);\n const resolvedMode: CubeTableSortMode =\n mode ?? (hasSortableColumn ? 'client' : 'off');\n\n const isSortable = useEvent(\n (column: CubeTableColumn<T>) =>\n resolvedMode !== 'off' && column.isSortable === true,\n );\n\n const toggleSort = useEvent((columnKey: string) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n if (sort?.columnKey !== columnKey) {\n setSort({ columnKey, direction: 'asc' });\n\n return;\n }\n\n if (sort.direction === 'asc') {\n setSort({ columnKey, direction: 'desc' });\n\n return;\n }\n\n setSort(\n column.disallowSortRemoval ? { columnKey, direction: 'asc' } : null,\n );\n });\n\n /**\n * Set the column's direction outright instead of advancing the cycle — see\n * `use-table-sorts.ts` for why the column menu cannot reuse `toggleSort`.\n */\n const setColumnSort = useEvent(\n (columnKey: string, direction: CubeTableSortDirection | null) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n if (direction == null) {\n // Clearing a column that is not the sorted one is a no-op rather than a\n // reset, and `disallowSortRemoval` refuses the clear outright.\n if (sort?.columnKey !== columnKey || column.disallowSortRemoval) return;\n\n setSort(null);\n\n return;\n }\n\n if (sort?.columnKey === columnKey && sort.direction === direction) return;\n\n setSort({ columnKey, direction });\n },\n );\n\n const sortedRows =\n resolvedMode === 'client' && sort\n ? sortRows(rows, [sort], columns, collator)\n : rows;\n\n // The resolved mode is returned rather than left for the caller to derive\n // again: the renderer needs the same answer to decide whether a header is\n // clickable, and two independent derivations drift.\n return {\n sort,\n sortedRows,\n toggleSort,\n setColumnSort,\n isSortable,\n mode: resolvedMode,\n };\n}\n\n/**\n * `rows` ordered by `sorts`, the first sort taking precedence. Sorts naming a\n * column the table does not have are skipped, and `rows` itself comes back when\n * none is left.\n *\n * `map`/`sort`/`map` rather than sorting in place: `rows` is the caller's array\n * and `Array.prototype.sort` mutates. Carrying the original index also makes the\n * sort stable across engines, including when every sort ties.\n */\nexport function sortRows<T>(\n rows: readonly T[],\n sorts: readonly CubeTableSort[],\n columns: CubeTableColumn<T>[],\n collator: Intl.Collator,\n): readonly T[] {\n const active = sorts\n .map((sort) => ({\n sort,\n column: columns.find((entry) => entry.key === sort.columnKey),\n }))\n .filter(\n (entry): entry is { sort: CubeTableSort; column: CubeTableColumn<T> } =>\n entry.column != null,\n );\n\n if (!active.length) return rows;\n\n return rows\n .map((row, index) => ({ row, index }))\n .sort((a, b) => {\n for (const { sort, column } of active) {\n const result = compareByColumn(\n column,\n collator,\n a.row,\n a.index,\n b.row,\n b.index,\n );\n\n if (result !== 0) {\n return result * (sort.direction === 'asc' ? 1 : -1);\n }\n }\n\n return a.index - b.index;\n })\n .map((entry) => entry.row);\n}\n\nexport function compareByColumn<T>(\n column: CubeTableColumn<T>,\n collator: Intl.Collator,\n rowA: T,\n indexA: number,\n rowB: T,\n indexB: number,\n): number {\n const valueA = getColumnValue(column, rowA, indexA);\n const valueB = getColumnValue(column, rowB, indexB);\n\n if (column.compare) return column.compare(valueA, valueB, rowA, rowB);\n\n // Nullish always sorts first, then gets flipped with the direction. Mixing\n // them into the value comparison instead produces an unstable order.\n if (valueA == null && valueB == null) return 0;\n if (valueA == null) return -1;\n if (valueB == null) return 1;\n\n if (typeof valueA === 'number' && typeof valueB === 'number') {\n return valueA - valueB;\n }\n if (typeof valueA === 'boolean' && typeof valueB === 'boolean') {\n return Number(valueA) - Number(valueB);\n }\n if (valueA instanceof Date && valueB instanceof Date) {\n return valueA.getTime() - valueB.getTime();\n }\n\n // Fall back to display text, so a column with a `format` sorts the way it\n // reads rather than the way it is stored.\n const textA = getColumnText(column, rowA, indexA) ?? String(valueA);\n const textB = getColumnText(column, rowB, indexB) ?? String(valueB);\n\n return collator.compare(textA, textB);\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
- import { compareByColumn } from "./use-table-sort.js";
3
+ import { sortRows } from "./use-table-sort.js";
4
4
  import { c } from "react-compiler-runtime";
5
5
  import { useControlledState } from "@react-stately/utils";
6
6
  import { useCollator } from "@react-aria/i18n";
@@ -20,7 +20,7 @@ const EMPTY = [];
20
20
  * replacing the whole sort, so the other columns keep their precedence.
21
21
  */
22
22
  function useTableSorts(t0) {
23
- const $ = c(31);
23
+ const $ = c(29);
24
24
  const { columns, rows, mode, sorts: sortsProp, defaultSorts, onSortsChange } = t0;
25
25
  let t1;
26
26
  if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
@@ -118,33 +118,7 @@ function useTableSorts(t0) {
118
118
  const setColumnSort = useEvent(t4);
119
119
  let t5;
120
120
  if ($[13] !== collator || $[14] !== columns || $[15] !== resolvedMode || $[16] !== rows || $[17] !== sorts) {
121
- bb0: {
122
- if (resolvedMode !== "client" || !sorts.length) {
123
- t5 = rows;
124
- break bb0;
125
- }
126
- let t6;
127
- if ($[19] !== columns) {
128
- t6 = (sort) => ({
129
- sort,
130
- column: columns.find((entry_3) => entry_3.key === sort.columnKey)
131
- });
132
- $[19] = columns;
133
- $[20] = t6;
134
- } else t6 = $[20];
135
- const active = sorts.map(t6).filter(_temp2);
136
- if (!active.length) {
137
- t5 = rows;
138
- break bb0;
139
- }
140
- t5 = rows.map(_temp3).sort((a, b) => {
141
- for (const { sort: sort_0, column: column_3 } of active) {
142
- const result = compareByColumn(column_3, collator, a.row, a.index, b.row, b.index);
143
- if (result !== 0) return result * (sort_0.direction === "asc" ? 1 : -1);
144
- }
145
- return a.index - b.index;
146
- }).map(_temp4);
147
- }
121
+ t5 = resolvedMode === "client" ? sortRows(rows, sorts, columns, collator) : rows;
148
122
  $[13] = collator;
149
123
  $[14] = columns;
150
124
  $[15] = resolvedMode;
@@ -154,14 +128,14 @@ function useTableSorts(t0) {
154
128
  } else t5 = $[18];
155
129
  const sortedRows = t5;
156
130
  let t6;
157
- if ($[21] !== sorts) {
158
- t6 = (columnKey_1) => sorts.findIndex((entry_6) => entry_6.columnKey === columnKey_1) + 1;
159
- $[21] = sorts;
160
- $[22] = t6;
161
- } else t6 = $[22];
131
+ if ($[19] !== sorts) {
132
+ t6 = (columnKey_1) => sorts.findIndex((entry_3) => entry_3.columnKey === columnKey_1) + 1;
133
+ $[19] = sorts;
134
+ $[20] = t6;
135
+ } else t6 = $[20];
162
136
  const sortRank = useEvent(t6);
163
137
  let t7;
164
- if ($[23] !== isSortable || $[24] !== resolvedMode || $[25] !== setColumnSort || $[26] !== sortRank || $[27] !== sortedRows || $[28] !== sorts || $[29] !== toggleSort) {
138
+ if ($[21] !== isSortable || $[22] !== resolvedMode || $[23] !== setColumnSort || $[24] !== sortRank || $[25] !== sortedRows || $[26] !== sorts || $[27] !== toggleSort) {
165
139
  t7 = {
166
140
  sorts,
167
141
  sortedRows,
@@ -171,29 +145,17 @@ function useTableSorts(t0) {
171
145
  sortRank,
172
146
  mode: resolvedMode
173
147
  };
174
- $[23] = isSortable;
175
- $[24] = resolvedMode;
176
- $[25] = setColumnSort;
177
- $[26] = sortRank;
178
- $[27] = sortedRows;
179
- $[28] = sorts;
180
- $[29] = toggleSort;
181
- $[30] = t7;
182
- } else t7 = $[30];
148
+ $[21] = isSortable;
149
+ $[22] = resolvedMode;
150
+ $[23] = setColumnSort;
151
+ $[24] = sortRank;
152
+ $[25] = sortedRows;
153
+ $[26] = sorts;
154
+ $[27] = toggleSort;
155
+ $[28] = t7;
156
+ } else t7 = $[28];
183
157
  return t7;
184
158
  }
185
- function _temp4(entry_5) {
186
- return entry_5.row;
187
- }
188
- function _temp3(row, index_1) {
189
- return {
190
- row,
191
- index: index_1
192
- };
193
- }
194
- function _temp2(entry_4) {
195
- return entry_4.column != null;
196
- }
197
159
  function _temp(column) {
198
160
  return column.isSortable;
199
161
  }
@@ -1 +1 @@
1
- {"version":3,"file":"use-table-sorts.js","names":["useCollator","useControlledState","useMemo","useEvent","compareByColumn","CubeTableColumn","CubeTableSort","CubeTableSortDirection","UseTableSortsOptions","columns","T","rows","mode","sorts","defaultSorts","onSortsChange","EMPTY","useTableSorts","t0","$","_c","sortsProp","t1","Symbol","for","numeric","sensitivity","collator","setSorts","value","hasSortableColumn","some","_temp","resolvedMode","t2","column_0","column","isSortable","t3","columnKey","column_1","find","entry","key","index","findIndex","entry_0","direction","next","disallowSortRemoval","splice","toggleSort","t4","columnKey_0","column_2","entry_1","index_0","entry_2","next_0","next_1","setColumnSort","t5","bb0","length","t6","sort","entry_3","active","map","filter","_temp2","_temp3","a","b","sort_0","column_3","result","row","_temp4","sortedRows","columnKey_1","entry_6","sortRank","t7","entry_5","index_1","entry_4"],"sources":["../../../../src/components/data/TableBase/use-table-sorts.ts"],"sourcesContent":["import { useCollator } from '@react-aria/i18n';\nimport { useControlledState } from '@react-stately/utils';\nimport { useMemo } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { compareByColumn } from './use-table-sort';\n\nimport type {\n CubeTableColumn,\n CubeTableSort,\n CubeTableSortDirection,\n} from './types';\n\nexport interface UseTableSortsOptions<T> {\n columns: CubeTableColumn<T>[];\n rows: readonly T[];\n mode?: 'client' | 'server' | 'off';\n sorts?: CubeTableSort[];\n defaultSorts?: CubeTableSort[];\n onSortsChange?: (sorts: CubeTableSort[]) => void;\n}\n\nconst EMPTY: CubeTableSort[] = [];\n\n/**\n * Multi-column sorting.\n *\n * `ItemTable` sorts by one column, which is right for a list. An analytical\n * grid is routinely ordered by one dimension and then another, and Cloud's\n * reports send an array of sorts to the query — so the order of the array is\n * the sort precedence, and it has to survive round-tripping.\n *\n * Clicking a header cycles that column `asc → desc → off` exactly as the single\n * version does; the difference is that it edits its entry in place rather than\n * replacing the whole sort, so the other columns keep their precedence.\n */\nexport function useTableSorts<T>({\n columns,\n rows,\n mode,\n sorts: sortsProp,\n defaultSorts,\n onSortsChange,\n}: UseTableSortsOptions<T>) {\n const collator = useCollator({ numeric: true, sensitivity: 'base' });\n\n const [sorts, setSorts] = useControlledState<CubeTableSort[]>(\n sortsProp as CubeTableSort[],\n defaultSorts ?? EMPTY,\n onSortsChange as (value: CubeTableSort[]) => void,\n );\n\n const hasSortableColumn = columns.some((column) => column.isSortable);\n const resolvedMode = mode ?? (hasSortableColumn ? 'client' : 'off');\n\n const isSortable = useEvent(\n (column: CubeTableColumn<T>) =>\n resolvedMode !== 'off' && column.isSortable === true,\n );\n\n const toggleSort = useEvent((columnKey: string) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n const index = sorts.findIndex((entry) => entry.columnKey === columnKey);\n\n if (index === -1) {\n // Appended, not prepended: a newly sorted column is the least\n // significant, so the ordering the user already established still leads.\n setSorts([...sorts, { columnKey, direction: 'asc' }]);\n\n return;\n }\n\n const next = [...sorts];\n\n if (next[index].direction === 'asc') {\n next[index] = { columnKey, direction: 'desc' };\n setSorts(next);\n\n return;\n }\n\n if (column.disallowSortRemoval) {\n next[index] = { columnKey, direction: 'asc' };\n setSorts(next);\n\n return;\n }\n\n next.splice(index, 1);\n setSorts(next);\n });\n\n /**\n * Set one column's direction outright instead of advancing the cycle.\n *\n * The column menu's `sort-desc` has to reach `desc` in one step. Reaching it\n * by calling `toggleSort` twice cannot work here: under `disallowSortRemoval`\n * the cycle never leaves `asc`/`desc`, and a column that was unsorted would\n * be appended and then re-read, so every intermediate state is observable.\n *\n * Precedence is preserved — an already-sorted column keeps its slot, and a\n * newly sorted one is appended as the least significant, the same rule\n * `toggleSort` follows.\n */\n const setColumnSort = useEvent(\n (columnKey: string, direction: CubeTableSortDirection | null) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n const index = sorts.findIndex((entry) => entry.columnKey === columnKey);\n\n if (direction == null) {\n // `disallowSortRemoval` means the column is never *left* unsorted, so an\n // explicit clear is refused too rather than quietly re-sorting.\n if (index === -1 || column.disallowSortRemoval) return;\n\n const next = [...sorts];\n\n next.splice(index, 1);\n setSorts(next);\n\n return;\n }\n\n if (index === -1) {\n setSorts([...sorts, { columnKey, direction }]);\n\n return;\n }\n\n if (sorts[index].direction === direction) return;\n\n const next = [...sorts];\n\n next[index] = { columnKey, direction };\n setSorts(next);\n },\n );\n\n const sortedRows = useMemo(() => {\n if (resolvedMode !== 'client' || !sorts.length) return rows;\n\n const active = sorts\n .map((sort) => ({\n sort,\n column: columns.find((entry) => entry.key === sort.columnKey),\n }))\n .filter(\n (entry): entry is { sort: CubeTableSort; column: CubeTableColumn<T> } =>\n entry.column != null,\n );\n\n if (!active.length) return rows;\n\n // Not sorted in place: `rows` belongs to the caller and `sort` mutates.\n // The original index is carried so the result is stable when every sort\n // ties.\n return rows\n .map((row, index) => ({ row, index }))\n .sort((a, b) => {\n for (const { sort, column } of active) {\n const result = compareByColumn(\n column,\n collator,\n a.row,\n a.index,\n b.row,\n b.index,\n );\n\n if (result !== 0) {\n return result * (sort.direction === 'asc' ? 1 : -1);\n }\n }\n\n return a.index - b.index;\n })\n .map((entry) => entry.row);\n }, [resolvedMode, sorts, rows, columns, collator]);\n\n /** Where a column sits in the precedence, 1-based. `0` when unsorted. */\n const sortRank = useEvent(\n (columnKey: string) =>\n sorts.findIndex((entry) => entry.columnKey === columnKey) + 1,\n );\n\n // Returned for the same reason as the single-column hook: the renderer needs\n // this exact answer to decide whether a header is clickable.\n return {\n sorts,\n sortedRows,\n toggleSort,\n setColumnSort,\n isSortable,\n sortRank,\n mode: resolvedMode,\n };\n}\n"],"mappings":";;;;;;;;AAuBA,MAAMgB,QAAyB,EAAE;;;;;;;;;;;;;AAcjC,SAAOC,cAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA0B,MAAA,EAAAX,SAAAE,MAAAC,MAAAC,OAAAQ,WAAAP,cAAAC,kBAAAG;CAOP,IAAAI;AAAA,KAAAH,EAAA,OAAAI,OAAAC,IAAA,4BAAA,EAAA;AACKF,OAAA;GAAAG,SAAW;GAAIC,aAAe;GAAQ;AAAAP,IAAA,KAAAG;OAAAA,MAAAH,EAAA;CAAnE,MAAAQ,WAAiB3B,YAAYsB,GAAuC;CAEpE,MAAA,CAAAT,OAAAe,YAA0B3B,mBACxBoB,WACAP,gBAAAE,OACAD,cACD;CAED,MAAAe,oBAA0BrB,QAAOsB,KAAMC,MAA8B;CACrE,MAAAC,eAAqBrB,SAASkB,oBAAA,WAAA;CAAsC,IAAAI;AAAA,KAAAf,EAAA,OAAAc,cAAA;AAGlEC,QAAAC,aACEF,iBAAiB,SAASG,SAAMC,eAAgB;AAAIlB,IAAA,KAAAc;AAAAd,IAAA,KAAAe;OAAAA,MAAAf,EAAA;CAFxD,MAAAkB,aAAmBlC,SACjB+B,GAED;CAAC,IAAAI;AAAA,KAAAnB,EAAA,OAAAV,WAAAU,EAAA,OAAAkB,cAAAlB,EAAA,OAAAS,YAAAT,EAAA,OAAAN,OAAA;AAE0ByB,QAAAC,cAAA;GAC1B,MAAAC,WAAe/B,QAAOgC,MAAMC,UAAWA,MAAKC,QAASJ,UAAU;AAE/D,OAAI,CAACH,YAAD,CAAYC,WAAWD,SAAO,CAAA;GAElC,MAAAQ,QAAc/B,MAAKgC,WAAWC,YAAWJ,QAAKH,cAAeA,UAAU;AAEvE,OAAIK,UAAU,IAAE;AAGdhB,aAAS,CAAA,GAAIf,OAAO;KAAA0B;KAAAQ,WAAwB;KAAO,CAAC,CAAC;AAAA;;GAKvD,MAAAC,OAAa,CAAA,GAAInC,MAAM;AAEvB,OAAImC,KAAKJ,OAAMG,cAAe,OAAK;AACjCC,SAAKJ,SAAS;KAAAL;KAAAQ,WAAwB;KAA3B;AACXnB,aAASoB,KAAK;AAAA;;AAKhB,OAAIZ,SAAMa,qBAAoB;AAC5BD,SAAKJ,SAAS;KAAAL;KAAAQ,WAAwB;KAA3B;AACXnB,aAASoB,KAAK;AAAA;;AAKhBA,QAAIE,OAAQN,OAAO,EAAE;AACrBhB,YAASoB,KAAK;;AACf7B,IAAA,KAAAV;AAAAU,IAAA,KAAAkB;AAAAlB,IAAA,KAAAS;AAAAT,IAAA,KAAAN;AAAAM,IAAA,KAAAmB;OAAAA,MAAAnB,EAAA;CAjCD,MAAAgC,aAAmBhD,SAASmC,GAiC1B;CAAC,IAAAc;AAAA,KAAAjC,EAAA,OAAAV,WAAAU,EAAA,OAAAkB,cAAAlB,EAAA,QAAAS,YAAAT,EAAA,QAAAN,OAAA;AAeDuC,QAAAC,aAAAN,cAAA;GACE,MAAAO,WAAe7C,QAAOgC,MAAMc,YAAWb,QAAKC,QAASJ,YAAU;AAE/D,OAAI,CAACH,YAAD,CAAYC,WAAWD,SAAO,CAAA;GAElC,MAAAoB,UAAc3C,MAAKgC,WAAWY,YAAWf,QAAKH,cAAeA,YAAU;AAEvE,OAAIQ,aAAa,MAAI;AAGnB,QAAIH,YAAU,MAAMR,SAAMa,oBAAoB;IAE9C,MAAAS,SAAa,CAAA,GAAI7C,MAAM;AAEvBmC,WAAIE,OAAQN,SAAO,EAAE;AACrBhB,aAASoB,OAAK;AAAA;;AAKhB,OAAIJ,YAAU,IAAE;AACdhB,aAAS,CAAA,GAAIf,OAAO;KAAA0B,WAAEA;KAASQ;KAAa,CAAC,CAAC;AAAA;;AAKhD,OAAIlC,MAAM+B,SAAMG,cAAeA,UAAS;GAExC,MAAAY,SAAa,CAAA,GAAI9C,MAAM;AAEvBmC,UAAKJ,WAAS;IAAAL,WAAEA;IAASQ;IAAd;AACXnB,YAASoB,OAAK;;AACf7B,IAAA,KAAAV;AAAAU,IAAA,KAAAkB;AAAAlB,IAAA,MAAAS;AAAAT,IAAA,MAAAN;AAAAM,IAAA,MAAAiC;OAAAA,MAAAjC,EAAA;CAjCH,MAAAyC,gBAAsBzD,SACpBiD,GAiCD;CAAC,IAAAS;AAAA,KAAA1C,EAAA,QAAAQ,YAAAR,EAAA,QAAAV,WAAAU,EAAA,QAAAc,gBAAAd,EAAA,QAAAR,QAAAQ,EAAA,QAAAN,OAAA;AAAAiD,OAAA;AAGA,OAAI7B,iBAAiB,YAAjB,CAA8BpB,MAAKkD,QAAO;AAAEF,SAAOlD;AAAP,UAAAmD;;GAAY,IAAAE;AAAA,OAAA7C,EAAA,QAAAV,SAAA;AAGrDuD,UAAAC,UAAW;KAAAA;KAAA7B,QAEN3B,QAAOgC,MAAMyB,YAAWxB,QAAKC,QAASsB,KAAI1B,UAAU;KAC7D;AAACpB,MAAA,MAAAV;AAAAU,MAAA,MAAA6C;SAAAA,MAAA7C,EAAA;GAJJ,MAAAgD,SAAetD,MAAKuD,IACbJ,GAGF,CAAAK,OAEDC,OAED;AAEH,OAAI,CAACH,OAAMJ,QAAO;AAAEF,SAAOlD;AAAP,UAAAmD;;AAKpBD,QAAOlD,KAAIyD,IACJG,OAAiC,CAAAN,MAChCO,GAAAC,MAAA;AACJ,SAAK,MAAA,EAAAR,MAAAS,QAAAtC,QAAAuC,cAA0BR,QAAM;KACnC,MAAAS,SAAexE,gBACbgC,UACAT,UACA6C,EAACK,KACDL,EAAC5B,OACD6B,EAACI,KACDJ,EAAC7B,MACF;AAED,SAAIgC,WAAW,EAAC,QACPA,UAAUX,OAAIlB,cAAe,QAAnB,IAAA;;AAEpB,WAEMyB,EAAC5B,QAAS6B,EAAC7B;KAClB,CAAAwB,IACGU,OAAqB;;AAAC3D,IAAA,MAAAQ;AAAAR,IAAA,MAAAV;AAAAU,IAAA,MAAAc;AAAAd,IAAA,MAAAR;AAAAQ,IAAA,MAAAN;AAAAM,IAAA,MAAA0C;OAAAA,MAAA1C,EAAA;CAtC/B,MAAA4D,aAAmBlB;CAuCgC,IAAAG;AAAA,KAAA7C,EAAA,QAAAN,OAAA;AAIjDmD,QAAAgB,gBACEnE,MAAKgC,WAAWoC,YAAWvC,QAAKH,cAAeA,YAAU,GAAG;AAACpB,IAAA,MAAAN;AAAAM,IAAA,MAAA6C;OAAAA,MAAA7C,EAAA;CAFjE,MAAA+D,WAAiB/E,SACf6D,GAED;CAAC,IAAAmB;AAAA,KAAAhE,EAAA,QAAAkB,cAAAlB,EAAA,QAAAc,gBAAAd,EAAA,QAAAyC,iBAAAzC,EAAA,QAAA+D,YAAA/D,EAAA,QAAA4D,cAAA5D,EAAA,QAAAN,SAAAM,EAAA,QAAAgC,YAAA;AAIKgC,OAAA;GAAAtE;GAAAkE;GAAA5B;GAAAS;GAAAvB;GAAA6C;GAAAtE,MAOCqB;GACP;AAAAd,IAAA,MAAAkB;AAAAlB,IAAA,MAAAc;AAAAd,IAAA,MAAAyC;AAAAzC,IAAA,MAAA+D;AAAA/D,IAAA,MAAA4D;AAAA5D,IAAA,MAAAN;AAAAM,IAAA,MAAAgC;AAAAhC,IAAA,MAAAgE;OAAAA,MAAAhE,EAAA;AAAA,QARMgE;;AA5JF,SAAAL,OAAAM,SAAA;AAAA,QAiJe1C,QAAKmC;;AAjJpB,SAAAN,OAAAM,KAAAQ,SAAA;AAAA,QA8HqB;EAAAR;EAAAjC,OAAOA;EAAO;;AA9HnC,SAAA0B,OAAAgB,SAAA;AAAA,QAqHG5C,QAAKN,UAAW;;AArHnB,SAAAJ,MAAAI,QAAA;AAAA,QAgB8CA,OAAMC"}
1
+ {"version":3,"file":"use-table-sorts.js","names":["useCollator","useControlledState","useEvent","sortRows","CubeTableColumn","CubeTableSort","CubeTableSortDirection","UseTableSortsOptions","columns","T","rows","mode","sorts","defaultSorts","onSortsChange","EMPTY","useTableSorts","t0","$","_c","sortsProp","t1","Symbol","for","numeric","sensitivity","collator","setSorts","value","hasSortableColumn","some","_temp","resolvedMode","t2","column_0","column","isSortable","t3","columnKey","column_1","find","entry","key","index","findIndex","entry_0","direction","next","disallowSortRemoval","splice","toggleSort","t4","columnKey_0","column_2","entry_1","index_0","entry_2","next_0","next_1","setColumnSort","t5","sortedRows","t6","columnKey_1","entry_3","sortRank","t7"],"sources":["../../../../src/components/data/TableBase/use-table-sorts.ts"],"sourcesContent":["import { useCollator } from '@react-aria/i18n';\nimport { useControlledState } from '@react-stately/utils';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { sortRows } from './use-table-sort';\n\nimport type {\n CubeTableColumn,\n CubeTableSort,\n CubeTableSortDirection,\n} from './types';\n\nexport interface UseTableSortsOptions<T> {\n columns: CubeTableColumn<T>[];\n rows: readonly T[];\n mode?: 'client' | 'server' | 'off';\n sorts?: CubeTableSort[];\n defaultSorts?: CubeTableSort[];\n onSortsChange?: (sorts: CubeTableSort[]) => void;\n}\n\nconst EMPTY: CubeTableSort[] = [];\n\n/**\n * Multi-column sorting.\n *\n * `ItemTable` sorts by one column, which is right for a list. An analytical\n * grid is routinely ordered by one dimension and then another, and Cloud's\n * reports send an array of sorts to the query — so the order of the array is\n * the sort precedence, and it has to survive round-tripping.\n *\n * Clicking a header cycles that column `asc → desc → off` exactly as the single\n * version does; the difference is that it edits its entry in place rather than\n * replacing the whole sort, so the other columns keep their precedence.\n */\nexport function useTableSorts<T>({\n columns,\n rows,\n mode,\n sorts: sortsProp,\n defaultSorts,\n onSortsChange,\n}: UseTableSortsOptions<T>) {\n const collator = useCollator({ numeric: true, sensitivity: 'base' });\n\n const [sorts, setSorts] = useControlledState<CubeTableSort[]>(\n sortsProp as CubeTableSort[],\n defaultSorts ?? EMPTY,\n onSortsChange as (value: CubeTableSort[]) => void,\n );\n\n const hasSortableColumn = columns.some((column) => column.isSortable);\n const resolvedMode = mode ?? (hasSortableColumn ? 'client' : 'off');\n\n const isSortable = useEvent(\n (column: CubeTableColumn<T>) =>\n resolvedMode !== 'off' && column.isSortable === true,\n );\n\n const toggleSort = useEvent((columnKey: string) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n const index = sorts.findIndex((entry) => entry.columnKey === columnKey);\n\n if (index === -1) {\n // Appended, not prepended: a newly sorted column is the least\n // significant, so the ordering the user already established still leads.\n setSorts([...sorts, { columnKey, direction: 'asc' }]);\n\n return;\n }\n\n const next = [...sorts];\n\n if (next[index].direction === 'asc') {\n next[index] = { columnKey, direction: 'desc' };\n setSorts(next);\n\n return;\n }\n\n if (column.disallowSortRemoval) {\n next[index] = { columnKey, direction: 'asc' };\n setSorts(next);\n\n return;\n }\n\n next.splice(index, 1);\n setSorts(next);\n });\n\n /**\n * Set one column's direction outright instead of advancing the cycle.\n *\n * The column menu's `sort-desc` has to reach `desc` in one step. Reaching it\n * by calling `toggleSort` twice cannot work here: under `disallowSortRemoval`\n * the cycle never leaves `asc`/`desc`, and a column that was unsorted would\n * be appended and then re-read, so every intermediate state is observable.\n *\n * Precedence is preserved — an already-sorted column keeps its slot, and a\n * newly sorted one is appended as the least significant, the same rule\n * `toggleSort` follows.\n */\n const setColumnSort = useEvent(\n (columnKey: string, direction: CubeTableSortDirection | null) => {\n const column = columns.find((entry) => entry.key === columnKey);\n\n if (!column || !isSortable(column)) return;\n\n const index = sorts.findIndex((entry) => entry.columnKey === columnKey);\n\n if (direction == null) {\n // `disallowSortRemoval` means the column is never *left* unsorted, so an\n // explicit clear is refused too rather than quietly re-sorting.\n if (index === -1 || column.disallowSortRemoval) return;\n\n const next = [...sorts];\n\n next.splice(index, 1);\n setSorts(next);\n\n return;\n }\n\n if (index === -1) {\n setSorts([...sorts, { columnKey, direction }]);\n\n return;\n }\n\n if (sorts[index].direction === direction) return;\n\n const next = [...sorts];\n\n next[index] = { columnKey, direction };\n setSorts(next);\n },\n );\n\n const sortedRows =\n resolvedMode === 'client' ? sortRows(rows, sorts, columns, collator) : rows;\n\n /** Where a column sits in the precedence, 1-based. `0` when unsorted. */\n const sortRank = useEvent(\n (columnKey: string) =>\n sorts.findIndex((entry) => entry.columnKey === columnKey) + 1,\n );\n\n // Returned for the same reason as the single-column hook: the renderer needs\n // this exact answer to decide whether a header is clickable.\n return {\n sorts,\n sortedRows,\n toggleSort,\n setColumnSort,\n isSortable,\n sortRank,\n mode: resolvedMode,\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useCallback, useRef, useState } from "react";
3
3
 
4
4
  //#region src/components/data/TableBase/use-table-storage.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.185.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.186.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { c } from "react-compiler-runtime";
@@ -7,8 +7,25 @@ import { Item, useTreeState } from "react-stately";
7
7
  import { useControlledState } from "@react-stately/utils";
8
8
 
9
9
  //#region src/components/data/TableBase/use-table-tree-state.tsx
10
+ /**
11
+ * Current React Stately's legacy TreeCollection omits `getChildren`, while
12
+ * `useTreeItem` needs it for level/set-size/expanded metadata.
13
+ */
14
+ function withGetChildren(state) {
15
+ const collection = state.collection;
16
+ if (typeof collection.getChildren === "function") return state;
17
+ const patched = Object.create(collection);
18
+ patched.getChildren = (key) => {
19
+ const node = collection.getItem(key);
20
+ return node ? Array.from(node.childNodes) : [];
21
+ };
22
+ return {
23
+ ...state,
24
+ collection: patched
25
+ };
26
+ }
10
27
  function useTableTreeState(options) {
11
- const $ = c(43);
28
+ const $ = c(39);
12
29
  const { roots, allNodesByKey, expandedKeys: controlledExpandedKeys, defaultExpandedKeys, forcedExpandedKeys, disabledKeys, getTextValue, onExpand, ariaLabel } = options;
13
30
  const { t } = useI18n();
14
31
  let t0;
@@ -31,15 +48,14 @@ function useTableTreeState(options) {
31
48
  $[5] = t2;
32
49
  } else t2 = $[5];
33
50
  const [baseExpandedKeys, setBaseExpandedKeys] = useControlledState(controlledSet, t2);
34
- let keys;
51
+ let effectiveExpandedKeys;
35
52
  if ($[6] !== baseExpandedKeys || $[7] !== forcedExpandedKeys) {
36
- keys = new Set(baseExpandedKeys);
37
- forcedExpandedKeys?.forEach((key) => keys.add(key));
53
+ effectiveExpandedKeys = new Set(baseExpandedKeys);
54
+ forcedExpandedKeys?.forEach((key) => effectiveExpandedKeys.add(key));
38
55
  $[6] = baseExpandedKeys;
39
56
  $[7] = forcedExpandedKeys;
40
- $[8] = keys;
41
- } else keys = $[8];
42
- const effectiveExpandedKeys = keys;
57
+ $[8] = effectiveExpandedKeys;
58
+ } else effectiveExpandedKeys = $[8];
43
59
  let t3;
44
60
  if ($[9] !== allNodesByKey || $[10] !== baseExpandedKeys || $[11] !== effectiveExpandedKeys || $[12] !== forcedExpandedKeys || $[13] !== onExpand || $[14] !== setBaseExpandedKeys) {
45
61
  t3 = (next) => {
@@ -123,56 +139,28 @@ function useTableTreeState(options) {
123
139
  } else t7 = $[27];
124
140
  const ariaProps = t7;
125
141
  const baseState = useTreeState(ariaProps);
142
+ let state;
126
143
  let t8;
127
- bb0: {
128
- const collection = baseState.collection;
129
- if (typeof collection.getChildren === "function") {
130
- t8 = baseState;
131
- break bb0;
132
- }
133
- let patched;
134
- if ($[28] !== collection) {
135
- patched = Object.create(collection);
136
- patched.getChildren = (key_2) => {
137
- const node_1 = collection.getItem(key_2);
138
- return node_1 ? Array.from(node_1.childNodes) : [];
139
- };
140
- $[28] = collection;
141
- $[29] = patched;
142
- } else patched = $[29];
143
- let t9;
144
- if ($[30] !== baseState || $[31] !== patched) {
145
- t9 = {
146
- ...baseState,
147
- collection: patched
148
- };
149
- $[30] = baseState;
150
- $[31] = patched;
151
- $[32] = t9;
152
- } else t9 = $[32];
153
- t8 = t9;
144
+ if ($[28] !== baseState) {
145
+ state = withGetChildren(baseState);
146
+ t8 = Array.from(state.collection.getKeys(), (key_2) => state.collection.getItem(key_2)).filter(_temp2);
147
+ $[28] = baseState;
148
+ $[29] = state;
149
+ $[30] = t8;
150
+ } else {
151
+ state = $[29];
152
+ t8 = $[30];
154
153
  }
155
- const state = t8;
156
- let output;
157
- if ($[33] !== state.collection) {
158
- output = [];
159
- for (const key_3 of state.collection.getKeys()) {
160
- const node_2 = state.collection.getItem(key_3);
161
- if (node_2?.type === "item") output.push(node_2);
162
- }
163
- $[33] = state.collection;
164
- $[34] = output;
165
- } else output = $[34];
166
- const visibleNodes = output;
154
+ const visibleNodes = t8;
167
155
  let t9;
168
- if ($[35] !== visibleNodes) {
169
- t9 = visibleNodes.map(_temp2).filter(_temp3);
170
- $[35] = visibleNodes;
171
- $[36] = t9;
172
- } else t9 = $[36];
156
+ if ($[31] !== visibleNodes) {
157
+ t9 = visibleNodes.map(_temp3).filter(_temp4);
158
+ $[31] = visibleNodes;
159
+ $[32] = t9;
160
+ } else t9 = $[32];
173
161
  const visibleEntries = t9;
174
162
  let t10;
175
- if ($[37] !== ariaProps || $[38] !== effectiveExpandedKeys || $[39] !== state || $[40] !== visibleEntries || $[41] !== visibleNodes) {
163
+ if ($[33] !== ariaProps || $[34] !== effectiveExpandedKeys || $[35] !== state || $[36] !== visibleEntries || $[37] !== visibleNodes) {
176
164
  t10 = {
177
165
  state,
178
166
  ariaProps,
@@ -180,20 +168,23 @@ function useTableTreeState(options) {
180
168
  visibleEntries,
181
169
  expandedKeys: effectiveExpandedKeys
182
170
  };
183
- $[37] = ariaProps;
184
- $[38] = effectiveExpandedKeys;
185
- $[39] = state;
186
- $[40] = visibleEntries;
187
- $[41] = visibleNodes;
188
- $[42] = t10;
189
- } else t10 = $[42];
171
+ $[33] = ariaProps;
172
+ $[34] = effectiveExpandedKeys;
173
+ $[35] = state;
174
+ $[36] = visibleEntries;
175
+ $[37] = visibleNodes;
176
+ $[38] = t10;
177
+ } else t10 = $[38];
190
178
  return t10;
191
179
  }
192
- function _temp3(node_4) {
193
- return node_4 != null;
180
+ function _temp4(node_3) {
181
+ return node_3 != null;
182
+ }
183
+ function _temp3(node_2) {
184
+ return node_2.value;
194
185
  }
195
- function _temp2(node_3) {
196
- return node_3.value;
186
+ function _temp2(node_1) {
187
+ return node_1?.type === "item";
197
188
  }
198
189
  function _temp() {}
199
190