@cube-dev/ui-kit 0.0.0-canary-4c90a81 → 0.0.0-canary-c26fe9d

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 (476) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/index.js +1 -1
  37. package/dist/components/actions/use-action.js +1 -1
  38. package/dist/components/actions/use-anchored-menu.js +1 -1
  39. package/dist/components/actions/use-context-menu.js +1 -1
  40. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/dist/components/content/Alert/Alert.js +1 -1
  42. package/dist/components/content/Alert/use-alert.js +1 -1
  43. package/dist/components/content/Avatar/Avatar.js +1 -1
  44. package/dist/components/content/Badge/Badge.js +1 -1
  45. package/dist/components/content/Card/Card.js +1 -1
  46. package/dist/components/content/Content.js +1 -1
  47. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  48. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  49. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  50. package/dist/components/content/Divider.js +1 -1
  51. package/dist/components/content/Footer.js +1 -1
  52. package/dist/components/content/Header.js +1 -1
  53. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  54. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  55. package/dist/components/content/Item/Item.js +1 -1
  56. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  57. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  58. package/dist/components/content/Layout/GridLayout.js +1 -1
  59. package/dist/components/content/Layout/Layout.js +1 -1
  60. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  61. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  62. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  63. package/dist/components/content/Layout/LayoutContent.js +1 -1
  64. package/dist/components/content/Layout/LayoutContext.js +1 -1
  65. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  66. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  67. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  68. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  69. package/dist/components/content/Layout/LayoutPane.js +1 -1
  70. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  73. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  74. package/dist/components/content/Layout/index.js +1 -1
  75. package/dist/components/content/Layout/utils.js +1 -1
  76. package/dist/components/content/Paragraph.js +1 -1
  77. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  78. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  79. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  80. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  81. package/dist/components/content/Result/Result.js +1 -1
  82. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  83. package/dist/components/content/Tag/Tag.js +1 -1
  84. package/dist/components/content/Text.js +1 -1
  85. package/dist/components/content/TextItem/TextItem.js +1 -1
  86. package/dist/components/content/Title.js +1 -1
  87. package/dist/components/content/Tree/Tree.js +1 -1
  88. package/dist/components/content/Tree/TreeNode.js +1 -1
  89. package/dist/components/content/Tree/styled.js +1 -1
  90. package/dist/components/content/Tree/tree-index.js +1 -1
  91. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  92. package/dist/components/content/Tree/use-load-data.js +1 -1
  93. package/dist/components/content/highlightText.js +1 -1
  94. package/dist/components/content/use-auto-tooltip.js +1 -1
  95. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  96. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  97. package/dist/components/fields/Checkbox/context.js +1 -1
  98. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  99. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  100. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  101. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  102. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  103. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  104. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  105. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  106. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  107. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  108. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  109. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  110. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  111. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  112. package/dist/components/fields/DatePicker/intl.js +1 -1
  113. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  114. package/dist/components/fields/DatePicker/props.js +1 -1
  115. package/dist/components/fields/DatePicker/utils.js +1 -1
  116. package/dist/components/fields/FileInput/FileInput.js +1 -1
  117. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  118. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  119. package/dist/components/fields/Input/Input.js +1 -1
  120. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  121. package/dist/components/fields/ListBox/ListBox.js +1 -1
  122. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  123. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  124. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  125. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  126. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  127. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  128. package/dist/components/fields/Picker/Picker.js +1 -1
  129. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  130. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  131. package/dist/components/fields/RadioGroup/context.js +1 -1
  132. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  133. package/dist/components/fields/Select/Select.js +1 -1
  134. package/dist/components/fields/Slider/Gradation.js +1 -1
  135. package/dist/components/fields/Slider/HueSlider.js +1 -1
  136. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  137. package/dist/components/fields/Slider/Slider.js +1 -1
  138. package/dist/components/fields/Slider/SliderBase.js +1 -1
  139. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  140. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  141. package/dist/components/fields/Slider/elements.js +1 -1
  142. package/dist/components/fields/Slider/index.js +1 -1
  143. package/dist/components/fields/Switch/Switch.js +1 -1
  144. package/dist/components/fields/TextArea/TextArea.js +1 -1
  145. package/dist/components/fields/TextInput/TextInput.js +1 -1
  146. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  147. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  148. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  149. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  150. package/dist/components/form/Form/Field.js +1 -1
  151. package/dist/components/form/Form/Form.js +1 -1
  152. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  153. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  154. package/dist/components/form/Form/SubmitError.js +1 -1
  155. package/dist/components/form/Form/index.js +1 -1
  156. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  157. package/dist/components/form/Form/use-field/use-field.js +1 -1
  158. package/dist/components/form/Form/use-form.js +1 -1
  159. package/dist/components/form/Form/validation.js +1 -1
  160. package/dist/components/form/Label.js +1 -1
  161. package/dist/components/form/wrapper.js +1 -1
  162. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  163. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  164. package/dist/components/layout/Board/Board.d.ts +110 -0
  165. package/dist/components/layout/Board/Board.js +447 -0
  166. package/dist/components/layout/Board/Board.js.map +1 -0
  167. package/dist/components/layout/Board/BoardProvider.d.ts +28 -0
  168. package/dist/components/layout/Board/BoardProvider.js +47 -0
  169. package/dist/components/layout/Board/BoardProvider.js.map +1 -0
  170. package/dist/components/layout/Board/BoardResponsive.d.ts +45 -0
  171. package/dist/components/layout/Board/BoardResponsive.js +94 -0
  172. package/dist/components/layout/Board/BoardResponsive.js.map +1 -0
  173. package/dist/components/layout/Board/Widget.d.ts +49 -0
  174. package/dist/components/layout/Board/Widget.js +42 -0
  175. package/dist/components/layout/Board/Widget.js.map +1 -0
  176. package/dist/components/layout/Board/WidgetHost.js +341 -0
  177. package/dist/components/layout/Board/WidgetHost.js.map +1 -0
  178. package/dist/components/layout/Board/board-context.d.ts +16 -0
  179. package/dist/components/layout/Board/board-context.js +32 -0
  180. package/dist/components/layout/Board/board-context.js.map +1 -0
  181. package/dist/components/layout/Board/board-store.d.ts +3 -0
  182. package/dist/components/layout/Board/board-store.js +49 -0
  183. package/dist/components/layout/Board/board-store.js.map +1 -0
  184. package/dist/components/layout/Board/grid-core/calculate.js +90 -0
  185. package/dist/components/layout/Board/grid-core/calculate.js.map +1 -0
  186. package/dist/components/layout/Board/grid-core/collision.js +35 -0
  187. package/dist/components/layout/Board/grid-core/collision.js.map +1 -0
  188. package/dist/components/layout/Board/grid-core/compactors.d.ts +23 -0
  189. package/dist/components/layout/Board/grid-core/compactors.js +166 -0
  190. package/dist/components/layout/Board/grid-core/compactors.js.map +1 -0
  191. package/dist/components/layout/Board/grid-core/constraints.d.ts +35 -0
  192. package/dist/components/layout/Board/grid-core/constraints.js +155 -0
  193. package/dist/components/layout/Board/grid-core/constraints.js.map +1 -0
  194. package/dist/components/layout/Board/grid-core/layout.js +176 -0
  195. package/dist/components/layout/Board/grid-core/layout.js.map +1 -0
  196. package/dist/components/layout/Board/grid-core/sort.js +37 -0
  197. package/dist/components/layout/Board/grid-core/sort.js.map +1 -0
  198. package/dist/components/layout/Board/grid-core/types.d.ts +168 -0
  199. package/dist/components/layout/Board/index.d.ts +21 -0
  200. package/dist/components/layout/Board/index.js +18 -0
  201. package/dist/components/layout/Board/index.js.map +1 -0
  202. package/dist/components/layout/Board/responsive-utils.d.ts +13 -0
  203. package/dist/components/layout/Board/responsive-utils.js +55 -0
  204. package/dist/components/layout/Board/responsive-utils.js.map +1 -0
  205. package/dist/components/layout/Board/use-board-layout.js +52 -0
  206. package/dist/components/layout/Board/use-board-layout.js.map +1 -0
  207. package/dist/components/layout/Board/use-board-registry.js +372 -0
  208. package/dist/components/layout/Board/use-board-registry.js.map +1 -0
  209. package/dist/components/layout/Flex.js +1 -1
  210. package/dist/components/layout/Flow.js +1 -1
  211. package/dist/components/layout/Grid.js +1 -1
  212. package/dist/components/layout/Panel.js +1 -1
  213. package/dist/components/layout/Prefix.js +1 -1
  214. package/dist/components/layout/ResizablePanel.js +1 -1
  215. package/dist/components/layout/Space.js +1 -1
  216. package/dist/components/layout/Suffix.js +1 -1
  217. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  218. package/dist/components/navigation/Tabs/TabButton.js +36 -4
  219. package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
  220. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  221. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  222. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  223. package/dist/components/navigation/Tabs/Tabs.js +6 -3
  224. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  225. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  226. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  227. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  228. package/dist/components/navigation/Tabs/styled.js +3 -2
  229. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  230. package/dist/components/navigation/Tabs/types.js +1 -1
  231. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  232. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  233. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  234. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  235. package/dist/components/other/Calendar/Calendar.js +1 -1
  236. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  237. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  238. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  239. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  240. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  241. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  242. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  243. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  244. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  245. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  246. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  247. package/dist/components/overlays/Dialog/context.js +1 -1
  248. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  249. package/dist/components/overlays/Modal/Modal.js +1 -1
  250. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  251. package/dist/components/overlays/Modal/Overlay.js +1 -1
  252. package/dist/components/overlays/Modal/Popover.js +1 -1
  253. package/dist/components/overlays/Modal/Tray.js +1 -1
  254. package/dist/components/overlays/Modal/Underlay.js +1 -1
  255. package/dist/components/overlays/Notifications/Notification.js +1 -1
  256. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  257. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  258. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  259. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  260. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  261. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  262. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  263. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  264. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  265. package/dist/components/overlays/Notifications/index.js +1 -1
  266. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  267. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  268. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  269. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  270. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  271. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  272. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  273. package/dist/components/overlays/Toast/index.js +1 -1
  274. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  275. package/dist/components/overlays/Toast/useToast.js +1 -1
  276. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  277. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  278. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  279. package/dist/components/overlays/Tooltip/context.js +1 -1
  280. package/dist/components/portal/Portal.js +1 -1
  281. package/dist/components/portal/PortalProvider.js +1 -1
  282. package/dist/components/portal/usePortal.js +1 -1
  283. package/dist/components/shared/DraggableCollection.js +1 -1
  284. package/dist/components/shared/InvalidIcon.js +1 -1
  285. package/dist/components/shared/ValidIcon.js +1 -1
  286. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  287. package/dist/components/status/Spin/Cube.js +1 -1
  288. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  289. package/dist/components/status/Spin/Spin.js +1 -1
  290. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  291. package/dist/data/item-themes.js +1 -1
  292. package/dist/data/themes.js +1 -1
  293. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  294. package/dist/icons/AdjustmentsIcon.js +1 -1
  295. package/dist/icons/AiIcon.js +1 -1
  296. package/dist/icons/AreaChartIcon.js +1 -1
  297. package/dist/icons/BackwardIcon.js +1 -1
  298. package/dist/icons/BarChartIcon.js +1 -1
  299. package/dist/icons/BellFilledIcon.js +1 -1
  300. package/dist/icons/BellIcon.js +1 -1
  301. package/dist/icons/BooleanIcon.js +1 -1
  302. package/dist/icons/CalendarEditIcon.js +1 -1
  303. package/dist/icons/CalendarIcon.js +1 -1
  304. package/dist/icons/CaretDownIcon.js +1 -1
  305. package/dist/icons/CaretUpIcon.js +1 -1
  306. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  307. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  308. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  309. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  310. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  311. package/dist/icons/ChartBarLineIcon.js +1 -1
  312. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  313. package/dist/icons/ChartBarStackedIcon.js +1 -1
  314. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  315. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  316. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  317. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  318. package/dist/icons/ChartBubbleIcon.js +1 -1
  319. package/dist/icons/ChartDonut2Icon.js +1 -1
  320. package/dist/icons/ChartFunnelIcon.js +1 -1
  321. package/dist/icons/ChartHeatmapIcon.js +1 -1
  322. package/dist/icons/ChartKPIIcon.js +1 -1
  323. package/dist/icons/ChartPie2Icon.js +1 -1
  324. package/dist/icons/ChartScatterIcon.js +1 -1
  325. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  326. package/dist/icons/CheckCircleIcon.js +1 -1
  327. package/dist/icons/CheckIcon.js +1 -1
  328. package/dist/icons/CircleFilledIcon.js +1 -1
  329. package/dist/icons/ClearIcon.js +1 -1
  330. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  331. package/dist/icons/CloseCircleIcon.js +1 -1
  332. package/dist/icons/CloseIcon.js +1 -1
  333. package/dist/icons/CodeIcon.js +1 -1
  334. package/dist/icons/ColumnTotalIcon.js +1 -1
  335. package/dist/icons/CopyIcon.js +1 -1
  336. package/dist/icons/CountIcon.js +1 -1
  337. package/dist/icons/CubeIcon.js +1 -1
  338. package/dist/icons/CubePauseIcon.js +1 -1
  339. package/dist/icons/CubePlayIcon.js +1 -1
  340. package/dist/icons/CurrencyDollarIcon.js +1 -1
  341. package/dist/icons/DangerIcon.js +1 -1
  342. package/dist/icons/DashboardIcon.js +1 -1
  343. package/dist/icons/DatabaseIcon.js +1 -1
  344. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  345. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  346. package/dist/icons/DirectionIcon.js +1 -1
  347. package/dist/icons/DonutIcon.js +1 -1
  348. package/dist/icons/DownIcon.js +1 -1
  349. package/dist/icons/EditIcon.js +1 -1
  350. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  351. package/dist/icons/ExclamationCircleIcon.js +1 -1
  352. package/dist/icons/ExclamationIcon.js +1 -1
  353. package/dist/icons/EyeIcon.js +1 -1
  354. package/dist/icons/EyeInvisibleIcon.js +1 -1
  355. package/dist/icons/FilterIcon.js +1 -1
  356. package/dist/icons/FolderFilledIcon.js +1 -1
  357. package/dist/icons/FolderIcon.js +1 -1
  358. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  359. package/dist/icons/FolderOpenIcon.js +1 -1
  360. package/dist/icons/ForwardIcon.js +1 -1
  361. package/dist/icons/GripVerticalIcon.js +1 -1
  362. package/dist/icons/HierarchyIcon.js +1 -1
  363. package/dist/icons/HierarchyOpenIcon.js +1 -1
  364. package/dist/icons/Icon.js +1 -1
  365. package/dist/icons/InfoCircleIcon.js +1 -1
  366. package/dist/icons/InfoIcon.js +1 -1
  367. package/dist/icons/KeyIcon.js +1 -1
  368. package/dist/icons/LeftIcon.js +1 -1
  369. package/dist/icons/LineChartIcon.js +1 -1
  370. package/dist/icons/LoadingIcon.js +1 -1
  371. package/dist/icons/LockFilledIcon.js +1 -1
  372. package/dist/icons/LockIcon.js +1 -1
  373. package/dist/icons/MoreIcon.js +1 -1
  374. package/dist/icons/NotAllowedIcon.js +1 -1
  375. package/dist/icons/Number123Icon.js +1 -1
  376. package/dist/icons/NumberIcon.js +1 -1
  377. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  378. package/dist/icons/PauseCircleIcon.js +1 -1
  379. package/dist/icons/PauseIcon.js +1 -1
  380. package/dist/icons/PercentageIcon.js +1 -1
  381. package/dist/icons/PieChartIcon.js +1 -1
  382. package/dist/icons/PlayCircleIcon.js +1 -1
  383. package/dist/icons/PlayIcon.js +1 -1
  384. package/dist/icons/PlusIcon.js +1 -1
  385. package/dist/icons/ProgressBarIcon.js +1 -1
  386. package/dist/icons/ReloadIcon.js +1 -1
  387. package/dist/icons/ReportIcon.js +1 -1
  388. package/dist/icons/ReturnIcon.js +1 -1
  389. package/dist/icons/RightIcon.js +1 -1
  390. package/dist/icons/RowTotalsIcon.js +1 -1
  391. package/dist/icons/SchemeIcon.js +1 -1
  392. package/dist/icons/SearchIcon.js +1 -1
  393. package/dist/icons/SemanticQueryIcon.js +1 -1
  394. package/dist/icons/SettingsIcon.js +1 -1
  395. package/dist/icons/ShieldFilledIcon.js +1 -1
  396. package/dist/icons/ShieldIcon.js +1 -1
  397. package/dist/icons/SlashIcon.js +1 -1
  398. package/dist/icons/SparklesIcon.js +1 -1
  399. package/dist/icons/SqlIcon.js +1 -1
  400. package/dist/icons/StatsIcon.js +1 -1
  401. package/dist/icons/StopIcon.js +1 -1
  402. package/dist/icons/StringIcon.js +1 -1
  403. package/dist/icons/SubtotalsIcon.js +1 -1
  404. package/dist/icons/SwitchIcon.js +1 -1
  405. package/dist/icons/TableIcon.js +1 -1
  406. package/dist/icons/ThumbsDownIcon.js +1 -1
  407. package/dist/icons/ThumbsUpIcon.js +1 -1
  408. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  409. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  410. package/dist/icons/ThunderboltIcon.js +1 -1
  411. package/dist/icons/TimeIcon.js +1 -1
  412. package/dist/icons/TrashIcon.js +1 -1
  413. package/dist/icons/UnlockIcon.js +1 -1
  414. package/dist/icons/UpIcon.js +1 -1
  415. package/dist/icons/UserGroupIcon.js +1 -1
  416. package/dist/icons/UserIcon.js +1 -1
  417. package/dist/icons/UserLockIcon.js +1 -1
  418. package/dist/icons/ViewIcon.js +1 -1
  419. package/dist/icons/WarningFilledIcon.js +1 -1
  420. package/dist/icons/WarningIcon.js +1 -1
  421. package/dist/icons/wrap-icon.js +1 -1
  422. package/dist/index.d.ts +12 -2
  423. package/dist/index.js +8 -2
  424. package/dist/index.js.map +1 -1
  425. package/dist/provider.js +1 -1
  426. package/dist/providers/TrackingProvider.js +1 -1
  427. package/dist/providers/navigationAdapter.default.js +1 -1
  428. package/dist/tokens/base.js +1 -1
  429. package/dist/tokens/colors.js +1 -1
  430. package/dist/tokens/index.js +1 -1
  431. package/dist/tokens/layout.js +1 -1
  432. package/dist/tokens/palette.js +1 -1
  433. package/dist/tokens/shadows.js +1 -1
  434. package/dist/tokens/sizes.js +1 -1
  435. package/dist/tokens/spacing.js +1 -1
  436. package/dist/tokens/typography.js +1 -1
  437. package/dist/utils/ResizeSensor.js +1 -1
  438. package/dist/utils/is-dev-env.js +1 -1
  439. package/dist/utils/modules.js +1 -1
  440. package/dist/utils/promise.js +1 -1
  441. package/dist/utils/raf.js +1 -1
  442. package/dist/utils/random.js +1 -1
  443. package/dist/utils/range.js +1 -1
  444. package/dist/utils/react/RenderCache.js +1 -1
  445. package/dist/utils/react/Slots.js +1 -1
  446. package/dist/utils/react/chain.js +1 -1
  447. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  448. package/dist/utils/react/index.js +1 -1
  449. package/dist/utils/react/interactions.js +1 -1
  450. package/dist/utils/react/isTextOnly.js +1 -1
  451. package/dist/utils/react/mapProps.js +1 -1
  452. package/dist/utils/react/mergeProps.js +1 -1
  453. package/dist/utils/react/nullableValue.js +1 -1
  454. package/dist/utils/react/resolveIcon.js +1 -1
  455. package/dist/utils/react/sharedStore.js +1 -1
  456. package/dist/utils/react/useCombinedRefs.js +1 -1
  457. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  458. package/dist/utils/react/useEventBus.js +1 -1
  459. package/dist/utils/react/useId.js +1 -1
  460. package/dist/utils/react/useIsDarwin.js +1 -1
  461. package/dist/utils/react/useKeySymbols.js +1 -1
  462. package/dist/utils/react/useLayoutEffect.js +1 -1
  463. package/dist/utils/react/useLocalStorage.js +1 -1
  464. package/dist/utils/react/useMergeStyles.js +1 -1
  465. package/dist/utils/react/usePopoverSync.js +1 -1
  466. package/dist/utils/react/useQaProps.js +1 -1
  467. package/dist/utils/react/useViewportSize.js +1 -1
  468. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  469. package/dist/utils/selection.js +1 -1
  470. package/dist/utils/styles.js +1 -1
  471. package/dist/utils/tree.js +1 -1
  472. package/dist/utils/warnings.js +1 -1
  473. package/dist/version.js +2 -2
  474. package/docs/components/layout/Board.md +212 -0
  475. package/docs/components/navigation/Tabs.md +18 -2
  476. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c26fe9d | Cube Dev Team */
2
+ //#region src/components/layout/Board/grid-core/collision.ts
3
+ /**
4
+ * Check if two layout items collide (overlap).
5
+ *
6
+ * Two items collide if their bounding boxes overlap and they are not the same
7
+ * item.
8
+ */
9
+ function collides(l1, l2) {
10
+ if (l1.i === l2.i) return false;
11
+ if (l1.x + l1.w <= l2.x) return false;
12
+ if (l1.x >= l2.x + l2.w) return false;
13
+ if (l1.y + l1.h <= l2.y) return false;
14
+ if (l1.y >= l2.y + l2.h) return false;
15
+ return true;
16
+ }
17
+ /**
18
+ * Find the first item in the layout that collides with the given item.
19
+ */
20
+ function getFirstCollision(layout, layoutItem) {
21
+ for (let i = 0; i < layout.length; i++) {
22
+ const item = layout[i];
23
+ if (item !== void 0 && collides(item, layoutItem)) return item;
24
+ }
25
+ }
26
+ /**
27
+ * Find all items in the layout that collide with the given item.
28
+ */
29
+ function getAllCollisions(layout, layoutItem) {
30
+ return layout.filter((l) => collides(l, layoutItem));
31
+ }
32
+
33
+ //#endregion
34
+ export { collides, getAllCollisions, getFirstCollision };
35
+ //# sourceMappingURL=collision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collision.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/collision.ts"],"sourcesContent":["/**\n * Collision detection utilities for grid layouts.\n *\n * Vendored from react-grid-layout v2 (`src/core/collision.ts`).\n * See ./NOTICE.md for attribution and license.\n */\n\nimport type { Layout, LayoutItem } from './types';\n\n/**\n * Check if two layout items collide (overlap).\n *\n * Two items collide if their bounding boxes overlap and they are not the same\n * item.\n */\nexport function collides(l1: LayoutItem, l2: LayoutItem): boolean {\n // Same element - can't collide with itself\n if (l1.i === l2.i) return false;\n\n // Check if bounding boxes don't overlap (any gap means no collision)\n if (l1.x + l1.w <= l2.x) return false; // l1 is completely left of l2\n if (l1.x >= l2.x + l2.w) return false; // l1 is completely right of l2\n if (l1.y + l1.h <= l2.y) return false; // l1 is completely above l2\n if (l1.y >= l2.y + l2.h) return false; // l1 is completely below l2\n\n // Bounding boxes overlap\n return true;\n}\n\n/**\n * Find the first item in the layout that collides with the given item.\n */\nexport function getFirstCollision(\n layout: Layout,\n layoutItem: LayoutItem,\n): LayoutItem | undefined {\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined && collides(item, layoutItem)) {\n return item;\n }\n }\n return undefined;\n}\n\n/**\n * Find all items in the layout that collide with the given item.\n */\nexport function getAllCollisions(\n layout: Layout,\n layoutItem: LayoutItem,\n): LayoutItem[] {\n return layout.filter((l): l is LayoutItem => collides(l, layoutItem));\n}\n"],"mappings":";;;;;;;;AAeA,SAAgB,SAAS,IAAgB,IAAyB;AAEhE,KAAI,GAAG,MAAM,GAAG,EAAG,QAAO;AAG1B,KAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAG,QAAO;AAChC,KAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAG,QAAO;AAChC,KAAI,GAAG,IAAI,GAAG,KAAK,GAAG,EAAG,QAAO;AAChC,KAAI,GAAG,KAAK,GAAG,IAAI,GAAG,EAAG,QAAO;AAGhC,QAAO;;;;;AAMT,SAAgB,kBACd,QACA,YACwB;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,UAAa,SAAS,MAAM,WAAW,CAClD,QAAO;;;;;;AASb,SAAgB,iBACd,QACA,YACc;AACd,QAAO,OAAO,QAAQ,MAAuB,SAAS,GAAG,WAAW,CAAC"}
@@ -0,0 +1,23 @@
1
+
2
+ import { CompactType, Compactor } from "./types.js";
3
+
4
+ //#region src/components/layout/Board/grid-core/compactors.d.ts
5
+ /**
6
+ * Vertical compactor - moves items up to fill gaps. Default compaction mode.
7
+ */
8
+ declare const verticalCompactor: Compactor;
9
+ /**
10
+ * Horizontal compactor - moves items left to fill gaps.
11
+ */
12
+ declare const horizontalCompactor: Compactor;
13
+ /**
14
+ * No compaction - items stay where placed (free-form layouts).
15
+ */
16
+ declare const noCompactor: Compactor;
17
+ /**
18
+ * Get a compactor by type (convenience for the string-based compactType API).
19
+ */
20
+ declare function getCompactor(compactType: CompactType, allowOverlap?: boolean, preventCollision?: boolean): Compactor;
21
+ //#endregion
22
+ export { getCompactor, horizontalCompactor, noCompactor, verticalCompactor };
23
+ //# sourceMappingURL=compactors.d.ts.map
@@ -0,0 +1,166 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c26fe9d | Cube Dev Team */
2
+ import { collides, getFirstCollision } from "./collision.js";
3
+ import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
4
+ import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
5
+
6
+ //#region src/components/layout/Board/grid-core/compactors.ts
7
+ /**
8
+ * Compactor implementations.
9
+ *
10
+ * Vendored from react-grid-layout v2 (`src/core/compactors.ts`).
11
+ * See ./NOTICE.md for attribution and license.
12
+ *
13
+ * Compactors are pluggable strategies for removing gaps between grid items.
14
+ */
15
+ /**
16
+ * Resolve a compaction collision by moving items.
17
+ *
18
+ * Before moving an item to a position, checks if that movement would cause
19
+ * collisions and recursively moves those items first.
20
+ */
21
+ function resolveCompactionCollision(layout, item, moveToCoord, axis, hasStatics) {
22
+ const sizeProp = axis === "x" ? "w" : "h";
23
+ item[axis] += 1;
24
+ const itemIndex = layout.findIndex((l) => l.i === item.i);
25
+ const layoutHasStatics = hasStatics ?? getStatics(layout).length > 0;
26
+ for (let i = itemIndex + 1; i < layout.length; i++) {
27
+ const otherItem = layout[i];
28
+ if (otherItem === void 0) continue;
29
+ if (otherItem.static) continue;
30
+ if (!layoutHasStatics && otherItem.y > item.y + item.h) break;
31
+ if (collides(item, otherItem)) resolveCompactionCollision(layout, otherItem, moveToCoord + item[sizeProp], axis, layoutHasStatics);
32
+ }
33
+ item[axis] = moveToCoord;
34
+ }
35
+ /** Compact a single item vertically (move up). Mutates `l`. */
36
+ function compactItemVertical(compareWith, l, fullLayout, maxY) {
37
+ l.x = Math.max(l.x, 0);
38
+ l.y = Math.max(l.y, 0);
39
+ l.y = Math.min(maxY, l.y);
40
+ while (l.y > 0 && !getFirstCollision(compareWith, l)) l.y--;
41
+ let collision;
42
+ while ((collision = getFirstCollision(compareWith, l)) !== void 0) resolveCompactionCollision(fullLayout, l, collision.y + collision.h, "y");
43
+ l.y = Math.max(l.y, 0);
44
+ return l;
45
+ }
46
+ /** Compact a single item horizontally (move left). Mutates `l`. */
47
+ function compactItemHorizontal(compareWith, l, cols, fullLayout) {
48
+ l.x = Math.max(l.x, 0);
49
+ l.y = Math.max(l.y, 0);
50
+ while (l.x > 0 && !getFirstCollision(compareWith, l)) l.x--;
51
+ let collision;
52
+ while ((collision = getFirstCollision(compareWith, l)) !== void 0) {
53
+ resolveCompactionCollision(fullLayout, l, collision.x + collision.w, "x");
54
+ if (l.x + l.w > cols) {
55
+ l.x = cols - l.w;
56
+ l.y++;
57
+ while (l.x > 0 && !getFirstCollision(compareWith, l)) l.x--;
58
+ }
59
+ }
60
+ l.x = Math.max(l.x, 0);
61
+ return l;
62
+ }
63
+ /**
64
+ * Vertical compactor - moves items up to fill gaps. Default compaction mode.
65
+ */
66
+ const verticalCompactor = {
67
+ type: "vertical",
68
+ allowOverlap: false,
69
+ compact(layout, _cols) {
70
+ const compareWith = getStatics(layout);
71
+ let maxY = bottom(compareWith);
72
+ const sorted = sortLayoutItemsByRowCol(layout);
73
+ const out = new Array(layout.length);
74
+ for (let i = 0; i < sorted.length; i++) {
75
+ const sortedItem = sorted[i];
76
+ if (sortedItem === void 0) continue;
77
+ let l = cloneLayoutItem(sortedItem);
78
+ if (!l.static) {
79
+ l = compactItemVertical(compareWith, l, sorted, maxY);
80
+ maxY = Math.max(maxY, l.y + l.h);
81
+ compareWith.push(l);
82
+ }
83
+ const originalIndex = layout.indexOf(sortedItem);
84
+ out[originalIndex] = l;
85
+ l.moved = false;
86
+ }
87
+ return out;
88
+ }
89
+ };
90
+ /**
91
+ * Horizontal compactor - moves items left to fill gaps.
92
+ */
93
+ const horizontalCompactor = {
94
+ type: "horizontal",
95
+ allowOverlap: false,
96
+ compact(layout, cols) {
97
+ const compareWith = getStatics(layout);
98
+ const sorted = sortLayoutItemsByColRow(layout);
99
+ const out = new Array(layout.length);
100
+ for (let i = 0; i < sorted.length; i++) {
101
+ const sortedItem = sorted[i];
102
+ if (sortedItem === void 0) continue;
103
+ let l = cloneLayoutItem(sortedItem);
104
+ if (!l.static) {
105
+ l = compactItemHorizontal(compareWith, l, cols, sorted);
106
+ compareWith.push(l);
107
+ }
108
+ const originalIndex = layout.indexOf(sortedItem);
109
+ out[originalIndex] = l;
110
+ l.moved = false;
111
+ }
112
+ return out;
113
+ }
114
+ };
115
+ /**
116
+ * No compaction - items stay where placed (free-form layouts).
117
+ */
118
+ const noCompactor = {
119
+ type: null,
120
+ allowOverlap: false,
121
+ compact(layout, _cols) {
122
+ return cloneLayout(layout);
123
+ }
124
+ };
125
+ /** Vertical compactor that allows overlapping items. */
126
+ const verticalOverlapCompactor = {
127
+ ...verticalCompactor,
128
+ allowOverlap: true,
129
+ compact(layout, _cols) {
130
+ return cloneLayout(layout);
131
+ }
132
+ };
133
+ /** Horizontal compactor that allows overlapping items. */
134
+ const horizontalOverlapCompactor = {
135
+ ...horizontalCompactor,
136
+ allowOverlap: true,
137
+ compact(layout, _cols) {
138
+ return cloneLayout(layout);
139
+ }
140
+ };
141
+ /** No compaction, with overlapping allowed. */
142
+ const noOverlapCompactor = {
143
+ ...noCompactor,
144
+ allowOverlap: true
145
+ };
146
+ /**
147
+ * Get a compactor by type (convenience for the string-based compactType API).
148
+ */
149
+ function getCompactor(compactType, allowOverlap = false, preventCollision = false) {
150
+ let baseCompactor;
151
+ if (allowOverlap) if (compactType === "vertical") baseCompactor = verticalOverlapCompactor;
152
+ else if (compactType === "horizontal") baseCompactor = horizontalOverlapCompactor;
153
+ else baseCompactor = noOverlapCompactor;
154
+ else if (compactType === "vertical") baseCompactor = verticalCompactor;
155
+ else if (compactType === "horizontal") baseCompactor = horizontalCompactor;
156
+ else baseCompactor = noCompactor;
157
+ if (preventCollision) return {
158
+ ...baseCompactor,
159
+ preventCollision
160
+ };
161
+ return baseCompactor;
162
+ }
163
+
164
+ //#endregion
165
+ export { getCompactor, horizontalCompactor, noCompactor, verticalCompactor };
166
+ //# sourceMappingURL=compactors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compactors.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/compactors.ts"],"sourcesContent":["/**\n * Compactor implementations.\n *\n * Vendored from react-grid-layout v2 (`src/core/compactors.ts`).\n * See ./NOTICE.md for attribution and license.\n *\n * Compactors are pluggable strategies for removing gaps between grid items.\n */\n\nimport { collides, getFirstCollision } from './collision';\nimport { bottom, cloneLayout, cloneLayoutItem, getStatics } from './layout';\nimport { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from './sort';\n\nimport type {\n Compactor,\n CompactType,\n Layout,\n LayoutItem,\n Mutable,\n} from './types';\n\n// ============================================================================\n// Helpers for Custom Compactors\n// ============================================================================\n\n/**\n * Resolve a compaction collision by moving items.\n *\n * Before moving an item to a position, checks if that movement would cause\n * collisions and recursively moves those items first.\n */\nexport function resolveCompactionCollision(\n layout: Layout,\n item: LayoutItem,\n moveToCoord: number,\n axis: 'x' | 'y',\n hasStatics?: boolean,\n): void {\n const sizeProp = axis === 'x' ? 'w' : 'h';\n\n // Temporarily increment position to check for collisions\n (item as Mutable<LayoutItem>)[axis] += 1;\n\n const itemIndex = layout.findIndex((l) => l.i === item.i);\n\n const layoutHasStatics = hasStatics ?? getStatics(layout).length > 0;\n\n for (let i = itemIndex + 1; i < layout.length; i++) {\n const otherItem = layout[i];\n if (otherItem === undefined) continue;\n if (otherItem.static) continue;\n // Optimization: break early if past this element, but only if no statics\n // are present. Static items can be scattered throughout the layout.\n if (!layoutHasStatics && otherItem.y > item.y + item.h) break;\n\n if (collides(item, otherItem)) {\n resolveCompactionCollision(\n layout,\n otherItem,\n moveToCoord + item[sizeProp],\n axis,\n layoutHasStatics,\n );\n }\n }\n\n (item as Mutable<LayoutItem>)[axis] = moveToCoord;\n}\n\n/** Compact a single item vertically (move up). Mutates `l`. */\nexport function compactItemVertical(\n compareWith: Layout,\n l: LayoutItem,\n fullLayout: Layout,\n maxY: number,\n): LayoutItem {\n // Correct negative positions first\n (l as Mutable<LayoutItem>).x = Math.max(l.x, 0);\n (l as Mutable<LayoutItem>).y = Math.max(l.y, 0);\n\n // Limit Y to the current bottom\n (l as Mutable<LayoutItem>).y = Math.min(maxY, l.y);\n\n // Move up as far as possible\n while (l.y > 0 && !getFirstCollision(compareWith, l)) {\n (l as Mutable<LayoutItem>).y--;\n }\n\n // Resolve collisions by moving down\n let collision: LayoutItem | undefined;\n while ((collision = getFirstCollision(compareWith, l)) !== undefined) {\n resolveCompactionCollision(fullLayout, l, collision.y + collision.h, 'y');\n }\n\n (l as Mutable<LayoutItem>).y = Math.max(l.y, 0);\n return l;\n}\n\n/** Compact a single item horizontally (move left). Mutates `l`. */\nexport function compactItemHorizontal(\n compareWith: Layout,\n l: LayoutItem,\n cols: number,\n fullLayout: Layout,\n): LayoutItem {\n // Correct negative positions first\n (l as Mutable<LayoutItem>).x = Math.max(l.x, 0);\n (l as Mutable<LayoutItem>).y = Math.max(l.y, 0);\n\n // Move left as far as possible\n while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n (l as Mutable<LayoutItem>).x--;\n }\n\n // Resolve collisions\n let collision: LayoutItem | undefined;\n while ((collision = getFirstCollision(compareWith, l)) !== undefined) {\n resolveCompactionCollision(fullLayout, l, collision.x + collision.w, 'x');\n\n // Horizontal overflow: wrap to next row\n if (l.x + l.w > cols) {\n (l as Mutable<LayoutItem>).x = cols - l.w;\n (l as Mutable<LayoutItem>).y++;\n\n while (l.x > 0 && !getFirstCollision(compareWith, l)) {\n (l as Mutable<LayoutItem>).x--;\n }\n }\n }\n\n (l as Mutable<LayoutItem>).x = Math.max(l.x, 0);\n return l;\n}\n\n// ============================================================================\n// Vertical Compactor\n// ============================================================================\n\n/**\n * Vertical compactor - moves items up to fill gaps. Default compaction mode.\n */\nexport const verticalCompactor: Compactor = {\n type: 'vertical',\n allowOverlap: false,\n\n compact(layout: Layout, _cols: number): Layout {\n const compareWith = getStatics(layout);\n let maxY = bottom(compareWith);\n const sorted = sortLayoutItemsByRowCol(layout);\n const out: LayoutItem[] = new Array(layout.length);\n\n for (let i = 0; i < sorted.length; i++) {\n const sortedItem = sorted[i];\n if (sortedItem === undefined) continue;\n\n let l = cloneLayoutItem(sortedItem);\n\n if (!l.static) {\n l = compactItemVertical(compareWith, l, sorted, maxY);\n maxY = Math.max(maxY, l.y + l.h);\n compareWith.push(l);\n }\n\n const originalIndex = layout.indexOf(sortedItem);\n out[originalIndex] = l;\n l.moved = false;\n }\n\n return out;\n },\n};\n\n// ============================================================================\n// Horizontal Compactor\n// ============================================================================\n\n/**\n * Horizontal compactor - moves items left to fill gaps.\n */\nexport const horizontalCompactor: Compactor = {\n type: 'horizontal',\n allowOverlap: false,\n\n compact(layout: Layout, cols: number): Layout {\n const compareWith = getStatics(layout);\n const sorted = sortLayoutItemsByColRow(layout);\n const out: LayoutItem[] = new Array(layout.length);\n\n for (let i = 0; i < sorted.length; i++) {\n const sortedItem = sorted[i];\n if (sortedItem === undefined) continue;\n\n let l = cloneLayoutItem(sortedItem);\n\n if (!l.static) {\n l = compactItemHorizontal(compareWith, l, cols, sorted);\n compareWith.push(l);\n }\n\n const originalIndex = layout.indexOf(sortedItem);\n out[originalIndex] = l;\n l.moved = false;\n }\n\n return out;\n },\n};\n\n// ============================================================================\n// No Compaction\n// ============================================================================\n\n/**\n * No compaction - items stay where placed (free-form layouts).\n */\nexport const noCompactor: Compactor = {\n type: null,\n allowOverlap: false,\n\n compact(layout: Layout, _cols: number): Layout {\n return cloneLayout(layout);\n },\n};\n\n// ============================================================================\n// Overlap-Allowing Variants\n// ============================================================================\n\n/** Vertical compactor that allows overlapping items. */\nexport const verticalOverlapCompactor: Compactor = {\n ...verticalCompactor,\n allowOverlap: true,\n\n compact(layout: Layout, _cols: number): Layout {\n return cloneLayout(layout);\n },\n};\n\n/** Horizontal compactor that allows overlapping items. */\nexport const horizontalOverlapCompactor: Compactor = {\n ...horizontalCompactor,\n allowOverlap: true,\n\n compact(layout: Layout, _cols: number): Layout {\n return cloneLayout(layout);\n },\n};\n\n/** No compaction, with overlapping allowed. */\nexport const noOverlapCompactor: Compactor = {\n ...noCompactor,\n allowOverlap: true,\n};\n\n// ============================================================================\n// Factory Function\n// ============================================================================\n\n/**\n * Get a compactor by type (convenience for the string-based compactType API).\n */\nexport function getCompactor(\n compactType: CompactType,\n allowOverlap: boolean = false,\n preventCollision: boolean = false,\n): Compactor {\n let baseCompactor: Compactor;\n\n if (allowOverlap) {\n if (compactType === 'vertical') baseCompactor = verticalOverlapCompactor;\n else if (compactType === 'horizontal')\n baseCompactor = horizontalOverlapCompactor;\n else baseCompactor = noOverlapCompactor;\n } else {\n if (compactType === 'vertical') baseCompactor = verticalCompactor;\n else if (compactType === 'horizontal') baseCompactor = horizontalCompactor;\n // For 'wrap' and null, use noCompactor\n else baseCompactor = noCompactor;\n }\n\n if (preventCollision) {\n return { ...baseCompactor, preventCollision };\n }\n return baseCompactor;\n}\n"],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+
2
+ import { LayoutConstraint } from "./types.js";
3
+
4
+ //#region src/components/layout/Board/grid-core/constraints.d.ts
5
+ /**
6
+ * Grid boundary constraint. Ensures items stay within the grid bounds. This is
7
+ * the default position constraint.
8
+ */
9
+ declare const gridBounds: LayoutConstraint;
10
+ /**
11
+ * Min/max size constraint. Enforces per-item minW/maxW/minH/maxH.
12
+ */
13
+ declare const minMaxSize: LayoutConstraint;
14
+ /**
15
+ * Container bounds constraint. Constrains items to stay within the visible
16
+ * container (a replacement for the legacy `isBounded` prop).
17
+ */
18
+ declare const containerBounds: LayoutConstraint;
19
+ /** Bounded X constraint. Only constrains horizontal position. */
20
+ declare const boundedX: LayoutConstraint;
21
+ /** Bounded Y constraint. Only constrains vertical position. */
22
+ declare const boundedY: LayoutConstraint;
23
+ /**
24
+ * Create an aspect ratio constraint (maintains width-to-height ratio in pixels).
25
+ */
26
+ declare function aspectRatio(ratio: number): LayoutConstraint;
27
+ /** Create a snap-to-grid constraint. */
28
+ declare function snapToGrid(stepX: number, stepY?: number): LayoutConstraint;
29
+ /** Create a minimum size constraint (grid-wide). */
30
+ declare function minSize(minW: number, minH: number): LayoutConstraint;
31
+ /** Create a maximum size constraint (grid-wide). */
32
+ declare function maxSize(maxW: number, maxH: number): LayoutConstraint;
33
+ //#endregion
34
+ export { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid };
35
+ //# sourceMappingURL=constraints.d.ts.map
@@ -0,0 +1,155 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c26fe9d | Cube Dev Team */
2
+ //#region src/components/layout/Board/grid-core/constraints.ts
3
+ function clamp(value, min, max) {
4
+ return Math.max(min, Math.min(max, value));
5
+ }
6
+ /**
7
+ * Grid boundary constraint. Ensures items stay within the grid bounds. This is
8
+ * the default position constraint.
9
+ */
10
+ const gridBounds = {
11
+ name: "gridBounds",
12
+ constrainPosition(item, x, y, { cols, maxRows }) {
13
+ return {
14
+ x: clamp(x, 0, Math.max(0, cols - item.w)),
15
+ y: clamp(y, 0, Math.max(0, maxRows - item.h))
16
+ };
17
+ },
18
+ constrainSize(item, w, h, handle, { cols, maxRows }) {
19
+ const maxW = handle === "w" || handle === "nw" || handle === "sw" ? item.x + item.w : cols - item.x;
20
+ const maxH = handle === "n" || handle === "nw" || handle === "ne" ? item.y + item.h : maxRows - item.y;
21
+ return {
22
+ w: clamp(w, 1, Math.max(1, maxW)),
23
+ h: clamp(h, 1, Math.max(1, maxH))
24
+ };
25
+ }
26
+ };
27
+ /**
28
+ * Min/max size constraint. Enforces per-item minW/maxW/minH/maxH.
29
+ */
30
+ const minMaxSize = {
31
+ name: "minMaxSize",
32
+ constrainSize(item, w, h) {
33
+ return {
34
+ w: clamp(w, item.minW ?? 1, item.maxW ?? Infinity),
35
+ h: clamp(h, item.minH ?? 1, item.maxH ?? Infinity)
36
+ };
37
+ }
38
+ };
39
+ /**
40
+ * Container bounds constraint. Constrains items to stay within the visible
41
+ * container (a replacement for the legacy `isBounded` prop).
42
+ */
43
+ const containerBounds = {
44
+ name: "containerBounds",
45
+ constrainPosition(item, x, y, { cols, maxRows, containerHeight, rowHeight, margin }) {
46
+ const visibleRows = containerHeight > 0 ? Math.floor((containerHeight + margin[1]) / (rowHeight + margin[1])) : maxRows;
47
+ return {
48
+ x: clamp(x, 0, Math.max(0, cols - item.w)),
49
+ y: clamp(y, 0, Math.max(0, visibleRows - item.h))
50
+ };
51
+ }
52
+ };
53
+ /** Bounded X constraint. Only constrains horizontal position. */
54
+ const boundedX = {
55
+ name: "boundedX",
56
+ constrainPosition(item, x, y, { cols }) {
57
+ return {
58
+ x: clamp(x, 0, Math.max(0, cols - item.w)),
59
+ y
60
+ };
61
+ }
62
+ };
63
+ /** Bounded Y constraint. Only constrains vertical position. */
64
+ const boundedY = {
65
+ name: "boundedY",
66
+ constrainPosition(item, x, y, { maxRows }) {
67
+ return {
68
+ x,
69
+ y: clamp(y, 0, Math.max(0, maxRows - item.h))
70
+ };
71
+ }
72
+ };
73
+ /**
74
+ * Create an aspect ratio constraint (maintains width-to-height ratio in pixels).
75
+ */
76
+ function aspectRatio(ratio) {
77
+ return {
78
+ name: `aspectRatio(${ratio})`,
79
+ constrainSize(_item, w, _h, _handle, context) {
80
+ const { cols, containerWidth, rowHeight, margin } = context;
81
+ const pixelHeight = ((containerWidth - margin[0] * (cols - 1)) / cols * w + margin[0] * Math.max(0, w - 1)) / ratio;
82
+ return {
83
+ w,
84
+ h: Math.max(1, Math.round((pixelHeight + margin[1]) / (rowHeight + margin[1])))
85
+ };
86
+ }
87
+ };
88
+ }
89
+ /** Create a snap-to-grid constraint. */
90
+ function snapToGrid(stepX, stepY = stepX) {
91
+ if (stepX <= 0 || stepY <= 0) throw new Error(`snapToGrid: step values must be positive (got stepX=${stepX}, stepY=${stepY})`);
92
+ return {
93
+ name: `snapToGrid(${stepX}, ${stepY})`,
94
+ constrainPosition(_item, x, y) {
95
+ return {
96
+ x: Math.round(x / stepX) * stepX,
97
+ y: Math.round(y / stepY) * stepY
98
+ };
99
+ }
100
+ };
101
+ }
102
+ /** Create a minimum size constraint (grid-wide). */
103
+ function minSize(minW, minH) {
104
+ return {
105
+ name: `minSize(${minW}, ${minH})`,
106
+ constrainSize(_item, w, h) {
107
+ return {
108
+ w: Math.max(minW, w),
109
+ h: Math.max(minH, h)
110
+ };
111
+ }
112
+ };
113
+ }
114
+ /** Create a maximum size constraint (grid-wide). */
115
+ function maxSize(maxW, maxH) {
116
+ return {
117
+ name: `maxSize(${maxW}, ${maxH})`,
118
+ constrainSize(_item, w, h) {
119
+ return {
120
+ w: Math.min(maxW, w),
121
+ h: Math.min(maxH, h)
122
+ };
123
+ }
124
+ };
125
+ }
126
+ /** Default constraints applied when none are specified. */
127
+ const defaultConstraints = [gridBounds, minMaxSize];
128
+ /** Apply position constraints to a proposed position. */
129
+ function applyPositionConstraints(constraints, item, x, y, context) {
130
+ let result = {
131
+ x,
132
+ y
133
+ };
134
+ for (const constraint of constraints) if (constraint.constrainPosition) result = constraint.constrainPosition(item, result.x, result.y, context);
135
+ if (item.constraints) {
136
+ for (const constraint of item.constraints) if (constraint.constrainPosition) result = constraint.constrainPosition(item, result.x, result.y, context);
137
+ }
138
+ return result;
139
+ }
140
+ /** Apply size constraints to a proposed size. */
141
+ function applySizeConstraints(constraints, item, w, h, handle, context) {
142
+ let result = {
143
+ w,
144
+ h
145
+ };
146
+ for (const constraint of constraints) if (constraint.constrainSize) result = constraint.constrainSize(item, result.w, result.h, handle, context);
147
+ if (item.constraints) {
148
+ for (const constraint of item.constraints) if (constraint.constrainSize) result = constraint.constrainSize(item, result.w, result.h, handle, context);
149
+ }
150
+ return result;
151
+ }
152
+
153
+ //#endregion
154
+ export { applyPositionConstraints, applySizeConstraints, aspectRatio, boundedX, boundedY, containerBounds, defaultConstraints, gridBounds, maxSize, minMaxSize, minSize, snapToGrid };
155
+ //# sourceMappingURL=constraints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraints.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/constraints.ts"],"sourcesContent":["/**\n * Pluggable layout constraints.\n *\n * Vendored from react-grid-layout v2 (`src/core/constraints.ts`).\n * See ./NOTICE.md for attribution and license.\n *\n * Constraints control position and size limits during drag/resize operations.\n */\n\nimport type {\n ConstraintContext,\n LayoutConstraint,\n LayoutItem,\n ResizeHandleAxis,\n} from './types';\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.max(min, Math.min(max, value));\n}\n\n// ============================================================================\n// Built-in Constraints\n// ============================================================================\n\n/**\n * Grid boundary constraint. Ensures items stay within the grid bounds. This is\n * the default position constraint.\n */\nexport const gridBounds: LayoutConstraint = {\n name: 'gridBounds',\n\n constrainPosition(\n item: LayoutItem,\n x: number,\n y: number,\n { cols, maxRows }: ConstraintContext,\n ): { x: number; y: number } {\n return {\n x: clamp(x, 0, Math.max(0, cols - item.w)),\n y: clamp(y, 0, Math.max(0, maxRows - item.h)),\n };\n },\n\n constrainSize(\n item: LayoutItem,\n w: number,\n h: number,\n handle: ResizeHandleAxis,\n { cols, maxRows }: ConstraintContext,\n ): { w: number; h: number } {\n const maxW =\n handle === 'w' || handle === 'nw' || handle === 'sw'\n ? item.x + item.w\n : cols - item.x;\n\n const maxH =\n handle === 'n' || handle === 'nw' || handle === 'ne'\n ? item.y + item.h\n : maxRows - item.y;\n\n return {\n w: clamp(w, 1, Math.max(1, maxW)),\n h: clamp(h, 1, Math.max(1, maxH)),\n };\n },\n};\n\n/**\n * Min/max size constraint. Enforces per-item minW/maxW/minH/maxH.\n */\nexport const minMaxSize: LayoutConstraint = {\n name: 'minMaxSize',\n\n constrainSize(\n item: LayoutItem,\n w: number,\n h: number,\n ): { w: number; h: number } {\n return {\n w: clamp(w, item.minW ?? 1, item.maxW ?? Infinity),\n h: clamp(h, item.minH ?? 1, item.maxH ?? Infinity),\n };\n },\n};\n\n/**\n * Container bounds constraint. Constrains items to stay within the visible\n * container (a replacement for the legacy `isBounded` prop).\n */\nexport const containerBounds: LayoutConstraint = {\n name: 'containerBounds',\n\n constrainPosition(\n item: LayoutItem,\n x: number,\n y: number,\n { cols, maxRows, containerHeight, rowHeight, margin }: ConstraintContext,\n ): { x: number; y: number } {\n const visibleRows =\n containerHeight > 0\n ? Math.floor((containerHeight + margin[1]) / (rowHeight + margin[1]))\n : maxRows;\n\n return {\n x: clamp(x, 0, Math.max(0, cols - item.w)),\n y: clamp(y, 0, Math.max(0, visibleRows - item.h)),\n };\n },\n};\n\n/** Bounded X constraint. Only constrains horizontal position. */\nexport const boundedX: LayoutConstraint = {\n name: 'boundedX',\n\n constrainPosition(\n item: LayoutItem,\n x: number,\n y: number,\n { cols }: ConstraintContext,\n ): { x: number; y: number } {\n return {\n x: clamp(x, 0, Math.max(0, cols - item.w)),\n y,\n };\n },\n};\n\n/** Bounded Y constraint. Only constrains vertical position. */\nexport const boundedY: LayoutConstraint = {\n name: 'boundedY',\n\n constrainPosition(\n item: LayoutItem,\n x: number,\n y: number,\n { maxRows }: ConstraintContext,\n ): { x: number; y: number } {\n return {\n x,\n y: clamp(y, 0, Math.max(0, maxRows - item.h)),\n };\n },\n};\n\n// ============================================================================\n// Constraint Factories\n// ============================================================================\n\n/**\n * Create an aspect ratio constraint (maintains width-to-height ratio in pixels).\n */\nexport function aspectRatio(ratio: number): LayoutConstraint {\n return {\n name: `aspectRatio(${ratio})`,\n\n constrainSize(\n _item: LayoutItem,\n w: number,\n _h: number,\n _handle: ResizeHandleAxis,\n context: ConstraintContext,\n ): { w: number; h: number } {\n const { cols, containerWidth, rowHeight, margin } = context;\n const colWidth = (containerWidth - margin[0] * (cols - 1)) / cols;\n const pixelWidth = colWidth * w + margin[0] * Math.max(0, w - 1);\n const pixelHeight = pixelWidth / ratio;\n const h = Math.max(\n 1,\n Math.round((pixelHeight + margin[1]) / (rowHeight + margin[1])),\n );\n\n return { w, h };\n },\n };\n}\n\n/** Create a snap-to-grid constraint. */\nexport function snapToGrid(\n stepX: number,\n stepY: number = stepX,\n): LayoutConstraint {\n if (stepX <= 0 || stepY <= 0) {\n throw new Error(\n `snapToGrid: step values must be positive (got stepX=${stepX}, stepY=${stepY})`,\n );\n }\n\n return {\n name: `snapToGrid(${stepX}, ${stepY})`,\n\n constrainPosition(\n _item: LayoutItem,\n x: number,\n y: number,\n ): { x: number; y: number } {\n return {\n x: Math.round(x / stepX) * stepX,\n y: Math.round(y / stepY) * stepY,\n };\n },\n };\n}\n\n/** Create a minimum size constraint (grid-wide). */\nexport function minSize(minW: number, minH: number): LayoutConstraint {\n return {\n name: `minSize(${minW}, ${minH})`,\n\n constrainSize(\n _item: LayoutItem,\n w: number,\n h: number,\n ): { w: number; h: number } {\n return {\n w: Math.max(minW, w),\n h: Math.max(minH, h),\n };\n },\n };\n}\n\n/** Create a maximum size constraint (grid-wide). */\nexport function maxSize(maxW: number, maxH: number): LayoutConstraint {\n return {\n name: `maxSize(${maxW}, ${maxH})`,\n\n constrainSize(\n _item: LayoutItem,\n w: number,\n h: number,\n ): { w: number; h: number } {\n return {\n w: Math.min(maxW, w),\n h: Math.min(maxH, h),\n };\n },\n };\n}\n\n// ============================================================================\n// Default Constraints\n// ============================================================================\n\n/** Default constraints applied when none are specified. */\nexport const defaultConstraints: LayoutConstraint[] = [gridBounds, minMaxSize];\n\n// ============================================================================\n// Constraint Application Functions\n// ============================================================================\n\n/** Apply position constraints to a proposed position. */\nexport function applyPositionConstraints(\n constraints: LayoutConstraint[],\n item: LayoutItem,\n x: number,\n y: number,\n context: ConstraintContext,\n): { x: number; y: number } {\n let result = { x, y };\n\n for (const constraint of constraints) {\n if (constraint.constrainPosition) {\n result = constraint.constrainPosition(item, result.x, result.y, context);\n }\n }\n\n if (item.constraints) {\n for (const constraint of item.constraints) {\n if (constraint.constrainPosition) {\n result = constraint.constrainPosition(\n item,\n result.x,\n result.y,\n context,\n );\n }\n }\n }\n\n return result;\n}\n\n/** Apply size constraints to a proposed size. */\nexport function applySizeConstraints(\n constraints: LayoutConstraint[],\n item: LayoutItem,\n w: number,\n h: number,\n handle: ResizeHandleAxis,\n context: ConstraintContext,\n): { w: number; h: number } {\n let result = { w, h };\n\n for (const constraint of constraints) {\n if (constraint.constrainSize) {\n result = constraint.constrainSize(\n item,\n result.w,\n result.h,\n handle,\n context,\n );\n }\n }\n\n if (item.constraints) {\n for (const constraint of item.constraints) {\n if (constraint.constrainSize) {\n result = constraint.constrainSize(\n item,\n result.w,\n result.h,\n handle,\n context,\n );\n }\n }\n }\n\n return result;\n}\n"],"mappings":"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"}
@@ -0,0 +1,176 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-c26fe9d | Cube Dev Team */
2
+ import { getAllCollisions, getFirstCollision } from "./collision.js";
3
+ import { sortLayoutItems } from "./sort.js";
4
+
5
+ //#region src/components/layout/Board/grid-core/layout.ts
6
+ /**
7
+ * Core layout manipulation utilities.
8
+ *
9
+ * Vendored from react-grid-layout v2 (`src/core/layout.ts`).
10
+ * See ./NOTICE.md for attribution and license.
11
+ *
12
+ * These functions create, modify, and query grid layouts. Most functions treat
13
+ * layouts as immutable and return new arrays/objects, but a few mutate items in
14
+ * place for performance (documented per function).
15
+ */
16
+ /**
17
+ * Get the bottom-most Y coordinate of the layout (max of y + h).
18
+ */
19
+ function bottom(layout) {
20
+ let max = 0;
21
+ for (let i = 0; i < layout.length; i++) {
22
+ const item = layout[i];
23
+ if (item !== void 0) {
24
+ const bottomY = item.y + item.h;
25
+ if (bottomY > max) max = bottomY;
26
+ }
27
+ }
28
+ return max;
29
+ }
30
+ /** Get a layout item by its ID. */
31
+ function getLayoutItem(layout, id) {
32
+ for (let i = 0; i < layout.length; i++) {
33
+ const item = layout[i];
34
+ if (item !== void 0 && item.i === id) return item;
35
+ }
36
+ }
37
+ /** Get all static items from the layout. */
38
+ function getStatics(layout) {
39
+ return layout.filter((l) => l.static === true);
40
+ }
41
+ /** Clone a layout item (shallow copy, boolean flags normalized). */
42
+ function cloneLayoutItem(layoutItem) {
43
+ return {
44
+ i: layoutItem.i,
45
+ x: layoutItem.x,
46
+ y: layoutItem.y,
47
+ w: layoutItem.w,
48
+ h: layoutItem.h,
49
+ minW: layoutItem.minW,
50
+ maxW: layoutItem.maxW,
51
+ minH: layoutItem.minH,
52
+ maxH: layoutItem.maxH,
53
+ moved: Boolean(layoutItem.moved),
54
+ static: Boolean(layoutItem.static),
55
+ isDraggable: layoutItem.isDraggable,
56
+ isResizable: layoutItem.isResizable,
57
+ resizeHandles: layoutItem.resizeHandles,
58
+ constraints: layoutItem.constraints,
59
+ isBounded: layoutItem.isBounded
60
+ };
61
+ }
62
+ /** Clone an entire layout. */
63
+ function cloneLayout(layout) {
64
+ const newLayout = new Array(layout.length);
65
+ for (let i = 0; i < layout.length; i++) {
66
+ const item = layout[i];
67
+ if (item !== void 0) newLayout[i] = cloneLayoutItem(item);
68
+ }
69
+ return newLayout;
70
+ }
71
+ /** Replace a layout item in a layout (matched by `i`). Other items untouched. */
72
+ function modifyLayout(layout, layoutItem) {
73
+ const newLayout = new Array(layout.length);
74
+ for (let i = 0; i < layout.length; i++) {
75
+ const item = layout[i];
76
+ if (item !== void 0) if (layoutItem.i === item.i) newLayout[i] = layoutItem;
77
+ else newLayout[i] = item;
78
+ }
79
+ return newLayout;
80
+ }
81
+ /**
82
+ * Ensure all layout items fit within the grid bounds.
83
+ *
84
+ * **IMPORTANT**: mutates the layout items in place for performance. Clone the
85
+ * layout first (e.g. with `cloneLayout()`) if you need immutability.
86
+ */
87
+ function correctBounds(layout, bounds) {
88
+ const collidesWith = getStatics(layout);
89
+ for (let i = 0; i < layout.length; i++) {
90
+ const l = layout[i];
91
+ if (l === void 0) continue;
92
+ if (l.x + l.w > bounds.cols) l.x = bounds.cols - l.w;
93
+ if (l.x < 0) {
94
+ l.x = 0;
95
+ l.w = bounds.cols;
96
+ }
97
+ if (!l.static) collidesWith.push(l);
98
+ else while (getFirstCollision(collidesWith, l)) l.y++;
99
+ }
100
+ return layout;
101
+ }
102
+ /**
103
+ * Move a layout element to a new position.
104
+ *
105
+ * Handles collision detection and cascading movements. Does not compact the
106
+ * layout - call the compactor separately.
107
+ *
108
+ * **Note**: mutates the `l` parameter directly for performance.
109
+ */
110
+ function moveElement(layout, l, x, y, isUserAction, preventCollision, compactType, cols, allowOverlap) {
111
+ if (l.static && l.isDraggable !== true) return [...layout];
112
+ if (l.y === y && l.x === x) return [...layout];
113
+ const oldX = l.x;
114
+ const oldY = l.y;
115
+ if (typeof x === "number") l.x = x;
116
+ if (typeof y === "number") l.y = y;
117
+ l.moved = true;
118
+ let sorted = sortLayoutItems(layout, compactType);
119
+ if (compactType === "vertical" && typeof y === "number" ? oldY >= y : compactType === "horizontal" && typeof x === "number" ? oldX >= x : false) sorted = sorted.reverse();
120
+ const collisions = getAllCollisions(sorted, l);
121
+ const hasCollisions = collisions.length > 0;
122
+ if (hasCollisions && allowOverlap) return cloneLayout(layout);
123
+ if (hasCollisions && preventCollision) {
124
+ l.x = oldX;
125
+ l.y = oldY;
126
+ l.moved = false;
127
+ return layout;
128
+ }
129
+ let resultLayout = [...layout];
130
+ for (let i = 0; i < collisions.length; i++) {
131
+ const collision = collisions[i];
132
+ if (collision === void 0) continue;
133
+ if (collision.moved) continue;
134
+ if (collision.static) resultLayout = moveElementAwayFromCollision(resultLayout, collision, l, isUserAction, compactType, cols);
135
+ else resultLayout = moveElementAwayFromCollision(resultLayout, l, collision, isUserAction, compactType, cols);
136
+ }
137
+ return resultLayout;
138
+ }
139
+ /**
140
+ * Move an item away from a collision. Attempts to move up/left first if there's
141
+ * room, otherwise moves it down/right.
142
+ */
143
+ function moveElementAwayFromCollision(layout, collidesWith, itemToMove, isUserAction, compactType, cols) {
144
+ const compactH = compactType === "horizontal";
145
+ const compactV = compactType === "vertical";
146
+ const preventCollision = collidesWith.static;
147
+ if (isUserAction) {
148
+ isUserAction = false;
149
+ const fakeItem = {
150
+ x: compactH ? Math.max(collidesWith.x - itemToMove.w, 0) : itemToMove.x,
151
+ y: compactV ? Math.max(collidesWith.y - itemToMove.h, 0) : itemToMove.y,
152
+ w: itemToMove.w,
153
+ h: itemToMove.h,
154
+ i: "-1"
155
+ };
156
+ const firstCollision = getFirstCollision(layout, fakeItem);
157
+ const collisionNorth = firstCollision !== void 0 && firstCollision.y + firstCollision.h > collidesWith.y;
158
+ const collisionWest = firstCollision !== void 0 && collidesWith.x + collidesWith.w > firstCollision.x;
159
+ if (!firstCollision) return moveElement(layout, itemToMove, compactH ? fakeItem.x : void 0, compactV ? fakeItem.y : void 0, isUserAction, preventCollision, compactType, cols);
160
+ if (collisionNorth && compactV) return moveElement(layout, itemToMove, void 0, itemToMove.y + 1, isUserAction, preventCollision, compactType, cols);
161
+ if (collisionNorth && compactType === null) {
162
+ collidesWith.y = itemToMove.y;
163
+ itemToMove.y = itemToMove.y + itemToMove.h;
164
+ return [...layout];
165
+ }
166
+ if (collisionWest && compactH) return moveElement(layout, collidesWith, itemToMove.x, void 0, isUserAction, preventCollision, compactType, cols);
167
+ }
168
+ const newX = compactH ? itemToMove.x + 1 : void 0;
169
+ const newY = compactV ? itemToMove.y + 1 : void 0;
170
+ if (newX === void 0 && newY === void 0) return [...layout];
171
+ return moveElement(layout, itemToMove, newX, newY, isUserAction, preventCollision, compactType, cols);
172
+ }
173
+
174
+ //#endregion
175
+ export { bottom, cloneLayout, cloneLayoutItem, correctBounds, getLayoutItem, getStatics, modifyLayout, moveElement };
176
+ //# sourceMappingURL=layout.js.map