@cube-dev/ui-kit 0.165.0 → 0.167.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 (664) hide show
  1. package/README.md +4 -7
  2. package/dist/CHANGELOG.md +48 -0
  3. package/dist/README.md +4 -7
  4. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  5. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  6. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  7. package/dist/_internal/hooks/use-event.js +1 -1
  8. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  9. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  10. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  11. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/dist/_internal/hooks/use-warn.js +1 -1
  13. package/dist/components/Block.js +1 -1
  14. package/dist/components/CollectionItem.js +1 -1
  15. package/dist/components/GlobalStyles.js +4 -4
  16. package/dist/components/GlobalStyles.js.map +1 -1
  17. package/dist/components/GridProvider.js +1 -1
  18. package/dist/components/HiddenInput.js +1 -1
  19. package/dist/components/Root.js +1 -2
  20. package/dist/components/Root.js.map +1 -1
  21. package/dist/components/actions/Action/Action.js +1 -1
  22. package/dist/components/actions/Banner/Banner.js +1 -1
  23. package/dist/components/actions/Button/Button.d.ts +1 -0
  24. package/dist/components/actions/Button/Button.js +1 -1
  25. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  27. package/dist/components/actions/ButtonSplit/context.js +1 -1
  28. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  29. package/dist/components/actions/CommandMenu/styled.js +1 -1
  30. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  31. package/dist/components/actions/ItemActionContext.js +1 -1
  32. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  33. package/dist/components/actions/Link/Link.js +1 -1
  34. package/dist/components/actions/Menu/Menu.js +1 -1
  35. package/dist/components/actions/Menu/MenuItem.js +1 -1
  36. package/dist/components/actions/Menu/MenuSection.js +1 -1
  37. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  38. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  39. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  40. package/dist/components/actions/Menu/context.js +1 -1
  41. package/dist/components/actions/Menu/styled.js +1 -1
  42. package/dist/components/actions/index.js +1 -1
  43. package/dist/components/actions/use-action.js +1 -1
  44. package/dist/components/actions/use-anchored-menu.d.ts +7 -3
  45. package/dist/components/actions/use-anchored-menu.js +17 -12
  46. package/dist/components/actions/use-anchored-menu.js.map +1 -1
  47. package/dist/components/actions/use-context-menu.d.ts +6 -3
  48. package/dist/components/actions/use-context-menu.js +25 -13
  49. package/dist/components/actions/use-context-menu.js.map +1 -1
  50. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  51. package/dist/components/content/Alert/Alert.js +1 -1
  52. package/dist/components/content/Alert/use-alert.js +1 -1
  53. package/dist/components/content/Avatar/Avatar.js +1 -1
  54. package/dist/components/content/Badge/Badge.js +1 -1
  55. package/dist/components/content/Card/Card.js +1 -1
  56. package/dist/components/content/Content.js +1 -1
  57. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  58. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  59. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  60. package/dist/components/content/Divider.js +1 -1
  61. package/dist/components/content/Footer.js +1 -1
  62. package/dist/components/content/Header.js +1 -1
  63. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  64. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  65. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  66. package/dist/components/content/Item/Item.js +1 -1
  67. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  68. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  69. package/dist/components/content/Layout/GridLayout.js +1 -1
  70. package/dist/components/content/Layout/Layout.js +1 -1
  71. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  72. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  73. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  74. package/dist/components/content/Layout/LayoutContent.js +1 -1
  75. package/dist/components/content/Layout/LayoutContext.js +1 -1
  76. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  77. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  78. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  79. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  80. package/dist/components/content/Layout/LayoutPane.js +1 -1
  81. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  82. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  83. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  84. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  85. package/dist/components/content/Layout/index.js +1 -1
  86. package/dist/components/content/Layout/utils.js +1 -1
  87. package/dist/components/content/Paragraph.js +1 -1
  88. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  89. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  90. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  91. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  92. package/dist/components/content/Result/Result.js +1 -1
  93. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  94. package/dist/components/content/Tag/Tag.js +1 -1
  95. package/dist/components/content/Text.js +1 -1
  96. package/dist/components/content/TextItem/TextItem.js +1 -1
  97. package/dist/components/content/Title.js +1 -1
  98. package/dist/components/content/Tree/Tree.js +1 -1
  99. package/dist/components/content/Tree/TreeNode.js +1 -1
  100. package/dist/components/content/Tree/styled.js +1 -1
  101. package/dist/components/content/Tree/tree-index.js +1 -1
  102. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  103. package/dist/components/content/Tree/use-load-data.js +1 -1
  104. package/dist/components/content/highlightText.js +1 -1
  105. package/dist/components/content/use-auto-tooltip.js +1 -1
  106. package/dist/components/data/DataTable/DataTable.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  110. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  111. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  112. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  113. package/dist/components/data/TableBase/RowCollection.js +1 -1
  114. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  115. package/dist/components/data/TableBase/TableRow.js +1 -1
  116. package/dist/components/data/TableBase/TableView.js +1 -1
  117. package/dist/components/data/TableBase/column-menu.js +1 -1
  118. package/dist/components/data/TableBase/column-tint.js +1 -1
  119. package/dist/components/data/TableBase/row-menu.js +1 -1
  120. package/dist/components/data/TableBase/styled.d.ts +2 -1
  121. package/dist/components/data/TableBase/styled.js +1 -1
  122. package/dist/components/data/TableBase/table-tree.js +1 -1
  123. package/dist/components/data/TableBase/types.js +1 -1
  124. package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
  125. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  126. package/dist/components/data/TableBase/use-column-order.js +1 -1
  127. package/dist/components/data/TableBase/use-container-width.js +1 -1
  128. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  129. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  130. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  131. package/dist/components/data/TableBase/use-table-search.js +1 -1
  132. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  133. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  134. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  135. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  136. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  137. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  138. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  139. package/dist/components/fields/Checkbox/context.js +1 -1
  140. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  141. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  142. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  143. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  144. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  145. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  146. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  147. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  148. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  149. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  150. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  151. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  152. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  153. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  154. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  155. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  156. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  157. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  158. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  159. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  160. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  161. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  162. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  163. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  164. package/dist/components/fields/DatePicker/period.js +1 -1
  165. package/dist/components/fields/DatePicker/props.js +1 -1
  166. package/dist/components/fields/DatePicker/utils.js +1 -1
  167. package/dist/components/fields/FileInput/FileInput.js +1 -1
  168. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  169. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  170. package/dist/components/fields/Input/Input.js +1 -1
  171. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  172. package/dist/components/fields/ListBox/ListBox.js +1 -1
  173. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  174. package/dist/components/fields/ListBoxPopover/index.d.ts +1 -0
  175. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  176. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
  177. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  178. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  179. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  180. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  181. package/dist/components/fields/Picker/Picker.js +1 -1
  182. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  183. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  184. package/dist/components/fields/RadioGroup/context.js +1 -1
  185. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  186. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  187. package/dist/components/fields/Select/Select.js +1 -1
  188. package/dist/components/fields/Slider/Gradation.js +1 -1
  189. package/dist/components/fields/Slider/HueSlider.js +1 -1
  190. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  191. package/dist/components/fields/Slider/Slider.js +1 -1
  192. package/dist/components/fields/Slider/SliderBase.js +1 -1
  193. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  194. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  195. package/dist/components/fields/Slider/elements.js +1 -1
  196. package/dist/components/fields/Slider/index.js +1 -1
  197. package/dist/components/fields/Switch/Switch.js +1 -1
  198. package/dist/components/fields/TextArea/TextArea.js +1 -1
  199. package/dist/components/fields/TextInput/TextInput.js +1 -1
  200. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  201. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  202. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  203. package/dist/components/fields/color/ColorPanel.js +1 -1
  204. package/dist/components/fields/color/channels.js +1 -1
  205. package/dist/components/fields/color/color.js +1 -1
  206. package/dist/components/fields/color/context.js +1 -1
  207. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  208. package/dist/components/form/Form/Field.js +1 -1
  209. package/dist/components/form/Form/Form.js +1 -1
  210. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  211. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  212. package/dist/components/form/Form/SubmitError.js +1 -1
  213. package/dist/components/form/Form/index.js +1 -1
  214. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  215. package/dist/components/form/Form/use-field/use-field.js +1 -1
  216. package/dist/components/form/Form/use-form.js +1 -1
  217. package/dist/components/form/Form/validation.js +1 -1
  218. package/dist/components/form/Label.js +1 -1
  219. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  220. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  221. package/dist/components/form/validation/use-validation-props.js +1 -1
  222. package/dist/components/form/wrapper.js +1 -1
  223. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  224. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  225. package/dist/components/layout/Board/Board.d.ts +33 -7
  226. package/dist/components/layout/Board/Board.js +29 -11
  227. package/dist/components/layout/Board/Board.js.map +1 -1
  228. package/dist/components/layout/Board/BoardProvider.js +1 -1
  229. package/dist/components/layout/Board/BoardResponsive.d.ts +6 -3
  230. package/dist/components/layout/Board/BoardResponsive.js +3 -3
  231. package/dist/components/layout/Board/BoardResponsive.js.map +1 -1
  232. package/dist/components/layout/Board/Widget.d.ts +38 -1
  233. package/dist/components/layout/Board/Widget.js +6 -2
  234. package/dist/components/layout/Board/Widget.js.map +1 -1
  235. package/dist/components/layout/Board/WidgetHost.js +69 -18
  236. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  237. package/dist/components/layout/Board/board-context.js +1 -1
  238. package/dist/components/layout/Board/board-context.js.map +1 -1
  239. package/dist/components/layout/Board/board-store.js +2 -2
  240. package/dist/components/layout/Board/board-store.js.map +1 -1
  241. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  242. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  243. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  244. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  245. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  246. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  247. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  248. package/dist/components/layout/Board/grid-core/placement.d.ts +58 -0
  249. package/dist/components/layout/Board/grid-core/placement.js +153 -0
  250. package/dist/components/layout/Board/grid-core/placement.js.map +1 -0
  251. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  252. package/dist/components/layout/Board/index.d.ts +3 -1
  253. package/dist/components/layout/Board/index.js +2 -1
  254. package/dist/components/layout/Board/index.js.map +1 -1
  255. package/dist/components/layout/Board/responsive-utils.js +1 -1
  256. package/dist/components/layout/Board/use-board-layout.d.ts +26 -0
  257. package/dist/components/layout/Board/use-board-layout.js +4 -4
  258. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  259. package/dist/components/layout/Board/use-board-registry.js +5 -56
  260. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  261. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  262. package/dist/components/layout/Board/use-board-selection.js +1 -1
  263. package/dist/components/layout/Flex.js +1 -1
  264. package/dist/components/layout/Flow.js +1 -1
  265. package/dist/components/layout/Grid.js +1 -1
  266. package/dist/components/layout/Panel.js +1 -1
  267. package/dist/components/layout/Prefix.js +1 -1
  268. package/dist/components/layout/ResizablePanel.js +1 -1
  269. package/dist/components/layout/Space.js +1 -1
  270. package/dist/components/layout/Suffix.js +1 -1
  271. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  272. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  273. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  274. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  275. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  276. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  277. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  278. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  279. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  280. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  281. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  282. package/dist/components/navigation/Tabs/styled.js +1 -1
  283. package/dist/components/navigation/Tabs/types.js +1 -1
  284. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  285. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  286. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  287. package/dist/components/other/Calendar/Calendar.js +1 -1
  288. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  289. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  290. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  291. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  292. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  293. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  294. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  295. package/dist/components/other/Calendar/styled.js +1 -1
  296. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  297. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  298. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  299. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  300. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  301. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  302. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  303. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  304. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  305. package/dist/components/overlays/Dialog/context.js +1 -1
  306. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  307. package/dist/components/overlays/Modal/Modal.d.ts +2 -1
  308. package/dist/components/overlays/Modal/Modal.js +1 -1
  309. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  310. package/dist/components/overlays/Modal/Overlay.d.ts +1 -0
  311. package/dist/components/overlays/Modal/Overlay.js +1 -1
  312. package/dist/components/overlays/Modal/Popover.js +1 -1
  313. package/dist/components/overlays/Modal/Tray.js +1 -1
  314. package/dist/components/overlays/Modal/Underlay.js +1 -1
  315. package/dist/components/overlays/Modal/types.d.ts +1 -0
  316. package/dist/components/overlays/Notifications/Notification.js +1 -1
  317. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  318. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  319. package/dist/components/overlays/Notifications/NotificationContext.d.ts +2 -0
  320. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  321. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  322. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  323. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  324. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  325. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  326. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  327. package/dist/components/overlays/Notifications/index.js +1 -1
  328. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  329. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  330. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  331. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  332. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  333. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  334. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  335. package/dist/components/overlays/Toast/index.js +1 -1
  336. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  337. package/dist/components/overlays/Toast/useToast.js +1 -1
  338. package/dist/components/overlays/Tooltip/Tooltip.js +2 -1
  339. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  340. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  341. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  342. package/dist/components/overlays/Tooltip/context.js +1 -1
  343. package/dist/components/portal/Portal.js +1 -1
  344. package/dist/components/portal/PortalProvider.d.ts +2 -0
  345. package/dist/components/portal/PortalProvider.js +1 -1
  346. package/dist/components/portal/index.d.ts +1 -0
  347. package/dist/components/portal/usePortal.js +1 -1
  348. package/dist/components/shared/DraggableCollection.js +1 -1
  349. package/dist/components/shared/InvalidIcon.js +1 -1
  350. package/dist/components/shared/ValidIcon.js +1 -1
  351. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  352. package/dist/components/status/Spin/Cube.js +1 -1
  353. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  354. package/dist/components/status/Spin/Spin.js +1 -1
  355. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  356. package/dist/data/item-themes.js +1 -1
  357. package/dist/data/themes.js +1 -1
  358. package/dist/eslint-plugin/defaults.generated.js +25 -1
  359. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  360. package/dist/eslint-plugin/index.js +1 -1
  361. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  362. package/dist/i18n/I18nProvider.js +1 -1
  363. package/dist/i18n/createFormatter.js +1 -1
  364. package/dist/i18n/index.js +1 -1
  365. package/dist/i18n/instance.js +1 -1
  366. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  367. package/dist/i18n/locales/en-US/uikit.js +1 -1
  368. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  369. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  370. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  371. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  372. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  373. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  374. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  375. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  376. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  377. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  378. package/dist/i18n/locales.js +1 -1
  379. package/dist/i18n/useFormatter.js +1 -1
  380. package/dist/i18n/useI18n.js +1 -1
  381. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  382. package/dist/icons/AdjustmentsIcon.js +1 -1
  383. package/dist/icons/AiIcon.js +1 -1
  384. package/dist/icons/AreaChartIcon.js +1 -1
  385. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  386. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  387. package/dist/icons/BackwardIcon.js +1 -1
  388. package/dist/icons/BarChartIcon.js +1 -1
  389. package/dist/icons/BellFilledIcon.js +1 -1
  390. package/dist/icons/BellIcon.js +1 -1
  391. package/dist/icons/BooleanIcon.js +1 -1
  392. package/dist/icons/CalendarEditIcon.js +1 -1
  393. package/dist/icons/CalendarIcon.js +1 -1
  394. package/dist/icons/CaretDownIcon.js +1 -1
  395. package/dist/icons/CaretUpIcon.js +1 -1
  396. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  397. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  398. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  399. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  400. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  401. package/dist/icons/ChartBarLineIcon.js +1 -1
  402. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  403. package/dist/icons/ChartBarStackedIcon.js +1 -1
  404. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  405. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  406. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  407. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  408. package/dist/icons/ChartBubbleIcon.js +1 -1
  409. package/dist/icons/ChartDonut2Icon.js +1 -1
  410. package/dist/icons/ChartFunnelIcon.js +1 -1
  411. package/dist/icons/ChartHeatmapIcon.js +1 -1
  412. package/dist/icons/ChartKPIIcon.js +1 -1
  413. package/dist/icons/ChartPie2Icon.js +1 -1
  414. package/dist/icons/ChartScatterIcon.js +1 -1
  415. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  416. package/dist/icons/CheckCircleIcon.js +1 -1
  417. package/dist/icons/CheckIcon.js +1 -1
  418. package/dist/icons/CircleFilledIcon.js +1 -1
  419. package/dist/icons/ClearIcon.js +1 -1
  420. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  421. package/dist/icons/CloseCircleIcon.js +1 -1
  422. package/dist/icons/CloseIcon.js +1 -1
  423. package/dist/icons/CodeIcon.js +1 -1
  424. package/dist/icons/ColumnTotalIcon.js +1 -1
  425. package/dist/icons/CopyIcon.js +1 -1
  426. package/dist/icons/CountIcon.js +1 -1
  427. package/dist/icons/CubeIcon.js +1 -1
  428. package/dist/icons/CubePauseIcon.js +1 -1
  429. package/dist/icons/CubePlayIcon.js +1 -1
  430. package/dist/icons/CurrencyDollarIcon.js +1 -1
  431. package/dist/icons/DangerIcon.js +1 -1
  432. package/dist/icons/DashboardIcon.js +1 -1
  433. package/dist/icons/DatabaseIcon.js +1 -1
  434. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  435. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  436. package/dist/icons/DirectionIcon.js +1 -1
  437. package/dist/icons/DonutIcon.js +1 -1
  438. package/dist/icons/DownIcon.js +1 -1
  439. package/dist/icons/EditIcon.js +1 -1
  440. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  441. package/dist/icons/ExclamationCircleIcon.js +1 -1
  442. package/dist/icons/ExclamationIcon.js +1 -1
  443. package/dist/icons/EyeIcon.js +1 -1
  444. package/dist/icons/EyeInvisibleIcon.js +1 -1
  445. package/dist/icons/FilterIcon.js +1 -1
  446. package/dist/icons/FolderFilledIcon.js +1 -1
  447. package/dist/icons/FolderIcon.js +1 -1
  448. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  449. package/dist/icons/FolderOpenIcon.js +1 -1
  450. package/dist/icons/ForwardIcon.js +1 -1
  451. package/dist/icons/GripVerticalIcon.js +1 -1
  452. package/dist/icons/HierarchyIcon.js +1 -1
  453. package/dist/icons/HierarchyOpenIcon.js +1 -1
  454. package/dist/icons/Icon.js +1 -1
  455. package/dist/icons/InfoCircleIcon.js +1 -1
  456. package/dist/icons/InfoIcon.js +1 -1
  457. package/dist/icons/KeyIcon.js +1 -1
  458. package/dist/icons/LeftIcon.js +1 -1
  459. package/dist/icons/LineChartIcon.js +1 -1
  460. package/dist/icons/LoadingIcon.js +1 -1
  461. package/dist/icons/LockFilledIcon.js +1 -1
  462. package/dist/icons/LockIcon.js +1 -1
  463. package/dist/icons/MoreIcon.js +1 -1
  464. package/dist/icons/NotAllowedIcon.js +1 -1
  465. package/dist/icons/Number123Icon.js +1 -1
  466. package/dist/icons/NumberIcon.js +1 -1
  467. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  468. package/dist/icons/PauseCircleIcon.js +1 -1
  469. package/dist/icons/PauseIcon.js +1 -1
  470. package/dist/icons/PercentageIcon.js +1 -1
  471. package/dist/icons/PieChartIcon.js +1 -1
  472. package/dist/icons/PipetteIcon.js +1 -1
  473. package/dist/icons/PlayCircleIcon.js +1 -1
  474. package/dist/icons/PlayIcon.js +1 -1
  475. package/dist/icons/PlusIcon.js +1 -1
  476. package/dist/icons/ProgressBarIcon.js +1 -1
  477. package/dist/icons/ReloadIcon.js +1 -1
  478. package/dist/icons/ReportIcon.js +1 -1
  479. package/dist/icons/ReturnIcon.js +1 -1
  480. package/dist/icons/RightIcon.js +1 -1
  481. package/dist/icons/RowTotalsIcon.js +1 -1
  482. package/dist/icons/SchemeIcon.js +1 -1
  483. package/dist/icons/SearchIcon.js +1 -1
  484. package/dist/icons/SemanticQueryIcon.js +1 -1
  485. package/dist/icons/SettingsIcon.js +1 -1
  486. package/dist/icons/ShieldFilledIcon.js +1 -1
  487. package/dist/icons/ShieldIcon.js +1 -1
  488. package/dist/icons/SlashIcon.js +1 -1
  489. package/dist/icons/SparklesIcon.js +1 -1
  490. package/dist/icons/SqlIcon.js +1 -1
  491. package/dist/icons/StatsIcon.js +1 -1
  492. package/dist/icons/StopIcon.js +1 -1
  493. package/dist/icons/StringIcon.js +1 -1
  494. package/dist/icons/SubtotalsIcon.js +1 -1
  495. package/dist/icons/SwitchIcon.js +1 -1
  496. package/dist/icons/TableIcon.js +1 -1
  497. package/dist/icons/ThumbsDownIcon.js +1 -1
  498. package/dist/icons/ThumbsUpIcon.js +1 -1
  499. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  500. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  501. package/dist/icons/ThunderboltIcon.js +1 -1
  502. package/dist/icons/TimeIcon.js +1 -1
  503. package/dist/icons/TrashIcon.js +1 -1
  504. package/dist/icons/UnlockIcon.js +1 -1
  505. package/dist/icons/UpIcon.js +1 -1
  506. package/dist/icons/UserGroupIcon.js +1 -1
  507. package/dist/icons/UserIcon.js +1 -1
  508. package/dist/icons/UserLockIcon.js +1 -1
  509. package/dist/icons/ViewIcon.js +1 -1
  510. package/dist/icons/WarningFilledIcon.js +1 -1
  511. package/dist/icons/WarningIcon.js +1 -1
  512. package/dist/icons/wrap-icon.js +1 -1
  513. package/dist/index.d.ts +7 -3
  514. package/dist/index.js +5 -3
  515. package/dist/index.js.map +1 -1
  516. package/dist/probe/canonicalize.js +1 -1
  517. package/dist/probe/css.js +1 -1
  518. package/dist/probe/index.js +1 -1
  519. package/dist/provider.js +1 -1
  520. package/dist/providers/TrackingProvider.js +1 -1
  521. package/dist/providers/navigationAdapter.default.js +1 -1
  522. package/dist/tokens/all-tokens.d.ts +10 -0
  523. package/dist/tokens/{index.js → all-tokens.js} +7 -25
  524. package/dist/tokens/all-tokens.js.map +1 -0
  525. package/dist/tokens/base.js +2 -1
  526. package/dist/tokens/base.js.map +1 -1
  527. package/dist/tokens/color-seed.js +1 -1
  528. package/dist/tokens/color-theme.js +1 -1
  529. package/dist/tokens/colors.js +1 -1
  530. package/dist/tokens/index.d.ts +3 -10
  531. package/dist/tokens/layout.js +1 -1
  532. package/dist/tokens/lazy-styles.js +1 -1
  533. package/dist/tokens/palette-config.js +1 -1
  534. package/dist/tokens/palette.js +1 -1
  535. package/dist/tokens/resolve.d.ts +113 -0
  536. package/dist/tokens/resolve.js +403 -0
  537. package/dist/tokens/resolve.js.map +1 -0
  538. package/dist/tokens/shadows.js +1 -1
  539. package/dist/tokens/sizes.js +1 -1
  540. package/dist/tokens/spacing.js +1 -1
  541. package/dist/tokens/typography.js +1 -1
  542. package/dist/utils/ResizeSensor.js +1 -1
  543. package/dist/utils/is-dev-env.js +1 -1
  544. package/dist/utils/modules.js +1 -1
  545. package/dist/utils/promise.js +1 -1
  546. package/dist/utils/raf.js +1 -1
  547. package/dist/utils/random.js +1 -1
  548. package/dist/utils/range.js +1 -1
  549. package/dist/utils/react/RenderCache.js +1 -1
  550. package/dist/utils/react/Slots.js +1 -1
  551. package/dist/utils/react/chain.js +1 -1
  552. package/dist/utils/react/disabledProps.js +1 -1
  553. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  554. package/dist/utils/react/index.js +1 -1
  555. package/dist/utils/react/interactions.js +1 -1
  556. package/dist/utils/react/isTextOnly.js +1 -1
  557. package/dist/utils/react/mapProps.js +1 -1
  558. package/dist/utils/react/mergeProps.js +1 -1
  559. package/dist/utils/react/nullableValue.js +1 -1
  560. package/dist/utils/react/resolveIcon.js +1 -1
  561. package/dist/utils/react/sharedStore.js +1 -1
  562. package/dist/utils/react/useBufferedValue.js +1 -1
  563. package/dist/utils/react/useCombinedRefs.js +1 -1
  564. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  565. package/dist/utils/react/useEventBus.js +1 -1
  566. package/dist/utils/react/useId.js +1 -1
  567. package/dist/utils/react/useIsDarwin.js +1 -1
  568. package/dist/utils/react/useKeySymbols.js +1 -1
  569. package/dist/utils/react/useLayoutEffect.d.ts +1 -1
  570. package/dist/utils/react/useLayoutEffect.js +1 -1
  571. package/dist/utils/react/useLocalStorage.js +1 -1
  572. package/dist/utils/react/useMergeStyles.js +1 -1
  573. package/dist/utils/react/usePopoverSync.js +1 -1
  574. package/dist/utils/react/useQaProps.js +1 -1
  575. package/dist/utils/react/useViewportSize.js +1 -1
  576. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  577. package/dist/utils/selection.js +1 -1
  578. package/dist/utils/styles.js +1 -1
  579. package/dist/utils/tree.js +1 -1
  580. package/dist/utils/warnings.js +1 -1
  581. package/dist/version.js +3 -3
  582. package/docs/Colors.md +16 -40
  583. package/docs/ComplexLayout.md +8 -0
  584. package/docs/CreateComponent.md +15 -8
  585. package/docs/Introduction.md +15 -36
  586. package/docs/RenderCache.md +8 -6
  587. package/docs/Theming.md +164 -497
  588. package/docs/Usage.md +129 -138
  589. package/docs/Utilities.md +2 -2
  590. package/docs/components/CollectionItem.md +1 -0
  591. package/docs/components/actions/Banner.md +1 -0
  592. package/docs/components/actions/Button.md +8 -36
  593. package/docs/components/actions/ButtonSplit.md +2 -0
  594. package/docs/components/actions/CommandMenu.md +8 -8
  595. package/docs/components/actions/ItemButton.md +6 -20
  596. package/docs/components/actions/Link.md +10 -5
  597. package/docs/components/actions/Menu.md +24 -11
  598. package/docs/components/actions/MenuTrigger.md +3 -12
  599. package/docs/components/actions/use-anchored-menu.md +5 -5
  600. package/docs/components/actions/use-context-menu.md +11 -7
  601. package/docs/components/content/Badge.md +3 -0
  602. package/docs/components/content/HotKeys.md +21 -14
  603. package/docs/components/content/InlineInput.md +14 -14
  604. package/docs/components/content/Item.md +25 -17
  605. package/docs/components/content/ItemCard.md +1 -0
  606. package/docs/components/content/Layout.md +12 -1
  607. package/docs/components/content/PrismCode.md +13 -18
  608. package/docs/components/content/Tag.md +1 -1
  609. package/docs/components/content/TextItem.md +5 -3
  610. package/docs/components/content/Tree.md +69 -154
  611. package/docs/components/data/DataTable.md +56 -168
  612. package/docs/components/data/ItemTable.md +182 -485
  613. package/docs/components/fields/Checkbox.md +2 -0
  614. package/docs/components/fields/ColorInput.md +38 -79
  615. package/docs/components/fields/ColorPicker.md +17 -39
  616. package/docs/components/fields/ColorSwatch.md +11 -30
  617. package/docs/components/fields/ColorSwatchGroup.md +18 -42
  618. package/docs/components/fields/ComboBox.md +13 -1
  619. package/docs/components/fields/CommandTextArea.md +10 -37
  620. package/docs/components/fields/DatePicker.md +3 -0
  621. package/docs/components/fields/FileInput.md +3 -0
  622. package/docs/components/fields/FilterListBox.md +34 -14
  623. package/docs/components/fields/FilterPicker.md +33 -16
  624. package/docs/components/fields/HueSlider.md +5 -5
  625. package/docs/components/fields/ListBox.md +35 -9
  626. package/docs/components/fields/NumberInput.md +3 -0
  627. package/docs/components/fields/PasswordInput.md +3 -0
  628. package/docs/components/fields/PeriodPicker.md +7 -17
  629. package/docs/components/fields/Picker.md +54 -29
  630. package/docs/components/fields/RadioGroup.md +13 -5
  631. package/docs/components/fields/SearchComboBox.md +3 -0
  632. package/docs/components/fields/SearchInput.md +4 -2
  633. package/docs/components/fields/Select.md +23 -13
  634. package/docs/components/fields/Switch.md +3 -0
  635. package/docs/components/fields/TextInput.md +3 -0
  636. package/docs/components/fields/TextInputMapper.md +1 -2
  637. package/docs/components/form/Field.md +5 -2
  638. package/docs/components/form/Form.md +5 -0
  639. package/docs/components/form/FormInstance.md +1 -1
  640. package/docs/components/helpers/DisplayTransition.md +10 -6
  641. package/docs/components/helpers/IconSwitch.md +1 -0
  642. package/docs/components/layout/Board.md +89 -193
  643. package/docs/components/navigation/Pagination.md +36 -75
  644. package/docs/components/navigation/Tabs.md +3 -15
  645. package/docs/components/other/Calendar.md +22 -39
  646. package/docs/components/other/CubeLogo.md +1 -1
  647. package/docs/components/overlays/Dialog.md +3 -0
  648. package/docs/components/overlays/DialogContainer.md +2 -0
  649. package/docs/components/overlays/DialogForm.md +6 -2
  650. package/docs/components/overlays/DialogTrigger.md +4 -2
  651. package/docs/components/overlays/Notifications.md +7 -0
  652. package/docs/components/overlays/Toast.md +12 -8
  653. package/docs/components/overlays/Tooltip.md +16 -0
  654. package/docs/components/overlays/UseDialogContainer.md +16 -10
  655. package/docs/components/status/LoadingAnimation.md +3 -9
  656. package/docs/tasty/configuration.md +195 -15
  657. package/docs/tasty/dsl.md +40 -5
  658. package/docs/tasty/injector.md +11 -0
  659. package/docs/tasty/methodology.md +1 -1
  660. package/docs/tasty/pipeline.md +1 -4
  661. package/docs/tasty/react-api.md +1 -1
  662. package/docs/tasty/styles.md +8 -1
  663. package/package.json +4 -4
  664. package/dist/tokens/index.js.map +0 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  import { collides, getFirstCollision } from "./collision.js";
3
3
  import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
4
4
  import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/constraints.ts
3
3
  function clamp(value, min, max) {
4
4
  return Math.max(min, Math.min(max, value));
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  import { collides, getFirstCollision } from "./collision.js";
3
3
  import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
4
4
  import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  import { getAllCollisions, getFirstCollision } from "./collision.js";
3
3
  import { sortLayoutItems } from "./sort.js";
4
4
 
@@ -0,0 +1,58 @@
1
+
2
+ import { Layout, LayoutItem } from "./types.js";
3
+
4
+ //#region src/components/layout/Board/grid-core/placement.d.ts
5
+ /**
6
+ * The first position at or below the preferred cell where `item` fits without
7
+ * overlapping any of `others` (which must themselves be overlap-free), scanning
8
+ * left-to-right then top-to-bottom and never past `maxRows`; if the band below
9
+ * is full, upward toward the top.
10
+ *
11
+ * This is the rule the board itself applies when it has to land a widget that
12
+ * cannot stay where it was dropped, so using it for a programmatic add is what
13
+ * makes the two agree.
14
+ *
15
+ * A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path
16
+ * applies (`clamp(y, 0, maxRows - h)`): the item's bottom edge stays within the
17
+ * row limit even when the landing cell is blocked, so the downward scan cannot
18
+ * push it off the board. If the whole valid band is full the item is clamped to
19
+ * the limit — bounds win over overlap, exactly as `gridBounds` does. With an
20
+ * unbounded `maxRows` there is always a free slot below every existing item, so
21
+ * the downward scan terminates on its own.
22
+ *
23
+ * The returned item is a copy; `item` is not mutated. Its `w` is capped to
24
+ * `cols`, and no other dimension is changed — this never resizes to fit.
25
+ */
26
+ declare function placeInFreeSlot(others: Layout, item: LayoutItem, cols: number, maxRows?: number): LayoutItem;
27
+ /**
28
+ * Tile every item evenly across both axes of a `cols × rows` grid, keeping the
29
+ * row structure the layout already has: items are grouped into visual rows by
30
+ * their current `y`, `rows` is divided across those groups, and `cols` across
31
+ * each group's members.
32
+ *
33
+ * So three items on one line become three equal full-height columns; move one
34
+ * below and the top line becomes two half-width cells while the lower item
35
+ * spans the full width at half height. Grouping by `y` rather than reflowing
36
+ * from scratch is what makes the result recognisably the user's arrangement
37
+ * instead of an arbitrary repack.
38
+ *
39
+ * A visual row holding more items than the grid is wide is wrapped into
40
+ * sub-rows of at most `cols`, so nothing tiles past the right edge. That can
41
+ * take the result past `rows`; the caller decides whether to grow the grid or
42
+ * let its bounds clip.
43
+ *
44
+ * This is the one operation that deliberately GROWS items — every gesture-driven
45
+ * path refuses to, because growing on a move is a surprise. Here it is the whole
46
+ * point, which is why it is a call the app makes rather than a mode the board is
47
+ * in. Returns new items in the input's order; the input is not mutated.
48
+ */
49
+ declare function distributeEvenly(layout: Layout, {
50
+ cols,
51
+ rows
52
+ }: {
53
+ cols: number;
54
+ rows: number;
55
+ }): LayoutItem[];
56
+ //#endregion
57
+ export { distributeEvenly, placeInFreeSlot };
58
+ //# sourceMappingURL=placement.d.ts.map
@@ -0,0 +1,153 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
+ import { collides } from "./collision.js";
3
+
4
+ //#region src/components/layout/Board/grid-core/placement.ts
5
+ /**
6
+ * Placing items into a grid without dragging them there.
7
+ *
8
+ * A board's own gestures resolve placement through the compactor and the
9
+ * collision resolver. An app that adds a widget programmatically — a toolbar
10
+ * drop, a widget moved between boards by code, an "arrange these for me"
11
+ * command — has to answer the same question with no gesture in hand, and had no
12
+ * way to ask the engine for the answer. Left to solve it themselves, apps
13
+ * re-implement the scan, and the same drop lands in two different cells
14
+ * depending on whether a pointer or a code path served it.
15
+ *
16
+ * Original UI Kit code (not vendored from react-grid-layout).
17
+ */
18
+ /**
19
+ * The first position at or below the preferred cell where `item` fits without
20
+ * overlapping any of `others` (which must themselves be overlap-free), scanning
21
+ * left-to-right then top-to-bottom and never past `maxRows`; if the band below
22
+ * is full, upward toward the top.
23
+ *
24
+ * This is the rule the board itself applies when it has to land a widget that
25
+ * cannot stay where it was dropped, so using it for a programmatic add is what
26
+ * makes the two agree.
27
+ *
28
+ * A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path
29
+ * applies (`clamp(y, 0, maxRows - h)`): the item's bottom edge stays within the
30
+ * row limit even when the landing cell is blocked, so the downward scan cannot
31
+ * push it off the board. If the whole valid band is full the item is clamped to
32
+ * the limit — bounds win over overlap, exactly as `gridBounds` does. With an
33
+ * unbounded `maxRows` there is always a free slot below every existing item, so
34
+ * the downward scan terminates on its own.
35
+ *
36
+ * The returned item is a copy; `item` is not mutated. Its `w` is capped to
37
+ * `cols`, and no other dimension is changed — this never resizes to fit.
38
+ */
39
+ function placeInFreeSlot(others, item, cols, maxRows = Infinity) {
40
+ const w = Math.min(item.w, cols);
41
+ const maxY = Number.isFinite(maxRows) ? Math.max(0, maxRows - item.h) : Infinity;
42
+ const fits = (x, y) => !others.some((o) => collides(o, {
43
+ ...item,
44
+ x,
45
+ y,
46
+ w
47
+ }));
48
+ const preferX = Math.min(Math.max(0, item.x), cols - w);
49
+ const startY = Math.min(Math.max(0, item.y), maxY);
50
+ if (fits(preferX, startY)) return {
51
+ ...item,
52
+ x: preferX,
53
+ y: startY,
54
+ w
55
+ };
56
+ const scanBottom = Number.isFinite(maxRows) ? maxY : startY + others.reduce((m, o) => Math.max(m, o.y + o.h), 0) + 1;
57
+ for (let y = startY; y <= scanBottom; y++) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
58
+ ...item,
59
+ x,
60
+ y,
61
+ w
62
+ };
63
+ for (let y = startY - 1; y >= 0; y--) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
64
+ ...item,
65
+ x,
66
+ y,
67
+ w
68
+ };
69
+ return {
70
+ ...item,
71
+ x: preferX,
72
+ y: startY,
73
+ w
74
+ };
75
+ }
76
+ /**
77
+ * Split `total` cells across `parts` groups as evenly as possible: each group
78
+ * gets at least one, and the first `total % parts` groups get one extra so the
79
+ * pieces sum to `total`. With more groups than cells every group still gets one
80
+ * and the sum overflows, which the grid's own bounds then clip — the best
81
+ * available answer when there is less than a cell to go round.
82
+ */
83
+ function splitEvenly(total, parts) {
84
+ if (parts <= 0) return [];
85
+ const base = Math.max(1, Math.floor(total / parts));
86
+ const remainder = base * parts >= total ? 0 : total - base * parts;
87
+ return Array.from({ length: parts }, (_, i) => base + (i < remainder ? 1 : 0));
88
+ }
89
+ /**
90
+ * Tile every item evenly across both axes of a `cols × rows` grid, keeping the
91
+ * row structure the layout already has: items are grouped into visual rows by
92
+ * their current `y`, `rows` is divided across those groups, and `cols` across
93
+ * each group's members.
94
+ *
95
+ * So three items on one line become three equal full-height columns; move one
96
+ * below and the top line becomes two half-width cells while the lower item
97
+ * spans the full width at half height. Grouping by `y` rather than reflowing
98
+ * from scratch is what makes the result recognisably the user's arrangement
99
+ * instead of an arbitrary repack.
100
+ *
101
+ * A visual row holding more items than the grid is wide is wrapped into
102
+ * sub-rows of at most `cols`, so nothing tiles past the right edge. That can
103
+ * take the result past `rows`; the caller decides whether to grow the grid or
104
+ * let its bounds clip.
105
+ *
106
+ * This is the one operation that deliberately GROWS items — every gesture-driven
107
+ * path refuses to, because growing on a move is a surprise. Here it is the whole
108
+ * point, which is why it is a call the app makes rather than a mode the board is
109
+ * in. Returns new items in the input's order; the input is not mutated.
110
+ */
111
+ function distributeEvenly(layout, { cols, rows }) {
112
+ if (layout.length === 0) return [];
113
+ const gridCols = Math.max(1, cols);
114
+ const gridRows = Math.max(1, rows);
115
+ const sorted = [...layout].sort((a, b) => a.y !== b.y ? a.y - b.y : a.x - b.x);
116
+ const groups = [];
117
+ let lastY = null;
118
+ for (const item of sorted) {
119
+ if (lastY === null || item.y !== lastY) {
120
+ groups.push([]);
121
+ lastY = item.y;
122
+ }
123
+ groups[groups.length - 1].push(item);
124
+ }
125
+ const rowGroups = [];
126
+ for (const group of groups) if (group.length <= gridCols) rowGroups.push(group);
127
+ else for (let i = 0; i < group.length; i += gridCols) rowGroups.push(group.slice(i, i + gridCols));
128
+ const rowHeights = splitEvenly(gridRows, rowGroups.length);
129
+ const placed = /* @__PURE__ */ new Map();
130
+ let y = 0;
131
+ rowGroups.forEach((group, gi) => {
132
+ const h = rowHeights[gi];
133
+ const widths = splitEvenly(gridCols, group.length);
134
+ let x = 0;
135
+ group.forEach((item, ci) => {
136
+ const w = widths[ci];
137
+ placed.set(item.i, {
138
+ ...item,
139
+ x,
140
+ y,
141
+ w,
142
+ h
143
+ });
144
+ x += w;
145
+ });
146
+ y += h;
147
+ });
148
+ return layout.map((item) => placed.get(item.i) ?? item);
149
+ }
150
+
151
+ //#endregion
152
+ export { distributeEvenly, placeInFreeSlot };
153
+ //# sourceMappingURL=placement.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"placement.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/placement.ts"],"sourcesContent":["/**\n * Placing items into a grid without dragging them there.\n *\n * A board's own gestures resolve placement through the compactor and the\n * collision resolver. An app that adds a widget programmatically — a toolbar\n * drop, a widget moved between boards by code, an \"arrange these for me\"\n * command — has to answer the same question with no gesture in hand, and had no\n * way to ask the engine for the answer. Left to solve it themselves, apps\n * re-implement the scan, and the same drop lands in two different cells\n * depending on whether a pointer or a code path served it.\n *\n * Original UI Kit code (not vendored from react-grid-layout).\n */\n\nimport { collides } from './collision';\n\nimport type { Layout, LayoutItem } from './types';\n\n/**\n * The first position at or below the preferred cell where `item` fits without\n * overlapping any of `others` (which must themselves be overlap-free), scanning\n * left-to-right then top-to-bottom and never past `maxRows`; if the band below\n * is full, upward toward the top.\n *\n * This is the rule the board itself applies when it has to land a widget that\n * cannot stay where it was dropped, so using it for a programmatic add is what\n * makes the two agree.\n *\n * A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path\n * applies (`clamp(y, 0, maxRows - h)`): the item's bottom edge stays within the\n * row limit even when the landing cell is blocked, so the downward scan cannot\n * push it off the board. If the whole valid band is full the item is clamped to\n * the limit — bounds win over overlap, exactly as `gridBounds` does. With an\n * unbounded `maxRows` there is always a free slot below every existing item, so\n * the downward scan terminates on its own.\n *\n * The returned item is a copy; `item` is not mutated. Its `w` is capped to\n * `cols`, and no other dimension is changed — this never resizes to fit.\n */\nexport function placeInFreeSlot(\n others: Layout,\n item: LayoutItem,\n cols: number,\n maxRows = Infinity,\n): LayoutItem {\n const w = Math.min(item.w, cols);\n const maxY = Number.isFinite(maxRows)\n ? Math.max(0, maxRows - item.h)\n : Infinity;\n const fits = (x: number, y: number) =>\n !others.some((o) => collides(o, { ...item, x, y, w }));\n const preferX = Math.min(Math.max(0, item.x), cols - w);\n const startY = Math.min(Math.max(0, item.y), maxY);\n if (fits(preferX, startY)) return { ...item, x: preferX, y: startY, w };\n const scanBottom = Number.isFinite(maxRows)\n ? maxY\n : startY + others.reduce((m, o) => Math.max(m, o.y + o.h), 0) + 1;\n for (let y = startY; y <= scanBottom; y++) {\n for (let x = 0; x <= cols - w; x++) {\n if (fits(x, y)) return { ...item, x, y, w };\n }\n }\n // The landing row (clamped to the limit) and everything below it were full;\n // look upward for a free slot still inside the board before giving up.\n for (let y = startY - 1; y >= 0; y--) {\n for (let x = 0; x <= cols - w; x++) {\n if (fits(x, y)) return { ...item, x, y, w };\n }\n }\n return { ...item, x: preferX, y: startY, w };\n}\n\n/**\n * Split `total` cells across `parts` groups as evenly as possible: each group\n * gets at least one, and the first `total % parts` groups get one extra so the\n * pieces sum to `total`. With more groups than cells every group still gets one\n * and the sum overflows, which the grid's own bounds then clip — the best\n * available answer when there is less than a cell to go round.\n */\nfunction splitEvenly(total: number, parts: number): number[] {\n if (parts <= 0) return [];\n const base = Math.max(1, Math.floor(total / parts));\n const remainder = base * parts >= total ? 0 : total - base * parts;\n return Array.from(\n { length: parts },\n (_, i) => base + (i < remainder ? 1 : 0),\n );\n}\n\n/**\n * Tile every item evenly across both axes of a `cols × rows` grid, keeping the\n * row structure the layout already has: items are grouped into visual rows by\n * their current `y`, `rows` is divided across those groups, and `cols` across\n * each group's members.\n *\n * So three items on one line become three equal full-height columns; move one\n * below and the top line becomes two half-width cells while the lower item\n * spans the full width at half height. Grouping by `y` rather than reflowing\n * from scratch is what makes the result recognisably the user's arrangement\n * instead of an arbitrary repack.\n *\n * A visual row holding more items than the grid is wide is wrapped into\n * sub-rows of at most `cols`, so nothing tiles past the right edge. That can\n * take the result past `rows`; the caller decides whether to grow the grid or\n * let its bounds clip.\n *\n * This is the one operation that deliberately GROWS items — every gesture-driven\n * path refuses to, because growing on a move is a surprise. Here it is the whole\n * point, which is why it is a call the app makes rather than a mode the board is\n * in. Returns new items in the input's order; the input is not mutated.\n */\nexport function distributeEvenly(\n layout: Layout,\n { cols, rows }: { cols: number; rows: number },\n): LayoutItem[] {\n if (layout.length === 0) return [];\n\n const gridCols = Math.max(1, cols);\n const gridRows = Math.max(1, rows);\n\n const sorted = [...layout].sort((a, b) =>\n a.y !== b.y ? a.y - b.y : a.x - b.x,\n );\n\n const groups: LayoutItem[][] = [];\n let lastY: number | null = null;\n for (const item of sorted) {\n if (lastY === null || item.y !== lastY) {\n groups.push([]);\n lastY = item.y;\n }\n groups[groups.length - 1].push(item);\n }\n\n const rowGroups: LayoutItem[][] = [];\n for (const group of groups) {\n if (group.length <= gridCols) {\n rowGroups.push(group);\n } else {\n for (let i = 0; i < group.length; i += gridCols) {\n rowGroups.push(group.slice(i, i + gridCols));\n }\n }\n }\n\n const rowHeights = splitEvenly(gridRows, rowGroups.length);\n const placed = new Map<string, LayoutItem>();\n let y = 0;\n rowGroups.forEach((group, gi) => {\n const h = rowHeights[gi];\n const widths = splitEvenly(gridCols, group.length);\n let x = 0;\n group.forEach((item, ci) => {\n const w = widths[ci];\n placed.set(item.i, { ...item, x, y, w, h });\n x += w;\n });\n y += h;\n });\n\n // Emit in the caller's order, not the sort's: a layout is keyed by `i`, and\n // reordering it would churn every consumer that diffs the array positionally.\n return layout.map((item) => placed.get(item.i) ?? item);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,gBACd,QACA,MACA,MACA,UAAU,UACE;CACZ,MAAM,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK;CAChC,MAAM,OAAO,OAAO,SAAS,QAAQ,GACjC,KAAK,IAAI,GAAG,UAAU,KAAK,EAAE,GAC7B;CACJ,MAAM,QAAQ,GAAW,MACvB,CAAC,OAAO,MAAM,MAAM,SAAS,GAAG;EAAE,GAAG;EAAM;EAAG;EAAG;EAAG,CAAC,CAAC;CACxD,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE;CACvD,MAAM,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE,EAAE,KAAK;AAClD,KAAI,KAAK,SAAS,OAAO,CAAE,QAAO;EAAE,GAAG;EAAM,GAAG;EAAS,GAAG;EAAQ;EAAG;CACvE,MAAM,aAAa,OAAO,SAAS,QAAQ,GACvC,OACA,SAAS,OAAO,QAAQ,GAAG,MAAM,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG;AAClE,MAAK,IAAI,IAAI,QAAQ,KAAK,YAAY,IACpC,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAC7B,KAAI,KAAK,GAAG,EAAE,CAAE,QAAO;EAAE,GAAG;EAAM;EAAG;EAAG;EAAG;AAK/C,MAAK,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,IAC/B,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAC7B,KAAI,KAAK,GAAG,EAAE,CAAE,QAAO;EAAE,GAAG;EAAM;EAAG;EAAG;EAAG;AAG/C,QAAO;EAAE,GAAG;EAAM,GAAG;EAAS,GAAG;EAAQ;EAAG;;;;;;;;;AAU9C,SAAS,YAAY,OAAe,OAAyB;AAC3D,KAAI,SAAS,EAAG,QAAO,EAAE;CACzB,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,MAAM,CAAC;CACnD,MAAM,YAAY,OAAO,SAAS,QAAQ,IAAI,QAAQ,OAAO;AAC7D,QAAO,MAAM,KACX,EAAE,QAAQ,OAAO,GAChB,GAAG,MAAM,QAAQ,IAAI,YAAY,IAAI,GACvC;;;;;;;;;;;;;;;;;;;;;;;;AAyBH,SAAgB,iBACd,QACA,EAAE,MAAM,QACM;AACd,KAAI,OAAO,WAAW,EAAG,QAAO,EAAE;CAElC,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK;CAClC,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK;CAElC,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAClC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EACnC;CAED,MAAM,SAAyB,EAAE;CACjC,IAAI,QAAuB;AAC3B,MAAK,MAAM,QAAQ,QAAQ;AACzB,MAAI,UAAU,QAAQ,KAAK,MAAM,OAAO;AACtC,UAAO,KAAK,EAAE,CAAC;AACf,WAAQ,KAAK;;AAEf,SAAO,OAAO,SAAS,GAAG,KAAK,KAAK;;CAGtC,MAAM,YAA4B,EAAE;AACpC,MAAK,MAAM,SAAS,OAClB,KAAI,MAAM,UAAU,SAClB,WAAU,KAAK,MAAM;KAErB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,SACrC,WAAU,KAAK,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;CAKlD,MAAM,aAAa,YAAY,UAAU,UAAU,OAAO;CAC1D,MAAM,yBAAS,IAAI,KAAyB;CAC5C,IAAI,IAAI;AACR,WAAU,SAAS,OAAO,OAAO;EAC/B,MAAM,IAAI,WAAW;EACrB,MAAM,SAAS,YAAY,UAAU,MAAM,OAAO;EAClD,IAAI,IAAI;AACR,QAAM,SAAS,MAAM,OAAO;GAC1B,MAAM,IAAI,OAAO;AACjB,UAAO,IAAI,KAAK,GAAG;IAAE,GAAG;IAAM;IAAG;IAAG;IAAG;IAAG,CAAC;AAC3C,QAAK;IACL;AACF,OAAK;GACL;AAIF,QAAO,OAAO,KAAK,SAAS,OAAO,IAAI,KAAK,EAAE,IAAI,KAAK"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  //#region src/components/layout/Board/grid-core/sort.ts
3
3
  /**
4
4
  * Sort layout items based on the compaction type.
@@ -1,9 +1,11 @@
1
1
 
2
2
  import { CollisionMode, Compactor, Layout, LayoutConstraint, LayoutItem, ResizeHandleAxis } from "./grid-core/types.js";
3
+ import { distributeEvenly, placeInFreeSlot } from "./grid-core/placement.js";
3
4
  import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
4
5
  import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
5
6
  import { BoardSelectionMode } from "./use-board-selection.js";
6
- import { BoardResizeGripPlacement, CubeBoardWidgetProps, Widget } from "./Widget.js";
7
+ import { BoardLayoutChangeInfo, BoardLayoutChangeReason } from "./use-board-layout.js";
8
+ import { BoardCornerPlacement, BoardResizeGripPlacement, CubeBoardWidgetProps, Widget } from "./Widget.js";
7
9
  import { BOARD_SELECTION_CANCEL, BoardCompactType, BoardGridLines, BoardInteractionInfo, CubeBoardProps } from "./Board.js";
8
10
  import { BreakpointCols, Breakpoints, ResponsiveLayouts } from "./responsive-utils.js";
9
11
  import { BoardResponsive, CubeBoardResponsiveProps } from "./BoardResponsive.js";
@@ -1,4 +1,5 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
+ import { distributeEvenly, placeInFreeSlot } from "./grid-core/placement.js";
2
3
  import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
3
4
  import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
4
5
  import { BoardProvider } from "./BoardProvider.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BoardBase"],"sources":["../../../../src/components/layout/Board/index.tsx"],"sourcesContent":["import { Board as BoardBase } from './Board';\nimport { BoardProvider } from './BoardProvider';\nimport { BoardResponsive } from './BoardResponsive';\nimport { Widget } from './Widget';\n\nconst Board = Object.assign(BoardBase, {\n Widget,\n Provider: BoardProvider,\n Responsive: BoardResponsive,\n});\n\nexport { Board };\nexport { BoardProvider };\nexport { BoardResponsive };\nexport { Widget as BoardWidget };\nexport { BOARD_SELECTION_CANCEL } from './Board';\n\nexport type {\n CubeBoardProps,\n BoardCompactType,\n BoardGridLines,\n BoardInteractionInfo,\n} from './Board';\nexport type { BoardSelectionMode } from './use-board-selection';\nexport type { CubeBoardResponsiveProps } from './BoardResponsive';\nexport type { CubeBoardWidgetProps, BoardResizeGripPlacement } from './Widget';\nexport type { CubeBoardProviderProps } from './BoardProvider';\nexport type { WidgetTransferInfo } from './board-context';\nexport type {\n Breakpoints as BoardBreakpoints,\n BreakpointCols as BoardBreakpointCols,\n ResponsiveLayouts as BoardResponsiveLayouts,\n} from './responsive-utils';\n\nexport type {\n Layout,\n LayoutItem,\n ResizeHandleAxis,\n CollisionMode,\n Compactor,\n LayoutConstraint,\n PositionParams,\n} from './grid-core';\n\nexport {\n verticalCompactor,\n horizontalCompactor,\n noCompactor,\n getCompactor,\n gridBounds,\n minMaxSize,\n containerBounds,\n boundedX,\n boundedY,\n aspectRatio,\n snapToGrid,\n minSize,\n maxSize,\n} from './grid-core';\n"],"mappings":";;;;;;;;;AAKA,MAAM,QAAQ,OAAO,OAAOA,SAAW;CACrC;CACA,UAAU;CACV,YAAY;CACb,CAAC"}
1
+ {"version":3,"file":"index.js","names":["BoardBase"],"sources":["../../../../src/components/layout/Board/index.tsx"],"sourcesContent":["import { Board as BoardBase } from './Board';\nimport { BoardProvider } from './BoardProvider';\nimport { BoardResponsive } from './BoardResponsive';\nimport { Widget } from './Widget';\n\nconst Board = Object.assign(BoardBase, {\n Widget,\n Provider: BoardProvider,\n Responsive: BoardResponsive,\n});\n\nexport { Board };\nexport { BoardProvider };\nexport { BoardResponsive };\nexport { Widget as BoardWidget };\nexport { BOARD_SELECTION_CANCEL } from './Board';\n\nexport type {\n CubeBoardProps,\n BoardCompactType,\n BoardGridLines,\n BoardInteractionInfo,\n} from './Board';\nexport type { BoardSelectionMode } from './use-board-selection';\nexport type { CubeBoardResponsiveProps } from './BoardResponsive';\nexport type {\n CubeBoardWidgetProps,\n BoardResizeGripPlacement,\n BoardCornerPlacement,\n} from './Widget';\nexport type {\n BoardLayoutChangeInfo,\n BoardLayoutChangeReason,\n} from './use-board-layout';\nexport type { CubeBoardProviderProps } from './BoardProvider';\nexport type { WidgetTransferInfo } from './board-context';\nexport type {\n Breakpoints as BoardBreakpoints,\n BreakpointCols as BoardBreakpointCols,\n ResponsiveLayouts as BoardResponsiveLayouts,\n} from './responsive-utils';\n\nexport type {\n Layout,\n LayoutItem,\n ResizeHandleAxis,\n CollisionMode,\n Compactor,\n LayoutConstraint,\n PositionParams,\n} from './grid-core';\n\nexport { placeInFreeSlot, distributeEvenly } from './grid-core';\n\nexport {\n verticalCompactor,\n horizontalCompactor,\n noCompactor,\n getCompactor,\n gridBounds,\n minMaxSize,\n containerBounds,\n boundedX,\n boundedY,\n aspectRatio,\n snapToGrid,\n minSize,\n maxSize,\n} from './grid-core';\n"],"mappings":";;;;;;;;;;AAKA,MAAM,QAAQ,OAAO,OAAOA,SAAW;CACrC;CACA,UAAU;CACV,YAAY;CACb,CAAC"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  import { cloneLayout, correctBounds } from "./grid-core/layout.js";
3
3
 
4
4
  //#region src/components/layout/Board/responsive-utils.ts
@@ -0,0 +1,26 @@
1
+
2
+ //#region src/components/layout/Board/use-board-layout.d.ts
3
+ /**
4
+ * Why the layout changed.
5
+ *
6
+ * A board commits for two different kinds of reason, and an app usually cares
7
+ * which: a gesture is the user arranging their board, while a normalization is
8
+ * the board fitting an existing arrangement to a constraint that moved
9
+ * underneath it. Without this, an app that persists `onLayoutChange` has no way
10
+ * to tell "the user dragged a widget" from "the column count changed and the
11
+ * board reflowed", so it writes the reflow back as if it were an edit — marking
12
+ * a document dirty nobody touched.
13
+ *
14
+ * - `drag` / `resize` — a pointer or keyboard gesture on this board.
15
+ * - `transfer` — a widget arrived from, or left for, another board.
16
+ * - `normalize` — no gesture: a reflow for a changed column count, or an
17
+ * auto-height widget growing to fit its content.
18
+ */
19
+ type BoardLayoutChangeReason = 'drag' | 'resize' | 'transfer' | 'normalize';
20
+ /** What `onLayoutChange` reports alongside the new layout. */
21
+ interface BoardLayoutChangeInfo {
22
+ reason: BoardLayoutChangeReason;
23
+ }
24
+ //#endregion
25
+ export { BoardLayoutChangeInfo, BoardLayoutChangeReason };
26
+ //# sourceMappingURL=use-board-layout.d.ts.map
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { cloneLayout } from "./grid-core/layout.js";
4
4
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -25,7 +25,7 @@ function useBoardLayout(options) {
25
25
  placeholderRef.current = items[0] ?? null;
26
26
  setPlaceholdersState(items);
27
27
  }, []);
28
- const onLayoutChangeEvent = useEvent((next) => onLayoutChange?.(next));
28
+ const onLayoutChangeEvent = useEvent((next, reason) => onLayoutChange?.(next, { reason }));
29
29
  const prevControlledRef = useRef(controlledLayout);
30
30
  useEffect(() => {
31
31
  if (isControlled && controlledLayout !== prevControlledRef.current) {
@@ -35,10 +35,10 @@ function useBoardLayout(options) {
35
35
  setLayout(next);
36
36
  }
37
37
  }, [controlledLayout, isControlled]);
38
- const applyLayout = useCallback((next, commit) => {
38
+ const applyLayout = useCallback((next, commit, reason = "normalize") => {
39
39
  layoutRef.current = next;
40
40
  setLayout(next);
41
- if (commit) onLayoutChangeEvent(next);
41
+ if (commit) onLayoutChangeEvent(next, reason);
42
42
  }, [onLayoutChangeEvent]);
43
43
  return {
44
44
  layout,
@@ -1 +1 @@
1
- {"version":3,"file":"use-board-layout.js","names":[],"sources":["../../../../src/components/layout/Board/use-board-layout.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { cloneLayout, LayoutItem } from './grid-core';\n\nexport interface UseBoardLayoutOptions {\n /** Controlled layout. */\n layout?: LayoutItem[];\n /** Initial layout for uncontrolled usage. */\n defaultLayout?: LayoutItem[];\n onLayoutChange?: (layout: LayoutItem[]) => void;\n}\n\nexport interface UseBoardLayoutResult {\n layout: LayoutItem[];\n layoutRef: React.MutableRefObject<LayoutItem[]>;\n /**\n * Every drop-slot preview for the gesture in flight. A single-widget drag or\n * resize produces one; a group drag produces one per moving widget.\n */\n placeholders: LayoutItem[];\n /**\n * The grabbed widget's placeholder — `placeholders[0]`, or `null` when there\n * is none. Kept as a derived singular so the public `BoardInteractionInfo`\n * keeps its exact shape.\n */\n placeholder: LayoutItem | null;\n /**\n * Synchronously-updated mirrors of the two above. `setPlaceholders` only\n * schedules a re-render, so consumers that run in the same tick as a\n * `setPlaceholders` call (e.g. drag lifecycle callbacks fired right after the\n * registry updates the placeholders) must read a ref to see the live value.\n */\n placeholdersRef: React.MutableRefObject<LayoutItem[]>;\n placeholderRef: React.MutableRefObject<LayoutItem | null>;\n setPlaceholders: (items: LayoutItem[]) => void;\n /** Update the layout. `commit` fires `onLayoutChange`. */\n applyLayout: (layout: LayoutItem[], commit: boolean) => void;\n}\n\n/**\n * Headless layout state for a single board.\n *\n * Supports both controlled (`layout`) and uncontrolled (`defaultLayout`) usage.\n * Intermediate drag/resize previews always update local state; only committed\n * changes call `onLayoutChange`.\n */\nexport function useBoardLayout(\n options: UseBoardLayoutOptions,\n): UseBoardLayoutResult {\n const { layout: controlledLayout, defaultLayout, onLayoutChange } = options;\n const isControlled = controlledLayout !== undefined;\n\n const [layout, setLayout] = useState<LayoutItem[]>(() =>\n cloneLayout(controlledLayout ?? defaultLayout ?? []),\n );\n const layoutRef = useRef<LayoutItem[]>(layout);\n layoutRef.current = layout;\n\n const [placeholders, setPlaceholdersState] = useState<LayoutItem[]>([]);\n const placeholdersRef = useRef<LayoutItem[]>([]);\n const placeholderRef = useRef<LayoutItem | null>(null);\n const setPlaceholders = useCallback((items: LayoutItem[]) => {\n placeholdersRef.current = items;\n // Both mirrors move in the same synchronous call, so a same-tick reader can\n // never see the two disagree.\n placeholderRef.current = items[0] ?? null;\n setPlaceholdersState(items);\n }, []);\n\n const onLayoutChangeEvent = useEvent((next: LayoutItem[]) =>\n onLayoutChange?.(next),\n );\n\n // Sync controlled prop into local state when it changes by reference.\n const prevControlledRef = useRef(controlledLayout);\n useEffect(() => {\n if (isControlled && controlledLayout !== prevControlledRef.current) {\n prevControlledRef.current = controlledLayout;\n const next = cloneLayout(controlledLayout ?? []);\n layoutRef.current = next;\n setLayout(next);\n }\n }, [controlledLayout, isControlled]);\n\n const applyLayout = useCallback(\n (next: LayoutItem[], commit: boolean) => {\n layoutRef.current = next;\n setLayout(next);\n if (commit) {\n onLayoutChangeEvent(next);\n }\n },\n [onLayoutChangeEvent],\n );\n\n return {\n layout,\n layoutRef,\n placeholders,\n placeholder: placeholders[0] ?? null,\n placeholdersRef,\n placeholderRef,\n setPlaceholders,\n applyLayout,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAgDA,SAAgB,eACd,SACsB;CACtB,MAAM,EAAE,QAAQ,kBAAkB,eAAe,mBAAmB;CACpE,MAAM,eAAe,qBAAqB;CAE1C,MAAM,CAAC,QAAQ,aAAa,eAC1B,YAAY,oBAAoB,iBAAiB,EAAE,CAAC,CACrD;CACD,MAAM,YAAY,OAAqB,OAAO;AAC9C,WAAU,UAAU;CAEpB,MAAM,CAAC,cAAc,wBAAwB,SAAuB,EAAE,CAAC;CACvE,MAAM,kBAAkB,OAAqB,EAAE,CAAC;CAChD,MAAM,iBAAiB,OAA0B,KAAK;CACtD,MAAM,kBAAkB,aAAa,UAAwB;AAC3D,kBAAgB,UAAU;AAG1B,iBAAe,UAAU,MAAM,MAAM;AACrC,uBAAqB,MAAM;IAC1B,EAAE,CAAC;CAEN,MAAM,sBAAsB,UAAU,SACpC,iBAAiB,KAAK,CACvB;CAGD,MAAM,oBAAoB,OAAO,iBAAiB;AAClD,iBAAgB;AACd,MAAI,gBAAgB,qBAAqB,kBAAkB,SAAS;AAClE,qBAAkB,UAAU;GAC5B,MAAM,OAAO,YAAY,oBAAoB,EAAE,CAAC;AAChD,aAAU,UAAU;AACpB,aAAU,KAAK;;IAEhB,CAAC,kBAAkB,aAAa,CAAC;CAEpC,MAAM,cAAc,aACjB,MAAoB,WAAoB;AACvC,YAAU,UAAU;AACpB,YAAU,KAAK;AACf,MAAI,OACF,qBAAoB,KAAK;IAG7B,CAAC,oBAAoB,CACtB;AAED,QAAO;EACL;EACA;EACA;EACA,aAAa,aAAa,MAAM;EAChC;EACA;EACA;EACA;EACD"}
1
+ {"version":3,"file":"use-board-layout.js","names":[],"sources":["../../../../src/components/layout/Board/use-board-layout.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { cloneLayout, LayoutItem } from './grid-core';\n\n/**\n * Why the layout changed.\n *\n * A board commits for two different kinds of reason, and an app usually cares\n * which: a gesture is the user arranging their board, while a normalization is\n * the board fitting an existing arrangement to a constraint that moved\n * underneath it. Without this, an app that persists `onLayoutChange` has no way\n * to tell \"the user dragged a widget\" from \"the column count changed and the\n * board reflowed\", so it writes the reflow back as if it were an edit — marking\n * a document dirty nobody touched.\n *\n * - `drag` / `resize` — a pointer or keyboard gesture on this board.\n * - `transfer` — a widget arrived from, or left for, another board.\n * - `normalize` — no gesture: a reflow for a changed column count, or an\n * auto-height widget growing to fit its content.\n */\nexport type BoardLayoutChangeReason =\n | 'drag'\n | 'resize'\n | 'transfer'\n | 'normalize';\n\n/** What `onLayoutChange` reports alongside the new layout. */\nexport interface BoardLayoutChangeInfo {\n reason: BoardLayoutChangeReason;\n}\n\nexport interface UseBoardLayoutOptions {\n /** Controlled layout. */\n layout?: LayoutItem[];\n /** Initial layout for uncontrolled usage. */\n defaultLayout?: LayoutItem[];\n onLayoutChange?: (layout: LayoutItem[], info: BoardLayoutChangeInfo) => void;\n}\n\nexport interface UseBoardLayoutResult {\n layout: LayoutItem[];\n layoutRef: React.MutableRefObject<LayoutItem[]>;\n /**\n * Every drop-slot preview for the gesture in flight. A single-widget drag or\n * resize produces one; a group drag produces one per moving widget.\n */\n placeholders: LayoutItem[];\n /**\n * The grabbed widget's placeholder — `placeholders[0]`, or `null` when there\n * is none. Kept as a derived singular so the public `BoardInteractionInfo`\n * keeps its exact shape.\n */\n placeholder: LayoutItem | null;\n /**\n * Synchronously-updated mirrors of the two above. `setPlaceholders` only\n * schedules a re-render, so consumers that run in the same tick as a\n * `setPlaceholders` call (e.g. drag lifecycle callbacks fired right after the\n * registry updates the placeholders) must read a ref to see the live value.\n */\n placeholdersRef: React.MutableRefObject<LayoutItem[]>;\n placeholderRef: React.MutableRefObject<LayoutItem | null>;\n setPlaceholders: (items: LayoutItem[]) => void;\n /**\n * Update the layout. `commit` fires `onLayoutChange` with `reason`, which is\n * required on a commit so a new commit path cannot forget to say why it\n * fired.\n */\n applyLayout: (\n layout: LayoutItem[],\n commit: boolean,\n reason?: BoardLayoutChangeReason,\n ) => void;\n}\n\n/**\n * Headless layout state for a single board.\n *\n * Supports both controlled (`layout`) and uncontrolled (`defaultLayout`) usage.\n * Intermediate drag/resize previews always update local state; only committed\n * changes call `onLayoutChange`.\n */\nexport function useBoardLayout(\n options: UseBoardLayoutOptions,\n): UseBoardLayoutResult {\n const { layout: controlledLayout, defaultLayout, onLayoutChange } = options;\n const isControlled = controlledLayout !== undefined;\n\n const [layout, setLayout] = useState<LayoutItem[]>(() =>\n cloneLayout(controlledLayout ?? defaultLayout ?? []),\n );\n const layoutRef = useRef<LayoutItem[]>(layout);\n layoutRef.current = layout;\n\n const [placeholders, setPlaceholdersState] = useState<LayoutItem[]>([]);\n const placeholdersRef = useRef<LayoutItem[]>([]);\n const placeholderRef = useRef<LayoutItem | null>(null);\n const setPlaceholders = useCallback((items: LayoutItem[]) => {\n placeholdersRef.current = items;\n // Both mirrors move in the same synchronous call, so a same-tick reader can\n // never see the two disagree.\n placeholderRef.current = items[0] ?? null;\n setPlaceholdersState(items);\n }, []);\n\n const onLayoutChangeEvent = useEvent(\n (next: LayoutItem[], reason: BoardLayoutChangeReason) =>\n onLayoutChange?.(next, { reason }),\n );\n\n // Sync controlled prop into local state when it changes by reference.\n const prevControlledRef = useRef(controlledLayout);\n useEffect(() => {\n if (isControlled && controlledLayout !== prevControlledRef.current) {\n prevControlledRef.current = controlledLayout;\n const next = cloneLayout(controlledLayout ?? []);\n layoutRef.current = next;\n setLayout(next);\n }\n }, [controlledLayout, isControlled]);\n\n const applyLayout = useCallback(\n (\n next: LayoutItem[],\n commit: boolean,\n reason: BoardLayoutChangeReason = 'normalize',\n ) => {\n layoutRef.current = next;\n setLayout(next);\n if (commit) {\n onLayoutChangeEvent(next, reason);\n }\n },\n [onLayoutChangeEvent],\n );\n\n return {\n layout,\n layoutRef,\n placeholders,\n placeholder: placeholders[0] ?? null,\n placeholdersRef,\n placeholderRef,\n setPlaceholders,\n applyLayout,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAmFA,SAAgB,eACd,SACsB;CACtB,MAAM,EAAE,QAAQ,kBAAkB,eAAe,mBAAmB;CACpE,MAAM,eAAe,qBAAqB;CAE1C,MAAM,CAAC,QAAQ,aAAa,eAC1B,YAAY,oBAAoB,iBAAiB,EAAE,CAAC,CACrD;CACD,MAAM,YAAY,OAAqB,OAAO;AAC9C,WAAU,UAAU;CAEpB,MAAM,CAAC,cAAc,wBAAwB,SAAuB,EAAE,CAAC;CACvE,MAAM,kBAAkB,OAAqB,EAAE,CAAC;CAChD,MAAM,iBAAiB,OAA0B,KAAK;CACtD,MAAM,kBAAkB,aAAa,UAAwB;AAC3D,kBAAgB,UAAU;AAG1B,iBAAe,UAAU,MAAM,MAAM;AACrC,uBAAqB,MAAM;IAC1B,EAAE,CAAC;CAEN,MAAM,sBAAsB,UACzB,MAAoB,WACnB,iBAAiB,MAAM,EAAE,QAAQ,CAAC,CACrC;CAGD,MAAM,oBAAoB,OAAO,iBAAiB;AAClD,iBAAgB;AACd,MAAI,gBAAgB,qBAAqB,kBAAkB,SAAS;AAClE,qBAAkB,UAAU;GAC5B,MAAM,OAAO,YAAY,oBAAoB,EAAE,CAAC;AAChD,aAAU,UAAU;AACpB,aAAU,KAAK;;IAEhB,CAAC,kBAAkB,aAAa,CAAC;CAEpC,MAAM,cAAc,aAEhB,MACA,QACA,SAAkC,gBAC/B;AACH,YAAU,UAAU;AACpB,YAAU,KAAK;AACf,MAAI,OACF,qBAAoB,MAAM,OAAO;IAGrC,CAAC,oBAAoB,CACtB;AAED,QAAO;EACL;EACA;EACA;EACA,aAAa,aAAa,MAAM;EAChC;EACA;EACA;EACA;EACD"}
@@ -1,8 +1,9 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { BoardWidgetStore } from "./board-store.js";
4
4
  import { collides } from "./grid-core/collision.js";
5
5
  import { createCollisionResolver } from "./grid-core/collision-modes.js";
6
+ import { placeInFreeSlot } from "./grid-core/placement.js";
6
7
  import { bottom, cloneLayout, getLayoutItem, moveElement } from "./grid-core/layout.js";
7
8
  import { moveElements } from "./grid-core/group-move.js";
8
9
  import { calcXYRaw } from "./grid-core/calculate.js";
@@ -77,58 +78,6 @@ function resizesAnything(before, after) {
77
78
  return !!b && (b.w !== a.w || b.h !== a.h);
78
79
  });
79
80
  }
80
- /**
81
- * First position at or below the preferred cell where `item` fits without
82
- * overlapping any of `others` (assumed overlap-free), scanning left-to-right
83
- * then top-to-bottom, never past `maxRows`. Last-resort placement for a legacy
84
- * (no-op compaction) cross-board drop that would otherwise stack widgets.
85
- *
86
- * A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path
87
- * applies (`clamp(y, 0, maxRows - h)`): the widget's bottom edge (`y + h`) stays
88
- * within the row limit even when the landing cell is blocked, so the downward
89
- * scan can't push it off the board. Rows are searched from the (clamped) landing
90
- * row down to the limit first, then upward toward the top; if the whole valid
91
- * band is full the widget is clamped to the limit (bounds win over overlap, as
92
- * `gridBounds` does). With an unbounded `maxRows` there is always a free slot
93
- * below every existing item, so the downward scan terminates on its own.
94
- */
95
- function placeInFreeSlot(others, item, cols, maxRows = Infinity) {
96
- const w = Math.min(item.w, cols);
97
- const maxY = Number.isFinite(maxRows) ? Math.max(0, maxRows - item.h) : Infinity;
98
- const fits = (x, y) => !others.some((o) => collides(o, {
99
- ...item,
100
- x,
101
- y,
102
- w
103
- }));
104
- const preferX = Math.min(Math.max(0, item.x), cols - w);
105
- const startY = Math.min(Math.max(0, item.y), maxY);
106
- if (fits(preferX, startY)) return {
107
- ...item,
108
- x: preferX,
109
- y: startY,
110
- w
111
- };
112
- const scanBottom = Number.isFinite(maxRows) ? maxY : startY + others.reduce((m, o) => Math.max(m, o.y + o.h), 0) + 1;
113
- for (let y = startY; y <= scanBottom; y++) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
114
- ...item,
115
- x,
116
- y,
117
- w
118
- };
119
- for (let y = startY - 1; y >= 0; y--) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
120
- ...item,
121
- x,
122
- y,
123
- w
124
- };
125
- return {
126
- ...item,
127
- x: preferX,
128
- y: startY,
129
- w
130
- };
131
- }
132
81
  function useBoardRegistry(options) {
133
82
  const store = useMemo(() => new BoardWidgetStore(), []);
134
83
  const onTransferRef = useRef(options?.onWidgetTransfer);
@@ -640,7 +589,7 @@ function useBoardRegistry(options) {
640
589
  if (source) {
641
590
  const sp = source.getPositionParams();
642
591
  const sc = source.getCompactor();
643
- source.applyLayout([...sc.compact(source.getLayout(), sp.cols)], true);
592
+ source.applyLayout([...sc.compact(source.getLayout(), sp.cols)], true, "drag");
644
593
  }
645
594
  } else {
646
595
  const landing = lastLandingRef.current ?? {
@@ -661,7 +610,7 @@ function useBoardRegistry(options) {
661
610
  const sp = source.getPositionParams();
662
611
  const sc = source.getCompactor();
663
612
  const remaining = source.getLayout().filter((l) => l.i !== ds.itemId);
664
- source.applyLayout([...sc.compact(remaining, sp.cols)], true);
613
+ source.applyLayout([...sc.compact(remaining, sp.cols)], true, "transfer");
665
614
  }
666
615
  let finalLayout;
667
616
  if (carried) finalLayout = strictIncomingSwap ? cloneLayout(carried) : [...tc.compact(cloneLayout(carried), tp.cols)];
@@ -692,7 +641,7 @@ function useBoardRegistry(options) {
692
641
  x: landing.x,
693
642
  y: landing.y
694
643
  }, tp.cols, tp.maxRows)];
695
- target.applyLayout(finalLayout, true);
644
+ target.applyLayout(finalLayout, true, "transfer");
696
645
  onTransferRef.current?.({
697
646
  widgetId: ds.itemId,
698
647
  fromBoardId: ds.sourceBoardId,