@cube-dev/ui-kit 0.182.0 → 0.183.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 (1124) hide show
  1. package/dist/CHANGELOG.md +10 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +48 -31
  3. package/dist/_internal/hooks/use-debounced-value.js.map +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +22 -7
  5. package/dist/_internal/hooks/use-deprecation-warning.js.map +1 -1
  6. package/dist/_internal/hooks/use-event.js +1 -1
  7. package/dist/_internal/hooks/use-event.js.map +1 -1
  8. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  9. package/dist/_internal/hooks/use-is-first-render.js.map +1 -1
  10. package/dist/_internal/hooks/use-sync-ref.js +12 -4
  11. package/dist/_internal/hooks/use-sync-ref.js.map +1 -1
  12. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  13. package/dist/_internal/hooks/use-timer/timer.js.map +1 -1
  14. package/dist/_internal/hooks/use-timer/use-timer.js +90 -20
  15. package/dist/_internal/hooks/use-timer/use-timer.js.map +1 -1
  16. package/dist/_internal/hooks/use-warn.js +4 -4
  17. package/dist/_internal/hooks/use-warn.js.map +1 -1
  18. package/dist/components/Block.js +29 -7
  19. package/dist/components/Block.js.map +1 -1
  20. package/dist/components/CollectionItem.js +1 -1
  21. package/dist/components/CollectionItem.js.map +1 -1
  22. package/dist/components/GlobalStyles.js +33 -9
  23. package/dist/components/GlobalStyles.js.map +1 -1
  24. package/dist/components/GridProvider.js +4 -4
  25. package/dist/components/GridProvider.js.map +1 -1
  26. package/dist/components/HiddenInput.js +1 -1
  27. package/dist/components/HiddenInput.js.map +1 -1
  28. package/dist/components/Root.js +137 -42
  29. package/dist/components/Root.js.map +1 -1
  30. package/dist/components/actions/Action/Action.js +20 -8
  31. package/dist/components/actions/Action/Action.js.map +1 -1
  32. package/dist/components/actions/Banner/Banner.js +91 -22
  33. package/dist/components/actions/Banner/Banner.js.map +1 -1
  34. package/dist/components/actions/Button/Button.js +5 -5
  35. package/dist/components/actions/Button/Button.js.map +1 -1
  36. package/dist/components/actions/ButtonGroup/ButtonGroup.js +15 -5
  37. package/dist/components/actions/ButtonGroup/ButtonGroup.js.map +1 -1
  38. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  39. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  40. package/dist/components/actions/ButtonSplit/context.js +1 -1
  41. package/dist/components/actions/ButtonSplit/context.js.map +1 -1
  42. package/dist/components/actions/CommandMenu/CommandMenu.js +76 -76
  43. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  44. package/dist/components/actions/CommandMenu/styled.js +1 -1
  45. package/dist/components/actions/CommandMenu/styled.js.map +1 -1
  46. package/dist/components/actions/ItemAction/ItemAction.js +205 -68
  47. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  48. package/dist/components/actions/ItemActionContext.js +26 -7
  49. package/dist/components/actions/ItemActionContext.js.map +1 -1
  50. package/dist/components/actions/ItemActionsWrapper.js +215 -84
  51. package/dist/components/actions/ItemActionsWrapper.js.map +1 -1
  52. package/dist/components/actions/ItemButton/ItemButton.js +2 -2
  53. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  54. package/dist/components/actions/Link/Link.js +16 -7
  55. package/dist/components/actions/Link/Link.js.map +1 -1
  56. package/dist/components/actions/Menu/Menu.js +127 -72
  57. package/dist/components/actions/Menu/Menu.js.map +1 -1
  58. package/dist/components/actions/Menu/MenuItem.js +116 -43
  59. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  60. package/dist/components/actions/Menu/MenuSection.js +85 -30
  61. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  62. package/dist/components/actions/Menu/MenuTrigger.js +316 -112
  63. package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
  64. package/dist/components/actions/Menu/SubMenuTrigger.js +6 -6
  65. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  66. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  67. package/dist/components/actions/Menu/SubmenuTriggerContext.js.map +1 -1
  68. package/dist/components/actions/Menu/context.js +1 -1
  69. package/dist/components/actions/Menu/context.js.map +1 -1
  70. package/dist/components/actions/Menu/styled.js +1 -1
  71. package/dist/components/actions/Menu/styled.js.map +1 -1
  72. package/dist/components/actions/actions-run.js +1 -1
  73. package/dist/components/actions/actions-run.js.map +1 -1
  74. package/dist/components/actions/index.js +1 -1
  75. package/dist/components/actions/index.js.map +1 -1
  76. package/dist/components/actions/use-action.js +3 -3
  77. package/dist/components/actions/use-action.js.map +1 -1
  78. package/dist/components/actions/use-anchored-menu.js +6 -6
  79. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  80. package/dist/components/actions/use-context-menu.js +12 -12
  81. package/dist/components/actions/use-context-menu.js.map +1 -1
  82. package/dist/components/content/ActiveZone/ActiveZone.js +84 -18
  83. package/dist/components/content/ActiveZone/ActiveZone.js.map +1 -1
  84. package/dist/components/content/Alert/Alert.js +18 -7
  85. package/dist/components/content/Alert/Alert.js.map +1 -1
  86. package/dist/components/content/Alert/use-alert.js +53 -15
  87. package/dist/components/content/Alert/use-alert.js.map +1 -1
  88. package/dist/components/content/Avatar/Avatar.js +51 -13
  89. package/dist/components/content/Avatar/Avatar.js.map +1 -1
  90. package/dist/components/content/Badge/Badge.js +43 -10
  91. package/dist/components/content/Badge/Badge.js.map +1 -1
  92. package/dist/components/content/Card/Card.js +29 -7
  93. package/dist/components/content/Card/Card.js.map +1 -1
  94. package/dist/components/content/Content.js +29 -7
  95. package/dist/components/content/Content.js.map +1 -1
  96. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +2 -2
  97. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js.map +1 -1
  98. package/dist/components/content/CopySnippet/CopySnippet.js +220 -60
  99. package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
  100. package/dist/components/content/Disclosure/Disclosure.js +453 -194
  101. package/dist/components/content/Disclosure/Disclosure.js.map +1 -1
  102. package/dist/components/content/Divider.js +52 -14
  103. package/dist/components/content/Divider.js.map +1 -1
  104. package/dist/components/content/Footer.js +29 -7
  105. package/dist/components/content/Footer.js.map +1 -1
  106. package/dist/components/content/Header.js +29 -7
  107. package/dist/components/content/Header.js.map +1 -1
  108. package/dist/components/content/HotKeys/HotKeys.js +55 -27
  109. package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
  110. package/dist/components/content/InfoBadge/InfoBadge.js +8 -8
  111. package/dist/components/content/InfoBadge/InfoBadge.js.map +1 -1
  112. package/dist/components/content/InlineInput/InlineInput.js +429 -188
  113. package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
  114. package/dist/components/content/Item/Item.js +408 -151
  115. package/dist/components/content/Item/Item.js.map +1 -1
  116. package/dist/components/content/ItemBadge/ItemBadge.js +173 -59
  117. package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
  118. package/dist/components/content/ItemCard/ItemCard.js +34 -9
  119. package/dist/components/content/ItemCard/ItemCard.js.map +1 -1
  120. package/dist/components/content/Layout/GridLayout.js +38 -10
  121. package/dist/components/content/Layout/GridLayout.js.map +1 -1
  122. package/dist/components/content/Layout/Layout.js +30 -13
  123. package/dist/components/content/Layout/Layout.js.map +1 -1
  124. package/dist/components/content/Layout/LayoutBlock.js +33 -8
  125. package/dist/components/content/Layout/LayoutBlock.js.map +1 -1
  126. package/dist/components/content/Layout/LayoutCenter.js +48 -11
  127. package/dist/components/content/Layout/LayoutCenter.js.map +1 -1
  128. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  129. package/dist/components/content/Layout/LayoutContainer.js.map +1 -1
  130. package/dist/components/content/Layout/LayoutContent.js +1 -1
  131. package/dist/components/content/Layout/LayoutContent.js.map +1 -1
  132. package/dist/components/content/Layout/LayoutContext.js +30 -21
  133. package/dist/components/content/Layout/LayoutContext.js.map +1 -1
  134. package/dist/components/content/Layout/LayoutFlex.js +33 -8
  135. package/dist/components/content/Layout/LayoutFlex.js.map +1 -1
  136. package/dist/components/content/Layout/LayoutFooter.js +53 -14
  137. package/dist/components/content/Layout/LayoutFooter.js.map +1 -1
  138. package/dist/components/content/Layout/LayoutGrid.js +48 -11
  139. package/dist/components/content/Layout/LayoutGrid.js.map +1 -1
  140. package/dist/components/content/Layout/LayoutHeader.js +211 -57
  141. package/dist/components/content/Layout/LayoutHeader.js.map +1 -1
  142. package/dist/components/content/Layout/LayoutPane.js +60 -14
  143. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  144. package/dist/components/content/Layout/LayoutPanel.js +59 -17
  145. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  146. package/dist/components/content/Layout/LayoutPanelHeader.js +89 -27
  147. package/dist/components/content/Layout/LayoutPanelHeader.js.map +1 -1
  148. package/dist/components/content/Layout/LayoutToolbar.js +33 -8
  149. package/dist/components/content/Layout/LayoutToolbar.js.map +1 -1
  150. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +206 -119
  151. package/dist/components/content/Layout/hooks/useTinyScrollbar.js.map +1 -1
  152. package/dist/components/content/Layout/index.js +1 -1
  153. package/dist/components/content/Layout/index.js.map +1 -1
  154. package/dist/components/content/Layout/utils.js +1 -1
  155. package/dist/components/content/Layout/utils.js.map +1 -1
  156. package/dist/components/content/Paragraph.js +25 -9
  157. package/dist/components/content/Paragraph.js.map +1 -1
  158. package/dist/components/content/Placeholder/Placeholder.js +52 -14
  159. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  160. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  161. package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
  162. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  163. package/dist/components/content/PrismCode/prismSetup.js.map +1 -1
  164. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +52 -17
  165. package/dist/components/content/PrismDiffCode/PrismDiffCode.js.map +1 -1
  166. package/dist/components/content/Result/Result.js +117 -38
  167. package/dist/components/content/Result/Result.js.map +1 -1
  168. package/dist/components/content/Skeleton/Skeleton.js +26 -17
  169. package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
  170. package/dist/components/content/Tag/Tag.js +68 -13
  171. package/dist/components/content/Tag/Tag.js.map +1 -1
  172. package/dist/components/content/Text.d.ts +14 -14
  173. package/dist/components/content/Text.js +61 -14
  174. package/dist/components/content/Text.js.map +1 -1
  175. package/dist/components/content/TextItem/TextItem.js +37 -16
  176. package/dist/components/content/TextItem/TextItem.js.map +1 -1
  177. package/dist/components/content/Title.js +98 -23
  178. package/dist/components/content/Title.js.map +1 -1
  179. package/dist/components/content/Tree/Tree.js +32 -32
  180. package/dist/components/content/Tree/Tree.js.map +1 -1
  181. package/dist/components/content/Tree/TreeNode.js +10 -10
  182. package/dist/components/content/Tree/TreeNode.js.map +1 -1
  183. package/dist/components/content/Tree/styled.js +1 -1
  184. package/dist/components/content/Tree/styled.js.map +1 -1
  185. package/dist/components/content/Tree/tree-index.js +1 -1
  186. package/dist/components/content/Tree/tree-index.js.map +1 -1
  187. package/dist/components/content/Tree/use-checkbox-tree.js +123 -89
  188. package/dist/components/content/Tree/use-checkbox-tree.js.map +1 -1
  189. package/dist/components/content/Tree/use-load-data.js +52 -21
  190. package/dist/components/content/Tree/use-load-data.js.map +1 -1
  191. package/dist/components/content/highlightText.js +1 -1
  192. package/dist/components/content/highlightText.js.map +1 -1
  193. package/dist/components/content/use-auto-tooltip.js +1 -1
  194. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  195. package/dist/components/data/DataTable/DataTable.js +31 -31
  196. package/dist/components/data/DataTable/DataTable.js.map +1 -1
  197. package/dist/components/data/ItemTable/ItemTable.js +41 -41
  198. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  199. package/dist/components/data/ItemTable/ItemTableBulkBar.js +11 -11
  200. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -1
  201. package/dist/components/data/ItemTable/ItemTableDragPreview.js +41 -4
  202. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -1
  203. package/dist/components/data/ItemTable/ItemTableFooter.js +67 -30
  204. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -1
  205. package/dist/components/data/ItemTable/ItemTableToolbar.js +95 -28
  206. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -1
  207. package/dist/components/data/TableBase/ColumnResizer.js +90 -41
  208. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -1
  209. package/dist/components/data/TableBase/RowCollection.js +1 -1
  210. package/dist/components/data/TableBase/RowCollection.js.map +1 -1
  211. package/dist/components/data/TableBase/TableHeaderCell.js +154 -64
  212. package/dist/components/data/TableBase/TableHeaderCell.js.map +1 -1
  213. package/dist/components/data/TableBase/TableRow.js +211 -69
  214. package/dist/components/data/TableBase/TableRow.js.map +1 -1
  215. package/dist/components/data/TableBase/TableView.js +119 -80
  216. package/dist/components/data/TableBase/TableView.js.map +1 -1
  217. package/dist/components/data/TableBase/column-menu.js +1 -1
  218. package/dist/components/data/TableBase/column-menu.js.map +1 -1
  219. package/dist/components/data/TableBase/column-tint.js +1 -1
  220. package/dist/components/data/TableBase/column-tint.js.map +1 -1
  221. package/dist/components/data/TableBase/row-menu.js +1 -1
  222. package/dist/components/data/TableBase/row-menu.js.map +1 -1
  223. package/dist/components/data/TableBase/styled.js +1 -1
  224. package/dist/components/data/TableBase/styled.js.map +1 -1
  225. package/dist/components/data/TableBase/table-tree.js +1 -1
  226. package/dist/components/data/TableBase/table-tree.js.map +1 -1
  227. package/dist/components/data/TableBase/types.js +1 -1
  228. package/dist/components/data/TableBase/types.js.map +1 -1
  229. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  230. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -1
  231. package/dist/components/data/TableBase/use-column-order.js +56 -12
  232. package/dist/components/data/TableBase/use-column-order.js.map +1 -1
  233. package/dist/components/data/TableBase/use-container-width.js +24 -10
  234. package/dist/components/data/TableBase/use-container-width.js.map +1 -1
  235. package/dist/components/data/TableBase/use-row-move-animation.js +68 -49
  236. package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -1
  237. package/dist/components/data/TableBase/use-scrollability.js +32 -18
  238. package/dist/components/data/TableBase/use-scrollability.js.map +1 -1
  239. package/dist/components/data/TableBase/use-table-columns.js +130 -60
  240. package/dist/components/data/TableBase/use-table-columns.js.map +1 -1
  241. package/dist/components/data/TableBase/use-table-search.js +1 -1
  242. package/dist/components/data/TableBase/use-table-search.js.map +1 -1
  243. package/dist/components/data/TableBase/use-table-selection.js +39 -39
  244. package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
  245. package/dist/components/data/TableBase/use-table-sort.js +132 -68
  246. package/dist/components/data/TableBase/use-table-sort.js.map +1 -1
  247. package/dist/components/data/TableBase/use-table-sorts.js +168 -101
  248. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -1
  249. package/dist/components/data/TableBase/use-table-storage.js +2 -2
  250. package/dist/components/data/TableBase/use-table-storage.js.map +1 -1
  251. package/dist/components/data/TableBase/use-table-tree-state.js +181 -86
  252. package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -1
  253. package/dist/components/fields/Checkbox/Checkbox.js +2 -2
  254. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  255. package/dist/components/fields/Checkbox/CheckboxGroup.js +101 -33
  256. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  257. package/dist/components/fields/Checkbox/context.js +1 -1
  258. package/dist/components/fields/Checkbox/context.js.map +1 -1
  259. package/dist/components/fields/ColorInput/ColorInput.js +329 -150
  260. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  261. package/dist/components/fields/ColorPicker/ColorPicker.js +16 -16
  262. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  263. package/dist/components/fields/ColorSwatch/ColorSwatch.js +52 -13
  264. package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -1
  265. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +90 -28
  266. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  267. package/dist/components/fields/ComboBox/ComboBox.js +216 -134
  268. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  269. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  270. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  271. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  272. package/dist/components/fields/CommandTextArea/caretPosition.js.map +1 -1
  273. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +88 -49
  274. package/dist/components/fields/CommandTextArea/useCaretAnchor.js.map +1 -1
  275. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  276. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  277. package/dist/components/fields/DatePicker/DateInputBase.js +129 -34
  278. package/dist/components/fields/DatePicker/DateInputBase.js.map +1 -1
  279. package/dist/components/fields/DatePicker/DatePicker.js +194 -69
  280. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  281. package/dist/components/fields/DatePicker/DatePickerButton.js +39 -8
  282. package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
  283. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  284. package/dist/components/fields/DatePicker/DatePickerElement.js.map +1 -1
  285. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  286. package/dist/components/fields/DatePicker/DatePickerInput.js.map +1 -1
  287. package/dist/components/fields/DatePicker/DatePickerSegment.js +109 -29
  288. package/dist/components/fields/DatePicker/DatePickerSegment.js.map +1 -1
  289. package/dist/components/fields/DatePicker/DateRangePicker.js +224 -88
  290. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  291. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +473 -180
  292. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  293. package/dist/components/fields/DatePicker/MonthPicker.js +15 -6
  294. package/dist/components/fields/DatePicker/MonthPicker.js.map +1 -1
  295. package/dist/components/fields/DatePicker/PeriodPicker.js +288 -91
  296. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  297. package/dist/components/fields/DatePicker/QuarterPicker.js +15 -6
  298. package/dist/components/fields/DatePicker/QuarterPicker.js.map +1 -1
  299. package/dist/components/fields/DatePicker/TimeInput.js +15 -7
  300. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  301. package/dist/components/fields/DatePicker/WeekPicker.js +15 -6
  302. package/dist/components/fields/DatePicker/WeekPicker.js.map +1 -1
  303. package/dist/components/fields/DatePicker/YearPicker.js +15 -6
  304. package/dist/components/fields/DatePicker/YearPicker.js.map +1 -1
  305. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  306. package/dist/components/fields/DatePicker/parseDate.js.map +1 -1
  307. package/dist/components/fields/DatePicker/period.js +1 -1
  308. package/dist/components/fields/DatePicker/period.js.map +1 -1
  309. package/dist/components/fields/DatePicker/props.js +1 -1
  310. package/dist/components/fields/DatePicker/props.js.map +1 -1
  311. package/dist/components/fields/DatePicker/utils.js +15 -8
  312. package/dist/components/fields/DatePicker/utils.js.map +1 -1
  313. package/dist/components/fields/FileInput/FileInput.js +3 -3
  314. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  315. package/dist/components/fields/FilterListBox/FilterListBox.js +87 -87
  316. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  317. package/dist/components/fields/FilterPicker/FilterPicker.js +22 -22
  318. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  319. package/dist/components/fields/Input/Input.js +1 -1
  320. package/dist/components/fields/Input/Input.js.map +1 -1
  321. package/dist/components/fields/ListBox/DraggableListBox.js +23 -10
  322. package/dist/components/fields/ListBox/DraggableListBox.js.map +1 -1
  323. package/dist/components/fields/ListBox/ListBox.js +138 -53
  324. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  325. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +156 -37
  326. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  327. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  328. package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
  329. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +61 -33
  330. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  331. package/dist/components/fields/NumberInput/NumberInput.js +123 -33
  332. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  333. package/dist/components/fields/NumberInput/StepButton.js +53 -15
  334. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  335. package/dist/components/fields/PasswordInput/PasswordInput.js +149 -45
  336. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  337. package/dist/components/fields/Picker/Picker.js +8 -8
  338. package/dist/components/fields/Picker/Picker.js.map +1 -1
  339. package/dist/components/fields/RadioGroup/Radio.js +273 -104
  340. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  341. package/dist/components/fields/RadioGroup/RadioGroup.js +149 -48
  342. package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
  343. package/dist/components/fields/RadioGroup/context.js +1 -1
  344. package/dist/components/fields/RadioGroup/context.js.map +1 -1
  345. package/dist/components/fields/SearchComboBox/SearchComboBox.js +80 -65
  346. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  347. package/dist/components/fields/SearchInput/SearchInput.js +91 -28
  348. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  349. package/dist/components/fields/Select/Select.js +369 -117
  350. package/dist/components/fields/Select/Select.js.map +1 -1
  351. package/dist/components/fields/Slider/Gradation.js +45 -10
  352. package/dist/components/fields/Slider/Gradation.js.map +1 -1
  353. package/dist/components/fields/Slider/HueSlider.js +121 -32
  354. package/dist/components/fields/Slider/HueSlider.js.map +1 -1
  355. package/dist/components/fields/Slider/RangeSlider.js +46 -10
  356. package/dist/components/fields/Slider/RangeSlider.js.map +1 -1
  357. package/dist/components/fields/Slider/Slider.js +108 -23
  358. package/dist/components/fields/Slider/Slider.js.map +1 -1
  359. package/dist/components/fields/Slider/SliderBase.js +2 -2
  360. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  361. package/dist/components/fields/Slider/SliderThumb.js +96 -37
  362. package/dist/components/fields/Slider/SliderThumb.js.map +1 -1
  363. package/dist/components/fields/Slider/SliderTrack.js +64 -23
  364. package/dist/components/fields/Slider/SliderTrack.js.map +1 -1
  365. package/dist/components/fields/Slider/elements.js +1 -1
  366. package/dist/components/fields/Slider/elements.js.map +1 -1
  367. package/dist/components/fields/Slider/index.js +1 -1
  368. package/dist/components/fields/Switch/Switch.js +190 -66
  369. package/dist/components/fields/Switch/Switch.js.map +1 -1
  370. package/dist/components/fields/TextArea/TextArea.js +137 -47
  371. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  372. package/dist/components/fields/TextInput/TextInput.js +80 -27
  373. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  374. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  375. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  376. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  377. package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -1
  378. package/dist/components/fields/TextInputMapper/TextInputMapper.js +156 -83
  379. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  380. package/dist/components/fields/TriggerActions.js +11 -2
  381. package/dist/components/fields/TriggerActions.js.map +1 -1
  382. package/dist/components/fields/color/ColorPanel.js +237 -59
  383. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  384. package/dist/components/fields/color/channels.js +1 -1
  385. package/dist/components/fields/color/channels.js.map +1 -1
  386. package/dist/components/fields/color/color.js +1 -1
  387. package/dist/components/fields/color/color.js.map +1 -1
  388. package/dist/components/fields/color/context.js +1 -1
  389. package/dist/components/fields/color/context.js.map +1 -1
  390. package/dist/components/form/FieldWrapper/FieldWrapper.js +195 -72
  391. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  392. package/dist/components/form/Form/Field.js +23 -9
  393. package/dist/components/form/Form/Field.js.map +1 -1
  394. package/dist/components/form/Form/Form.js +76 -30
  395. package/dist/components/form/Form/Form.js.map +1 -1
  396. package/dist/components/form/Form/ModernFormRoot.js +294 -81
  397. package/dist/components/form/Form/ModernFormRoot.js.map +1 -1
  398. package/dist/components/form/Form/ResetButton/ResetButton.js +32 -10
  399. package/dist/components/form/Form/ResetButton/ResetButton.js.map +1 -1
  400. package/dist/components/form/Form/SubmitButton/SubmitButton.js +32 -10
  401. package/dist/components/form/Form/SubmitButton/SubmitButton.js.map +1 -1
  402. package/dist/components/form/Form/SubmitError.js +130 -32
  403. package/dist/components/form/Form/SubmitError.js.map +1 -1
  404. package/dist/components/form/Form/backend.js +1 -1
  405. package/dist/components/form/Form/backend.js.map +1 -1
  406. package/dist/components/form/Form/index.js +1 -1
  407. package/dist/components/form/Form/index.js.map +1 -1
  408. package/dist/components/form/Form/modern/actions.js +140 -45
  409. package/dist/components/form/Form/modern/actions.js.map +1 -1
  410. package/dist/components/form/Form/modern/context.js +1 -1
  411. package/dist/components/form/Form/modern/context.js.map +1 -1
  412. package/dist/components/form/Form/modern/controller.js +1 -1
  413. package/dist/components/form/Form/modern/controller.js.map +1 -1
  414. package/dist/components/form/Form/modern/field-binding.js +1 -1
  415. package/dist/components/form/Form/modern/field-binding.js.map +1 -1
  416. package/dist/components/form/Form/modern/field.js +1 -1
  417. package/dist/components/form/Form/modern/field.js.map +1 -1
  418. package/dist/components/form/Form/modern/react.js +102 -19
  419. package/dist/components/form/Form/modern/react.js.map +1 -1
  420. package/dist/components/form/Form/modern/store.js +13 -3
  421. package/dist/components/form/Form/modern/store.js.map +1 -1
  422. package/dist/components/form/Form/modern/types.d.ts +3 -1
  423. package/dist/components/form/Form/modern/validation.js +1 -1
  424. package/dist/components/form/Form/modern/validation.js.map +1 -1
  425. package/dist/components/form/Form/modern/values.js +1 -1
  426. package/dist/components/form/Form/modern/values.js.map +1 -1
  427. package/dist/components/form/Form/use-field/use-field-binding.js +236 -63
  428. package/dist/components/form/Form/use-field/use-field-binding.js.map +1 -1
  429. package/dist/components/form/Form/use-field/use-field-props.js +106 -61
  430. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  431. package/dist/components/form/Form/use-field/use-field.js +5 -4
  432. package/dist/components/form/Form/use-field/use-field.js.map +1 -1
  433. package/dist/components/form/Form/use-form.js +2 -1
  434. package/dist/components/form/Form/use-form.js.map +1 -1
  435. package/dist/components/form/Form/validation.js +1 -1
  436. package/dist/components/form/Form/validation.js.map +1 -1
  437. package/dist/components/form/Label.js +127 -37
  438. package/dist/components/form/Label.js.map +1 -1
  439. package/dist/components/form/validation/ValidationIndicator.js +20 -5
  440. package/dist/components/form/validation/ValidationIndicator.js.map +1 -1
  441. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  442. package/dist/components/form/validation/resolve-validation-props.js.map +1 -1
  443. package/dist/components/form/validation/use-validation-props.js +36 -10
  444. package/dist/components/form/validation/use-validation-props.js.map +1 -1
  445. package/dist/components/form/wrapper.js +1 -1
  446. package/dist/components/form/wrapper.js.map +1 -1
  447. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +49 -29
  448. package/dist/components/helpers/DisplayTransition/DisplayTransition.js.map +1 -1
  449. package/dist/components/helpers/IconSwitch/IconSwitch.js +8 -8
  450. package/dist/components/helpers/IconSwitch/IconSwitch.js.map +1 -1
  451. package/dist/components/layout/Board/Board.js +27 -9
  452. package/dist/components/layout/Board/Board.js.map +1 -1
  453. package/dist/components/layout/Board/BoardProvider.js +1 -1
  454. package/dist/components/layout/Board/BoardProvider.js.map +1 -1
  455. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  456. package/dist/components/layout/Board/BoardResponsive.js.map +1 -1
  457. package/dist/components/layout/Board/Widget.js +1 -1
  458. package/dist/components/layout/Board/Widget.js.map +1 -1
  459. package/dist/components/layout/Board/WidgetHost.js +159 -121
  460. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  461. package/dist/components/layout/Board/board-context.js +14 -5
  462. package/dist/components/layout/Board/board-context.js.map +1 -1
  463. package/dist/components/layout/Board/board-store.js +1 -1
  464. package/dist/components/layout/Board/board-store.js.map +1 -1
  465. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  466. package/dist/components/layout/Board/grid-core/calculate.js.map +1 -1
  467. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  468. package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -1
  469. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  470. package/dist/components/layout/Board/grid-core/collision.js.map +1 -1
  471. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  472. package/dist/components/layout/Board/grid-core/compactors.js.map +1 -1
  473. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  474. package/dist/components/layout/Board/grid-core/constraints.js.map +1 -1
  475. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  476. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -1
  477. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  478. package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
  479. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  480. package/dist/components/layout/Board/grid-core/placement.js.map +1 -1
  481. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  482. package/dist/components/layout/Board/grid-core/sort.js.map +1 -1
  483. package/dist/components/layout/Board/index.js +1 -1
  484. package/dist/components/layout/Board/index.js.map +1 -1
  485. package/dist/components/layout/Board/responsive-utils.js +1 -1
  486. package/dist/components/layout/Board/responsive-utils.js.map +1 -1
  487. package/dist/components/layout/Board/use-board-layout.js +8 -8
  488. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  489. package/dist/components/layout/Board/use-board-registry.js +257 -257
  490. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  491. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  492. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -1
  493. package/dist/components/layout/Board/use-board-selection.js +16 -16
  494. package/dist/components/layout/Board/use-board-selection.js.map +1 -1
  495. package/dist/components/layout/Flex.js +29 -7
  496. package/dist/components/layout/Flex.js.map +1 -1
  497. package/dist/components/layout/Flow.js +29 -7
  498. package/dist/components/layout/Flow.js.map +1 -1
  499. package/dist/components/layout/Grid.js +30 -7
  500. package/dist/components/layout/Grid.js.map +1 -1
  501. package/dist/components/layout/Panel.js +9 -9
  502. package/dist/components/layout/Panel.js.map +1 -1
  503. package/dist/components/layout/Prefix.js +59 -16
  504. package/dist/components/layout/Prefix.js.map +1 -1
  505. package/dist/components/layout/ResizablePanel.js +62 -32
  506. package/dist/components/layout/ResizablePanel.js.map +1 -1
  507. package/dist/components/layout/Space.js +55 -11
  508. package/dist/components/layout/Space.js.map +1 -1
  509. package/dist/components/layout/Suffix.js +59 -16
  510. package/dist/components/layout/Suffix.js.map +1 -1
  511. package/dist/components/navigation/Pagination/Pagination.js +394 -164
  512. package/dist/components/navigation/Pagination/Pagination.js.map +1 -1
  513. package/dist/components/navigation/Pagination/use-pagination.js +69 -26
  514. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -1
  515. package/dist/components/navigation/Tabs/DraggableTabList.js +25 -10
  516. package/dist/components/navigation/Tabs/DraggableTabList.js.map +1 -1
  517. package/dist/components/navigation/Tabs/TabButton.js +604 -235
  518. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  519. package/dist/components/navigation/Tabs/TabDropIndicator.js +65 -23
  520. package/dist/components/navigation/Tabs/TabDropIndicator.js.map +1 -1
  521. package/dist/components/navigation/Tabs/TabPanel.js +47 -19
  522. package/dist/components/navigation/Tabs/TabPanel.js.map +1 -1
  523. package/dist/components/navigation/Tabs/TabPicker.js +105 -33
  524. package/dist/components/navigation/Tabs/TabPicker.js.map +1 -1
  525. package/dist/components/navigation/Tabs/Tabs.js +45 -45
  526. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  527. package/dist/components/navigation/Tabs/TabsAction.js +53 -19
  528. package/dist/components/navigation/Tabs/TabsAction.js.map +1 -1
  529. package/dist/components/navigation/Tabs/TabsContext.js +16 -6
  530. package/dist/components/navigation/Tabs/TabsContext.js.map +1 -1
  531. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  532. package/dist/components/navigation/Tabs/popover-placement.js.map +1 -1
  533. package/dist/components/navigation/Tabs/styled.js +1 -1
  534. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  535. package/dist/components/navigation/Tabs/types.js +1 -1
  536. package/dist/components/navigation/Tabs/types.js.map +1 -1
  537. package/dist/components/navigation/Tabs/use-tab-editing.js +50 -13
  538. package/dist/components/navigation/Tabs/use-tab-editing.js.map +1 -1
  539. package/dist/components/navigation/Tabs/use-tab-indicator.js +111 -63
  540. package/dist/components/navigation/Tabs/use-tab-indicator.js.map +1 -1
  541. package/dist/components/organisms/StatsCard/StatsCard.js +54 -14
  542. package/dist/components/organisms/StatsCard/StatsCard.js.map +1 -1
  543. package/dist/components/other/Calendar/Calendar.js +79 -31
  544. package/dist/components/other/Calendar/Calendar.js.map +1 -1
  545. package/dist/components/other/Calendar/CalendarCell.js +66 -20
  546. package/dist/components/other/Calendar/CalendarCell.js.map +1 -1
  547. package/dist/components/other/Calendar/CalendarGrid.js +90 -40
  548. package/dist/components/other/Calendar/CalendarGrid.js.map +1 -1
  549. package/dist/components/other/Calendar/CalendarHeader.js +80 -17
  550. package/dist/components/other/Calendar/CalendarHeader.js.map +1 -1
  551. package/dist/components/other/Calendar/CalendarPanel.js +568 -144
  552. package/dist/components/other/Calendar/CalendarPanel.js.map +1 -1
  553. package/dist/components/other/Calendar/PeriodCalendar.js +425 -134
  554. package/dist/components/other/Calendar/PeriodCalendar.js.map +1 -1
  555. package/dist/components/other/Calendar/PeriodGrid.js +6 -6
  556. package/dist/components/other/Calendar/PeriodGrid.js.map +1 -1
  557. package/dist/components/other/Calendar/RangeCalendar.js +50 -24
  558. package/dist/components/other/Calendar/RangeCalendar.js.map +1 -1
  559. package/dist/components/other/Calendar/styled.js +1 -1
  560. package/dist/components/other/Calendar/styled.js.map +1 -1
  561. package/dist/components/other/CubeLogo/CubeLogo.js +95 -34
  562. package/dist/components/other/CubeLogo/CubeLogo.js.map +1 -1
  563. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  564. package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -1
  565. package/dist/components/overlays/AlertDialog/AlertDialog.js +153 -42
  566. package/dist/components/overlays/AlertDialog/AlertDialog.js.map +1 -1
  567. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +76 -54
  568. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js.map +1 -1
  569. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +146 -39
  570. package/dist/components/overlays/AlertDialog/AlertDialogZone.js.map +1 -1
  571. package/dist/components/overlays/Dialog/Dialog.js +26 -10
  572. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  573. package/dist/components/overlays/Dialog/DialogContainer.js +13 -13
  574. package/dist/components/overlays/Dialog/DialogContainer.js.map +1 -1
  575. package/dist/components/overlays/Dialog/DialogForm.d.ts +12 -7
  576. package/dist/components/overlays/Dialog/DialogForm.js +18 -7
  577. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  578. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +1 -1
  579. package/dist/components/overlays/Dialog/DialogTrigger.js +214 -59
  580. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  581. package/dist/components/overlays/Dialog/ModernDialogForm.js +350 -0
  582. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -0
  583. package/dist/components/overlays/Dialog/context.js +1 -1
  584. package/dist/components/overlays/Dialog/context.js.map +1 -1
  585. package/dist/components/overlays/Dialog/index.d.ts +1 -1
  586. package/dist/components/overlays/Dialog/use-dialog-container.js +6 -6
  587. package/dist/components/overlays/Dialog/use-dialog-container.js.map +1 -1
  588. package/dist/components/overlays/Modal/Modal.js +140 -27
  589. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  590. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  591. package/dist/components/overlays/Modal/OpenTransitionContext.js.map +1 -1
  592. package/dist/components/overlays/Modal/Overlay.js +4 -4
  593. package/dist/components/overlays/Modal/Overlay.js.map +1 -1
  594. package/dist/components/overlays/Modal/Popover.js +131 -29
  595. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  596. package/dist/components/overlays/Modal/Tray.js +142 -30
  597. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  598. package/dist/components/overlays/Modal/Underlay.js +36 -7
  599. package/dist/components/overlays/Modal/Underlay.js.map +1 -1
  600. package/dist/components/overlays/Notifications/Notification.js +69 -32
  601. package/dist/components/overlays/Notifications/Notification.js.map +1 -1
  602. package/dist/components/overlays/Notifications/NotificationAction.js +79 -26
  603. package/dist/components/overlays/Notifications/NotificationAction.js.map +1 -1
  604. package/dist/components/overlays/Notifications/NotificationCard.js +138 -33
  605. package/dist/components/overlays/Notifications/NotificationCard.js.map +1 -1
  606. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  607. package/dist/components/overlays/Notifications/NotificationContext.js.map +1 -1
  608. package/dist/components/overlays/Notifications/NotificationItem.js +63 -16
  609. package/dist/components/overlays/Notifications/NotificationItem.js.map +1 -1
  610. package/dist/components/overlays/Notifications/OverlayContainer.js +312 -151
  611. package/dist/components/overlays/Notifications/OverlayContainer.js.map +1 -1
  612. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  613. package/dist/components/overlays/Notifications/OverlayProvider.js.map +1 -1
  614. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +210 -58
  615. package/dist/components/overlays/Notifications/PersistentNotificationsList.js.map +1 -1
  616. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  617. package/dist/components/overlays/Notifications/dismissed-storage.js.map +1 -1
  618. package/dist/components/overlays/Notifications/format-relative-time.d.ts +1 -1
  619. package/dist/components/overlays/Notifications/format-relative-time.js +3 -3
  620. package/dist/components/overlays/Notifications/format-relative-time.js.map +1 -1
  621. package/dist/components/overlays/Notifications/index.js +1 -1
  622. package/dist/components/overlays/Notifications/index.js.map +1 -1
  623. package/dist/components/overlays/Notifications/use-notification-state.js +51 -51
  624. package/dist/components/overlays/Notifications/use-notification-state.js.map +1 -1
  625. package/dist/components/overlays/Notifications/use-notifications.js +12 -12
  626. package/dist/components/overlays/Notifications/use-notifications.js.map +1 -1
  627. package/dist/components/overlays/Notifications/use-overlay-timers.js +10 -10
  628. package/dist/components/overlays/Notifications/use-overlay-timers.js.map +1 -1
  629. package/dist/components/overlays/Notifications/use-persistent-notifications.js +24 -5
  630. package/dist/components/overlays/Notifications/use-persistent-notifications.js.map +1 -1
  631. package/dist/components/overlays/Notifications/use-persistent-state.js +145 -43
  632. package/dist/components/overlays/Notifications/use-persistent-state.js.map +1 -1
  633. package/dist/components/overlays/Notifications/use-toast-state.js +25 -25
  634. package/dist/components/overlays/Notifications/use-toast-state.js.map +1 -1
  635. package/dist/components/overlays/Toast/ToastItem.js +68 -15
  636. package/dist/components/overlays/Toast/ToastItem.js.map +1 -1
  637. package/dist/components/overlays/Toast/index.js +100 -34
  638. package/dist/components/overlays/Toast/index.js.map +1 -1
  639. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  640. package/dist/components/overlays/Toast/useProgressToast.js.map +1 -1
  641. package/dist/components/overlays/Toast/useToast.js +9 -9
  642. package/dist/components/overlays/Toast/useToast.js.map +1 -1
  643. package/dist/components/overlays/Tooltip/Tooltip.js +88 -31
  644. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  645. package/dist/components/overlays/Tooltip/TooltipProvider.js +75 -10
  646. package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
  647. package/dist/components/overlays/Tooltip/TooltipTrigger.js +186 -77
  648. package/dist/components/overlays/Tooltip/TooltipTrigger.js.map +1 -1
  649. package/dist/components/overlays/Tooltip/context.js +1 -1
  650. package/dist/components/overlays/Tooltip/context.js.map +1 -1
  651. package/dist/components/portal/Portal.js +18 -3
  652. package/dist/components/portal/Portal.js.map +1 -1
  653. package/dist/components/portal/PortalProvider.js +11 -2
  654. package/dist/components/portal/PortalProvider.js.map +1 -1
  655. package/dist/components/portal/usePortal.js +1 -1
  656. package/dist/components/portal/usePortal.js.map +1 -1
  657. package/dist/components/shared/DraggableCollection.js +23 -23
  658. package/dist/components/shared/DraggableCollection.js.map +1 -1
  659. package/dist/components/shared/InvalidIcon.js +1 -1
  660. package/dist/components/shared/InvalidIcon.js.map +1 -1
  661. package/dist/components/shared/ValidIcon.js +1 -1
  662. package/dist/components/shared/ValidIcon.js.map +1 -1
  663. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +156 -48
  664. package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
  665. package/dist/components/status/Spin/Cube.js +12 -3
  666. package/dist/components/status/Spin/Cube.js.map +1 -1
  667. package/dist/components/status/Spin/InternalSpinner.js +21 -6
  668. package/dist/components/status/Spin/InternalSpinner.js.map +1 -1
  669. package/dist/components/status/Spin/Spin.js +31 -7
  670. package/dist/components/status/Spin/Spin.js.map +1 -1
  671. package/dist/components/status/Spin/SpinsContainer.js +23 -6
  672. package/dist/components/status/Spin/SpinsContainer.js.map +1 -1
  673. package/dist/data/item-themes.js +1 -1
  674. package/dist/data/item-themes.js.map +1 -1
  675. package/dist/data/themes.js +1 -1
  676. package/dist/data/themes.js.map +1 -1
  677. package/dist/eslint-plugin/defaults.generated.js +15 -5
  678. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  679. package/dist/eslint-plugin/index.js +1 -1
  680. package/dist/eslint-plugin/index.js.map +1 -1
  681. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  682. package/dist/eslint-plugin/rules/no-redundant-default-prop.js.map +1 -1
  683. package/dist/i18n/I18nProvider.js +54 -13
  684. package/dist/i18n/I18nProvider.js.map +1 -1
  685. package/dist/i18n/createFormatter.js +1 -1
  686. package/dist/i18n/createFormatter.js.map +1 -1
  687. package/dist/i18n/index.js +1 -1
  688. package/dist/i18n/index.js.map +1 -1
  689. package/dist/i18n/instance.js +1 -1
  690. package/dist/i18n/instance.js.map +1 -1
  691. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  692. package/dist/i18n/locales/en-US/uikit.js +1 -1
  693. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  694. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  695. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  696. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  697. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  698. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  699. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  700. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  701. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  702. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  703. package/dist/i18n/locales.js +1 -1
  704. package/dist/i18n/locales.js.map +1 -1
  705. package/dist/i18n/useFormatter.js +10 -3
  706. package/dist/i18n/useFormatter.js.map +1 -1
  707. package/dist/i18n/useI18n.js +1 -1
  708. package/dist/i18n/useI18n.js.map +1 -1
  709. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  710. package/dist/icons/AdjustmentsHorizontalIcon.js.map +1 -1
  711. package/dist/icons/AdjustmentsIcon.js +1 -1
  712. package/dist/icons/AdjustmentsIcon.js.map +1 -1
  713. package/dist/icons/AiIcon.js +1 -1
  714. package/dist/icons/AiIcon.js.map +1 -1
  715. package/dist/icons/AreaChartIcon.js +1 -1
  716. package/dist/icons/AreaChartIcon.js.map +1 -1
  717. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  718. package/dist/icons/ArrowNarrowDownIcon.js.map +1 -1
  719. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  720. package/dist/icons/ArrowNarrowUpIcon.js.map +1 -1
  721. package/dist/icons/BackwardIcon.js +1 -1
  722. package/dist/icons/BackwardIcon.js.map +1 -1
  723. package/dist/icons/BarChartIcon.js +1 -1
  724. package/dist/icons/BarChartIcon.js.map +1 -1
  725. package/dist/icons/BellFilledIcon.js +1 -1
  726. package/dist/icons/BellFilledIcon.js.map +1 -1
  727. package/dist/icons/BellIcon.js +1 -1
  728. package/dist/icons/BellIcon.js.map +1 -1
  729. package/dist/icons/BooleanIcon.js +1 -1
  730. package/dist/icons/BooleanIcon.js.map +1 -1
  731. package/dist/icons/CalendarEditIcon.js +1 -1
  732. package/dist/icons/CalendarEditIcon.js.map +1 -1
  733. package/dist/icons/CalendarIcon.js +1 -1
  734. package/dist/icons/CalendarIcon.js.map +1 -1
  735. package/dist/icons/CaretDownIcon.js +1 -1
  736. package/dist/icons/CaretDownIcon.js.map +1 -1
  737. package/dist/icons/CaretUpIcon.js +1 -1
  738. package/dist/icons/CaretUpIcon.js.map +1 -1
  739. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  740. package/dist/icons/ChartAreaStackedIcon.js.map +1 -1
  741. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  742. package/dist/icons/ChartAreaStackedPercentageIcon.js.map +1 -1
  743. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  744. package/dist/icons/ChartBarGroupedHorizontalIcon.js.map +1 -1
  745. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  746. package/dist/icons/ChartBarGroupedIcon.js.map +1 -1
  747. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  748. package/dist/icons/ChartBarHorizontalIcon.js.map +1 -1
  749. package/dist/icons/ChartBarLineIcon.js +1 -1
  750. package/dist/icons/ChartBarLineIcon.js.map +1 -1
  751. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  752. package/dist/icons/ChartBarStackedHorizontalIcon.js.map +1 -1
  753. package/dist/icons/ChartBarStackedIcon.js +1 -1
  754. package/dist/icons/ChartBarStackedIcon.js.map +1 -1
  755. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  756. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js.map +1 -1
  757. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  758. package/dist/icons/ChartBarStackedPercentageIcon.js.map +1 -1
  759. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  760. package/dist/icons/ChartBoxPlot2Icon.js.map +1 -1
  761. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  762. package/dist/icons/ChartBoxPlotIcon.js.map +1 -1
  763. package/dist/icons/ChartBubbleIcon.js +1 -1
  764. package/dist/icons/ChartBubbleIcon.js.map +1 -1
  765. package/dist/icons/ChartDonut2Icon.js +1 -1
  766. package/dist/icons/ChartDonut2Icon.js.map +1 -1
  767. package/dist/icons/ChartFunnelIcon.js +1 -1
  768. package/dist/icons/ChartFunnelIcon.js.map +1 -1
  769. package/dist/icons/ChartHeatmapIcon.js +1 -1
  770. package/dist/icons/ChartHeatmapIcon.js.map +1 -1
  771. package/dist/icons/ChartKPIIcon.js +1 -1
  772. package/dist/icons/ChartKPIIcon.js.map +1 -1
  773. package/dist/icons/ChartPie2Icon.js +1 -1
  774. package/dist/icons/ChartPie2Icon.js.map +1 -1
  775. package/dist/icons/ChartScatterIcon.js +1 -1
  776. package/dist/icons/ChartScatterIcon.js.map +1 -1
  777. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  778. package/dist/icons/CheckCircleFilledIcon.js.map +1 -1
  779. package/dist/icons/CheckCircleIcon.js +1 -1
  780. package/dist/icons/CheckCircleIcon.js.map +1 -1
  781. package/dist/icons/CheckIcon.js +1 -1
  782. package/dist/icons/CheckIcon.js.map +1 -1
  783. package/dist/icons/CircleFilledIcon.js +1 -1
  784. package/dist/icons/CircleFilledIcon.js.map +1 -1
  785. package/dist/icons/ClearIcon.js +1 -1
  786. package/dist/icons/ClearIcon.js.map +1 -1
  787. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  788. package/dist/icons/CloseCircleFilledIcon.js.map +1 -1
  789. package/dist/icons/CloseCircleIcon.js +1 -1
  790. package/dist/icons/CloseCircleIcon.js.map +1 -1
  791. package/dist/icons/CloseIcon.js +1 -1
  792. package/dist/icons/CloseIcon.js.map +1 -1
  793. package/dist/icons/CodeIcon.js +1 -1
  794. package/dist/icons/CodeIcon.js.map +1 -1
  795. package/dist/icons/ColumnTotalIcon.js +1 -1
  796. package/dist/icons/ColumnTotalIcon.js.map +1 -1
  797. package/dist/icons/CopyIcon.js +1 -1
  798. package/dist/icons/CopyIcon.js.map +1 -1
  799. package/dist/icons/CountIcon.js +1 -1
  800. package/dist/icons/CountIcon.js.map +1 -1
  801. package/dist/icons/CubeIcon.js +1 -1
  802. package/dist/icons/CubeIcon.js.map +1 -1
  803. package/dist/icons/CubePauseIcon.js +1 -1
  804. package/dist/icons/CubePauseIcon.js.map +1 -1
  805. package/dist/icons/CubePlayIcon.js +1 -1
  806. package/dist/icons/CubePlayIcon.js.map +1 -1
  807. package/dist/icons/CurrencyDollarIcon.js +1 -1
  808. package/dist/icons/CurrencyDollarIcon.js.map +1 -1
  809. package/dist/icons/DangerIcon.js +1 -1
  810. package/dist/icons/DangerIcon.js.map +1 -1
  811. package/dist/icons/DashboardIcon.js +1 -1
  812. package/dist/icons/DashboardIcon.js.map +1 -1
  813. package/dist/icons/DatabaseIcon.js +1 -1
  814. package/dist/icons/DatabaseIcon.js.map +1 -1
  815. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  816. package/dist/icons/DecimalDecreaseIcon.js.map +1 -1
  817. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  818. package/dist/icons/DecimalIncreaseIcon.js.map +1 -1
  819. package/dist/icons/DirectionIcon.js +67 -22
  820. package/dist/icons/DirectionIcon.js.map +1 -1
  821. package/dist/icons/DonutIcon.js +1 -1
  822. package/dist/icons/DonutIcon.js.map +1 -1
  823. package/dist/icons/DownIcon.js +1 -1
  824. package/dist/icons/DownIcon.js.map +1 -1
  825. package/dist/icons/EditIcon.js +1 -1
  826. package/dist/icons/EditIcon.js.map +1 -1
  827. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  828. package/dist/icons/ExclamationCircleFilledIcon.js.map +1 -1
  829. package/dist/icons/ExclamationCircleIcon.js +1 -1
  830. package/dist/icons/ExclamationCircleIcon.js.map +1 -1
  831. package/dist/icons/ExclamationIcon.js +1 -1
  832. package/dist/icons/ExclamationIcon.js.map +1 -1
  833. package/dist/icons/EyeIcon.js +1 -1
  834. package/dist/icons/EyeIcon.js.map +1 -1
  835. package/dist/icons/EyeInvisibleIcon.js +1 -1
  836. package/dist/icons/EyeInvisibleIcon.js.map +1 -1
  837. package/dist/icons/FilterIcon.js +1 -1
  838. package/dist/icons/FilterIcon.js.map +1 -1
  839. package/dist/icons/FolderFilledIcon.js +1 -1
  840. package/dist/icons/FolderFilledIcon.js.map +1 -1
  841. package/dist/icons/FolderIcon.js +1 -1
  842. package/dist/icons/FolderIcon.js.map +1 -1
  843. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  844. package/dist/icons/FolderOpenFilledIcon.js.map +1 -1
  845. package/dist/icons/FolderOpenIcon.js +1 -1
  846. package/dist/icons/FolderOpenIcon.js.map +1 -1
  847. package/dist/icons/ForwardIcon.js +1 -1
  848. package/dist/icons/ForwardIcon.js.map +1 -1
  849. package/dist/icons/GripVerticalIcon.js +1 -1
  850. package/dist/icons/GripVerticalIcon.js.map +1 -1
  851. package/dist/icons/HierarchyIcon.js +1 -1
  852. package/dist/icons/HierarchyIcon.js.map +1 -1
  853. package/dist/icons/HierarchyOpenIcon.js +1 -1
  854. package/dist/icons/HierarchyOpenIcon.js.map +1 -1
  855. package/dist/icons/Icon.js +60 -16
  856. package/dist/icons/Icon.js.map +1 -1
  857. package/dist/icons/InfoCircleIcon.js +1 -1
  858. package/dist/icons/InfoCircleIcon.js.map +1 -1
  859. package/dist/icons/InfoIcon.js +1 -1
  860. package/dist/icons/InfoIcon.js.map +1 -1
  861. package/dist/icons/KeyIcon.js +1 -1
  862. package/dist/icons/KeyIcon.js.map +1 -1
  863. package/dist/icons/LeftIcon.js +1 -1
  864. package/dist/icons/LeftIcon.js.map +1 -1
  865. package/dist/icons/LineChartIcon.js +1 -1
  866. package/dist/icons/LineChartIcon.js.map +1 -1
  867. package/dist/icons/LoadingIcon.js +1 -1
  868. package/dist/icons/LoadingIcon.js.map +1 -1
  869. package/dist/icons/LockFilledIcon.js +1 -1
  870. package/dist/icons/LockFilledIcon.js.map +1 -1
  871. package/dist/icons/LockIcon.js +1 -1
  872. package/dist/icons/LockIcon.js.map +1 -1
  873. package/dist/icons/MoreIcon.js +1 -1
  874. package/dist/icons/MoreIcon.js.map +1 -1
  875. package/dist/icons/NotAllowedIcon.js +1 -1
  876. package/dist/icons/NotAllowedIcon.js.map +1 -1
  877. package/dist/icons/Number123Icon.js +1 -1
  878. package/dist/icons/Number123Icon.js.map +1 -1
  879. package/dist/icons/NumberIcon.js +1 -1
  880. package/dist/icons/NumberIcon.js.map +1 -1
  881. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  882. package/dist/icons/PauseCircleFilledIcon.js.map +1 -1
  883. package/dist/icons/PauseCircleIcon.js +1 -1
  884. package/dist/icons/PauseCircleIcon.js.map +1 -1
  885. package/dist/icons/PauseIcon.js +1 -1
  886. package/dist/icons/PauseIcon.js.map +1 -1
  887. package/dist/icons/PercentageIcon.js +1 -1
  888. package/dist/icons/PercentageIcon.js.map +1 -1
  889. package/dist/icons/PieChartIcon.js +1 -1
  890. package/dist/icons/PieChartIcon.js.map +1 -1
  891. package/dist/icons/PipetteIcon.js +1 -1
  892. package/dist/icons/PipetteIcon.js.map +1 -1
  893. package/dist/icons/PlayCircleIcon.js +1 -1
  894. package/dist/icons/PlayCircleIcon.js.map +1 -1
  895. package/dist/icons/PlayIcon.js +1 -1
  896. package/dist/icons/PlayIcon.js.map +1 -1
  897. package/dist/icons/PlusIcon.js +1 -1
  898. package/dist/icons/PlusIcon.js.map +1 -1
  899. package/dist/icons/ProgressBarIcon.js +1 -1
  900. package/dist/icons/ProgressBarIcon.js.map +1 -1
  901. package/dist/icons/ReloadIcon.js +1 -1
  902. package/dist/icons/ReloadIcon.js.map +1 -1
  903. package/dist/icons/ReportIcon.js +1 -1
  904. package/dist/icons/ReportIcon.js.map +1 -1
  905. package/dist/icons/ReturnIcon.js +1 -1
  906. package/dist/icons/ReturnIcon.js.map +1 -1
  907. package/dist/icons/RightIcon.js +1 -1
  908. package/dist/icons/RightIcon.js.map +1 -1
  909. package/dist/icons/RowTotalsIcon.js +1 -1
  910. package/dist/icons/RowTotalsIcon.js.map +1 -1
  911. package/dist/icons/SchemeIcon.js +1 -1
  912. package/dist/icons/SchemeIcon.js.map +1 -1
  913. package/dist/icons/SearchIcon.js +1 -1
  914. package/dist/icons/SearchIcon.js.map +1 -1
  915. package/dist/icons/SemanticQueryIcon.js +1 -1
  916. package/dist/icons/SemanticQueryIcon.js.map +1 -1
  917. package/dist/icons/SettingsIcon.js +1 -1
  918. package/dist/icons/SettingsIcon.js.map +1 -1
  919. package/dist/icons/ShieldFilledIcon.js +1 -1
  920. package/dist/icons/ShieldFilledIcon.js.map +1 -1
  921. package/dist/icons/ShieldIcon.js +1 -1
  922. package/dist/icons/ShieldIcon.js.map +1 -1
  923. package/dist/icons/SlashIcon.js +1 -1
  924. package/dist/icons/SlashIcon.js.map +1 -1
  925. package/dist/icons/SparklesIcon.js +1 -1
  926. package/dist/icons/SparklesIcon.js.map +1 -1
  927. package/dist/icons/SqlIcon.js +1 -1
  928. package/dist/icons/SqlIcon.js.map +1 -1
  929. package/dist/icons/StatsIcon.js +1 -1
  930. package/dist/icons/StatsIcon.js.map +1 -1
  931. package/dist/icons/StopIcon.js +1 -1
  932. package/dist/icons/StopIcon.js.map +1 -1
  933. package/dist/icons/StringIcon.js +1 -1
  934. package/dist/icons/StringIcon.js.map +1 -1
  935. package/dist/icons/SubtotalsIcon.js +1 -1
  936. package/dist/icons/SubtotalsIcon.js.map +1 -1
  937. package/dist/icons/SwitchIcon.js +1 -1
  938. package/dist/icons/SwitchIcon.js.map +1 -1
  939. package/dist/icons/TableIcon.js +1 -1
  940. package/dist/icons/TableIcon.js.map +1 -1
  941. package/dist/icons/ThumbsDownIcon.js +1 -1
  942. package/dist/icons/ThumbsDownIcon.js.map +1 -1
  943. package/dist/icons/ThumbsUpIcon.js +1 -1
  944. package/dist/icons/ThumbsUpIcon.js.map +1 -1
  945. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  946. package/dist/icons/ThunderboltCrossedIcon.js.map +1 -1
  947. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  948. package/dist/icons/ThunderboltFilledIcon.js.map +1 -1
  949. package/dist/icons/ThunderboltIcon.js +1 -1
  950. package/dist/icons/ThunderboltIcon.js.map +1 -1
  951. package/dist/icons/TimeIcon.js +1 -1
  952. package/dist/icons/TimeIcon.js.map +1 -1
  953. package/dist/icons/TrashIcon.js +1 -1
  954. package/dist/icons/TrashIcon.js.map +1 -1
  955. package/dist/icons/UnlockIcon.js +1 -1
  956. package/dist/icons/UnlockIcon.js.map +1 -1
  957. package/dist/icons/UpIcon.js +1 -1
  958. package/dist/icons/UpIcon.js.map +1 -1
  959. package/dist/icons/UserGroupIcon.js +1 -1
  960. package/dist/icons/UserGroupIcon.js.map +1 -1
  961. package/dist/icons/UserIcon.js +1 -1
  962. package/dist/icons/UserIcon.js.map +1 -1
  963. package/dist/icons/UserLockIcon.js +1 -1
  964. package/dist/icons/UserLockIcon.js.map +1 -1
  965. package/dist/icons/ViewIcon.js +1 -1
  966. package/dist/icons/ViewIcon.js.map +1 -1
  967. package/dist/icons/WarningFilledIcon.js +1 -1
  968. package/dist/icons/WarningFilledIcon.js.map +1 -1
  969. package/dist/icons/WarningIcon.js +1 -1
  970. package/dist/icons/WarningIcon.js.map +1 -1
  971. package/dist/icons/wrap-icon.js +15 -7
  972. package/dist/icons/wrap-icon.js.map +1 -1
  973. package/dist/index.d.ts +22 -22
  974. package/dist/index.js +1 -1
  975. package/dist/index.js.map +1 -1
  976. package/dist/probe/canonicalize.js +2 -2
  977. package/dist/probe/canonicalize.js.map +1 -1
  978. package/dist/probe/css.js +1 -1
  979. package/dist/probe/css.js.map +1 -1
  980. package/dist/probe/index.js +1 -1
  981. package/dist/provider.js +17 -7
  982. package/dist/provider.js.map +1 -1
  983. package/dist/providers/TrackingProvider.js +33 -9
  984. package/dist/providers/TrackingProvider.js.map +1 -1
  985. package/dist/providers/navigationAdapter.default.js +1 -1
  986. package/dist/providers/navigationAdapter.default.js.map +1 -1
  987. package/dist/tokens/all-tokens.js +1 -1
  988. package/dist/tokens/all-tokens.js.map +1 -1
  989. package/dist/tokens/base.js +1 -1
  990. package/dist/tokens/base.js.map +1 -1
  991. package/dist/tokens/color-seed.js +1 -1
  992. package/dist/tokens/color-seed.js.map +1 -1
  993. package/dist/tokens/color-theme.js +18 -3
  994. package/dist/tokens/color-theme.js.map +1 -1
  995. package/dist/tokens/colors.js +1 -1
  996. package/dist/tokens/colors.js.map +1 -1
  997. package/dist/tokens/layout.js +1 -1
  998. package/dist/tokens/layout.js.map +1 -1
  999. package/dist/tokens/lazy-styles.js +1 -1
  1000. package/dist/tokens/lazy-styles.js.map +1 -1
  1001. package/dist/tokens/legacy-color.js +1 -1
  1002. package/dist/tokens/legacy-color.js.map +1 -1
  1003. package/dist/tokens/palette-config.js +9 -2
  1004. package/dist/tokens/palette-config.js.map +1 -1
  1005. package/dist/tokens/palette.js +1 -1
  1006. package/dist/tokens/palette.js.map +1 -1
  1007. package/dist/tokens/resolve.js +85 -21
  1008. package/dist/tokens/resolve.js.map +1 -1
  1009. package/dist/tokens/shadows.js +1 -1
  1010. package/dist/tokens/shadows.js.map +1 -1
  1011. package/dist/tokens/sizes.js +1 -1
  1012. package/dist/tokens/sizes.js.map +1 -1
  1013. package/dist/tokens/spacing.js +1 -1
  1014. package/dist/tokens/spacing.js.map +1 -1
  1015. package/dist/tokens/typography.js +1 -1
  1016. package/dist/tokens/typography.js.map +1 -1
  1017. package/dist/utils/ResizeSensor.js +1 -1
  1018. package/dist/utils/ResizeSensor.js.map +1 -1
  1019. package/dist/utils/colors.js +1 -1
  1020. package/dist/utils/colors.js.map +1 -1
  1021. package/dist/utils/dotize.js +1 -1
  1022. package/dist/utils/dotize.js.map +1 -1
  1023. package/dist/utils/is-dev-env.js +1 -1
  1024. package/dist/utils/is-dev-env.js.map +1 -1
  1025. package/dist/utils/modules.js +1 -1
  1026. package/dist/utils/modules.js.map +1 -1
  1027. package/dist/utils/promise.js +1 -1
  1028. package/dist/utils/promise.js.map +1 -1
  1029. package/dist/utils/raf.js +1 -1
  1030. package/dist/utils/raf.js.map +1 -1
  1031. package/dist/utils/random.js +1 -1
  1032. package/dist/utils/random.js.map +1 -1
  1033. package/dist/utils/range.js +1 -1
  1034. package/dist/utils/range.js.map +1 -1
  1035. package/dist/utils/react/RenderCache.js +2 -2
  1036. package/dist/utils/react/RenderCache.js.map +1 -1
  1037. package/dist/utils/react/Slots.js +67 -24
  1038. package/dist/utils/react/Slots.js.map +1 -1
  1039. package/dist/utils/react/chain.js +1 -1
  1040. package/dist/utils/react/chain.js.map +1 -1
  1041. package/dist/utils/react/disabledProps.js +1 -1
  1042. package/dist/utils/react/disabledProps.js.map +1 -1
  1043. package/dist/utils/react/escapePropagation.js +1 -1
  1044. package/dist/utils/react/escapePropagation.js.map +1 -1
  1045. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  1046. package/dist/utils/react/forwardRefWithGenerics.js.map +1 -1
  1047. package/dist/utils/react/index.js +1 -1
  1048. package/dist/utils/react/interactions.js +35 -12
  1049. package/dist/utils/react/interactions.js.map +1 -1
  1050. package/dist/utils/react/isTextOnly.js +1 -1
  1051. package/dist/utils/react/isTextOnly.js.map +1 -1
  1052. package/dist/utils/react/mapProps.js +1 -1
  1053. package/dist/utils/react/mapProps.js.map +1 -1
  1054. package/dist/utils/react/mergeProps.js +1 -1
  1055. package/dist/utils/react/mergeProps.js.map +1 -1
  1056. package/dist/utils/react/nullableValue.js +1 -1
  1057. package/dist/utils/react/nullableValue.js.map +1 -1
  1058. package/dist/utils/react/programmaticFocus.js +1 -1
  1059. package/dist/utils/react/programmaticFocus.js.map +1 -1
  1060. package/dist/utils/react/resolveIcon.js +1 -1
  1061. package/dist/utils/react/resolveIcon.js.map +1 -1
  1062. package/dist/utils/react/sharedStore.js +13 -2
  1063. package/dist/utils/react/sharedStore.js.map +1 -1
  1064. package/dist/utils/react/useBufferedValue.js +5 -5
  1065. package/dist/utils/react/useBufferedValue.js.map +1 -1
  1066. package/dist/utils/react/useCombinedRefs.js +20 -5
  1067. package/dist/utils/react/useCombinedRefs.js.map +1 -1
  1068. package/dist/utils/react/useControlledFocusVisible.js +53 -17
  1069. package/dist/utils/react/useControlledFocusVisible.js.map +1 -1
  1070. package/dist/utils/react/useEventBus.js +43 -18
  1071. package/dist/utils/react/useEventBus.js.map +1 -1
  1072. package/dist/utils/react/useId.js +2 -1
  1073. package/dist/utils/react/useId.js.map +1 -1
  1074. package/dist/utils/react/useIsDarwin.js +29 -16
  1075. package/dist/utils/react/useIsDarwin.js.map +1 -1
  1076. package/dist/utils/react/useKeySymbols.js +23 -9
  1077. package/dist/utils/react/useKeySymbols.js.map +1 -1
  1078. package/dist/utils/react/useLayoutEffect.js +1 -1
  1079. package/dist/utils/react/useLayoutEffect.js.map +1 -1
  1080. package/dist/utils/react/useLocalStorage.js +75 -30
  1081. package/dist/utils/react/useLocalStorage.js.map +1 -1
  1082. package/dist/utils/react/useMergeStyles.js +1 -1
  1083. package/dist/utils/react/useMergeStyles.js.map +1 -1
  1084. package/dist/utils/react/useOverlayEscapeGuard.js +25 -9
  1085. package/dist/utils/react/useOverlayEscapeGuard.js.map +1 -1
  1086. package/dist/utils/react/usePopoverSync.js +175 -73
  1087. package/dist/utils/react/usePopoverSync.js.map +1 -1
  1088. package/dist/utils/react/useQaProps.js +1 -1
  1089. package/dist/utils/react/useQaProps.js.map +1 -1
  1090. package/dist/utils/react/useScheme.js +1 -1
  1091. package/dist/utils/react/useScheme.js.map +1 -1
  1092. package/dist/utils/react/useViewportSize.js +43 -19
  1093. package/dist/utils/react/useViewportSize.js.map +1 -1
  1094. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  1095. package/dist/utils/react/wrapNodeIfPlain.js.map +1 -1
  1096. package/dist/utils/selection.js +1 -1
  1097. package/dist/utils/selection.js.map +1 -1
  1098. package/dist/utils/styles.js +1 -1
  1099. package/dist/utils/styles.js.map +1 -1
  1100. package/dist/utils/tree.js +1 -1
  1101. package/dist/utils/tree.js.map +1 -1
  1102. package/dist/utils/warnings.js +1 -1
  1103. package/dist/utils/warnings.js.map +1 -1
  1104. package/dist/version.js +2 -2
  1105. package/dist/version.js.map +1 -1
  1106. package/docs/Usage.md +9 -1
  1107. package/docs/components/content/InlineInput.md +1 -1
  1108. package/docs/components/fields/ColorInput.md +13 -8
  1109. package/docs/components/fields/ColorPicker.md +13 -8
  1110. package/docs/components/fields/ComboBox.md +16 -12
  1111. package/docs/components/fields/FilterListBox.md +24 -19
  1112. package/docs/components/fields/FilterPicker.md +24 -19
  1113. package/docs/components/fields/ListBox.md +36 -26
  1114. package/docs/components/fields/Picker.md +27 -21
  1115. package/docs/components/fields/Select.md +16 -12
  1116. package/docs/components/form/Field.md +2 -2
  1117. package/docs/components/form/Form.md +60 -579
  1118. package/docs/components/form/ModernForm.md +22 -1
  1119. package/docs/components/overlays/DialogForm.md +121 -263
  1120. package/docs/components/overlays/DialogTrigger.md +1 -1
  1121. package/docs/components/overlays/UseDialogContainer.md +11 -13
  1122. package/docs/modern-form-guide.md +22 -1
  1123. package/docs/modern-form-migration.md +1 -1
  1124. package/package.json +7 -2
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../src/components/data/TableBase/types.ts"],"sourcesContent":["import type { Key } from '@react-types/shared';\nimport type { Styles } from '@tenphi/tasty';\nimport type { ReactNode } from 'react';\nimport type { CubeItemProps } from '../../content/Item';\n\nexport type CubeTableSortDirection = 'asc' | 'desc';\n/**\n * Named row heights: 28px, 32px and 40px.\n *\n * A subset of the kit's size scale, and the same three steps `size` would give —\n * but `rowSize` moves only the ROWS. `size` also drives the header, so reaching\n * for a denser body through it drags the header down too.\n */\nexport type CubeTableRowSize = 'small' | 'medium' | 'large';\nexport type CubeTableAlign = 'start' | 'center' | 'end';\nexport type CubeTableRowSection = 'body' | 'pinnedTop' | 'pinnedBottom';\n\n/**\n * `asc | desc` rather than React Aria's `ascending | descending`: we do not use\n * `useTableState`, so there is no `SortDescriptor` interop to preserve, and\n * every consumer and server query parameter already speaks `asc|desc`.\n * `aria-sort` is a one-line map in the header cell.\n */\n/**\n * A rectangular block of cells, stored as two opposite corners.\n *\n * Corners rather than a set of keys so the selection survives a re-sort or a\n * page change the way a keyed row selection does: \"the block between these two\n * cells\" is re-resolved against the current order every render.\n */\n/**\n * The key a cell range identifies a row by.\n *\n * Not the consumer's row key: a pinned total is commonly the SAME record at the\n * top and the bottom (`id: 'total'`), and one flat key space collapsed the two\n * into whichever `indexOf` found first — so a range aimed at the footer total\n * resolved against the header one. The section is part of the identity here,\n * and only here; `ctx.rowKey` stays the consumer's own.\n */\nexport function selectionRowKey(\n section: CubeTableRowSection,\n rowKey: Key,\n): Key {\n return section === 'body' ? rowKey : `${section}:${rowKey}`;\n}\n\nexport interface CubeTableCellRange {\n fromRowKey: Key;\n toRowKey: Key;\n fromColumnKey: string;\n toColumnKey: string;\n}\n\nexport interface CubeTableTreeRowState {\n /** Zero-based depth in the hierarchy. */\n level: number;\n parentKey: Key | null;\n hasChildren: boolean;\n isExpanded: boolean;\n}\n\nexport interface CubeTableRowExpandInfo<T = any> {\n row: T;\n rowKey: Key;\n level: number;\n parentKey: Key | null;\n expanded: boolean;\n}\n\n/** Shared root sizing contract used by both table adapters. */\nexport interface CubeTableLayoutProps {\n /**\n * Shrink-wraps the frame to its rendered rows instead of filling the\n * available flex pane. This mode disables virtualization because there is no\n * bounded vertical viewport to virtualize against.\n *\n * @default false\n */\n isAutoHeight?: boolean;\n}\n\n/** Shared opt-in hierarchy contract used by both table adapters. */\nexport interface CubeTableTreeProps<T = any> {\n /**\n * Returns a row's already-loaded children. Supplying this enables tree mode\n * and makes `data` the top-level row collection.\n */\n getRowChildren?: (row: T) => readonly T[] | undefined;\n /** Column that owns the indentation and disclosure control. */\n treeColumnKey?: string;\n /** Controlled expanded row keys. */\n expandedKeys?: Key[];\n /** Initially expanded row keys. */\n defaultExpandedKeys?: Key[];\n /** Called after a user expands or collapses a row. */\n onExpand?: (keys: Key[], info: CubeTableRowExpandInfo<T>) => void;\n}\n\nexport interface CubeTableSort {\n /** `key` of the sorted column. */\n columnKey: string;\n direction: CubeTableSortDirection;\n}\n\n/* ── render contexts ─────────────────────────────────────────────────────── */\n\nexport interface CubeTableCellContext<T = any> {\n row: T;\n rowKey: Key;\n rowIndex: number;\n columnKey: string;\n columnIndex: number;\n section: CubeTableRowSection;\n /** Whether the ROW is selected, matching `isRowFocused` below. */\n isSelected: boolean;\n /**\n * Not yet wired — always absent.\n *\n * Optional rather than `boolean`, because there is nowhere honest to compute\n * them from where this context is built. Focus lives in the DOM, and drop\n * state comes out of `useDropIndicator`, a hook that can only run inside the\n * row component — so populating either means moving the `render` / `cellStyles`\n * call sites into `TableRow`. Declaring them required and passing `false`\n * would just be a documented lie.\n */\n isRowFocused?: boolean;\n isDropTarget?: boolean;\n /** Present only when `getRowChildren` enables tree mode. */\n tree?: CubeTableTreeRowState;\n}\n\nexport interface CubeTableRowContext<T = any> {\n row: T;\n rowKey: Key;\n rowIndex: number;\n section: CubeTableRowSection;\n isSelected: boolean;\n /** Not yet wired — always absent. See `CubeTableCellContext` for why. */\n isFocused?: boolean;\n isDropTarget?: boolean;\n /** Present only when `getRowChildren` enables tree mode. */\n tree?: CubeTableTreeRowState;\n}\n\nexport interface CubeTableHeaderContext {\n columnKey: string;\n columnIndex: number;\n sort: CubeTableSortDirection | null;\n isSortable: boolean;\n isResizing: boolean;\n width: number | null;\n}\n\n/** Presentational path entry used to build multi-row column headers. */\nexport interface CubeTableColumnGroupHeader {\n key: string;\n title?: ReactNode;\n}\n\n/* ── column ──────────────────────────────────────────────────────────────── */\n\n/**\n * Rich header content. Every slot except `menu` maps 1:1 onto the `Item`\n * rendered inside the header `<th>`, so a header gets icon / description /\n * tooltip / suffix / actions for free; `menu` is mounted into that `Item`'s\n * `actions` slot behind a `⋮` trigger.\n */\nexport interface CubeTableColumnHeader {\n icon?: CubeItemProps['icon'];\n rightIcon?: CubeItemProps['rightIcon'];\n prefix?: ReactNode;\n suffix?: ReactNode;\n description?: ReactNode;\n descriptionPlacement?: CubeItemProps['descriptionPlacement'];\n /** `true` = auto tooltip when the label is truncated. */\n tooltip?: CubeItemProps['tooltip'];\n actions?: ReactNode;\n /** Hide `actions` until hover/focus. @default true */\n autoHideActions?: boolean;\n /**\n * A column menu, opened from a `⋮` trigger in the header's actions slot and —\n * unless the table says otherwise — by right-click or Shift+F10.\n *\n * `Menu.Item` children. Opaque: the table mounts the node and reports the\n * pressed key back through `onColumnMenuAction`, so what a \"pin\" or a \"drill\n * down\" means stays in the consuming app. The exception is the reserved sort\n * keys (`sort-asc`, `sort-desc`, `clear-sort`), which the table labels,\n * disables when redundant, and applies itself before telling the consumer.\n *\n * An empty menu renders no trigger at all, rather than one that opens nothing.\n * Ignored when `header.render` takes the cell over.\n */\n menu?: ReactNode;\n /** Props for the `⋮` trigger. Merged over the table's `columnMenuTriggerProps`. */\n menuTriggerProps?: Record<string, any>;\n /** Props for the `Menu`. Merged over the table's `columnMenuProps`. */\n menuProps?: Record<string, any>;\n /** Called before the table-level `onColumnMenuAction`. */\n onMenuAction?: (action: string) => void;\n theme?: CubeItemProps['theme'];\n /**\n * Full takeover of the header cell's content. Overrides `title` and every\n * slot — including `actions` and `menu`, which are simply not rendered. A\n * takeover that wants a menu owns the trigger too.\n */\n render?: (ctx: CubeTableHeaderContext) => ReactNode;\n /** Overrides `column.align` for the header only. */\n align?: CubeTableAlign;\n styles?: Styles;\n}\n\n/* ── column colour ───────────────────────────────────────────────────────── */\n\n/**\n * A palette theme a column can borrow its tint from.\n *\n * Resolved through the same runtime generator as a custom colour, seeded from the\n * theme's own hue and saturation in `palette-config` — so it tracks a re-seeded\n * palette, and it gets the banding step the palette itself does not define.\n *\n * `special` is absent deliberately: it is a standalone `mode: 'fixed'` theme with\n * no tinted-surface ramp to borrow.\n */\nexport type CubeTableColumnTheme =\n | 'primary'\n | 'purple'\n | 'success'\n | 'danger'\n | 'warning'\n | 'note';\n\n/**\n * How a column is tinted.\n *\n * Every form but the last is *derived*: only a hue and a saturation are kept, and\n * the tone ramp plus an `AA`/`AAA` text floor are re-solved per colour scheme. So\n * a column stays readable in light, dark and high contrast without the caller\n * checking — which is the part hand-picked hex pairs get wrong.\n */\nexport type CubeTableColumnColor =\n /** A palette theme name. */\n | CubeTableColumnTheme\n /** Any colour Glaze parses — hex, `rgb()`, `hsl()`, `okhsl()`, `oklch()`. */\n | (string & {})\n /** The seed said directly. `saturation` is 0–100. */\n | { hue: number; saturation?: number }\n /**\n * Full manual control, as tasty colour strings (`'#note-surface'`, `'#purple.10'`).\n *\n * Nothing is derived and nothing is contrast-checked — this is the escape\n * hatch, and readability in every scheme becomes the caller's problem.\n * `fillBand` defaults to `fill`, which turns banding off for the column.\n */\n | { fill: string; fillBand?: string; text?: string };\n\n/**\n * Which parts of a column `color` reaches.\n *\n * @default ['header','body','totals']\n */\nexport type CubeTableColumnColorScope = 'header' | 'body' | 'totals';\n\nexport interface CubeTableColumn<T = any> {\n /**\n * Column id. Also the default data path — dot notation is supported\n * (`'owner.name'`). Anything beyond a path needs `getValue`.\n */\n key: string;\n /** Header label. Shorthand for `header` with no extra slots. */\n title?: ReactNode;\n header?: CubeTableColumnHeader;\n /**\n * Renders `<th scope=\"row\">` instead of `<td>`, names the row for screen\n * readers, and hosts the `rowLink` anchor. Defaults to the first\n * non-structural column when a row link is present.\n */\n isRowHeader?: boolean;\n\n /* sizing */\n /** Fixed width in px. Mutually exclusive with `flex`. */\n width?: number;\n /** Weight for the leftover space. @default 1 when `width` is unset */\n flex?: number;\n /** @default 150 */\n minWidth?: number;\n maxWidth?: number;\n /** Inherits the table's `isResizable`. */\n isResizable?: boolean;\n /**\n * Inherits the table's `isColumnReorderable`; `false` pins this column in\n * place while the others still move around it.\n */\n isReorderable?: boolean;\n /** Stick to the start/end edge during horizontal scroll. */\n pin?: 'start' | 'end';\n /** Hide without losing width or order state. */\n isHidden?: boolean;\n\n /* value pipeline */\n /** @default (row) => get(row, key) */\n getValue?: (row: T, rowIndex: number) => unknown;\n /** Raw value → display text. Feeds client sort, client search and TSV copy. */\n format?: (value: any, row: T, rowIndex: number) => string;\n /** Client-side comparator over raw `getValue` results. */\n compare?: (a: any, b: any, rowA: T, rowB: T) => number;\n\n /* rendering */\n /** A returned string is wrapped in a truncating `TextItem`. */\n render?: (\n value: any,\n row: T,\n rowIndex: number,\n ctx: CubeTableCellContext<T>,\n ) => ReactNode;\n cellStyles?: Styles | ((ctx: CubeTableCellContext<T>) => Styles | undefined);\n cellProps?: (ctx: CubeTableCellContext<T>) => Record<string, any> | undefined;\n\n /**\n * Tints the column — header, cells and pinned totals — with an adaptive fill\n * and a text colour solved to stay readable on it in every scheme.\n *\n * Row banding survives: the tint carries its own band one tone step away, so\n * the stripe still reads down the column instead of being painted over.\n */\n color?: CubeTableColumnColor;\n /** Narrows what `color` reaches. @default ['header','body','totals'] */\n colorScope?: readonly CubeTableColumnColorScope[];\n\n /* behaviour */\n align?: CubeTableAlign;\n /**\n * Opt IN, per column — a table is not sortable until at least one column says\n * so, and `sortMode` then defaults to `'client'`.\n *\n * (This read `@default true` for a long time, which was never what the code\n * did: `TableView` requires `isSortable === true` before a header becomes a\n * control at all.)\n *\n * @default false\n */\n isSortable?: boolean;\n /** Two-state cycling (asc ↔ desc), never back to unsorted. @default false */\n disallowSortRemoval?: boolean;\n /** Include in the built-in client search. @default true */\n isSearchable?: boolean;\n /** Include in TSV copy. @default true */\n isCopyable?: boolean;\n /** Wrap text and let the row grow to fit. */\n autoHeight?: boolean;\n\n /** Consumer-owned bag. Never reaches the DOM. */\n meta?: Record<string, unknown>;\n}\n\n/* ── resolved layout (internal, but exported for adapters) ───────────────── */\n\nexport interface CubeResolvedColumn<T = any>\n // `width`, `minWidth`, `maxWidth`, `flex` and `align` are all resolved here,\n // so they narrow from optional to definite and must be replaced, not extended.\n extends Omit<\n CubeTableColumn<T>,\n 'width' | 'minWidth' | 'maxWidth' | 'flex' | 'align'\n > {\n /** Position among the visible leaf columns, 0-based. */\n index: number;\n /** `aria-colindex`, 1-based and document-absolute. */\n ariaColIndex: number;\n /** Resolved pixel width, or `null` while the container is unmeasured. */\n width: number | null;\n minWidth: number;\n maxWidth: number | null;\n flex: number | null;\n align: CubeTableAlign;\n /** Cumulative sticky offset in px for a pinned column. */\n pinOffset: number | null;\n /** `true` for the last pinned-start / first pinned-end column. */\n isPinEdge: boolean;\n /** Structural columns (selection, drag handle, row menu) never enter sorting,\n * search, copy, or the value pipeline. */\n isStructural: boolean;\n}\n\nexport interface CubeTableColumnLayout<T = any> {\n columns: CubeResolvedColumn<T>[];\n pinnedStartWidth: number;\n pinnedEndWidth: number;\n /** Sum of resolved widths, or `null` while unmeasured. */\n totalWidth: number | null;\n /** `true` when the columns cannot fit and the table scrolls horizontally. */\n isOverflowing: boolean;\n}\n\n/**\n * How a refresh over an existing result is presented.\n *\n * - `overlay` — keep the previous rows visible, dimmed, behind a spinner. A\n * server page or a re-sort never blanks the table.\n * - `skeleton` — discard the previous rows and show placeholders.\n * - `none` — no visuals beyond `aria-busy`; the page owns the indicator.\n */\nexport type CubeTableLoadingIndicator = 'overlay' | 'skeleton' | 'none';\n\nexport type CubeTableSelectionMode = 'none' | 'single' | 'multiple';\n\n/**\n * What the header checkbox acts on.\n *\n * - `page` — the rows on the current page.\n * - `filtered` — every row passing the current search/filter, across pages.\n * - `all` — emits the `'all'` sentinel, meaning \"everything, including rows the\n * client has not loaded\". The consumer decides what that means for its query.\n */\nexport type CubeTableSelectAllMode = 'page' | 'filtered' | 'all';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,gBACd,SACA,QACK;AACL,QAAO,YAAY,SAAS,SAAS,GAAG,QAAQ,GAAG"}
1
+ {"version":3,"file":"types.js","names":["Key","Styles","ReactNode","CubeItemProps","CubeTableSortDirection","CubeTableRowSize","CubeTableAlign","CubeTableRowSection","selectionRowKey","section","rowKey","CubeTableCellRange","fromRowKey","toRowKey","fromColumnKey","toColumnKey","CubeTableTreeRowState","level","parentKey","hasChildren","isExpanded","CubeTableRowExpandInfo","row","T","expanded","CubeTableLayoutProps","isAutoHeight","CubeTableTreeProps","getRowChildren","treeColumnKey","expandedKeys","defaultExpandedKeys","onExpand","keys","info","CubeTableSort","columnKey","direction","CubeTableCellContext","rowIndex","columnIndex","isSelected","isRowFocused","isDropTarget","tree","CubeTableRowContext","isFocused","CubeTableHeaderContext","sort","isSortable","isResizing","width","CubeTableColumnGroupHeader","key","title","CubeTableColumnHeader","icon","rightIcon","prefix","suffix","description","descriptionPlacement","tooltip","actions","autoHideActions","menu","menuTriggerProps","Record","menuProps","onMenuAction","action","theme","render","ctx","align","styles","CubeTableColumnTheme","CubeTableColumnColor","hue","saturation","fill","fillBand","text","CubeTableColumnColorScope","CubeTableColumn","header","isRowHeader","flex","minWidth","maxWidth","isResizable","isReorderable","pin","isHidden","getValue","format","value","compare","a","b","rowA","rowB","cellStyles","cellProps","color","colorScope","disallowSortRemoval","isSearchable","isCopyable","autoHeight","meta","CubeResolvedColumn","Omit","index","ariaColIndex","pinOffset","isPinEdge","isStructural","CubeTableColumnLayout","columns","pinnedStartWidth","pinnedEndWidth","totalWidth","isOverflowing","CubeTableLoadingIndicator","CubeTableSelectionMode","CubeTableSelectAllMode"],"sources":["../../../../src/components/data/TableBase/types.ts"],"sourcesContent":["import type { Key } from '@react-types/shared';\nimport type { Styles } from '@tenphi/tasty';\nimport type { ReactNode } from 'react';\nimport type { CubeItemProps } from '../../content/Item';\n\nexport type CubeTableSortDirection = 'asc' | 'desc';\n/**\n * Named row heights: 28px, 32px and 40px.\n *\n * A subset of the kit's size scale, and the same three steps `size` would give —\n * but `rowSize` moves only the ROWS. `size` also drives the header, so reaching\n * for a denser body through it drags the header down too.\n */\nexport type CubeTableRowSize = 'small' | 'medium' | 'large';\nexport type CubeTableAlign = 'start' | 'center' | 'end';\nexport type CubeTableRowSection = 'body' | 'pinnedTop' | 'pinnedBottom';\n\n/**\n * `asc | desc` rather than React Aria's `ascending | descending`: we do not use\n * `useTableState`, so there is no `SortDescriptor` interop to preserve, and\n * every consumer and server query parameter already speaks `asc|desc`.\n * `aria-sort` is a one-line map in the header cell.\n */\n/**\n * A rectangular block of cells, stored as two opposite corners.\n *\n * Corners rather than a set of keys so the selection survives a re-sort or a\n * page change the way a keyed row selection does: \"the block between these two\n * cells\" is re-resolved against the current order every render.\n */\n/**\n * The key a cell range identifies a row by.\n *\n * Not the consumer's row key: a pinned total is commonly the SAME record at the\n * top and the bottom (`id: 'total'`), and one flat key space collapsed the two\n * into whichever `indexOf` found first — so a range aimed at the footer total\n * resolved against the header one. The section is part of the identity here,\n * and only here; `ctx.rowKey` stays the consumer's own.\n */\nexport function selectionRowKey(\n section: CubeTableRowSection,\n rowKey: Key,\n): Key {\n return section === 'body' ? rowKey : `${section}:${rowKey}`;\n}\n\nexport interface CubeTableCellRange {\n fromRowKey: Key;\n toRowKey: Key;\n fromColumnKey: string;\n toColumnKey: string;\n}\n\nexport interface CubeTableTreeRowState {\n /** Zero-based depth in the hierarchy. */\n level: number;\n parentKey: Key | null;\n hasChildren: boolean;\n isExpanded: boolean;\n}\n\nexport interface CubeTableRowExpandInfo<T = any> {\n row: T;\n rowKey: Key;\n level: number;\n parentKey: Key | null;\n expanded: boolean;\n}\n\n/** Shared root sizing contract used by both table adapters. */\nexport interface CubeTableLayoutProps {\n /**\n * Shrink-wraps the frame to its rendered rows instead of filling the\n * available flex pane. This mode disables virtualization because there is no\n * bounded vertical viewport to virtualize against.\n *\n * @default false\n */\n isAutoHeight?: boolean;\n}\n\n/** Shared opt-in hierarchy contract used by both table adapters. */\nexport interface CubeTableTreeProps<T = any> {\n /**\n * Returns a row's already-loaded children. Supplying this enables tree mode\n * and makes `data` the top-level row collection.\n */\n getRowChildren?: (row: T) => readonly T[] | undefined;\n /** Column that owns the indentation and disclosure control. */\n treeColumnKey?: string;\n /** Controlled expanded row keys. */\n expandedKeys?: Key[];\n /** Initially expanded row keys. */\n defaultExpandedKeys?: Key[];\n /** Called after a user expands or collapses a row. */\n onExpand?: (keys: Key[], info: CubeTableRowExpandInfo<T>) => void;\n}\n\nexport interface CubeTableSort {\n /** `key` of the sorted column. */\n columnKey: string;\n direction: CubeTableSortDirection;\n}\n\n/* ── render contexts ─────────────────────────────────────────────────────── */\n\nexport interface CubeTableCellContext<T = any> {\n row: T;\n rowKey: Key;\n rowIndex: number;\n columnKey: string;\n columnIndex: number;\n section: CubeTableRowSection;\n /** Whether the ROW is selected, matching `isRowFocused` below. */\n isSelected: boolean;\n /**\n * Not yet wired — always absent.\n *\n * Optional rather than `boolean`, because there is nowhere honest to compute\n * them from where this context is built. Focus lives in the DOM, and drop\n * state comes out of `useDropIndicator`, a hook that can only run inside the\n * row component — so populating either means moving the `render` / `cellStyles`\n * call sites into `TableRow`. Declaring them required and passing `false`\n * would just be a documented lie.\n */\n isRowFocused?: boolean;\n isDropTarget?: boolean;\n /** Present only when `getRowChildren` enables tree mode. */\n tree?: CubeTableTreeRowState;\n}\n\nexport interface CubeTableRowContext<T = any> {\n row: T;\n rowKey: Key;\n rowIndex: number;\n section: CubeTableRowSection;\n isSelected: boolean;\n /** Not yet wired — always absent. See `CubeTableCellContext` for why. */\n isFocused?: boolean;\n isDropTarget?: boolean;\n /** Present only when `getRowChildren` enables tree mode. */\n tree?: CubeTableTreeRowState;\n}\n\nexport interface CubeTableHeaderContext {\n columnKey: string;\n columnIndex: number;\n sort: CubeTableSortDirection | null;\n isSortable: boolean;\n isResizing: boolean;\n width: number | null;\n}\n\n/** Presentational path entry used to build multi-row column headers. */\nexport interface CubeTableColumnGroupHeader {\n key: string;\n title?: ReactNode;\n}\n\n/* ── column ──────────────────────────────────────────────────────────────── */\n\n/**\n * Rich header content. Every slot except `menu` maps 1:1 onto the `Item`\n * rendered inside the header `<th>`, so a header gets icon / description /\n * tooltip / suffix / actions for free; `menu` is mounted into that `Item`'s\n * `actions` slot behind a `⋮` trigger.\n */\nexport interface CubeTableColumnHeader {\n icon?: CubeItemProps['icon'];\n rightIcon?: CubeItemProps['rightIcon'];\n prefix?: ReactNode;\n suffix?: ReactNode;\n description?: ReactNode;\n descriptionPlacement?: CubeItemProps['descriptionPlacement'];\n /** `true` = auto tooltip when the label is truncated. */\n tooltip?: CubeItemProps['tooltip'];\n actions?: ReactNode;\n /** Hide `actions` until hover/focus. @default true */\n autoHideActions?: boolean;\n /**\n * A column menu, opened from a `⋮` trigger in the header's actions slot and —\n * unless the table says otherwise — by right-click or Shift+F10.\n *\n * `Menu.Item` children. Opaque: the table mounts the node and reports the\n * pressed key back through `onColumnMenuAction`, so what a \"pin\" or a \"drill\n * down\" means stays in the consuming app. The exception is the reserved sort\n * keys (`sort-asc`, `sort-desc`, `clear-sort`), which the table labels,\n * disables when redundant, and applies itself before telling the consumer.\n *\n * An empty menu renders no trigger at all, rather than one that opens nothing.\n * Ignored when `header.render` takes the cell over.\n */\n menu?: ReactNode;\n /** Props for the `⋮` trigger. Merged over the table's `columnMenuTriggerProps`. */\n menuTriggerProps?: Record<string, any>;\n /** Props for the `Menu`. Merged over the table's `columnMenuProps`. */\n menuProps?: Record<string, any>;\n /** Called before the table-level `onColumnMenuAction`. */\n onMenuAction?: (action: string) => void;\n theme?: CubeItemProps['theme'];\n /**\n * Full takeover of the header cell's content. Overrides `title` and every\n * slot — including `actions` and `menu`, which are simply not rendered. A\n * takeover that wants a menu owns the trigger too.\n */\n render?: (ctx: CubeTableHeaderContext) => ReactNode;\n /** Overrides `column.align` for the header only. */\n align?: CubeTableAlign;\n styles?: Styles;\n}\n\n/* ── column colour ───────────────────────────────────────────────────────── */\n\n/**\n * A palette theme a column can borrow its tint from.\n *\n * Resolved through the same runtime generator as a custom colour, seeded from the\n * theme's own hue and saturation in `palette-config` — so it tracks a re-seeded\n * palette, and it gets the banding step the palette itself does not define.\n *\n * `special` is absent deliberately: it is a standalone `mode: 'fixed'` theme with\n * no tinted-surface ramp to borrow.\n */\nexport type CubeTableColumnTheme =\n | 'primary'\n | 'purple'\n | 'success'\n | 'danger'\n | 'warning'\n | 'note';\n\n/**\n * How a column is tinted.\n *\n * Every form but the last is *derived*: only a hue and a saturation are kept, and\n * the tone ramp plus an `AA`/`AAA` text floor are re-solved per colour scheme. So\n * a column stays readable in light, dark and high contrast without the caller\n * checking — which is the part hand-picked hex pairs get wrong.\n */\nexport type CubeTableColumnColor =\n /** A palette theme name. */\n | CubeTableColumnTheme\n /** Any colour Glaze parses — hex, `rgb()`, `hsl()`, `okhsl()`, `oklch()`. */\n | (string & {})\n /** The seed said directly. `saturation` is 0–100. */\n | { hue: number; saturation?: number }\n /**\n * Full manual control, as tasty colour strings (`'#note-surface'`, `'#purple.10'`).\n *\n * Nothing is derived and nothing is contrast-checked — this is the escape\n * hatch, and readability in every scheme becomes the caller's problem.\n * `fillBand` defaults to `fill`, which turns banding off for the column.\n */\n | { fill: string; fillBand?: string; text?: string };\n\n/**\n * Which parts of a column `color` reaches.\n *\n * @default ['header','body','totals']\n */\nexport type CubeTableColumnColorScope = 'header' | 'body' | 'totals';\n\nexport interface CubeTableColumn<T = any> {\n /**\n * Column id. Also the default data path — dot notation is supported\n * (`'owner.name'`). Anything beyond a path needs `getValue`.\n */\n key: string;\n /** Header label. Shorthand for `header` with no extra slots. */\n title?: ReactNode;\n header?: CubeTableColumnHeader;\n /**\n * Renders `<th scope=\"row\">` instead of `<td>`, names the row for screen\n * readers, and hosts the `rowLink` anchor. Defaults to the first\n * non-structural column when a row link is present.\n */\n isRowHeader?: boolean;\n\n /* sizing */\n /** Fixed width in px. Mutually exclusive with `flex`. */\n width?: number;\n /** Weight for the leftover space. @default 1 when `width` is unset */\n flex?: number;\n /** @default 150 */\n minWidth?: number;\n maxWidth?: number;\n /** Inherits the table's `isResizable`. */\n isResizable?: boolean;\n /**\n * Inherits the table's `isColumnReorderable`; `false` pins this column in\n * place while the others still move around it.\n */\n isReorderable?: boolean;\n /** Stick to the start/end edge during horizontal scroll. */\n pin?: 'start' | 'end';\n /** Hide without losing width or order state. */\n isHidden?: boolean;\n\n /* value pipeline */\n /** @default (row) => get(row, key) */\n getValue?: (row: T, rowIndex: number) => unknown;\n /** Raw value → display text. Feeds client sort, client search and TSV copy. */\n format?: (value: any, row: T, rowIndex: number) => string;\n /** Client-side comparator over raw `getValue` results. */\n compare?: (a: any, b: any, rowA: T, rowB: T) => number;\n\n /* rendering */\n /** A returned string is wrapped in a truncating `TextItem`. */\n render?: (\n value: any,\n row: T,\n rowIndex: number,\n ctx: CubeTableCellContext<T>,\n ) => ReactNode;\n cellStyles?: Styles | ((ctx: CubeTableCellContext<T>) => Styles | undefined);\n cellProps?: (ctx: CubeTableCellContext<T>) => Record<string, any> | undefined;\n\n /**\n * Tints the column — header, cells and pinned totals — with an adaptive fill\n * and a text colour solved to stay readable on it in every scheme.\n *\n * Row banding survives: the tint carries its own band one tone step away, so\n * the stripe still reads down the column instead of being painted over.\n */\n color?: CubeTableColumnColor;\n /** Narrows what `color` reaches. @default ['header','body','totals'] */\n colorScope?: readonly CubeTableColumnColorScope[];\n\n /* behaviour */\n align?: CubeTableAlign;\n /**\n * Opt IN, per column — a table is not sortable until at least one column says\n * so, and `sortMode` then defaults to `'client'`.\n *\n * (This read `@default true` for a long time, which was never what the code\n * did: `TableView` requires `isSortable === true` before a header becomes a\n * control at all.)\n *\n * @default false\n */\n isSortable?: boolean;\n /** Two-state cycling (asc ↔ desc), never back to unsorted. @default false */\n disallowSortRemoval?: boolean;\n /** Include in the built-in client search. @default true */\n isSearchable?: boolean;\n /** Include in TSV copy. @default true */\n isCopyable?: boolean;\n /** Wrap text and let the row grow to fit. */\n autoHeight?: boolean;\n\n /** Consumer-owned bag. Never reaches the DOM. */\n meta?: Record<string, unknown>;\n}\n\n/* ── resolved layout (internal, but exported for adapters) ───────────────── */\n\nexport interface CubeResolvedColumn<T = any>\n // `width`, `minWidth`, `maxWidth`, `flex` and `align` are all resolved here,\n // so they narrow from optional to definite and must be replaced, not extended.\n extends Omit<\n CubeTableColumn<T>,\n 'width' | 'minWidth' | 'maxWidth' | 'flex' | 'align'\n > {\n /** Position among the visible leaf columns, 0-based. */\n index: number;\n /** `aria-colindex`, 1-based and document-absolute. */\n ariaColIndex: number;\n /** Resolved pixel width, or `null` while the container is unmeasured. */\n width: number | null;\n minWidth: number;\n maxWidth: number | null;\n flex: number | null;\n align: CubeTableAlign;\n /** Cumulative sticky offset in px for a pinned column. */\n pinOffset: number | null;\n /** `true` for the last pinned-start / first pinned-end column. */\n isPinEdge: boolean;\n /** Structural columns (selection, drag handle, row menu) never enter sorting,\n * search, copy, or the value pipeline. */\n isStructural: boolean;\n}\n\nexport interface CubeTableColumnLayout<T = any> {\n columns: CubeResolvedColumn<T>[];\n pinnedStartWidth: number;\n pinnedEndWidth: number;\n /** Sum of resolved widths, or `null` while unmeasured. */\n totalWidth: number | null;\n /** `true` when the columns cannot fit and the table scrolls horizontally. */\n isOverflowing: boolean;\n}\n\n/**\n * How a refresh over an existing result is presented.\n *\n * - `overlay` — keep the previous rows visible, dimmed, behind a spinner. A\n * server page or a re-sort never blanks the table.\n * - `skeleton` — discard the previous rows and show placeholders.\n * - `none` — no visuals beyond `aria-busy`; the page owns the indicator.\n */\nexport type CubeTableLoadingIndicator = 'overlay' | 'skeleton' | 'none';\n\nexport type CubeTableSelectionMode = 'none' | 'single' | 'multiple';\n\n/**\n * What the header checkbox acts on.\n *\n * - `page` — the rows on the current page.\n * - `filtered` — every row passing the current search/filter, across pages.\n * - `all` — emits the `'all'` sentinel, meaning \"everything, including rows the\n * client has not loaded\". The consumer decides what that means for its query.\n */\nexport type CubeTableSelectAllMode = 'page' | 'filtered' | 'all';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgBQ,gBACdC,SACAC,QACK;AACL,QAAOD,YAAY,SAASC,SAAS,GAAGD,QAAO,GAAIC"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-cell-selection.js","names":[],"sources":["../../../../src/components/data/TableBase/use-cell-selection.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { Key } from '@react-types/shared';\nimport type { CubeResolvedColumn, CubeTableCellRange } from './types';\n\nexport type CubeTableCellSelectionMode = 'none' | 'cell' | 'range';\n\nexport interface UseCellSelectionOptions<T> {\n /** @default 'range' */\n mode?: CubeTableCellSelectionMode;\n columns: CubeResolvedColumn<T>[];\n /**\n * Every row a range can reach, in the order they appear on screen — pinned\n * rows included. ag-grid excludes them (`!rowNode.rowPinned`), and we do not:\n * a total is a figure like any other, and selecting a column of revenue only\n * to have to copy its sum separately is the wrong trade.\n *\n * A pinned row is still not reachable by dragging THROUGH it — see\n * `TableView`'s pointer handlers for why.\n */\n rows: readonly T[];\n /**\n * Parallel to `rows`. Supplied rather than derived, so it cannot disagree with\n * the keys the renderer stamps on the cells — when the two drifted, every\n * range silently resolved to nothing.\n */\n rowKeys: readonly Key[];\n /**\n * Vetoes individual cells. A pinned total's label cell is the motivating\n * case: \"Total\" is a caption for the row, not a figure, and there is nothing\n * useful to do with it selected.\n *\n * A vetoed cell cannot anchor or receive a range, never highlights, and copies\n * as an empty field so a block spanning it keeps its shape.\n */\n isCellSelectable?: (row: T, rowKey: Key, columnKey: string) => boolean;\n range?: CubeTableCellRange | null;\n defaultRange?: CubeTableCellRange | null;\n onRangeChange?: (range: CubeTableCellRange | null) => void;\n}\n\nconst cellKey = (rowKey: Key, columnKey: string) => `${rowKey}\u0000${columnKey}`;\n\n/**\n * Rectangular cell selection.\n *\n * A result grid is read by cell, not by row: the thing a user wants out of it is\n * a figure, or a block of figures to paste somewhere else. So a click selects a\n * cell, shift-click and drag grow a rectangle, and ⌘/Ctrl+C writes the rectangle\n * out as TSV.\n *\n * The range is stored as two corners rather than a set of keys, so it survives\n * sorting and paging the way a keyed row selection does — and normalizing it\n * against the CURRENT row and column order is what makes \"the block between\n * these two cells\" keep meaning that after a re-sort.\n *\n * Structural columns (the row number, the checkbox, the row-menu button) can\n * never enter a range: they are chrome, and copying them would put the grid's\n * own furniture into the user's spreadsheet.\n */\nexport function useCellSelection<T>({\n mode = 'range',\n columns,\n rows,\n rowKeys,\n isCellSelectable,\n range: rangeProp,\n defaultRange,\n onRangeChange,\n}: UseCellSelectionOptions<T>) {\n const [range, setRange] = useControlledState<CubeTableCellRange | null>(\n rangeProp as CubeTableCellRange | null,\n defaultRange ?? null,\n onRangeChange as (value: CubeTableCellRange | null) => void,\n );\n\n // The press that started a drag. A ref rather than state: it is written and\n // read inside one pointer gesture, and re-rendering on every `pointerenter`\n // would drop frames across a wide grid.\n const anchorRef = useRef<CubeTableCellRange | null>(null);\n const isDraggingRef = useRef(false);\n\n const selectableColumns = useMemo(\n () => columns.filter((column) => !column.isStructural),\n [columns],\n );\n\n const isEnabled = mode !== 'none';\n\n /**\n * The range's corners resolved against the current order, as index bounds.\n * `null` when either corner has scrolled out of the data — a range whose\n * anchor no longer exists is not a range.\n */\n const bounds = useMemo(() => {\n if (!isEnabled || !range) return null;\n\n const rowFrom = rowKeys.indexOf(range.fromRowKey);\n const rowTo = rowKeys.indexOf(range.toRowKey);\n const colFrom = selectableColumns.findIndex(\n (column) => column.key === range.fromColumnKey,\n );\n const colTo = selectableColumns.findIndex(\n (column) => column.key === range.toColumnKey,\n );\n\n if (rowFrom === -1 || rowTo === -1 || colFrom === -1 || colTo === -1) {\n return null;\n }\n\n return {\n rowStart: Math.min(rowFrom, rowTo),\n rowEnd: Math.max(rowFrom, rowTo),\n colStart: Math.min(colFrom, colTo),\n colEnd: Math.max(colFrom, colTo),\n };\n }, [isEnabled, range, rowKeys, selectableColumns]);\n\n /**\n * Every selected cell, precomputed. A range spanning a full page is tens of\n * thousands of cells and every one of them asks whether it is selected on\n * every render, so this has to be a lookup rather than four comparisons.\n */\n const selectedKeys = useMemo(() => {\n const keys = new Set<string>();\n\n if (!bounds) return keys;\n\n for (let r = bounds.rowStart; r <= bounds.rowEnd; r++) {\n for (let c = bounds.colStart; c <= bounds.colEnd; c++) {\n const columnKey = selectableColumns[c].key;\n\n if (isCellSelectable?.(rows[r], rowKeys[r], columnKey) === false) {\n continue;\n }\n\n keys.add(cellKey(rowKeys[r], columnKey));\n }\n }\n\n return keys;\n }, [bounds, rows, rowKeys, selectableColumns, isCellSelectable]);\n\n // `useCallback`, not `useEvent`: the renderer asks this DURING render, once\n // per cell. `useEvent` keeps its closure current through a layout effect, so a\n // render-time reader sees the PREVIOUS render's answer — the highlight then\n // trails the selection by one commit and a cleared range stays painted.\n const isSelected = useCallback(\n (rowKey: Key, columnKey: string) =>\n selectedKeys.has(cellKey(rowKey, columnKey)),\n [selectedKeys],\n );\n\n const isSelectableColumn = useEvent((columnKey: string) =>\n selectableColumns.some((column) => column.key === columnKey),\n );\n\n /**\n * Whether a cell can take part at all — asked by the renderer before it wires\n * up any pointer handler, so a vetoed cell is inert rather than merely\n * unpainted.\n */\n const canSelectCell = useEvent((rowKey: Key, columnKey: string) => {\n if (!isEnabled || !isSelectableColumn(columnKey)) return false;\n if (!isCellSelectable) return true;\n\n const index = rowKeys.indexOf(rowKey);\n\n return index === -1 || isCellSelectable(rows[index], rowKey, columnKey);\n });\n\n const select = useEvent((rowKey: Key, columnKey: string) => {\n if (!canSelectCell(rowKey, columnKey)) return;\n\n const next: CubeTableCellRange = {\n fromRowKey: rowKey,\n toRowKey: rowKey,\n fromColumnKey: columnKey,\n toColumnKey: columnKey,\n };\n\n anchorRef.current = next;\n setRange(next);\n });\n\n /** Grow the range from the standing anchor. Shift-click and drag both land here. */\n const extendTo = useEvent((rowKey: Key, columnKey: string) => {\n if (mode !== 'range' || !canSelectCell(rowKey, columnKey)) return;\n\n // Shift-clicking with nothing selected yet behaves as a plain click, which\n // is what every grid and every file manager does.\n const anchor = anchorRef.current ?? range;\n\n if (!anchor) {\n select(rowKey, columnKey);\n\n return;\n }\n\n setRange({\n fromRowKey: anchor.fromRowKey,\n toRowKey: rowKey,\n fromColumnKey: anchor.fromColumnKey,\n toColumnKey: columnKey,\n });\n });\n\n const clear = useEvent(() => {\n anchorRef.current = null;\n if (range) setRange(null);\n });\n\n /**\n * The selection as a grid of display strings, unescaped.\n *\n * A matrix rather than a formatted blob, because the clipboard needs the same\n * block in two formats and re-parsing one to build the other does not\n * survive contact with the data: a value carrying a tab is RFC-4180 quoted\n * for the TSV, and splitting that back apart on tabs tore the cell in half.\n * Both formats are built from this instead.\n *\n * Values come from the same display-text pipeline client sort and search use,\n * so what lands on the clipboard is what was on screen: a formatted currency\n * stays formatted, and a value with no text representation copies as empty\n * rather than as `[object Object]`.\n */\n const getSelectionMatrix = useEvent(\n (\n getText: (\n column: CubeResolvedColumn<T>,\n row: T,\n rowIndex: number,\n ) => string,\n getHeader?: (column: CubeResolvedColumn<T>) => string,\n ) => {\n if (!bounds) return [];\n\n const cols = selectableColumns.slice(bounds.colStart, bounds.colEnd + 1);\n const matrix: string[][] = [];\n\n if (getHeader) matrix.push(cols.map((column) => getHeader(column)));\n\n for (let r = bounds.rowStart; r <= bounds.rowEnd; r++) {\n matrix.push(\n cols.map((column) =>\n selectedKeys.has(cellKey(rowKeys[r], column.key))\n ? getText(column, rows[r], r)\n : '',\n ),\n );\n }\n\n return matrix;\n },\n );\n\n return {\n mode,\n isEnabled,\n range: bounds ? range : null,\n /** Cells in the range, for `aria-selected` and the highlight. */\n isSelected,\n /** `true` once the range covers more than one cell. */\n hasRange: selectedKeys.size > 1,\n cellCount: selectedKeys.size,\n canSelectCell,\n select,\n extendTo,\n clear,\n getSelectionMatrix,\n anchorRef,\n isDraggingRef,\n };\n}\n\n/**\n * The matrix as tab-separated values — the format Excel and Sheets both paste\n * as a grid rather than as one run of text.\n *\n * RFC-4180 quoting: a value carrying a tab or a newline would otherwise break\n * the grid apart on paste, one cell becoming two or one row becoming two.\n */\nexport function toTsv(matrix: string[][]) {\n return matrix.map((row) => row.map(quote).join('\\t')).join('\\n');\n}\n\nfunction quote(value: string) {\n if (!/[\\t\\n\\r\"]/.test(value)) return value;\n\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-cell-selection.js","names":["useControlledState","useCallback","useMemo","useRef","useEvent","Key","CubeResolvedColumn","CubeTableCellRange","CubeTableCellSelectionMode","UseCellSelectionOptions","mode","columns","T","rows","rowKeys","isCellSelectable","row","rowKey","columnKey","range","defaultRange","onRangeChange","cellKey","useCellSelection","rangeProp","setRange","value","anchorRef","isDraggingRef","selectableColumns","filter","column","isStructural","isEnabled","bounds","rowFrom","indexOf","fromRowKey","rowTo","toRowKey","colFrom","findIndex","key","fromColumnKey","colTo","toColumnKey","rowStart","Math","min","rowEnd","max","colStart","colEnd","selectedKeys","keys","Set","r","c","add","isSelected","has","isSelectableColumn","some","canSelectCell","index","select","next","current","extendTo","anchor","clear","getSelectionMatrix","getText","rowIndex","getHeader","cols","slice","matrix","push","map","hasRange","size","cellCount","toTsv","quote","join","test","replace"],"sources":["../../../../src/components/data/TableBase/use-cell-selection.ts"],"sourcesContent":["import { useControlledState } from '@react-stately/utils';\nimport { useCallback, useMemo, useRef } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport type { Key } from '@react-types/shared';\nimport type { CubeResolvedColumn, CubeTableCellRange } from './types';\n\nexport type CubeTableCellSelectionMode = 'none' | 'cell' | 'range';\n\nexport interface UseCellSelectionOptions<T> {\n /** @default 'range' */\n mode?: CubeTableCellSelectionMode;\n columns: CubeResolvedColumn<T>[];\n /**\n * Every row a range can reach, in the order they appear on screen — pinned\n * rows included. ag-grid excludes them (`!rowNode.rowPinned`), and we do not:\n * a total is a figure like any other, and selecting a column of revenue only\n * to have to copy its sum separately is the wrong trade.\n *\n * A pinned row is still not reachable by dragging THROUGH it — see\n * `TableView`'s pointer handlers for why.\n */\n rows: readonly T[];\n /**\n * Parallel to `rows`. Supplied rather than derived, so it cannot disagree with\n * the keys the renderer stamps on the cells — when the two drifted, every\n * range silently resolved to nothing.\n */\n rowKeys: readonly Key[];\n /**\n * Vetoes individual cells. A pinned total's label cell is the motivating\n * case: \"Total\" is a caption for the row, not a figure, and there is nothing\n * useful to do with it selected.\n *\n * A vetoed cell cannot anchor or receive a range, never highlights, and copies\n * as an empty field so a block spanning it keeps its shape.\n */\n isCellSelectable?: (row: T, rowKey: Key, columnKey: string) => boolean;\n range?: CubeTableCellRange | null;\n defaultRange?: CubeTableCellRange | null;\n onRangeChange?: (range: CubeTableCellRange | null) => void;\n}\n\nconst cellKey = (rowKey: Key, columnKey: string) => `${rowKey}\u0000${columnKey}`;\n\n/**\n * Rectangular cell selection.\n *\n * A result grid is read by cell, not by row: the thing a user wants out of it is\n * a figure, or a block of figures to paste somewhere else. So a click selects a\n * cell, shift-click and drag grow a rectangle, and ⌘/Ctrl+C writes the rectangle\n * out as TSV.\n *\n * The range is stored as two corners rather than a set of keys, so it survives\n * sorting and paging the way a keyed row selection does — and normalizing it\n * against the CURRENT row and column order is what makes \"the block between\n * these two cells\" keep meaning that after a re-sort.\n *\n * Structural columns (the row number, the checkbox, the row-menu button) can\n * never enter a range: they are chrome, and copying them would put the grid's\n * own furniture into the user's spreadsheet.\n */\nexport function useCellSelection<T>({\n mode = 'range',\n columns,\n rows,\n rowKeys,\n isCellSelectable,\n range: rangeProp,\n defaultRange,\n onRangeChange,\n}: UseCellSelectionOptions<T>) {\n const [range, setRange] = useControlledState<CubeTableCellRange | null>(\n rangeProp as CubeTableCellRange | null,\n defaultRange ?? null,\n onRangeChange as (value: CubeTableCellRange | null) => void,\n );\n\n // The press that started a drag. A ref rather than state: it is written and\n // read inside one pointer gesture, and re-rendering on every `pointerenter`\n // would drop frames across a wide grid.\n const anchorRef = useRef<CubeTableCellRange | null>(null);\n const isDraggingRef = useRef(false);\n\n const selectableColumns = useMemo(\n () => columns.filter((column) => !column.isStructural),\n [columns],\n );\n\n const isEnabled = mode !== 'none';\n\n /**\n * The range's corners resolved against the current order, as index bounds.\n * `null` when either corner has scrolled out of the data — a range whose\n * anchor no longer exists is not a range.\n */\n const bounds = useMemo(() => {\n if (!isEnabled || !range) return null;\n\n const rowFrom = rowKeys.indexOf(range.fromRowKey);\n const rowTo = rowKeys.indexOf(range.toRowKey);\n const colFrom = selectableColumns.findIndex(\n (column) => column.key === range.fromColumnKey,\n );\n const colTo = selectableColumns.findIndex(\n (column) => column.key === range.toColumnKey,\n );\n\n if (rowFrom === -1 || rowTo === -1 || colFrom === -1 || colTo === -1) {\n return null;\n }\n\n return {\n rowStart: Math.min(rowFrom, rowTo),\n rowEnd: Math.max(rowFrom, rowTo),\n colStart: Math.min(colFrom, colTo),\n colEnd: Math.max(colFrom, colTo),\n };\n }, [isEnabled, range, rowKeys, selectableColumns]);\n\n /**\n * Every selected cell, precomputed. A range spanning a full page is tens of\n * thousands of cells and every one of them asks whether it is selected on\n * every render, so this has to be a lookup rather than four comparisons.\n */\n const selectedKeys = useMemo(() => {\n const keys = new Set<string>();\n\n if (!bounds) return keys;\n\n for (let r = bounds.rowStart; r <= bounds.rowEnd; r++) {\n for (let c = bounds.colStart; c <= bounds.colEnd; c++) {\n const columnKey = selectableColumns[c].key;\n\n if (isCellSelectable?.(rows[r], rowKeys[r], columnKey) === false) {\n continue;\n }\n\n keys.add(cellKey(rowKeys[r], columnKey));\n }\n }\n\n return keys;\n }, [bounds, rows, rowKeys, selectableColumns, isCellSelectable]);\n\n // `useCallback`, not `useEvent`: the renderer asks this DURING render, once\n // per cell. `useEvent` keeps its closure current through a layout effect, so a\n // render-time reader sees the PREVIOUS render's answer — the highlight then\n // trails the selection by one commit and a cleared range stays painted.\n const isSelected = useCallback(\n (rowKey: Key, columnKey: string) =>\n selectedKeys.has(cellKey(rowKey, columnKey)),\n [selectedKeys],\n );\n\n const isSelectableColumn = useEvent((columnKey: string) =>\n selectableColumns.some((column) => column.key === columnKey),\n );\n\n /**\n * Whether a cell can take part at all — asked by the renderer before it wires\n * up any pointer handler, so a vetoed cell is inert rather than merely\n * unpainted.\n */\n const canSelectCell = useEvent((rowKey: Key, columnKey: string) => {\n if (!isEnabled || !isSelectableColumn(columnKey)) return false;\n if (!isCellSelectable) return true;\n\n const index = rowKeys.indexOf(rowKey);\n\n return index === -1 || isCellSelectable(rows[index], rowKey, columnKey);\n });\n\n const select = useEvent((rowKey: Key, columnKey: string) => {\n if (!canSelectCell(rowKey, columnKey)) return;\n\n const next: CubeTableCellRange = {\n fromRowKey: rowKey,\n toRowKey: rowKey,\n fromColumnKey: columnKey,\n toColumnKey: columnKey,\n };\n\n anchorRef.current = next;\n setRange(next);\n });\n\n /** Grow the range from the standing anchor. Shift-click and drag both land here. */\n const extendTo = useEvent((rowKey: Key, columnKey: string) => {\n if (mode !== 'range' || !canSelectCell(rowKey, columnKey)) return;\n\n // Shift-clicking with nothing selected yet behaves as a plain click, which\n // is what every grid and every file manager does.\n const anchor = anchorRef.current ?? range;\n\n if (!anchor) {\n select(rowKey, columnKey);\n\n return;\n }\n\n setRange({\n fromRowKey: anchor.fromRowKey,\n toRowKey: rowKey,\n fromColumnKey: anchor.fromColumnKey,\n toColumnKey: columnKey,\n });\n });\n\n const clear = useEvent(() => {\n anchorRef.current = null;\n if (range) setRange(null);\n });\n\n /**\n * The selection as a grid of display strings, unescaped.\n *\n * A matrix rather than a formatted blob, because the clipboard needs the same\n * block in two formats and re-parsing one to build the other does not\n * survive contact with the data: a value carrying a tab is RFC-4180 quoted\n * for the TSV, and splitting that back apart on tabs tore the cell in half.\n * Both formats are built from this instead.\n *\n * Values come from the same display-text pipeline client sort and search use,\n * so what lands on the clipboard is what was on screen: a formatted currency\n * stays formatted, and a value with no text representation copies as empty\n * rather than as `[object Object]`.\n */\n const getSelectionMatrix = useEvent(\n (\n getText: (\n column: CubeResolvedColumn<T>,\n row: T,\n rowIndex: number,\n ) => string,\n getHeader?: (column: CubeResolvedColumn<T>) => string,\n ) => {\n if (!bounds) return [];\n\n const cols = selectableColumns.slice(bounds.colStart, bounds.colEnd + 1);\n const matrix: string[][] = [];\n\n if (getHeader) matrix.push(cols.map((column) => getHeader(column)));\n\n for (let r = bounds.rowStart; r <= bounds.rowEnd; r++) {\n matrix.push(\n cols.map((column) =>\n selectedKeys.has(cellKey(rowKeys[r], column.key))\n ? getText(column, rows[r], r)\n : '',\n ),\n );\n }\n\n return matrix;\n },\n );\n\n return {\n mode,\n isEnabled,\n range: bounds ? range : null,\n /** Cells in the range, for `aria-selected` and the highlight. */\n isSelected,\n /** `true` once the range covers more than one cell. */\n hasRange: selectedKeys.size > 1,\n cellCount: selectedKeys.size,\n canSelectCell,\n select,\n extendTo,\n clear,\n getSelectionMatrix,\n anchorRef,\n isDraggingRef,\n };\n}\n\n/**\n * The matrix as tab-separated values — the format Excel and Sheets both paste\n * as a grid rather than as one run of text.\n *\n * RFC-4180 quoting: a value carrying a tab or a newline would otherwise break\n * the grid apart on paste, one cell becoming two or one row becoming two.\n */\nexport function toTsv(matrix: string[][]) {\n return matrix.map((row) => row.map(quote).join('\\t')).join('\\n');\n}\n\nfunction quote(value: string) {\n if (!/[\\t\\n\\r\"]/.test(value)) return value;\n\n return `\"${value.replace(/\"/g, '\"\"')}\"`;\n}\n"],"mappings":"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"}
@@ -1,6 +1,7 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
- import { useMemo, useState } from "react";
3
+ import { c } from "react-compiler-runtime";
4
+ import { useState } from "react";
4
5
  import { useControlledState } from "@react-stately/utils";
5
6
 
6
7
  //#region src/components/data/TableBase/use-column-order.ts
@@ -79,20 +80,63 @@ function projectReorder(fullOrder, nextDraggable) {
79
80
  return next;
80
81
  }
81
82
  const EMPTY_ORDER = [];
82
- function useColumnOrder({ columns, columnOrder, defaultColumnOrder, onColumnOrderChange, storage }) {
83
- const [storedOrder] = useState(() => columnOrder === void 0 && storage.has("columnOrder") ? storage.initial.columnOrder : void 0);
83
+ function useColumnOrder(t0) {
84
+ const $ = c(17);
85
+ const { columns, columnOrder, defaultColumnOrder, onColumnOrderChange, storage } = t0;
86
+ let t1;
87
+ if ($[0] !== columnOrder || $[1] !== storage) {
88
+ t1 = () => columnOrder === void 0 && storage.has("columnOrder") ? storage.initial.columnOrder : void 0;
89
+ $[0] = columnOrder;
90
+ $[1] = storage;
91
+ $[2] = t1;
92
+ } else t1 = $[2];
93
+ const [storedOrder] = useState(t1);
84
94
  const [order, setOrder] = useControlledState(columnOrder, defaultColumnOrder ?? storedOrder ?? EMPTY_ORDER, onColumnOrderChange);
85
- const ordered = useMemo(() => applyColumnOrder(columns, order), [columns, order]);
86
- const fullOrder = useMemo(() => ordered.map((column) => column.key), [ordered]);
87
- return {
88
- columns: ordered,
89
- order: fullOrder,
90
- reorder: useEvent((nextDraggable) => {
95
+ let t2;
96
+ if ($[3] !== columns || $[4] !== order) {
97
+ t2 = applyColumnOrder(columns, order);
98
+ $[3] = columns;
99
+ $[4] = order;
100
+ $[5] = t2;
101
+ } else t2 = $[5];
102
+ const ordered = t2;
103
+ let t3;
104
+ if ($[6] !== ordered) {
105
+ t3 = ordered.map(_temp);
106
+ $[6] = ordered;
107
+ $[7] = t3;
108
+ } else t3 = $[7];
109
+ const fullOrder = t3;
110
+ let t4;
111
+ if ($[8] !== columnOrder || $[9] !== fullOrder || $[10] !== setOrder || $[11] !== storage) {
112
+ t4 = (nextDraggable) => {
91
113
  const next = projectReorder(fullOrder, nextDraggable);
92
114
  setOrder(next);
93
115
  if (columnOrder === void 0) storage.write({ columnOrder: next });
94
- })
95
- };
116
+ };
117
+ $[8] = columnOrder;
118
+ $[9] = fullOrder;
119
+ $[10] = setOrder;
120
+ $[11] = storage;
121
+ $[12] = t4;
122
+ } else t4 = $[12];
123
+ const reorder = useEvent(t4);
124
+ let t5;
125
+ if ($[13] !== fullOrder || $[14] !== ordered || $[15] !== reorder) {
126
+ t5 = {
127
+ columns: ordered,
128
+ order: fullOrder,
129
+ reorder
130
+ };
131
+ $[13] = fullOrder;
132
+ $[14] = ordered;
133
+ $[15] = reorder;
134
+ $[16] = t5;
135
+ } else t5 = $[16];
136
+ return t5;
137
+ }
138
+ function _temp(column) {
139
+ return column.key;
96
140
  }
97
141
 
98
142
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-column-order.js","names":[],"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":";;;;;;;;;;;;;;;;;;;;AAsBA,SAAgB,iBACd,SACA,OACsB;AACtB,KAAI,CAAC,OAAO,OAAQ,QAAO;CAE3B,MAAM,UAAU,IAAI,IAAI,QAAQ,KAAK,WAAW,OAAO,IAAI,CAAC;CAC5D,MAAM,uBAAO,IAAI,KAAqB;AAEtC,OAAM,SAAS,KAAK,UAAU;AAG5B,MAAI,QAAQ,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAE,MAAK,IAAI,KAAK,MAAM;GAC5D;AAEF,KAAI,CAAC,KAAK,KAAM,QAAO;CAEvB,IAAI,UAAU;AAEd,QAAO,QACJ,KAAK,QAAQ,gBAAgB;EAC5B,MAAM,MAAM,KAAK,IAAI,OAAO,IAAI;AAEhC,MAAI,OAAO,KAAM,WAAU;AAE3B,SAAO;GAAE;GAAQ;GAAa,MAAM,OAAO,UAAU;GAAK;GAC1D,CACD,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,YAAY,CAChE,KAAK,UAAU,MAAM,OAAO;;;;;;;;;;;;;;;;;;;AAoBjC,SAAgB,kBACd,QACA,WACS;AACT,QACE,aACA,CAAC,OAAO,gBACR,OAAO,OAAO,SACb,OAAO,iBAAiB;;AAI7B,SAAgB,uBACd,SACA,WACU;AACV,QAAO,QACJ,QAAQ,WAAW,kBAAkB,QAAQ,UAAU,CAAC,CACxD,KAAK,WAAW,OAAO,IAAI;;;;;;;;;;;;;AAchC,SAAgB,eACd,WACA,eACU;CACV,MAAM,YAAY,IAAI,IAAI,cAAc;CACxC,MAAM,OAAO,CAAC,GAAG,UAAU;CAC3B,IAAI,SAAS;AAEb,MAAK,IAAI,OAAO,GAAG,OAAO,KAAK,QAAQ,OACrC,KAAI,UAAU,IAAI,KAAK,MAAM,CAAE,MAAK,QAAQ,cAAc;AAG5D,QAAO;;AAGT,MAAM,cAAwB,EAAE;AAmBhC,SAAgB,eAAkB,EAChC,SACA,aACA,oBACA,qBACA,WACoD;CAGpD,MAAM,CAAC,eAAe,eACpB,gBAAgB,UAAa,QAAQ,IAAI,cAAc,GACnD,QAAQ,QAAQ,cAChB,OACL;CAKD,MAAM,CAAC,OAAO,YAAY,mBACxB,aACA,sBAAsB,eAAe,aACrC,oBACD;CAED,MAAM,UAAU,cACR,iBAAiB,SAAS,MAAM,EACtC,CAAC,SAAS,MAAM,CACjB;CAID,MAAM,YAAY,cACV,QAAQ,KAAK,WAAW,OAAO,IAAI,EACzC,CAAC,QAAQ,CACV;AAaD,QAAO;EAAE,SAAS;EAAS,OAAO;EAAW,SAX7B,UAAU,kBAA4B;GACpD,MAAM,OAAO,eAAe,WAAW,cAAc;AAErD,YAAS,KAAK;AAKd,OAAI,gBAAgB,OAAW,SAAQ,MAAM,EAAE,aAAa,MAAM,CAAC;IACnE;EAEoD"}
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,4 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
+ import { c } from "react-compiler-runtime";
2
3
  import { useLayoutEffect, useState } from "react";
3
4
 
4
5
  //#region src/components/data/TableBase/use-container-width.ts
@@ -16,17 +17,30 @@ import { useLayoutEffect, useState } from "react";
16
17
  * min-width columns before they snap to their real size.
17
18
  */
18
19
  function useContainerWidth(element) {
20
+ const $ = c(3);
19
21
  const [width, setWidth] = useState(null);
20
- useLayoutEffect(() => {
21
- if (!element || !(element instanceof Element)) return;
22
- const measure = () => {
23
- setWidth((current) => current === element.clientWidth ? current : element.clientWidth);
22
+ let t0;
23
+ let t1;
24
+ if ($[0] !== element) {
25
+ t0 = () => {
26
+ if (!element || !(element instanceof Element)) return;
27
+ const measure = () => {
28
+ setWidth((current) => current === element.clientWidth ? current : element.clientWidth);
29
+ };
30
+ measure();
31
+ const observer = new ResizeObserver(measure);
32
+ observer.observe(element);
33
+ return () => observer.disconnect();
24
34
  };
25
- measure();
26
- const observer = new ResizeObserver(measure);
27
- observer.observe(element);
28
- return () => observer.disconnect();
29
- }, [element]);
35
+ t1 = [element];
36
+ $[0] = element;
37
+ $[1] = t0;
38
+ $[2] = t1;
39
+ } else {
40
+ t0 = $[1];
41
+ t1 = $[2];
42
+ }
43
+ useLayoutEffect(t0, t1);
30
44
  return width;
31
45
  }
32
46
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-container-width.js","names":[],"sources":["../../../../src/components/data/TableBase/use-container-width.ts"],"sourcesContent":["import { useLayoutEffect, useState } from 'react';\n\n/**\n * Content-box width of the scroller, measured before paint and kept current\n * with a `ResizeObserver`.\n *\n * Takes the **element**, not a ref: in the virtualized path the scroller is\n * created by Virtuoso and handed over through a callback after mount, so a hook\n * that peeked at `ref.current` once would see `null` and never measure\n * anything — leaving every column unsized.\n *\n * `useLayoutEffect` rather than `useEffect` on purpose: column widths are\n * derived from this value, so measuring after paint would show one frame of\n * min-width columns before they snap to their real size.\n */\nexport function useContainerWidth(element: HTMLElement | null): number | null {\n const [width, setWidth] = useState<number | null>(null);\n\n useLayoutEffect(() => {\n // Virtuoso's `scrollerRef` reports `HTMLElement | Window | null`, and\n // `ResizeObserver.observe` throws on anything that is not an Element.\n if (!element || !(element instanceof Element)) return;\n\n const measure = () => {\n // `clientWidth` excludes the vertical scrollbar, which is what we want:\n // the columns must fit the content box, not the border box, or a\n // scrollbar appearing would push the last column out and bring a\n // horizontal scrollbar with it.\n setWidth((current) =>\n current === element.clientWidth ? current : element.clientWidth,\n );\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n observer.observe(element);\n\n return () => observer.disconnect();\n }, [element]);\n\n return width;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AAeA,SAAgB,kBAAkB,SAA4C;CAC5E,MAAM,CAAC,OAAO,YAAY,SAAwB,KAAK;AAEvD,uBAAsB;AAGpB,MAAI,CAAC,WAAW,EAAE,mBAAmB,SAAU;EAE/C,MAAM,gBAAgB;AAKpB,aAAU,YACR,YAAY,QAAQ,cAAc,UAAU,QAAQ,YACrD;;AAGH,WAAS;EAET,MAAM,WAAW,IAAI,eAAe,QAAQ;AAE5C,WAAS,QAAQ,QAAQ;AAEzB,eAAa,SAAS,YAAY;IACjC,CAAC,QAAQ,CAAC;AAEb,QAAO"}
1
+ {"version":3,"file":"use-container-width.js","names":["useLayoutEffect","useState","useContainerWidth","element","$","_c","width","setWidth","t0","t1","Element","measure","current","clientWidth","observer","ResizeObserver","observe","disconnect"],"sources":["../../../../src/components/data/TableBase/use-container-width.ts"],"sourcesContent":["import { useLayoutEffect, useState } from 'react';\n\n/**\n * Content-box width of the scroller, measured before paint and kept current\n * with a `ResizeObserver`.\n *\n * Takes the **element**, not a ref: in the virtualized path the scroller is\n * created by Virtuoso and handed over through a callback after mount, so a hook\n * that peeked at `ref.current` once would see `null` and never measure\n * anything — leaving every column unsized.\n *\n * `useLayoutEffect` rather than `useEffect` on purpose: column widths are\n * derived from this value, so measuring after paint would show one frame of\n * min-width columns before they snap to their real size.\n */\nexport function useContainerWidth(element: HTMLElement | null): number | null {\n const [width, setWidth] = useState<number | null>(null);\n\n useLayoutEffect(() => {\n // Virtuoso's `scrollerRef` reports `HTMLElement | Window | null`, and\n // `ResizeObserver.observe` throws on anything that is not an Element.\n if (!element || !(element instanceof Element)) return;\n\n const measure = () => {\n // `clientWidth` excludes the vertical scrollbar, which is what we want:\n // the columns must fit the content box, not the border box, or a\n // scrollbar appearing would push the last column out and bring a\n // horizontal scrollbar with it.\n setWidth((current) =>\n current === element.clientWidth ? current : element.clientWidth,\n );\n };\n\n measure();\n\n const observer = new ResizeObserver(measure);\n\n observer.observe(element);\n\n return () => observer.disconnect();\n }, [element]);\n\n return width;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,SAAOE,kBAAAC,SAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CACL,MAAA,CAAAC,OAAAC,YAA0BN,SAAwB,KAAK;CAAC,IAAAO;CAAA,IAAAC;AAAA,KAAAL,EAAA,OAAAD,SAAA;AAExCK,aAAA;AAGd,OAAI,CAACL,WAAD,EAAcA,mBAAmBO,SAAQ;GAE7C,MAAAC,gBAAgB;AAKdJ,cAASK,YACPA,YAAYT,QAAOU,cAAnBD,UAA4CT,QAAOU,YACpD;;AAGHF,YAAS;GAET,MAAAG,WAAiB,IAAIC,eAAeJ,QAAQ;AAE5CG,YAAQE,QAASb,QAAQ;AAAA,gBAEZW,SAAQG,YAAa;;AACjCR,OAAA,CAACN,QAAQ;AAAAC,IAAA,KAAAD;AAAAC,IAAA,KAAAI;AAAAJ,IAAA,KAAAK;QAAA;AAAAD,OAAAJ,EAAA;AAAAK,OAAAL,EAAA;;AAtBZJ,iBAAgBQ,IAsBbC,GAAU;AAAA,QAENH"}
@@ -1,4 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
+ import { c } from "react-compiler-runtime";
2
3
  import { useLayoutEffect, useRef } from "react";
3
4
 
4
5
  //#region src/components/data/TableBase/use-row-move-animation.ts
@@ -32,57 +33,75 @@ function prefersReducedMotion() {
32
33
  * rather than viewport coordinates: it is relative to the scroller's content,
33
34
  * so it does not change as the content scrolls past.
34
35
  */
35
- function useRowMoveAnimation({ isEnabled, bodyRef, duration = ROW_MOVE_DURATION }) {
36
+ function useRowMoveAnimation(t0) {
37
+ const $ = c(5);
38
+ const { isEnabled, bodyRef, duration: t1 } = t0;
39
+ const duration = t1 === void 0 ? ROW_MOVE_DURATION : t1;
36
40
  const previousRef = useRef(null);
37
- const previousOrderRef = useRef([]);
38
- useLayoutEffect(() => {
39
- const body = bodyRef.current;
40
- if (!body) return;
41
- const rows = Array.from(body.querySelectorAll("tr[data-element=\"Row\"][data-key]:not([data-pinned])"));
42
- const next = /* @__PURE__ */ new Map();
43
- for (const row of rows) next.set(row.dataset.key, row.offsetTop);
44
- const previous = previousRef.current;
45
- const previousOrder = previousOrderRef.current;
46
- const nextOrder = rows.map((row) => row.dataset.key);
47
- previousRef.current = next;
48
- previousOrderRef.current = nextOrder;
49
- if (!isEnabled || prefersReducedMotion() || !previous) return;
50
- const stillHere = new Set(nextOrder);
51
- const before = previousOrder.filter((key) => stillHere.has(key));
52
- const after = nextOrder.filter((key) => previous.has(key));
53
- if (!(before.length !== after.length || before.some((key, index) => key !== after[index]))) return;
54
- const moved = [];
55
- for (const row of rows) {
56
- const from = previous.get(row.dataset.key);
57
- if (from === void 0) continue;
58
- const delta = from - next.get(row.dataset.key);
59
- if (delta !== 0) moved.push({
60
- row,
61
- delta
62
- });
63
- }
64
- if (!moved.length) return;
65
- for (const { row, delta } of moved) {
66
- row.style.transition = "none";
67
- row.style.transform = `translateY(${delta}px)`;
68
- }
69
- body.offsetHeight;
70
- for (const { row } of moved) {
71
- row.style.transition = `transform ${duration}ms ease-out`;
72
- row.style.transform = "";
73
- }
74
- const clear = () => {
75
- for (const { row } of moved) {
76
- row.style.transition = "";
77
- row.style.transform = "";
41
+ let t2;
42
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
43
+ t2 = [];
44
+ $[0] = t2;
45
+ } else t2 = $[0];
46
+ const previousOrderRef = useRef(t2);
47
+ let t3;
48
+ if ($[1] !== bodyRef || $[2] !== duration || $[3] !== isEnabled) {
49
+ t3 = () => {
50
+ const body = bodyRef.current;
51
+ if (!body) return;
52
+ const rows = Array.from(body.querySelectorAll("tr[data-element=\"Row\"][data-key]:not([data-pinned])"));
53
+ const next = /* @__PURE__ */ new Map();
54
+ for (const row of rows) next.set(row.dataset.key, row.offsetTop);
55
+ const previous = previousRef.current;
56
+ const previousOrder = previousOrderRef.current;
57
+ const nextOrder = rows.map(_temp);
58
+ previousRef.current = next;
59
+ previousOrderRef.current = nextOrder;
60
+ if (!isEnabled || prefersReducedMotion() || !previous) return;
61
+ const stillHere = new Set(nextOrder);
62
+ const before = previousOrder.filter((key) => stillHere.has(key));
63
+ const after = nextOrder.filter((key_0) => previous.has(key_0));
64
+ if (!(before.length !== after.length || before.some((key_1, index) => key_1 !== after[index]))) return;
65
+ const moved = [];
66
+ for (const row_1 of rows) {
67
+ const from = previous.get(row_1.dataset.key);
68
+ if (from === void 0) continue;
69
+ const delta = from - next.get(row_1.dataset.key);
70
+ if (delta !== 0) moved.push({
71
+ row: row_1,
72
+ delta
73
+ });
78
74
  }
75
+ if (!moved.length) return;
76
+ for (const { row: row_2, delta: delta_0 } of moved) {
77
+ row_2.style.transition = "none";
78
+ row_2.style.transform = `translateY(${delta_0}px)`;
79
+ }
80
+ for (const { row: row_3 } of moved) {
81
+ row_3.style.transition = `transform ${duration}ms ease-out`;
82
+ row_3.style.transform = "";
83
+ }
84
+ const clear = () => {
85
+ for (const { row: row_4 } of moved) {
86
+ row_4.style.transition = "";
87
+ row_4.style.transform = "";
88
+ }
89
+ };
90
+ const timer = setTimeout(clear, duration);
91
+ return () => {
92
+ clearTimeout(timer);
93
+ clear();
94
+ };
79
95
  };
80
- const timer = setTimeout(clear, duration);
81
- return () => {
82
- clearTimeout(timer);
83
- clear();
84
- };
85
- });
96
+ $[1] = bodyRef;
97
+ $[2] = duration;
98
+ $[3] = isEnabled;
99
+ $[4] = t3;
100
+ } else t3 = $[4];
101
+ useLayoutEffect(t3);
102
+ }
103
+ function _temp(row_0) {
104
+ return row_0.dataset.key;
86
105
  }
87
106
 
88
107
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"use-row-move-animation.js","names":[],"sources":["../../../../src/components/data/TableBase/use-row-move-animation.ts"],"sourcesContent":["import { useLayoutEffect, useRef } from 'react';\n\nimport type { RefObject } from 'react';\n\n/** Matches ag-grid's row animation closely enough to feel familiar. */\nexport const ROW_MOVE_DURATION = 120;\n\nexport interface UseRowMoveAnimationOptions {\n isEnabled: boolean;\n /** The `<tbody>` the rows live in. */\n bodyRef: RefObject<HTMLTableSectionElement | null>;\n /** @default 120 */\n duration?: number;\n}\n\n/** Matches `DisplayTransition`'s check, which is the kit's existing precedent. */\nfunction prefersReducedMotion() {\n return (\n typeof window !== 'undefined' &&\n Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches)\n );\n}\n\n/**\n * Slides rows to their new positions when the order changes.\n *\n * FLIP: the previous commit's positions are the First, this commit's are the\n * Last, and each row is Inverted with a `translateY` back to where it was and\n * then Played to zero. The DOM is already correct the whole time — only the\n * paint is behind — so a test or a screen reader sees the new order\n * immediately, and nothing has to be delayed or double-rendered.\n *\n * Sorting a table otherwise teleports every row at once, and the eye has no way\n * to follow a particular one to where it went. The whole value is in tracking\n * one row, which is why this animates positions rather than cross-fading.\n *\n * **Only a reorder**, and only rows that were already on screen. If the rows\n * common to both commits are in the same relative order, nothing animates,\n * however much their positions moved — that is a relayout, not a reorder, and\n * it covers the initial mount (widths resolving, the virtualizer measuring, a\n * scrollbar appearing), a container resize, and a filter that only removes\n * rows.\n *\n * Scrolling is not movement either, and that falls out of measuring `offsetTop`\n * rather than viewport coordinates: it is relative to the scroller's content,\n * so it does not change as the content scrolls past.\n */\nexport function useRowMoveAnimation({\n isEnabled,\n bodyRef,\n duration = ROW_MOVE_DURATION,\n}: UseRowMoveAnimationOptions) {\n const previousRef = useRef<Map<string, number> | null>(null);\n const previousOrderRef = useRef<string[]>([]);\n\n // No dependency array: the previous positions have to be captured after every\n // commit, because any of them may turn out to be the one a reorder starts\n // from.\n useLayoutEffect(() => {\n const body = bodyRef.current;\n\n if (!body) return;\n\n const rows = Array.from(\n body.querySelectorAll<HTMLTableRowElement>(\n // Pinned rows are excluded by the selector rather than filtered later:\n // they do not take part in the order, so they never move.\n 'tr[data-element=\"Row\"][data-key]:not([data-pinned])',\n ),\n );\n\n // `offsetTop`, not `getBoundingClientRect()`: it is relative to the\n // scroller, so scrolling does not read as movement. Otherwise every scroll\n // tick would look like a reorder of the whole page.\n const next = new Map<string, number>();\n\n for (const row of rows) next.set(row.dataset.key!, row.offsetTop);\n\n const previous = previousRef.current;\n const previousOrder = previousOrderRef.current;\n const nextOrder = rows.map((row) => row.dataset.key!);\n\n previousRef.current = next;\n previousOrderRef.current = nextOrder;\n\n // Checked per commit rather than once: the setting can change mid-session,\n // and the position bookkeeping above must keep running either way so the\n // animation is correct the moment it is turned back on.\n if (!isEnabled || prefersReducedMotion() || !previous) return;\n\n // Animate a REORDER, never a relayout.\n //\n // Positions shift for all sorts of reasons that are not a row moving: the\n // column widths resolving after the first measure, the virtualizer taking\n // its measurements, a scrollbar appearing, a font landing, the container\n // being resized. Every one of those happens on the second commit of a\n // normal mount — so keying off \"an offset changed\" animated the table into\n // existence on load, which is exactly what a load should not do.\n //\n // Comparing the order of the rows common to both commits answers the real\n // question. A relayout leaves it identical; a sort does not.\n const stillHere = new Set(nextOrder);\n const before = previousOrder.filter((key) => stillHere.has(key));\n const after = nextOrder.filter((key) => previous.has(key));\n const isReorder =\n before.length !== after.length ||\n before.some((key, index) => key !== after[index]);\n\n if (!isReorder) return;\n\n const moved: { row: HTMLTableRowElement; delta: number }[] = [];\n\n for (const row of rows) {\n const from = previous.get(row.dataset.key!);\n\n // A row that was not here before has nowhere to come from. Skipped rather\n // than bailing on the whole batch: a virtualized window swaps some of its\n // rows on every re-sort, and refusing to animate unless ALL of them are\n // familiar means a virtualized grid — most result grids — never animates\n // at all.\n if (from === undefined) continue;\n\n const delta = from - next.get(row.dataset.key!)!;\n\n if (delta !== 0) moved.push({ row, delta });\n }\n\n if (!moved.length) return;\n\n // Invert: put every moved row back where it was, with transitions off so\n // this jump is not itself animated.\n for (const { row, delta } of moved) {\n row.style.transition = 'none';\n row.style.transform = `translateY(${delta}px)`;\n }\n\n // Flush the inverted state into layout, so the browser has something to\n // animate FROM. A forced reflow rather than `requestAnimationFrame`,\n // deliberately: rAF does not fire in a hidden tab, and a sort that lands\n // while the tab is in the background would leave every row frozen at its\n // old position until the next reorder. One reflow, once per animation.\n void body.offsetHeight;\n\n // Play.\n for (const { row } of moved) {\n row.style.transition = `transform ${duration}ms ease-out`;\n row.style.transform = '';\n }\n\n // Clear on arrival. A `transition` left inline would go on to animate\n // transforms this hook never set — a dragged row, for one.\n //\n // A timer rather than `transitionend`, for the same reason the invert does\n // not use `requestAnimationFrame`: in a hidden tab the transition never\n // runs, so the event never fires and every animated row keeps its inline\n // `transition` for the rest of the session. The duration is known exactly,\n // so there is nothing to wait to be told.\n const clear = () => {\n for (const { row } of moved) {\n row.style.transition = '';\n row.style.transform = '';\n }\n };\n const timer = setTimeout(clear, duration);\n\n return () => {\n // A reorder landing mid-animation starts over from wherever the rows are,\n // so nothing may be left behind.\n clearTimeout(timer);\n clear();\n };\n });\n}\n"],"mappings":";;;;;AAKA,MAAa,oBAAoB;;AAWjC,SAAS,uBAAuB;AAC9B,QACE,OAAO,WAAW,eAClB,QAAQ,OAAO,aAAa,mCAAmC,EAAE,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B7E,SAAgB,oBAAoB,EAClC,WACA,SACA,WAAW,qBACkB;CAC7B,MAAM,cAAc,OAAmC,KAAK;CAC5D,MAAM,mBAAmB,OAAiB,EAAE,CAAC;AAK7C,uBAAsB;EACpB,MAAM,OAAO,QAAQ;AAErB,MAAI,CAAC,KAAM;EAEX,MAAM,OAAO,MAAM,KACjB,KAAK,iBAGH,wDACD,CACF;EAKD,MAAM,uBAAO,IAAI,KAAqB;AAEtC,OAAK,MAAM,OAAO,KAAM,MAAK,IAAI,IAAI,QAAQ,KAAM,IAAI,UAAU;EAEjE,MAAM,WAAW,YAAY;EAC7B,MAAM,gBAAgB,iBAAiB;EACvC,MAAM,YAAY,KAAK,KAAK,QAAQ,IAAI,QAAQ,IAAK;AAErD,cAAY,UAAU;AACtB,mBAAiB,UAAU;AAK3B,MAAI,CAAC,aAAa,sBAAsB,IAAI,CAAC,SAAU;EAavD,MAAM,YAAY,IAAI,IAAI,UAAU;EACpC,MAAM,SAAS,cAAc,QAAQ,QAAQ,UAAU,IAAI,IAAI,CAAC;EAChE,MAAM,QAAQ,UAAU,QAAQ,QAAQ,SAAS,IAAI,IAAI,CAAC;AAK1D,MAAI,EAHF,OAAO,WAAW,MAAM,UACxB,OAAO,MAAM,KAAK,UAAU,QAAQ,MAAM,OAAO,EAEnC;EAEhB,MAAM,QAAuD,EAAE;AAE/D,OAAK,MAAM,OAAO,MAAM;GACtB,MAAM,OAAO,SAAS,IAAI,IAAI,QAAQ,IAAK;AAO3C,OAAI,SAAS,OAAW;GAExB,MAAM,QAAQ,OAAO,KAAK,IAAI,IAAI,QAAQ,IAAK;AAE/C,OAAI,UAAU,EAAG,OAAM,KAAK;IAAE;IAAK;IAAO,CAAC;;AAG7C,MAAI,CAAC,MAAM,OAAQ;AAInB,OAAK,MAAM,EAAE,KAAK,WAAW,OAAO;AAClC,OAAI,MAAM,aAAa;AACvB,OAAI,MAAM,YAAY,cAAc,MAAM;;AAQ5C,EAAK,KAAK;AAGV,OAAK,MAAM,EAAE,SAAS,OAAO;AAC3B,OAAI,MAAM,aAAa,aAAa,SAAS;AAC7C,OAAI,MAAM,YAAY;;EAWxB,MAAM,cAAc;AAClB,QAAK,MAAM,EAAE,SAAS,OAAO;AAC3B,QAAI,MAAM,aAAa;AACvB,QAAI,MAAM,YAAY;;;EAG1B,MAAM,QAAQ,WAAW,OAAO,SAAS;AAEzC,eAAa;AAGX,gBAAa,MAAM;AACnB,UAAO;;GAET"}
1
+ {"version":3,"file":"use-row-move-animation.js","names":["useLayoutEffect","useRef","RefObject","ROW_MOVE_DURATION","UseRowMoveAnimationOptions","isEnabled","bodyRef","HTMLTableSectionElement","duration","prefersReducedMotion","window","Boolean","matchMedia","matches","useRowMoveAnimation","t0","$","_c","t1","undefined","previousRef","t2","Symbol","for","previousOrderRef","t3","body","current","rows","Array","from","querySelectorAll","next","Map","row","set","dataset","key","offsetTop","previous","previousOrder","nextOrder","map","_temp","stillHere","Set","before","filter","has","after","key_0","isReorder","length","some","key_1","index","moved","row_1","get","delta","push","row_2","delta_0","style","transition","transform","row_3","clear","row_4","timer","setTimeout","clearTimeout","row_0"],"sources":["../../../../src/components/data/TableBase/use-row-move-animation.ts"],"sourcesContent":["import { useLayoutEffect, useRef } from 'react';\n\nimport type { RefObject } from 'react';\n\n/** Matches ag-grid's row animation closely enough to feel familiar. */\nexport const ROW_MOVE_DURATION = 120;\n\nexport interface UseRowMoveAnimationOptions {\n isEnabled: boolean;\n /** The `<tbody>` the rows live in. */\n bodyRef: RefObject<HTMLTableSectionElement | null>;\n /** @default 120 */\n duration?: number;\n}\n\n/** Matches `DisplayTransition`'s check, which is the kit's existing precedent. */\nfunction prefersReducedMotion() {\n return (\n typeof window !== 'undefined' &&\n Boolean(window.matchMedia?.('(prefers-reduced-motion: reduce)')?.matches)\n );\n}\n\n/**\n * Slides rows to their new positions when the order changes.\n *\n * FLIP: the previous commit's positions are the First, this commit's are the\n * Last, and each row is Inverted with a `translateY` back to where it was and\n * then Played to zero. The DOM is already correct the whole time — only the\n * paint is behind — so a test or a screen reader sees the new order\n * immediately, and nothing has to be delayed or double-rendered.\n *\n * Sorting a table otherwise teleports every row at once, and the eye has no way\n * to follow a particular one to where it went. The whole value is in tracking\n * one row, which is why this animates positions rather than cross-fading.\n *\n * **Only a reorder**, and only rows that were already on screen. If the rows\n * common to both commits are in the same relative order, nothing animates,\n * however much their positions moved — that is a relayout, not a reorder, and\n * it covers the initial mount (widths resolving, the virtualizer measuring, a\n * scrollbar appearing), a container resize, and a filter that only removes\n * rows.\n *\n * Scrolling is not movement either, and that falls out of measuring `offsetTop`\n * rather than viewport coordinates: it is relative to the scroller's content,\n * so it does not change as the content scrolls past.\n */\nexport function useRowMoveAnimation({\n isEnabled,\n bodyRef,\n duration = ROW_MOVE_DURATION,\n}: UseRowMoveAnimationOptions) {\n const previousRef = useRef<Map<string, number> | null>(null);\n const previousOrderRef = useRef<string[]>([]);\n\n // No dependency array: the previous positions have to be captured after every\n // commit, because any of them may turn out to be the one a reorder starts\n // from.\n useLayoutEffect(() => {\n const body = bodyRef.current;\n\n if (!body) return;\n\n const rows = Array.from(\n body.querySelectorAll<HTMLTableRowElement>(\n // Pinned rows are excluded by the selector rather than filtered later:\n // they do not take part in the order, so they never move.\n 'tr[data-element=\"Row\"][data-key]:not([data-pinned])',\n ),\n );\n\n // `offsetTop`, not `getBoundingClientRect()`: it is relative to the\n // scroller, so scrolling does not read as movement. Otherwise every scroll\n // tick would look like a reorder of the whole page.\n const next = new Map<string, number>();\n\n for (const row of rows) next.set(row.dataset.key!, row.offsetTop);\n\n const previous = previousRef.current;\n const previousOrder = previousOrderRef.current;\n const nextOrder = rows.map((row) => row.dataset.key!);\n\n previousRef.current = next;\n previousOrderRef.current = nextOrder;\n\n // Checked per commit rather than once: the setting can change mid-session,\n // and the position bookkeeping above must keep running either way so the\n // animation is correct the moment it is turned back on.\n if (!isEnabled || prefersReducedMotion() || !previous) return;\n\n // Animate a REORDER, never a relayout.\n //\n // Positions shift for all sorts of reasons that are not a row moving: the\n // column widths resolving after the first measure, the virtualizer taking\n // its measurements, a scrollbar appearing, a font landing, the container\n // being resized. Every one of those happens on the second commit of a\n // normal mount — so keying off \"an offset changed\" animated the table into\n // existence on load, which is exactly what a load should not do.\n //\n // Comparing the order of the rows common to both commits answers the real\n // question. A relayout leaves it identical; a sort does not.\n const stillHere = new Set(nextOrder);\n const before = previousOrder.filter((key) => stillHere.has(key));\n const after = nextOrder.filter((key) => previous.has(key));\n const isReorder =\n before.length !== after.length ||\n before.some((key, index) => key !== after[index]);\n\n if (!isReorder) return;\n\n const moved: { row: HTMLTableRowElement; delta: number }[] = [];\n\n for (const row of rows) {\n const from = previous.get(row.dataset.key!);\n\n // A row that was not here before has nowhere to come from. Skipped rather\n // than bailing on the whole batch: a virtualized window swaps some of its\n // rows on every re-sort, and refusing to animate unless ALL of them are\n // familiar means a virtualized grid — most result grids — never animates\n // at all.\n if (from === undefined) continue;\n\n const delta = from - next.get(row.dataset.key!)!;\n\n if (delta !== 0) moved.push({ row, delta });\n }\n\n if (!moved.length) return;\n\n // Invert: put every moved row back where it was, with transitions off so\n // this jump is not itself animated.\n for (const { row, delta } of moved) {\n row.style.transition = 'none';\n row.style.transform = `translateY(${delta}px)`;\n }\n\n // Flush the inverted state into layout, so the browser has something to\n // animate FROM. A forced reflow rather than `requestAnimationFrame`,\n // deliberately: rAF does not fire in a hidden tab, and a sort that lands\n // while the tab is in the background would leave every row frozen at its\n // old position until the next reorder. One reflow, once per animation.\n void body.offsetHeight;\n\n // Play.\n for (const { row } of moved) {\n row.style.transition = `transform ${duration}ms ease-out`;\n row.style.transform = '';\n }\n\n // Clear on arrival. A `transition` left inline would go on to animate\n // transforms this hook never set — a dragged row, for one.\n //\n // A timer rather than `transitionend`, for the same reason the invert does\n // not use `requestAnimationFrame`: in a hidden tab the transition never\n // runs, so the event never fires and every animated row keeps its inline\n // `transition` for the rest of the session. The duration is known exactly,\n // so there is nothing to wait to be told.\n const clear = () => {\n for (const { row } of moved) {\n row.style.transition = '';\n row.style.transform = '';\n }\n };\n const timer = setTimeout(clear, duration);\n\n return () => {\n // A reorder landing mid-animation starts over from wherever the rows are,\n // so nothing may be left behind.\n clearTimeout(timer);\n clear();\n };\n });\n}\n"],"mappings":";;;;;;AAKA,MAAaG,oBAAoB;;AAWjC,SAASM,uBAAuB;AAC9B,QACE,OAAOC,WAAW,eAClBC,QAAQD,OAAOE,aAAa,mCAAmC,EAAEC,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;AA4B7E,SAAOC,oBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAA6B,MAAA,EAAAZ,WAAAC,SAAAE,UAAAU,OAAAH;CAGlC,MAAAP,WAAAU,OAAAC,SAAAhB,oBAAAe;CAEA,MAAAE,cAAoBnB,OAAmC,KAAK;CAAC,IAAAoB;AAAA,KAAAL,EAAA,OAAAM,OAAAC,IAAA,4BAAA,EAAA;AACnBF,OAAA,EAAE;AAAAL,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAA5C,MAAAQ,mBAAyBvB,OAAiBoB,GAAG;CAAC,IAAAI;AAAA,KAAAT,EAAA,OAAAV,WAAAU,EAAA,OAAAR,YAAAQ,EAAA,OAAAX,WAAA;AAK9BoB,aAAA;GACd,MAAAC,OAAapB,QAAOqB;AAEpB,OAAI,CAACD,KAAI;GAET,MAAAE,OAAaC,MAAKC,KAChBJ,KAAIK,iBAGF,wDAEJ,CAAC;GAKD,MAAAC,uBAAa,IAAIC,KAAqB;AAEtC,QAAK,MAAAC,OAAaN,KAAMI,MAAIG,IAAKD,IAAGE,QAAQC,KAAOH,IAAGI,UAAW;GAEjE,MAAAC,WAAiBnB,YAAWO;GAC5B,MAAAa,gBAAsBhB,iBAAgBG;GACtC,MAAAc,YAAkBb,KAAIc,IAAKC,MAA0B;AAErDvB,eAAWO,UAAWK;AACtBR,oBAAgBG,UAAWc;AAK3B,OAAI,CAACpC,aAAaI,sBAAmC,IAAjD,CAAyC8B,SAAQ;GAarD,MAAAK,YAAkB,IAAIC,IAAIJ,UAAU;GACpC,MAAAK,SAAeN,cAAaO,QAAQV,QAASO,UAASI,IAAKX,IAAI,CAAC;GAChE,MAAAY,QAAcR,UAASM,QAAQG,UAASX,SAAQS,IAAKX,MAAI,CAAC;AAK1D,OAAI,EAHFS,OAAMM,WAAYH,MAAKG,UACvBN,OAAMO,MAAMC,OAAAC,UAAgBlB,UAAQY,MAAMM,OAAO,EAErC;GAEd,MAAAC,QAA6D,EAAE;AAE/D,QAAK,MAAAC,SAAa7B,MAAI;IACpB,MAAAE,OAAaS,SAAQmB,IAAKxB,MAAGE,QAAQC,IAAM;AAO3C,QAAIP,SAASX,OAAW;IAExB,MAAAwC,QAAc7B,OAAOE,KAAI0B,IAAKxB,MAAGE,QAAQC,IAAO;AAEhD,QAAIsB,UAAU,EAAGH,OAAKI,KAAM;KAAA1B,KAAEA;KAAGyB;KAAS,CAAC;;AAG7C,OAAI,CAACH,MAAKJ,OAAO;AAIjB,QAAK,MAAA,EAAAlB,KAAA2B,OAAAF,OAAAG,aAAwBN,OAAK;AAChCtB,UAAG6B,MAAMC,aAAc;AACvB9B,UAAG6B,MAAME,YAAa,cAAcN,QAAK;;AAW3C,QAAK,MAAA,EAAAzB,KAAAgC,WAAiBV,OAAK;AACzBtB,UAAG6B,MAAMC,aAAc,aAAaxD,SAAQ;AAC5C0B,UAAG6B,MAAME,YAAa;;GAWxB,MAAAE,cAAc;AACZ,SAAK,MAAA,EAAAjC,KAAAkC,WAAiBZ,OAAK;AACzBtB,WAAG6B,MAAMC,aAAc;AACvB9B,WAAG6B,MAAME,YAAa;;;GAG1B,MAAAI,QAAcC,WAAWH,OAAO3D,SAAS;AAAC,gBAEnC;AAGL+D,iBAAaF,MAAM;AACnBF,WAAO;;;AAEVnD,IAAA,KAAAV;AAAAU,IAAA,KAAAR;AAAAQ,IAAA,KAAAX;AAAAW,IAAA,KAAAS;OAAAA,MAAAT,EAAA;AAjHDhB,iBAAgByB,GAiHd;;AA5HG,SAAAkB,MAAA6B,OAAA;AAAA,QAiCiCtC,MAAGE,QAAQC"}
@@ -1,4 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.182.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.183.0 | Cube Dev Team */
2
+ import { c } from "react-compiler-runtime";
2
3
  import { useLayoutEffect, useState } from "react";
3
4
 
4
5
  //#region src/components/data/TableBase/use-scrollability.ts
@@ -21,26 +22,39 @@ const NONE = {
21
22
  * grew past its container.
22
23
  */
23
24
  function useScrollability(element) {
25
+ const $ = c(3);
24
26
  const [state, setState] = useState(NONE);
25
- useLayoutEffect(() => {
26
- if (!element || !(element instanceof Element)) {
27
- setState(NONE);
28
- return;
29
- }
30
- const measure = () => {
31
- const next = {
32
- x: element.scrollWidth - element.clientWidth > 1,
33
- y: element.scrollHeight - element.clientHeight > 1
27
+ let t0;
28
+ let t1;
29
+ if ($[0] !== element) {
30
+ t0 = () => {
31
+ if (!element || !(element instanceof Element)) {
32
+ setState(NONE);
33
+ return;
34
+ }
35
+ const measure = () => {
36
+ const next = {
37
+ x: element.scrollWidth - element.clientWidth > 1,
38
+ y: element.scrollHeight - element.clientHeight > 1
39
+ };
40
+ setState((current) => current.x === next.x && current.y === next.y ? current : next);
34
41
  };
35
- setState((current) => current.x === next.x && current.y === next.y ? current : next);
42
+ measure();
43
+ const observer = new ResizeObserver(measure);
44
+ observer.observe(element);
45
+ const content = element.firstElementChild;
46
+ if (content) observer.observe(content);
47
+ return () => observer.disconnect();
36
48
  };
37
- measure();
38
- const observer = new ResizeObserver(measure);
39
- observer.observe(element);
40
- const content = element.firstElementChild;
41
- if (content) observer.observe(content);
42
- return () => observer.disconnect();
43
- }, [element]);
49
+ t1 = [element];
50
+ $[0] = element;
51
+ $[1] = t0;
52
+ $[2] = t1;
53
+ } else {
54
+ t0 = $[1];
55
+ t1 = $[2];
56
+ }
57
+ useLayoutEffect(t0, t1);
44
58
  return state;
45
59
  }
46
60