@cube-dev/ui-kit 0.163.0 → 0.165.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.
- package/README.md +1 -1
- package/dist/CHANGELOG.md +394 -0
- package/dist/README.md +1 -1
- package/dist/_internal/hooks/use-chained-callback.js +1 -1
- package/dist/_internal/hooks/use-debounced-value.js +1 -1
- package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
- package/dist/_internal/hooks/use-event.js +1 -1
- package/dist/_internal/hooks/use-is-first-render.js +1 -1
- package/dist/_internal/hooks/use-sync-ref.js +1 -1
- package/dist/_internal/hooks/use-timer/timer.js +1 -1
- package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
- package/dist/_internal/hooks/use-warn.js +1 -1
- package/dist/components/Block.js +1 -1
- package/dist/components/CollectionItem.js +1 -1
- package/dist/components/GlobalStyles.js +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.d.ts +3 -2
- package/dist/components/Root.js +1 -1
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +2 -5
- package/dist/components/actions/Banner/Banner.js.map +1 -1
- package/dist/components/actions/Button/Button.d.ts +3 -3
- package/dist/components/actions/Button/Button.js +8 -5
- package/dist/components/actions/Button/Button.js.map +1 -1
- package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
- package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
- package/dist/components/actions/ButtonSplit/context.js +1 -1
- package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
- package/dist/components/actions/CommandMenu/styled.js +1 -1
- package/dist/components/actions/ItemAction/ItemAction.d.ts +2 -2
- package/dist/components/actions/ItemAction/ItemAction.js +15 -6
- package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
- package/dist/components/actions/ItemActionContext.d.ts +14 -0
- package/dist/components/actions/ItemActionContext.js +2 -2
- package/dist/components/actions/ItemActionContext.js.map +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +56 -46
- package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
- package/dist/components/actions/Link/Link.js +1 -1
- package/dist/components/actions/Menu/Menu.js +1 -1
- package/dist/components/actions/Menu/MenuItem.js +1 -1
- package/dist/components/actions/Menu/MenuSection.js +1 -1
- package/dist/components/actions/Menu/MenuTrigger.d.ts +13 -0
- package/dist/components/actions/Menu/MenuTrigger.js +27 -15
- package/dist/components/actions/Menu/MenuTrigger.js.map +1 -1
- package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
- package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
- package/dist/components/actions/Menu/context.js +1 -1
- package/dist/components/actions/Menu/styled.js +1 -1
- package/dist/components/actions/index.js +1 -1
- package/dist/components/actions/use-action.js +1 -1
- package/dist/components/actions/use-anchored-menu.js +1 -1
- package/dist/components/actions/use-context-menu.js +1 -1
- package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
- package/dist/components/content/Alert/Alert.js +1 -1
- package/dist/components/content/Alert/use-alert.js +1 -1
- package/dist/components/content/Avatar/Avatar.js +1 -1
- package/dist/components/content/Badge/Badge.js +1 -1
- package/dist/components/content/Card/Card.js +1 -1
- package/dist/components/content/Content.js +1 -1
- package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
- package/dist/components/content/CopySnippet/CopySnippet.d.ts +10 -0
- package/dist/components/content/CopySnippet/CopySnippet.js +7 -4
- package/dist/components/content/CopySnippet/CopySnippet.js.map +1 -1
- package/dist/components/content/Disclosure/Disclosure.js +1 -1
- package/dist/components/content/Divider.js +1 -1
- package/dist/components/content/Footer.js +1 -1
- package/dist/components/content/Header.js +1 -1
- package/dist/components/content/HotKeys/HotKeys.js +1 -1
- package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js +1 -1
- package/dist/components/content/InlineInput/InlineInput.js.map +1 -1
- package/dist/components/content/Item/Item.d.ts +2 -2
- package/dist/components/content/Item/Item.js +13 -58
- package/dist/components/content/Item/Item.js.map +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.d.ts +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +7 -4
- package/dist/components/content/ItemBadge/ItemBadge.js.map +1 -1
- package/dist/components/content/ItemCard/ItemCard.js +1 -1
- package/dist/components/content/Layout/GridLayout.js +1 -1
- package/dist/components/content/Layout/Layout.js +1 -1
- package/dist/components/content/Layout/LayoutBlock.js +1 -1
- package/dist/components/content/Layout/LayoutCenter.js +1 -1
- package/dist/components/content/Layout/LayoutContainer.js +1 -1
- package/dist/components/content/Layout/LayoutContent.js +1 -1
- package/dist/components/content/Layout/LayoutContext.js +1 -1
- package/dist/components/content/Layout/LayoutFlex.js +1 -1
- package/dist/components/content/Layout/LayoutFooter.js +1 -1
- package/dist/components/content/Layout/LayoutGrid.js +1 -1
- package/dist/components/content/Layout/LayoutHeader.js +1 -1
- package/dist/components/content/Layout/LayoutPane.js +1 -1
- package/dist/components/content/Layout/LayoutPanel.js +1 -1
- package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
- package/dist/components/content/Layout/LayoutToolbar.js +1 -1
- package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
- package/dist/components/content/Layout/index.js +1 -1
- package/dist/components/content/Layout/utils.js +1 -1
- package/dist/components/content/Paragraph.js +1 -1
- package/dist/components/content/Placeholder/Placeholder.js +1 -1
- package/dist/components/content/PrismCode/PrismCode.d.ts +6 -0
- package/dist/components/content/PrismCode/PrismCode.js +12 -3
- package/dist/components/content/PrismCode/PrismCode.js.map +1 -1
- package/dist/components/content/PrismCode/prismSetup.js +1 -1
- package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
- package/dist/components/content/Result/Result.js +1 -1
- package/dist/components/content/Skeleton/Skeleton.js +1 -1
- package/dist/components/content/Tag/Tag.js +1 -1
- package/dist/components/content/Text.d.ts +14 -14
- package/dist/components/content/Text.js +1 -1
- package/dist/components/content/TextItem/TextItem.js +1 -1
- package/dist/components/content/Title.js +1 -1
- package/dist/components/content/Tree/Tree.js +1 -1
- package/dist/components/content/Tree/TreeNode.js +1 -1
- package/dist/components/content/Tree/styled.js +1 -1
- package/dist/components/content/Tree/tree-index.js +1 -1
- package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
- package/dist/components/content/Tree/use-load-data.js +1 -1
- package/dist/components/content/highlightText.js +1 -1
- package/dist/components/content/use-auto-tooltip.js +1 -1
- package/dist/components/data/DataTable/DataTable.js +140 -21
- package/dist/components/data/DataTable/DataTable.js.map +1 -1
- package/dist/components/data/DataTable/index.d.ts +1 -1
- package/dist/components/data/DataTable/types.d.ts +19 -4
- package/dist/components/data/ItemTable/ItemTable.js +169 -25
- package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
- package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
- package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
- package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
- package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
- package/dist/components/data/ItemTable/types.d.ts +7 -2
- package/dist/components/data/TableBase/ColumnResizer.js +1 -1
- package/dist/components/data/TableBase/RowCollection.js +1 -1
- package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
- package/dist/components/data/TableBase/TableRow.js +30 -5
- package/dist/components/data/TableBase/TableRow.js.map +1 -1
- package/dist/components/data/TableBase/TableView.d.ts +2 -1
- package/dist/components/data/TableBase/TableView.js +299 -75
- package/dist/components/data/TableBase/TableView.js.map +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +12 -2
- package/dist/components/data/TableBase/column-tint.js.map +1 -1
- package/dist/components/data/TableBase/index.d.ts +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.d.ts +1 -2
- package/dist/components/data/TableBase/styled.js +75 -2
- package/dist/components/data/TableBase/styled.js.map +1 -1
- package/dist/components/data/TableBase/table-tree.js +129 -0
- package/dist/components/data/TableBase/table-tree.js.map +1 -0
- package/dist/components/data/TableBase/types.d.ts +46 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/types.js.map +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +0 -1
- package/dist/components/data/TableBase/use-cell-selection.js +0 -0
- package/dist/components/data/TableBase/use-column-order.js +1 -1
- package/dist/components/data/TableBase/use-container-width.js +1 -1
- package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
- package/dist/components/data/TableBase/use-scrollability.js +1 -1
- package/dist/components/data/TableBase/use-table-columns.js +1 -1
- package/dist/components/data/TableBase/use-table-search.js +4 -4
- package/dist/components/data/TableBase/use-table-search.js.map +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +124 -24
- package/dist/components/data/TableBase/use-table-selection.js.map +1 -1
- package/dist/components/data/TableBase/use-table-sort.js +1 -1
- package/dist/components/data/TableBase/use-table-sorts.js +1 -1
- package/dist/components/data/TableBase/use-table-storage.js +1 -1
- package/dist/components/data/TableBase/use-table-tree-state.js +107 -0
- package/dist/components/data/TableBase/use-table-tree-state.js.map +1 -0
- package/dist/components/data/index.d.ts +2 -2
- package/dist/components/fields/Checkbox/Checkbox.js +1 -1
- package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
- package/dist/components/fields/Checkbox/context.js +1 -1
- package/dist/components/fields/ColorInput/ColorInput.js +12 -7
- package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +3 -2
- package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
- package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.d.ts +8 -2
- package/dist/components/fields/{color → ColorSwatch}/ColorSwatch.js +14 -6
- package/dist/components/fields/ColorSwatch/ColorSwatch.js.map +1 -0
- package/dist/components/fields/ColorSwatch/index.d.ts +2 -0
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +2 -6
- package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +8 -25
- package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
- package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
- package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
- package/dist/components/fields/DatePicker/DateInput.js +1 -1
- package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
- package/dist/components/fields/DatePicker/DatePicker.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerButton.js +32 -2
- package/dist/components/fields/DatePicker/DatePickerButton.js.map +1 -1
- package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
- package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
- package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
- package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
- package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
- package/dist/components/fields/DatePicker/PeriodPicker.js +3 -2
- package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
- package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
- package/dist/components/fields/DatePicker/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
- package/dist/components/fields/DatePicker/YearPicker.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.js +1 -1
- package/dist/components/fields/DatePicker/period.js +1 -1
- package/dist/components/fields/DatePicker/props.js +1 -1
- package/dist/components/fields/DatePicker/utils.js +1 -1
- package/dist/components/fields/FileInput/FileInput.js +1 -1
- package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
- package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
- package/dist/components/fields/Input/Input.js +1 -1
- package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
- package/dist/components/fields/ListBox/ListBox.js +1 -1
- package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
- package/dist/components/fields/ListBoxPopover/index.d.ts +0 -1
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
- package/dist/components/fields/NumberInput/NumberInput.js +1 -1
- package/dist/components/fields/NumberInput/StepButton.js +1 -1
- package/dist/components/fields/PasswordInput/PasswordInput.js +9 -6
- package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/Picker/Picker.js.map +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +2 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js.map +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +2 -6
- package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +18 -16
- package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
- package/dist/components/fields/Select/Select.js +3 -6
- package/dist/components/fields/Select/Select.js.map +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +15 -2
- package/dist/components/fields/Slider/HueSlider.js.map +1 -1
- package/dist/components/fields/Slider/RangeSlider.js +1 -1
- package/dist/components/fields/Slider/Slider.js +1 -1
- package/dist/components/fields/Slider/SliderBase.js +1 -1
- package/dist/components/fields/Slider/SliderThumb.js +1 -1
- package/dist/components/fields/Slider/SliderTrack.js +1 -1
- package/dist/components/fields/Slider/elements.js +1 -1
- package/dist/components/fields/Slider/index.js +1 -1
- package/dist/components/fields/Switch/Switch.js +1 -1
- package/dist/components/fields/TextArea/TextArea.js +10 -29
- package/dist/components/fields/TextArea/TextArea.js.map +1 -1
- package/dist/components/fields/TextInput/TextInput.js +1 -1
- package/dist/components/fields/TextInput/TextInputBase.js +1 -1
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js +146 -0
- package/dist/components/fields/TextInput/useAutoSizeTextArea.js.map +1 -0
- package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/fields/color/ColorPanel.js +1 -1
- package/dist/components/fields/color/channels.js +1 -1
- package/dist/components/fields/color/color.js +4 -4
- package/dist/components/fields/color/color.js.map +1 -1
- package/dist/components/fields/color/context.js +1 -1
- package/dist/components/fields/color/index.d.ts +0 -1
- package/dist/components/fields/index.d.ts +2 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/Form/Field.js +1 -1
- package/dist/components/form/Form/Form.js +1 -1
- package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
- package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
- package/dist/components/form/Form/SubmitError.js +1 -1
- package/dist/components/form/Form/index.js +1 -1
- package/dist/components/form/Form/use-field/use-field-props.js +1 -1
- package/dist/components/form/Form/use-field/use-field.js +1 -1
- package/dist/components/form/Form/use-form.js +1 -1
- package/dist/components/form/Form/validation.js +1 -1
- package/dist/components/form/Label.js +1 -1
- package/dist/components/form/validation/ValidationIndicator.js +1 -1
- package/dist/components/form/validation/resolve-validation-props.js +1 -1
- package/dist/components/form/validation/use-validation-props.js +1 -1
- package/dist/components/form/wrapper.js +1 -1
- package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
- package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
- package/dist/components/layout/Board/Board.d.ts +38 -5
- package/dist/components/layout/Board/Board.js +11 -5
- package/dist/components/layout/Board/Board.js.map +1 -1
- package/dist/components/layout/Board/BoardProvider.js +1 -1
- package/dist/components/layout/Board/BoardResponsive.js +1 -1
- package/dist/components/layout/Board/Widget.d.ts +16 -1
- package/dist/components/layout/Board/Widget.js +3 -2
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +92 -17
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +5 -5
- package/dist/components/layout/Board/board-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.d.ts +1 -0
- package/dist/components/layout/Board/board-store.js +2 -2
- package/dist/components/layout/Board/board-store.js.map +1 -1
- package/dist/components/layout/Board/grid-core/calculate.js +1 -1
- package/dist/components/layout/Board/grid-core/collision-modes.js +186 -0
- package/dist/components/layout/Board/grid-core/collision-modes.js.map +1 -0
- package/dist/components/layout/Board/grid-core/collision.js +1 -1
- package/dist/components/layout/Board/grid-core/compactors.js +1 -1
- package/dist/components/layout/Board/grid-core/constraints.js +1 -1
- package/dist/components/layout/Board/grid-core/group-move.js +1 -1
- package/dist/components/layout/Board/grid-core/layout.js +12 -2
- package/dist/components/layout/Board/grid-core/layout.js.map +1 -1
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/grid-core/types.d.ts +19 -1
- package/dist/components/layout/Board/index.d.ts +2 -2
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/index.js.map +1 -1
- package/dist/components/layout/Board/responsive-utils.js +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +137 -47
- package/dist/components/layout/Board/use-board-registry.js.map +1 -1
- package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
- package/dist/components/layout/Board/use-board-selection.js +1 -1
- package/dist/components/layout/Flex.js +1 -1
- package/dist/components/layout/Flow.js +1 -1
- package/dist/components/layout/Grid.js +1 -1
- package/dist/components/layout/Panel.js +1 -1
- package/dist/components/layout/Prefix.js +1 -1
- package/dist/components/layout/ResizablePanel.js +1 -1
- package/dist/components/layout/Space.js +1 -1
- package/dist/components/layout/Suffix.js +1 -1
- package/dist/components/navigation/Pagination/Pagination.js +1 -1
- package/dist/components/navigation/Pagination/use-pagination.js +1 -1
- package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
- package/dist/components/navigation/Tabs/TabButton.js +2 -29
- package/dist/components/navigation/Tabs/TabButton.js.map +1 -1
- package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
- package/dist/components/navigation/Tabs/TabPanel.js +1 -1
- package/dist/components/navigation/Tabs/TabPicker.js +1 -1
- package/dist/components/navigation/Tabs/Tabs.js +1 -1
- package/dist/components/navigation/Tabs/TabsAction.js +1 -1
- package/dist/components/navigation/Tabs/TabsContext.js +1 -1
- package/dist/components/navigation/Tabs/popover-placement.js +1 -1
- package/dist/components/navigation/Tabs/styled.js +1 -1
- package/dist/components/navigation/Tabs/types.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
- package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
- package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
- package/dist/components/other/Calendar/Calendar.js +1 -1
- package/dist/components/other/Calendar/CalendarCell.js +1 -1
- package/dist/components/other/Calendar/CalendarGrid.js +1 -1
- package/dist/components/other/Calendar/CalendarHeader.js +1 -1
- package/dist/components/other/Calendar/CalendarPanel.js +1 -1
- package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
- package/dist/components/other/Calendar/PeriodGrid.js +1 -1
- package/dist/components/other/Calendar/RangeCalendar.js +1 -1
- package/dist/components/other/Calendar/styled.js +1 -1
- package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
- package/dist/components/other/NoDataIcon/NoDataIcon.d.ts +37 -0
- package/dist/components/other/NoDataIcon/NoDataIcon.js +56 -0
- package/dist/components/other/NoDataIcon/NoDataIcon.js.map +1 -0
- package/dist/components/other/NoDataIcon/index.d.ts +2 -0
- package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
- package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
- package/dist/components/overlays/Dialog/Dialog.js +4 -3
- package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
- package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
- package/dist/components/overlays/Dialog/DialogForm.js +1 -1
- package/dist/components/overlays/Dialog/DialogTrigger.d.ts +13 -0
- package/dist/components/overlays/Dialog/DialogTrigger.js +24 -5
- package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/context.js.map +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +1 -2
- package/dist/components/overlays/Modal/Modal.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
- package/dist/components/overlays/Modal/Overlay.d.ts +0 -1
- package/dist/components/overlays/Modal/Overlay.js +1 -1
- package/dist/components/overlays/Modal/Popover.js +1 -1
- package/dist/components/overlays/Modal/Tray.js +1 -1
- package/dist/components/overlays/Modal/Underlay.js +1 -1
- package/dist/components/overlays/Modal/types.d.ts +0 -1
- package/dist/components/overlays/Notifications/Notification.js +1 -1
- package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
- package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
- package/dist/components/overlays/Notifications/NotificationContext.d.ts +0 -2
- package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
- package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
- package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
- package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
- package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
- package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
- package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
- package/dist/components/overlays/Notifications/index.js +1 -1
- package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
- package/dist/components/overlays/Notifications/use-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
- package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
- package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
- package/dist/components/overlays/Toast/ToastItem.js +1 -1
- package/dist/components/overlays/Toast/index.js +1 -1
- package/dist/components/overlays/Toast/useProgressToast.js +1 -1
- package/dist/components/overlays/Toast/useToast.js +1 -1
- package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
- package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
- package/dist/components/overlays/Tooltip/context.js +1 -1
- package/dist/components/portal/Portal.js +1 -1
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +0 -1
- package/dist/components/portal/usePortal.js +1 -1
- package/dist/components/shared/DraggableCollection.js +1 -1
- package/dist/components/shared/InvalidIcon.js +1 -1
- package/dist/components/shared/ValidIcon.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
- package/dist/components/status/LoadingAnimation/LoadingAnimation.js.map +1 -1
- package/dist/components/status/Spin/Cube.js +1 -1
- package/dist/components/status/Spin/InternalSpinner.js +1 -1
- package/dist/components/status/Spin/Spin.js +1 -1
- package/dist/components/status/Spin/SpinsContainer.js +1 -1
- package/dist/data/item-themes.d.ts +1 -1
- package/dist/data/item-themes.js +217 -46
- package/dist/data/item-themes.js.map +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +41 -13
- package/dist/eslint-plugin/defaults.generated.js.map +1 -1
- package/dist/eslint-plugin/index.js +1 -1
- package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
- package/dist/i18n/I18nProvider.js +1 -1
- package/dist/i18n/createFormatter.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/instance.js +1 -1
- package/dist/i18n/locales/de-DE/uikit.js +2 -1
- package/dist/i18n/locales/en-US/uikit.js +2 -1
- package/dist/i18n/locales/en-US/uikit.json.d.ts +1 -0
- package/dist/i18n/locales/es-ES/uikit.js +2 -1
- package/dist/i18n/locales/es-MX/uikit.js +2 -1
- package/dist/i18n/locales/fr-FR/uikit.js +2 -1
- package/dist/i18n/locales/it-IT/uikit.js +2 -1
- package/dist/i18n/locales/ja-JP/uikit.js +2 -1
- package/dist/i18n/locales/nb-NO/uikit.js +2 -1
- package/dist/i18n/locales/pt-BR/uikit.js +2 -1
- package/dist/i18n/locales/pt-PT/uikit.js +2 -1
- package/dist/i18n/locales/sv-SE/uikit.js +2 -1
- package/dist/i18n/locales/vi-VN/uikit.js +2 -1
- package/dist/i18n/locales.js +1 -1
- package/dist/i18n/useFormatter.js +1 -1
- package/dist/i18n/useI18n.js +1 -1
- package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
- package/dist/icons/AdjustmentsIcon.js +1 -1
- package/dist/icons/AiIcon.js +1 -1
- package/dist/icons/AreaChartIcon.js +1 -1
- package/dist/icons/ArrowNarrowDownIcon.js +1 -1
- package/dist/icons/ArrowNarrowUpIcon.js +1 -1
- package/dist/icons/BackwardIcon.js +1 -1
- package/dist/icons/BarChartIcon.js +1 -1
- package/dist/icons/BellFilledIcon.js +1 -1
- package/dist/icons/BellIcon.js +1 -1
- package/dist/icons/BooleanIcon.js +1 -1
- package/dist/icons/CalendarEditIcon.js +1 -1
- package/dist/icons/CalendarIcon.js +1 -1
- package/dist/icons/CaretDownIcon.js +1 -1
- package/dist/icons/CaretUpIcon.js +1 -1
- package/dist/icons/ChartAreaStackedIcon.js +1 -1
- package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarGroupedIcon.js +1 -1
- package/dist/icons/ChartBarHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarLineIcon.js +1 -1
- package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
- package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
- package/dist/icons/ChartBoxPlot2Icon.js +1 -1
- package/dist/icons/ChartBoxPlotIcon.js +1 -1
- package/dist/icons/ChartBubbleIcon.js +1 -1
- package/dist/icons/ChartDonut2Icon.js +1 -1
- package/dist/icons/ChartFunnelIcon.js +1 -1
- package/dist/icons/ChartHeatmapIcon.js +1 -1
- package/dist/icons/ChartKPIIcon.js +1 -1
- package/dist/icons/ChartPie2Icon.js +1 -1
- package/dist/icons/ChartScatterIcon.js +1 -1
- package/dist/icons/CheckCircleFilledIcon.js +1 -1
- package/dist/icons/CheckCircleIcon.js +1 -1
- package/dist/icons/CheckIcon.js +1 -1
- package/dist/icons/CircleFilledIcon.js +1 -1
- package/dist/icons/ClearIcon.js +1 -1
- package/dist/icons/CloseCircleFilledIcon.js +1 -1
- package/dist/icons/CloseCircleIcon.js +1 -1
- package/dist/icons/CloseIcon.js +1 -1
- package/dist/icons/CodeIcon.js +1 -1
- package/dist/icons/ColumnTotalIcon.js +1 -1
- package/dist/icons/CopyIcon.js +1 -1
- package/dist/icons/CountIcon.js +1 -1
- package/dist/icons/CubeIcon.js +1 -1
- package/dist/icons/CubePauseIcon.js +1 -1
- package/dist/icons/CubePlayIcon.js +1 -1
- package/dist/icons/CurrencyDollarIcon.js +1 -1
- package/dist/icons/DangerIcon.js +1 -1
- package/dist/icons/DashboardIcon.js +1 -1
- package/dist/icons/DatabaseIcon.js +1 -1
- package/dist/icons/DecimalDecreaseIcon.js +1 -1
- package/dist/icons/DecimalIncreaseIcon.js +1 -1
- package/dist/icons/DirectionIcon.js +1 -1
- package/dist/icons/DonutIcon.js +1 -1
- package/dist/icons/DownIcon.js +1 -1
- package/dist/icons/EditIcon.js +1 -1
- package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
- package/dist/icons/ExclamationCircleIcon.js +1 -1
- package/dist/icons/ExclamationIcon.js +1 -1
- package/dist/icons/EyeIcon.js +1 -1
- package/dist/icons/EyeInvisibleIcon.js +1 -1
- package/dist/icons/FilterIcon.js +1 -1
- package/dist/icons/FolderFilledIcon.js +1 -1
- package/dist/icons/FolderIcon.js +1 -1
- package/dist/icons/FolderOpenFilledIcon.js +1 -1
- package/dist/icons/FolderOpenIcon.js +1 -1
- package/dist/icons/ForwardIcon.js +1 -1
- package/dist/icons/GripVerticalIcon.js +1 -1
- package/dist/icons/HierarchyIcon.js +1 -1
- package/dist/icons/HierarchyOpenIcon.js +1 -1
- package/dist/icons/Icon.js +1 -1
- package/dist/icons/InfoCircleIcon.js +1 -1
- package/dist/icons/InfoIcon.js +1 -1
- package/dist/icons/KeyIcon.js +1 -1
- package/dist/icons/LeftIcon.js +1 -1
- package/dist/icons/LineChartIcon.js +1 -1
- package/dist/icons/LoadingIcon.js +1 -1
- package/dist/icons/LockFilledIcon.js +1 -1
- package/dist/icons/LockIcon.js +1 -1
- package/dist/icons/MoreIcon.js +1 -1
- package/dist/icons/NotAllowedIcon.js +1 -1
- package/dist/icons/Number123Icon.js +1 -1
- package/dist/icons/NumberIcon.js +1 -1
- package/dist/icons/PauseCircleFilledIcon.js +1 -1
- package/dist/icons/PauseCircleIcon.js +1 -1
- package/dist/icons/PauseIcon.js +1 -1
- package/dist/icons/PercentageIcon.js +1 -1
- package/dist/icons/PieChartIcon.js +1 -1
- package/dist/icons/PipetteIcon.js +1 -1
- package/dist/icons/PlayCircleIcon.js +1 -1
- package/dist/icons/PlayIcon.js +1 -1
- package/dist/icons/PlusIcon.js +1 -1
- package/dist/icons/ProgressBarIcon.js +1 -1
- package/dist/icons/ReloadIcon.js +1 -1
- package/dist/icons/ReportIcon.js +1 -1
- package/dist/icons/ReturnIcon.js +1 -1
- package/dist/icons/RightIcon.js +1 -1
- package/dist/icons/RowTotalsIcon.js +1 -1
- package/dist/icons/SchemeIcon.js +1 -1
- package/dist/icons/SearchIcon.js +1 -1
- package/dist/icons/SemanticQueryIcon.js +1 -1
- package/dist/icons/SettingsIcon.js +1 -1
- package/dist/icons/ShieldFilledIcon.js +1 -1
- package/dist/icons/ShieldIcon.js +1 -1
- package/dist/icons/SlashIcon.js +1 -1
- package/dist/icons/SparklesIcon.js +1 -1
- package/dist/icons/SqlIcon.js +1 -1
- package/dist/icons/StatsIcon.js +1 -1
- package/dist/icons/StopIcon.js +1 -1
- package/dist/icons/StringIcon.js +1 -1
- package/dist/icons/SubtotalsIcon.js +1 -1
- package/dist/icons/SwitchIcon.js +1 -1
- package/dist/icons/TableIcon.js +1 -1
- package/dist/icons/ThumbsDownIcon.js +1 -1
- package/dist/icons/ThumbsUpIcon.js +1 -1
- package/dist/icons/ThunderboltCrossedIcon.js +1 -1
- package/dist/icons/ThunderboltFilledIcon.js +1 -1
- package/dist/icons/ThunderboltIcon.js +1 -1
- package/dist/icons/TimeIcon.js +1 -1
- package/dist/icons/TrashIcon.js +1 -1
- package/dist/icons/UnlockIcon.js +1 -1
- package/dist/icons/UpIcon.js +1 -1
- package/dist/icons/UserGroupIcon.js +1 -1
- package/dist/icons/UserIcon.js +1 -1
- package/dist/icons/UserLockIcon.js +1 -1
- package/dist/icons/ViewIcon.js +1 -1
- package/dist/icons/WarningFilledIcon.js +1 -1
- package/dist/icons/WarningIcon.js +1 -1
- package/dist/icons/wrap-icon.js +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/probe/canonicalize.js +1 -1
- package/dist/probe/css.js +1 -1
- package/dist/probe/index.js +1 -1
- package/dist/provider.js +1 -1
- package/dist/providers/TrackingProvider.js +1 -1
- package/dist/providers/navigationAdapter.default.js +1 -1
- package/dist/tokens/base.js +1 -1
- package/dist/tokens/color-seed.d.ts +44 -0
- package/dist/tokens/color-seed.js +48 -0
- package/dist/tokens/color-seed.js.map +1 -0
- package/dist/tokens/color-theme.d.ts +9 -1
- package/dist/tokens/color-theme.js +20 -7
- package/dist/tokens/color-theme.js.map +1 -1
- package/dist/tokens/colors.js +20 -3
- package/dist/tokens/colors.js.map +1 -1
- package/dist/tokens/index.d.ts +2 -1
- package/dist/tokens/index.js +3 -2
- package/dist/tokens/index.js.map +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.d.ts +304 -77
- package/dist/tokens/palette-config.js +188 -49
- package/dist/tokens/palette-config.js.map +1 -1
- package/dist/tokens/palette.js +617 -163
- package/dist/tokens/palette.js.map +1 -1
- package/dist/tokens/shadows.js +1 -1
- package/dist/tokens/sizes.js +1 -1
- package/dist/tokens/spacing.js +1 -1
- package/dist/tokens/typography.js +1 -1
- package/dist/utils/ResizeSensor.js +1 -1
- package/dist/utils/is-dev-env.js +1 -1
- package/dist/utils/modules.js +1 -1
- package/dist/utils/promise.js +1 -1
- package/dist/utils/raf.js +1 -1
- package/dist/utils/random.js +1 -1
- package/dist/utils/range.js +1 -1
- package/dist/utils/react/RenderCache.js +1 -1
- package/dist/utils/react/Slots.js +1 -1
- package/dist/utils/react/chain.js +1 -1
- package/dist/utils/react/disabledProps.js +1 -1
- package/dist/utils/react/forwardRefWithGenerics.js +1 -1
- package/dist/utils/react/index.js +1 -1
- package/dist/utils/react/interactions.js +1 -1
- package/dist/utils/react/isTextOnly.js +1 -1
- package/dist/utils/react/mapProps.js +1 -1
- package/dist/utils/react/mergeProps.js +1 -1
- package/dist/utils/react/nullableValue.js +1 -1
- package/dist/utils/react/resolveIcon.js +1 -1
- package/dist/utils/react/sharedStore.js +1 -1
- package/dist/utils/react/useBufferedValue.js +1 -1
- package/dist/utils/react/useCombinedRefs.js +1 -1
- package/dist/utils/react/useControlledFocusVisible.js +1 -1
- package/dist/utils/react/useEventBus.js +1 -1
- package/dist/utils/react/useId.js +1 -1
- package/dist/utils/react/useIsDarwin.js +1 -1
- package/dist/utils/react/useKeySymbols.js +1 -1
- package/dist/utils/react/useLayoutEffect.js +1 -1
- package/dist/utils/react/useLocalStorage.js +1 -1
- package/dist/utils/react/useMergeStyles.js +1 -1
- package/dist/utils/react/usePopoverSync.js +1 -1
- package/dist/utils/react/useQaProps.js +1 -1
- package/dist/utils/react/useViewportSize.js +1 -1
- package/dist/utils/react/wrapNodeIfPlain.js +1 -1
- package/dist/utils/selection.js +1 -1
- package/dist/utils/styles.js +1 -1
- package/dist/utils/tree.js +1 -1
- package/dist/utils/warnings.js +1 -1
- package/dist/version.js +3 -3
- package/docs/Introduction.md +85 -97
- package/docs/Theming.md +471 -83
- package/docs/Usage.md +63 -2
- package/docs/components/Root.md +1 -1
- package/docs/components/actions/Button.md +9 -3
- package/docs/components/actions/ItemAction.md +3 -3
- package/docs/components/actions/MenuTrigger.md +54 -2
- package/docs/components/actions/SubMenuTrigger.md +2 -2
- package/docs/components/content/CopySnippet.md +5 -5
- package/docs/components/content/InlineInput.md +1 -1
- package/docs/components/content/Item.md +10 -10
- package/docs/components/content/ItemBadge.md +2 -2
- package/docs/components/content/PrismCode.md +1 -0
- package/docs/components/data/DataTable.md +110 -11
- package/docs/components/data/ItemTable.md +63 -1
- package/docs/components/fields/ColorSwatch.md +155 -0
- package/docs/components/layout/Board.md +21 -2
- package/docs/components/other/NoDataIcon.md +48 -0
- package/docs/components/overlays/DialogTrigger.md +3 -2
- package/docs/components/status/LoadingAnimation.md +12 -0
- package/docs/glaze/api.md +155 -47
- package/docs/glaze/methodology.md +15 -13
- package/docs/glaze/migration.md +36 -0
- package/docs/glaze/okhst.md +4 -0
- package/docs/tasty/ai-agents.md +3 -0
- package/docs/tasty/configuration.md +11 -6
- package/docs/tasty/dsl.md +99 -2
- package/docs/tasty/styles.md +3 -1
- package/package.json +3 -3
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +0 -2
- package/dist/components/fields/color/ColorSwatch.js.map +0 -1
- package/dist/components/portal/PortalProvider.d.ts +0 -2
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
|
|
2
|
+
//#region src/components/layout/Board/grid-core/collision-modes.ts
|
|
3
|
+
/** Whether a single grid cell is free of every item in `others`. */
|
|
4
|
+
function cellFree(others, x, y) {
|
|
5
|
+
for (let i = 0; i < others.length; i++) {
|
|
6
|
+
const o = others[i];
|
|
7
|
+
if (o !== void 0 && x >= o.x && x < o.x + o.w && y >= o.y && y < o.y + o.h) return false;
|
|
8
|
+
}
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* The largest rectangle anchored at `anchor` that fits without overlapping
|
|
13
|
+
* `others`, growing rightward and downward only.
|
|
14
|
+
*
|
|
15
|
+
* Never larger than `desired` (a drag must never *upscale* a widget - growing
|
|
16
|
+
* things is an explicit, opt-in operation like "distribute evenly", not a side
|
|
17
|
+
* effect of moving them), never smaller than the item's own `minW`/`minH`, and
|
|
18
|
+
* never past `cols` / `maxRows`. Among the candidates the largest-area rectangle
|
|
19
|
+
* wins, breaking ties on width: a grid is read left to right, so a wide-and-flat
|
|
20
|
+
* result is the less surprising of two equal-area fits.
|
|
21
|
+
*
|
|
22
|
+
* Returns `null` when not even the minimum size fits, which the callers treat as
|
|
23
|
+
* "no resolution" and fall back to reverting.
|
|
24
|
+
*/
|
|
25
|
+
function maxFreeRectAt(others, anchor, desired, limits, mins) {
|
|
26
|
+
if (anchor.x < 0 || anchor.y < 0) return null;
|
|
27
|
+
const minW = Math.max(1, mins?.minW ?? 1);
|
|
28
|
+
const minH = Math.max(1, mins?.minH ?? 1);
|
|
29
|
+
const maxRows = limits.maxRows ?? Infinity;
|
|
30
|
+
const maxW = Math.min(desired.w, limits.cols - anchor.x);
|
|
31
|
+
const maxH = Math.min(desired.h, Number.isFinite(maxRows) ? maxRows - anchor.y : desired.h);
|
|
32
|
+
if (maxW < minW || maxH < minH) return null;
|
|
33
|
+
const free = [];
|
|
34
|
+
for (let dx = 0; dx < maxW; dx++) {
|
|
35
|
+
let h = 0;
|
|
36
|
+
while (h < maxH && cellFree(others, anchor.x + dx, anchor.y + h)) h++;
|
|
37
|
+
free.push(h);
|
|
38
|
+
if (h === 0) break;
|
|
39
|
+
}
|
|
40
|
+
let best = null;
|
|
41
|
+
let bestArea = 0;
|
|
42
|
+
let limit = maxH;
|
|
43
|
+
for (let w = 1; w <= free.length; w++) {
|
|
44
|
+
limit = Math.min(limit, free[w - 1]);
|
|
45
|
+
if (limit < minH) break;
|
|
46
|
+
if (w < minW) continue;
|
|
47
|
+
const area = w * limit;
|
|
48
|
+
if (area >= bestArea) {
|
|
49
|
+
best = {
|
|
50
|
+
w,
|
|
51
|
+
h: limit
|
|
52
|
+
};
|
|
53
|
+
bestArea = area;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return best;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Shrink the placement to the room actually available at the cell it was
|
|
60
|
+
* dropped on.
|
|
61
|
+
*/
|
|
62
|
+
function downscaleInPlace(layout, item, others, desired, limits) {
|
|
63
|
+
const fit = maxFreeRectAt(others, {
|
|
64
|
+
x: item.x,
|
|
65
|
+
y: item.y
|
|
66
|
+
}, desired, limits, item);
|
|
67
|
+
if (!fit) return null;
|
|
68
|
+
if (fit.w === item.w && fit.h === item.h) return null;
|
|
69
|
+
return layout.map((l) => l.i === item.i ? {
|
|
70
|
+
...l,
|
|
71
|
+
w: fit.w,
|
|
72
|
+
h: fit.h,
|
|
73
|
+
moved: true
|
|
74
|
+
} : l);
|
|
75
|
+
}
|
|
76
|
+
/** Number of cells two items share. Zero when they do not overlap at all. */
|
|
77
|
+
function overlapArea(a, b) {
|
|
78
|
+
const w = Math.min(a.x + a.w, b.x + b.w) - Math.max(a.x, b.x);
|
|
79
|
+
const h = Math.min(a.y + a.h, b.y + b.h) - Math.max(a.y, b.y);
|
|
80
|
+
return w > 0 && h > 0 ? w * h : 0;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Exchange the placement with one of the widgets under it.
|
|
84
|
+
*
|
|
85
|
+
* The dragged widget takes the other's cell and the other takes the cell the
|
|
86
|
+
* dragged widget came from. Each keeps as much of its own size as fits there -
|
|
87
|
+
* that cell plus any free space adjacent to it - and neither ever grows.
|
|
88
|
+
*
|
|
89
|
+
* `from` is whatever the caller's layout says, so it is the caller that decides
|
|
90
|
+
* what "came from" means. A pointer drag resolves every frame against the
|
|
91
|
+
* arrangement the gesture started with, making it the cell the drag began at, and
|
|
92
|
+
* keeping the result a pure function of where the pointer is; chaining frames off
|
|
93
|
+
* each other instead would exchange with every widget swept over.
|
|
94
|
+
* The slot the dragged widget is leaving is reserved for the displaced widget
|
|
95
|
+
* while the dragged one is sized, so the two can never claim the same cells: the
|
|
96
|
+
* result is overlap-free by construction, not by a follow-up check.
|
|
97
|
+
*/
|
|
98
|
+
function exchangeWithCollision(layout, item, collisions, from, desired, limits) {
|
|
99
|
+
if (from.x === item.x && from.y === item.y) return null;
|
|
100
|
+
const candidates = collisions.filter((c) => !c.static).map((c) => ({
|
|
101
|
+
c,
|
|
102
|
+
area: overlapArea(item, c)
|
|
103
|
+
})).sort((p, q) => q.area - p.area || p.c.y - q.c.y || p.c.x - q.c.x).map(({ c }) => c);
|
|
104
|
+
for (const other of candidates) {
|
|
105
|
+
const exchanged = exchangeWith(layout, item, other, from, desired, limits);
|
|
106
|
+
if (exchanged) return exchanged;
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
/** One concrete two-widget exchange, or `null` if either side cannot fit. */
|
|
111
|
+
function exchangeWith(layout, item, other, from, desired, limits) {
|
|
112
|
+
const rest = layout.filter((l) => l.i !== item.i && l.i !== other.i);
|
|
113
|
+
const originSlot = {
|
|
114
|
+
i: "origin-slot-reservation",
|
|
115
|
+
x: from.x,
|
|
116
|
+
y: from.y,
|
|
117
|
+
w: desired.w,
|
|
118
|
+
h: desired.h
|
|
119
|
+
};
|
|
120
|
+
const movedFit = maxFreeRectAt([...rest, originSlot], {
|
|
121
|
+
x: other.x,
|
|
122
|
+
y: other.y
|
|
123
|
+
}, desired, limits, item);
|
|
124
|
+
if (!movedFit) return null;
|
|
125
|
+
const moved = {
|
|
126
|
+
...item,
|
|
127
|
+
x: other.x,
|
|
128
|
+
y: other.y,
|
|
129
|
+
w: movedFit.w,
|
|
130
|
+
h: movedFit.h,
|
|
131
|
+
moved: true
|
|
132
|
+
};
|
|
133
|
+
const displacedFit = maxFreeRectAt([...rest, moved], {
|
|
134
|
+
x: from.x,
|
|
135
|
+
y: from.y
|
|
136
|
+
}, {
|
|
137
|
+
w: other.w,
|
|
138
|
+
h: other.h
|
|
139
|
+
}, limits, other);
|
|
140
|
+
if (!displacedFit) return null;
|
|
141
|
+
const displaced = {
|
|
142
|
+
...other,
|
|
143
|
+
x: from.x,
|
|
144
|
+
y: from.y,
|
|
145
|
+
w: displacedFit.w,
|
|
146
|
+
h: displacedFit.h,
|
|
147
|
+
moved: true
|
|
148
|
+
};
|
|
149
|
+
return layout.map((l) => l.i === item.i ? moved : l.i === other.i ? displaced : l);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Build the resolver `moveElement` consults instead of reverting a blocked move,
|
|
153
|
+
* or `undefined` for `'revert'` (and for an unset mode), which keeps the engine
|
|
154
|
+
* on its original path with no added work.
|
|
155
|
+
*
|
|
156
|
+
* For an in-board drag, `'swap'` is an escalation ladder: exchange with one of
|
|
157
|
+
* the widgets under the drop, else downscale at the drop cell, else revert. A
|
|
158
|
+
* dense grid stays draggable that way - refusing everything that is not a clean
|
|
159
|
+
* one-to-one trade would make the mode feel broken exactly where it is needed.
|
|
160
|
+
* Cross-board callers pass `allowExchange: false`, which turns the same mode into
|
|
161
|
+
* empty-anchor downscaling; the registry cancels the transfer if that resolution
|
|
162
|
+
* cannot occupy the requested cell.
|
|
163
|
+
*/
|
|
164
|
+
function createCollisionResolver(mode, options) {
|
|
165
|
+
if (!mode || mode === "revert") return void 0;
|
|
166
|
+
const limits = {
|
|
167
|
+
cols: options.cols,
|
|
168
|
+
maxRows: options.maxRows
|
|
169
|
+
};
|
|
170
|
+
return ({ layout, item, collisions, from }) => {
|
|
171
|
+
const others = layout.filter((l) => l.i !== item.i);
|
|
172
|
+
const desired = options.desired ?? {
|
|
173
|
+
w: item.w,
|
|
174
|
+
h: item.h
|
|
175
|
+
};
|
|
176
|
+
if (mode === "swap" && options.allowExchange !== false) {
|
|
177
|
+
const exchanged = exchangeWithCollision(layout, item, collisions, from, desired, limits);
|
|
178
|
+
if (exchanged) return exchanged;
|
|
179
|
+
}
|
|
180
|
+
return downscaleInPlace(layout, item, others, desired, limits);
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
export { createCollisionResolver };
|
|
186
|
+
//# sourceMappingURL=collision-modes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collision-modes.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/collision-modes.ts"],"sourcesContent":["/**\n * Collision resolution strategies for a grid that prevents collisions.\n *\n * Original UI Kit code (not vendored from react-grid-layout): the upstream\n * engine only ever reverts a blocked move.\n *\n * When `preventCollision` is on, `moveElement` refuses any placement that\n * overlaps an existing item and snaps the dragged item back. That is the right\n * default, but a free grid often wants the placement *resolved* instead of\n * refused - shrunk into whatever room is actually there, or exchanged with the\n * widget already sitting in the target slot. These strategies produce such a\n * resolution, and every resolution they return is overlap-free, so the caller's\n * own overlap guards keep working unchanged.\n */\n\nimport { collides } from './collision';\n\nimport type {\n CollisionMode,\n CollisionResolver,\n CollisionResolverOptions,\n Layout,\n LayoutItem,\n} from './types';\n\n/** Whether a single grid cell is free of every item in `others`. */\nfunction cellFree(others: Layout, x: number, y: number): boolean {\n for (let i = 0; i < others.length; i++) {\n const o = others[i];\n if (\n o !== undefined &&\n x >= o.x &&\n x < o.x + o.w &&\n y >= o.y &&\n y < o.y + o.h\n ) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * The largest rectangle anchored at `anchor` that fits without overlapping\n * `others`, growing rightward and downward only.\n *\n * Never larger than `desired` (a drag must never *upscale* a widget - growing\n * things is an explicit, opt-in operation like \"distribute evenly\", not a side\n * effect of moving them), never smaller than the item's own `minW`/`minH`, and\n * never past `cols` / `maxRows`. Among the candidates the largest-area rectangle\n * wins, breaking ties on width: a grid is read left to right, so a wide-and-flat\n * result is the less surprising of two equal-area fits.\n *\n * Returns `null` when not even the minimum size fits, which the callers treat as\n * \"no resolution\" and fall back to reverting.\n */\nexport function maxFreeRectAt(\n others: Layout,\n anchor: { x: number; y: number },\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n mins?: { minW?: number; minH?: number },\n): { w: number; h: number } | null {\n if (anchor.x < 0 || anchor.y < 0) return null;\n\n const minW = Math.max(1, mins?.minW ?? 1);\n const minH = Math.max(1, mins?.minH ?? 1);\n const maxRows = limits.maxRows ?? Infinity;\n const maxW = Math.min(desired.w, limits.cols - anchor.x);\n const maxH = Math.min(\n desired.h,\n Number.isFinite(maxRows) ? maxRows - anchor.y : desired.h,\n );\n\n if (maxW < minW || maxH < minH) return null;\n\n // Free height available in each column of the candidate band, measured down\n // from the anchor row and capped at the tallest useful height.\n const free: number[] = [];\n for (let dx = 0; dx < maxW; dx++) {\n let h = 0;\n while (h < maxH && cellFree(others, anchor.x + dx, anchor.y + h)) h++;\n free.push(h);\n // A column with no room at all caps every wider candidate, so stop early.\n if (h === 0) break;\n }\n\n let best: { w: number; h: number } | null = null;\n let bestArea = 0;\n let limit = maxH;\n for (let w = 1; w <= free.length; w++) {\n limit = Math.min(limit, free[w - 1]!);\n if (limit < minH) break;\n if (w < minW) continue;\n const area = w * limit;\n // `>=` so the widest of several equal-area fits wins: `w` only grows here, so\n // the last match is the widest one.\n if (area >= bestArea) {\n best = { w, h: limit };\n bestArea = area;\n }\n }\n\n return best;\n}\n\n/**\n * Shrink the placement to the room actually available at the cell it was\n * dropped on.\n */\nfunction downscaleInPlace(\n layout: Layout,\n item: LayoutItem,\n others: Layout,\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n): LayoutItem[] | null {\n const fit = maxFreeRectAt(\n others,\n { x: item.x, y: item.y },\n desired,\n limits,\n item,\n );\n if (!fit) return null;\n // Nothing to resolve: the requested size already fits, so the collision was\n // not a sizing problem and reverting is still the honest answer.\n if (fit.w === item.w && fit.h === item.h) return null;\n\n return layout.map((l) =>\n l.i === item.i ? { ...l, w: fit.w, h: fit.h, moved: true } : l,\n );\n}\n\n/** Number of cells two items share. Zero when they do not overlap at all. */\nfunction overlapArea(a: LayoutItem, b: LayoutItem): number {\n const w = Math.min(a.x + a.w, b.x + b.w) - Math.max(a.x, b.x);\n const h = Math.min(a.y + a.h, b.y + b.h) - Math.max(a.y, b.y);\n return w > 0 && h > 0 ? w * h : 0;\n}\n\n/**\n * Exchange the placement with one of the widgets under it.\n *\n * The dragged widget takes the other's cell and the other takes the cell the\n * dragged widget came from. Each keeps as much of its own size as fits there -\n * that cell plus any free space adjacent to it - and neither ever grows.\n *\n * `from` is whatever the caller's layout says, so it is the caller that decides\n * what \"came from\" means. A pointer drag resolves every frame against the\n * arrangement the gesture started with, making it the cell the drag began at, and\n * keeping the result a pure function of where the pointer is; chaining frames off\n * each other instead would exchange with every widget swept over.\n * The slot the dragged widget is leaving is reserved for the displaced widget\n * while the dragged one is sized, so the two can never claim the same cells: the\n * result is overlap-free by construction, not by a follow-up check.\n */\nfunction exchangeWithCollision(\n layout: Layout,\n item: LayoutItem,\n collisions: LayoutItem[],\n from: { x: number; y: number },\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n): LayoutItem[] | null {\n // Nothing to trade if the widget has not actually left a slot behind - a\n // cross-board drop, where it never had one on this board.\n if (from.x === item.x && from.y === item.y) return null;\n\n // A drop that spans a boundary covers two widgets at once, and refusing those\n // frames would leave a band mid-drag where nothing is swapped at all: the\n // placeholder snaps back to the origin, then jumps to the far swap once the drop\n // clears the first widget. Trade with the one the drop covers most instead, so\n // the swap only ever changes which partner it is - never blinks away. Ties go to\n // the widget earlier in reading order, so the choice is deterministic. Exactly\n // one widget is ever displaced, whichever is picked.\n const candidates = collisions\n .filter((c) => !c.static)\n .map((c) => ({ c, area: overlapArea(item, c) }))\n .sort((p, q) => q.area - p.area || p.c.y - q.c.y || p.c.x - q.c.x)\n .map(({ c }) => c);\n\n for (const other of candidates) {\n const exchanged = exchangeWith(layout, item, other, from, desired, limits);\n if (exchanged) return exchanged;\n }\n return null;\n}\n\n/** One concrete two-widget exchange, or `null` if either side cannot fit. */\nfunction exchangeWith(\n layout: Layout,\n item: LayoutItem,\n other: LayoutItem,\n from: { x: number; y: number },\n desired: { w: number; h: number },\n limits: { cols: number; maxRows?: number },\n): LayoutItem[] | null {\n const rest = layout.filter((l) => l.i !== item.i && l.i !== other.i);\n // The slot being vacated, held back so the dragged widget cannot grow into the\n // space the displaced one is about to need. Ids are never compared here (the\n // scan works cell by cell), so this placeholder cannot clash with a real one.\n const originSlot: LayoutItem = {\n i: 'origin-slot-reservation',\n x: from.x,\n y: from.y,\n w: desired.w,\n h: desired.h,\n };\n\n const movedFit = maxFreeRectAt(\n [...rest, originSlot],\n { x: other.x, y: other.y },\n desired,\n limits,\n item,\n );\n if (!movedFit) return null;\n const moved: LayoutItem = {\n ...item,\n x: other.x,\n y: other.y,\n w: movedFit.w,\n h: movedFit.h,\n moved: true,\n };\n\n const displacedFit = maxFreeRectAt(\n [...rest, moved],\n { x: from.x, y: from.y },\n { w: other.w, h: other.h },\n limits,\n other,\n );\n if (!displacedFit) return null;\n const displaced: LayoutItem = {\n ...other,\n x: from.x,\n y: from.y,\n w: displacedFit.w,\n h: displacedFit.h,\n moved: true,\n };\n\n return layout.map((l) =>\n l.i === item.i ? moved : l.i === other.i ? displaced : l,\n );\n}\n\n/**\n * Build the resolver `moveElement` consults instead of reverting a blocked move,\n * or `undefined` for `'revert'` (and for an unset mode), which keeps the engine\n * on its original path with no added work.\n *\n * For an in-board drag, `'swap'` is an escalation ladder: exchange with one of\n * the widgets under the drop, else downscale at the drop cell, else revert. A\n * dense grid stays draggable that way - refusing everything that is not a clean\n * one-to-one trade would make the mode feel broken exactly where it is needed.\n * Cross-board callers pass `allowExchange: false`, which turns the same mode into\n * empty-anchor downscaling; the registry cancels the transfer if that resolution\n * cannot occupy the requested cell.\n */\nexport function createCollisionResolver(\n mode: CollisionMode | undefined,\n options: CollisionResolverOptions,\n): CollisionResolver | undefined {\n if (!mode || mode === 'revert') return undefined;\n\n const limits = { cols: options.cols, maxRows: options.maxRows };\n\n return ({ layout, item, collisions, from }) => {\n const others = layout.filter((l) => l.i !== item.i);\n const desired = options.desired ?? { w: item.w, h: item.h };\n\n if (mode === 'swap' && options.allowExchange !== false) {\n const exchanged = exchangeWithCollision(\n layout,\n item,\n collisions,\n from,\n desired,\n limits,\n );\n if (exchanged) return exchanged;\n }\n\n return downscaleInPlace(layout, item, others, desired, limits);\n };\n}\n\n/**\n * Whether a layout holds no overlapping pair. A resolution is only ever accepted\n * when this holds, so the specs assert it directly.\n */\nexport function isOverlapFree(layout: Layout): boolean {\n for (let i = 0; i < layout.length; i++) {\n for (let j = i + 1; j < layout.length; j++) {\n if (collides(layout[i]!, layout[j]!)) return false;\n }\n }\n return true;\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.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.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.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.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.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.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
|
|
2
2
|
import { getAllCollisions, getFirstCollision } from "./collision.js";
|
|
3
3
|
import { sortLayoutItems } from "./sort.js";
|
|
4
4
|
|
|
@@ -107,7 +107,7 @@ function correctBounds(layout, bounds) {
|
|
|
107
107
|
*
|
|
108
108
|
* **Note**: mutates the `l` parameter directly for performance.
|
|
109
109
|
*/
|
|
110
|
-
function moveElement(layout, l, x, y, isUserAction, preventCollision, compactType, cols, allowOverlap) {
|
|
110
|
+
function moveElement(layout, l, x, y, isUserAction, preventCollision, compactType, cols, allowOverlap, options) {
|
|
111
111
|
if (l.static && l.isDraggable !== true) return [...layout];
|
|
112
112
|
if (l.y === y && l.x === x) return [...layout];
|
|
113
113
|
const oldX = l.x;
|
|
@@ -121,6 +121,16 @@ function moveElement(layout, l, x, y, isUserAction, preventCollision, compactTyp
|
|
|
121
121
|
const hasCollisions = collisions.length > 0;
|
|
122
122
|
if (hasCollisions && allowOverlap) return cloneLayout(layout);
|
|
123
123
|
if (hasCollisions && preventCollision) {
|
|
124
|
+
const resolved = options?.resolveCollision?.({
|
|
125
|
+
layout,
|
|
126
|
+
item: l,
|
|
127
|
+
collisions,
|
|
128
|
+
from: {
|
|
129
|
+
x: oldX,
|
|
130
|
+
y: oldY
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
if (resolved) return resolved;
|
|
124
134
|
l.x = oldX;
|
|
125
135
|
l.y = oldY;
|
|
126
136
|
l.moved = false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layout.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/layout.ts"],"sourcesContent":["/**\n * Core layout manipulation utilities.\n *\n * Vendored from react-grid-layout v2 (`src/core/layout.ts`).\n * See ./NOTICE.md for attribution and license.\n *\n * These functions create, modify, and query grid layouts. Most functions treat\n * layouts as immutable and return new arrays/objects, but a few mutate items in\n * place for performance (documented per function).\n */\n\nimport { getAllCollisions, getFirstCollision } from './collision';\nimport { sortLayoutItems } from './sort';\n\nimport type { CompactType, Layout, LayoutItem, Mutable } from './types';\n\n// ============================================================================\n// Layout Queries\n// ============================================================================\n\n/**\n * Get the bottom-most Y coordinate of the layout (max of y + h).\n */\nexport function bottom(layout: Layout): number {\n let max = 0;\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined) {\n const bottomY = item.y + item.h;\n if (bottomY > max) max = bottomY;\n }\n }\n return max;\n}\n\n/** Get a layout item by its ID. */\nexport function getLayoutItem(\n layout: Layout,\n id: string,\n): LayoutItem | undefined {\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined && item.i === id) {\n return item;\n }\n }\n return undefined;\n}\n\n/** Get all static items from the layout. */\nexport function getStatics(layout: Layout): LayoutItem[] {\n return layout.filter((l): l is LayoutItem => l.static === true);\n}\n\n// ============================================================================\n// Layout Cloning\n// ============================================================================\n\n/** Clone a layout item (shallow copy, boolean flags normalized). */\nexport function cloneLayoutItem(layoutItem: LayoutItem): LayoutItem {\n return {\n i: layoutItem.i,\n x: layoutItem.x,\n y: layoutItem.y,\n w: layoutItem.w,\n h: layoutItem.h,\n minW: layoutItem.minW,\n maxW: layoutItem.maxW,\n minH: layoutItem.minH,\n maxH: layoutItem.maxH,\n moved: Boolean(layoutItem.moved),\n static: Boolean(layoutItem.static),\n isDraggable: layoutItem.isDraggable,\n isResizable: layoutItem.isResizable,\n resizeHandles: layoutItem.resizeHandles,\n constraints: layoutItem.constraints,\n isBounded: layoutItem.isBounded,\n };\n}\n\n/** Clone an entire layout. */\nexport function cloneLayout(layout: Layout): LayoutItem[] {\n const newLayout: LayoutItem[] = new Array(layout.length);\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined) {\n newLayout[i] = cloneLayoutItem(item);\n }\n }\n return newLayout;\n}\n\n// ============================================================================\n// Layout Modification\n// ============================================================================\n\n/** Replace a layout item in a layout (matched by `i`). Other items untouched. */\nexport function modifyLayout(\n layout: Layout,\n layoutItem: LayoutItem,\n): LayoutItem[] {\n const newLayout: LayoutItem[] = new Array(layout.length);\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined) {\n if (layoutItem.i === item.i) {\n newLayout[i] = layoutItem;\n } else {\n newLayout[i] = item;\n }\n }\n }\n return newLayout;\n}\n\n/**\n * Apply a transformation to a layout item. Finds the item by key, clones it,\n * applies the callback, and returns [new layout, modified item | null].\n */\nexport function withLayoutItem(\n layout: Layout,\n itemKey: string,\n cb: (item: LayoutItem) => LayoutItem,\n): [LayoutItem[], LayoutItem | null] {\n let item = getLayoutItem(layout, itemKey);\n if (!item) {\n return [[...layout], null];\n }\n\n item = cb(cloneLayoutItem(item));\n const newLayout = modifyLayout(layout, item);\n\n return [newLayout, item];\n}\n\n// ============================================================================\n// Bounds Correction\n// ============================================================================\n\n/**\n * Ensure all layout items fit within the grid bounds.\n *\n * **IMPORTANT**: mutates the layout items in place for performance. Clone the\n * layout first (e.g. with `cloneLayout()`) if you need immutability.\n */\nexport function correctBounds(\n layout: Mutable<LayoutItem>[],\n bounds: { cols: number },\n): LayoutItem[] {\n const collidesWith = getStatics(layout);\n\n for (let i = 0; i < layout.length; i++) {\n const l = layout[i];\n if (l === undefined) continue;\n\n // Overflows right\n if (l.x + l.w > bounds.cols) {\n l.x = bounds.cols - l.w;\n }\n\n // Overflows left\n if (l.x < 0) {\n l.x = 0;\n l.w = bounds.cols;\n }\n\n if (!l.static) {\n collidesWith.push(l);\n } else {\n // Static items that collide with other statics must be moved down\n while (getFirstCollision(collidesWith, l)) {\n l.y++;\n }\n }\n }\n\n return layout;\n}\n\n// ============================================================================\n// Move Operations\n// ============================================================================\n\n/**\n * Move a layout element to a new position.\n *\n * Handles collision detection and cascading movements. Does not compact the\n * layout - call the compactor separately.\n *\n * **Note**: mutates the `l` parameter directly for performance.\n */\nexport function moveElement(\n layout: Layout,\n l: LayoutItem,\n x: number | undefined,\n y: number | undefined,\n isUserAction: boolean | undefined,\n preventCollision: boolean | undefined,\n compactType: CompactType,\n cols: number,\n allowOverlap?: boolean,\n): LayoutItem[] {\n // Static items can't be moved unless explicitly draggable\n if (l.static && l.isDraggable !== true) {\n return [...layout];\n }\n\n // Short-circuit if position unchanged\n if (l.y === y && l.x === x) {\n return [...layout];\n }\n\n const oldX = l.x;\n const oldY = l.y;\n\n // Update position (mutates l directly - see JSDoc note)\n if (typeof x === 'number') (l as Mutable<LayoutItem>).x = x;\n if (typeof y === 'number') (l as Mutable<LayoutItem>).y = y;\n (l as Mutable<LayoutItem>).moved = true;\n\n // Sort for proper collision detection order\n let sorted = sortLayoutItems(layout, compactType);\n const movingUp =\n compactType === 'vertical' && typeof y === 'number'\n ? oldY >= y\n : compactType === 'horizontal' && typeof x === 'number'\n ? oldX >= x\n : false;\n\n if (movingUp) {\n sorted = sorted.reverse();\n }\n\n const collisions = getAllCollisions(sorted, l);\n const hasCollisions = collisions.length > 0;\n\n // Handle overlap mode - just clone and return\n if (hasCollisions && allowOverlap) {\n return cloneLayout(layout);\n }\n\n // Handle prevent collision mode - revert position.\n // Return same reference to signal no change occurred.\n if (hasCollisions && preventCollision) {\n (l as Mutable<LayoutItem>).x = oldX;\n (l as Mutable<LayoutItem>).y = oldY;\n (l as Mutable<LayoutItem>).moved = false;\n return layout as LayoutItem[];\n }\n\n // Resolve collisions by moving other items\n let resultLayout: LayoutItem[] = [...layout];\n for (let i = 0; i < collisions.length; i++) {\n const collision = collisions[i];\n if (collision === undefined) continue;\n\n // Skip already-moved items to prevent infinite loops\n if (collision.moved) continue;\n\n // Static items can't be moved - move the dragged item instead\n if (collision.static) {\n resultLayout = moveElementAwayFromCollision(\n resultLayout,\n collision,\n l,\n isUserAction,\n compactType,\n cols,\n );\n } else {\n resultLayout = moveElementAwayFromCollision(\n resultLayout,\n l,\n collision,\n isUserAction,\n compactType,\n cols,\n );\n }\n }\n\n return resultLayout;\n}\n\n/**\n * Move an item away from a collision. Attempts to move up/left first if there's\n * room, otherwise moves it down/right.\n */\nexport function moveElementAwayFromCollision(\n layout: Layout,\n collidesWith: LayoutItem,\n itemToMove: LayoutItem,\n isUserAction: boolean | undefined,\n compactType: CompactType,\n cols: number,\n): LayoutItem[] {\n const compactH = compactType === 'horizontal';\n const compactV = compactType === 'vertical';\n const preventCollision = collidesWith.static;\n\n // Try to move up/left first (only on primary collision from user action)\n if (isUserAction) {\n isUserAction = false; // Only try this once\n\n // Create a fake item to test if there's room above/left\n const fakeItem: LayoutItem = {\n x: compactH ? Math.max(collidesWith.x - itemToMove.w, 0) : itemToMove.x,\n y: compactV ? Math.max(collidesWith.y - itemToMove.h, 0) : itemToMove.y,\n w: itemToMove.w,\n h: itemToMove.h,\n i: '-1',\n };\n\n const firstCollision = getFirstCollision(layout, fakeItem);\n const collisionNorth =\n firstCollision !== undefined &&\n firstCollision.y + firstCollision.h > collidesWith.y;\n const collisionWest =\n firstCollision !== undefined &&\n collidesWith.x + collidesWith.w > firstCollision.x;\n\n // No collision above/left - we can move there\n if (!firstCollision) {\n return moveElement(\n layout,\n itemToMove,\n compactH ? fakeItem.x : undefined,\n compactV ? fakeItem.y : undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n\n // Handle specific collision cases\n if (collisionNorth && compactV) {\n return moveElement(\n layout,\n itemToMove,\n undefined,\n itemToMove.y + 1,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n\n if (collisionNorth && compactType === null) {\n // Swap positions in free-form mode\n (collidesWith as Mutable<LayoutItem>).y = itemToMove.y;\n (itemToMove as Mutable<LayoutItem>).y = itemToMove.y + itemToMove.h;\n return [...layout];\n }\n\n if (collisionWest && compactH) {\n return moveElement(\n layout,\n collidesWith,\n itemToMove.x,\n undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n }\n\n // Default: move down/right by 1\n const newX = compactH ? itemToMove.x + 1 : undefined;\n const newY = compactV ? itemToMove.y + 1 : undefined;\n\n if (newX === undefined && newY === undefined) {\n return [...layout];\n }\n\n return moveElement(\n layout,\n itemToMove,\n newX,\n newY,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n}\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/** Validate that a layout has the required numeric properties. */\nexport function validateLayout(\n layout: Layout,\n contextName: string = 'Layout',\n): void {\n const requiredProps = ['x', 'y', 'w', 'h'] as const;\n\n if (!Array.isArray(layout)) {\n throw new Error(`${contextName} must be an array!`);\n }\n\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item === undefined) continue;\n\n for (const key of requiredProps) {\n const value = item[key];\n if (typeof value !== 'number' || Number.isNaN(value)) {\n throw new Error(\n `Board: ${contextName}[${i}].${key} must be a number! ` +\n `Received: ${String(value)} (${typeof value})`,\n );\n }\n }\n\n if (item.i !== undefined && typeof item.i !== 'string') {\n throw new Error(\n `Board: ${contextName}[${i}].i must be a string! ` +\n `Received: ${String(item.i)} (${typeof item.i})`,\n );\n }\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAuBA,SAAgB,OAAO,QAAwB;CAC7C,IAAI,MAAM;AACV,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,QAAW;GACtB,MAAM,UAAU,KAAK,IAAI,KAAK;AAC9B,OAAI,UAAU,IAAK,OAAM;;;AAG7B,QAAO;;;AAIT,SAAgB,cACd,QACA,IACwB;AACxB,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,UAAa,KAAK,MAAM,GACnC,QAAO;;;;AAOb,SAAgB,WAAW,QAA8B;AACvD,QAAO,OAAO,QAAQ,MAAuB,EAAE,WAAW,KAAK;;;AAQjE,SAAgB,gBAAgB,YAAoC;AAClE,QAAO;EACL,GAAG,WAAW;EACd,GAAG,WAAW;EACd,GAAG,WAAW;EACd,GAAG,WAAW;EACd,GAAG,WAAW;EACd,MAAM,WAAW;EACjB,MAAM,WAAW;EACjB,MAAM,WAAW;EACjB,MAAM,WAAW;EACjB,OAAO,QAAQ,WAAW,MAAM;EAChC,QAAQ,QAAQ,WAAW,OAAO;EAClC,aAAa,WAAW;EACxB,aAAa,WAAW;EACxB,eAAe,WAAW;EAC1B,aAAa,WAAW;EACxB,WAAW,WAAW;EACvB;;;AAIH,SAAgB,YAAY,QAA8B;CACxD,MAAM,YAA0B,IAAI,MAAM,OAAO,OAAO;AACxD,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,OACX,WAAU,KAAK,gBAAgB,KAAK;;AAGxC,QAAO;;;AAQT,SAAgB,aACd,QACA,YACc;CACd,MAAM,YAA0B,IAAI,MAAM,OAAO,OAAO;AACxD,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,OAAO,OAAO;AACpB,MAAI,SAAS,OACX,KAAI,WAAW,MAAM,KAAK,EACxB,WAAU,KAAK;MAEf,WAAU,KAAK;;AAIrB,QAAO;;;;;;;;AAiCT,SAAgB,cACd,QACA,QACc;CACd,MAAM,eAAe,WAAW,OAAO;AAEvC,MAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;EACtC,MAAM,IAAI,OAAO;AACjB,MAAI,MAAM,OAAW;AAGrB,MAAI,EAAE,IAAI,EAAE,IAAI,OAAO,KACrB,GAAE,IAAI,OAAO,OAAO,EAAE;AAIxB,MAAI,EAAE,IAAI,GAAG;AACX,KAAE,IAAI;AACN,KAAE,IAAI,OAAO;;AAGf,MAAI,CAAC,EAAE,OACL,cAAa,KAAK,EAAE;MAGpB,QAAO,kBAAkB,cAAc,EAAE,CACvC,GAAE;;AAKR,QAAO;;;;;;;;;;AAeT,SAAgB,YACd,QACA,GACA,GACA,GACA,cACA,kBACA,aACA,MACA,cACc;AAEd,KAAI,EAAE,UAAU,EAAE,gBAAgB,KAChC,QAAO,CAAC,GAAG,OAAO;AAIpB,KAAI,EAAE,MAAM,KAAK,EAAE,MAAM,EACvB,QAAO,CAAC,GAAG,OAAO;CAGpB,MAAM,OAAO,EAAE;CACf,MAAM,OAAO,EAAE;AAGf,KAAI,OAAO,MAAM,SAAU,CAAC,EAA0B,IAAI;AAC1D,KAAI,OAAO,MAAM,SAAU,CAAC,EAA0B,IAAI;AAC1D,CAAC,EAA0B,QAAQ;CAGnC,IAAI,SAAS,gBAAgB,QAAQ,YAAY;AAQjD,KANE,gBAAgB,cAAc,OAAO,MAAM,WACvC,QAAQ,IACR,gBAAgB,gBAAgB,OAAO,MAAM,WAC3C,QAAQ,IACR,MAGN,UAAS,OAAO,SAAS;CAG3B,MAAM,aAAa,iBAAiB,QAAQ,EAAE;CAC9C,MAAM,gBAAgB,WAAW,SAAS;AAG1C,KAAI,iBAAiB,aACnB,QAAO,YAAY,OAAO;AAK5B,KAAI,iBAAiB,kBAAkB;AACrC,EAAC,EAA0B,IAAI;AAC/B,EAAC,EAA0B,IAAI;AAC/B,EAAC,EAA0B,QAAQ;AACnC,SAAO;;CAIT,IAAI,eAA6B,CAAC,GAAG,OAAO;AAC5C,MAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;EAC1C,MAAM,YAAY,WAAW;AAC7B,MAAI,cAAc,OAAW;AAG7B,MAAI,UAAU,MAAO;AAGrB,MAAI,UAAU,OACZ,gBAAe,6BACb,cACA,WACA,GACA,cACA,aACA,KACD;MAED,gBAAe,6BACb,cACA,GACA,WACA,cACA,aACA,KACD;;AAIL,QAAO;;;;;;AAOT,SAAgB,6BACd,QACA,cACA,YACA,cACA,aACA,MACc;CACd,MAAM,WAAW,gBAAgB;CACjC,MAAM,WAAW,gBAAgB;CACjC,MAAM,mBAAmB,aAAa;AAGtC,KAAI,cAAc;AAChB,iBAAe;EAGf,MAAM,WAAuB;GAC3B,GAAG,WAAW,KAAK,IAAI,aAAa,IAAI,WAAW,GAAG,EAAE,GAAG,WAAW;GACtE,GAAG,WAAW,KAAK,IAAI,aAAa,IAAI,WAAW,GAAG,EAAE,GAAG,WAAW;GACtE,GAAG,WAAW;GACd,GAAG,WAAW;GACd,GAAG;GACJ;EAED,MAAM,iBAAiB,kBAAkB,QAAQ,SAAS;EAC1D,MAAM,iBACJ,mBAAmB,UACnB,eAAe,IAAI,eAAe,IAAI,aAAa;EACrD,MAAM,gBACJ,mBAAmB,UACnB,aAAa,IAAI,aAAa,IAAI,eAAe;AAGnD,MAAI,CAAC,eACH,QAAO,YACL,QACA,YACA,WAAW,SAAS,IAAI,QACxB,WAAW,SAAS,IAAI,QACxB,cACA,kBACA,aACA,KACD;AAIH,MAAI,kBAAkB,SACpB,QAAO,YACL,QACA,YACA,QACA,WAAW,IAAI,GACf,cACA,kBACA,aACA,KACD;AAGH,MAAI,kBAAkB,gBAAgB,MAAM;AAE1C,GAAC,aAAqC,IAAI,WAAW;AACrD,GAAC,WAAmC,IAAI,WAAW,IAAI,WAAW;AAClE,UAAO,CAAC,GAAG,OAAO;;AAGpB,MAAI,iBAAiB,SACnB,QAAO,YACL,QACA,cACA,WAAW,GACX,QACA,cACA,kBACA,aACA,KACD;;CAKL,MAAM,OAAO,WAAW,WAAW,IAAI,IAAI;CAC3C,MAAM,OAAO,WAAW,WAAW,IAAI,IAAI;AAE3C,KAAI,SAAS,UAAa,SAAS,OACjC,QAAO,CAAC,GAAG,OAAO;AAGpB,QAAO,YACL,QACA,YACA,MACA,MACA,cACA,kBACA,aACA,KACD"}
|
|
1
|
+
{"version":3,"file":"layout.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/layout.ts"],"sourcesContent":["/**\n * Core layout manipulation utilities.\n *\n * Vendored from react-grid-layout v2 (`src/core/layout.ts`).\n * See ./NOTICE.md for attribution and license.\n *\n * These functions create, modify, and query grid layouts. Most functions treat\n * layouts as immutable and return new arrays/objects, but a few mutate items in\n * place for performance (documented per function).\n */\n\nimport { getAllCollisions, getFirstCollision } from './collision';\nimport { sortLayoutItems } from './sort';\n\nimport type {\n CompactType,\n Layout,\n LayoutItem,\n MoveElementOptions,\n Mutable,\n} from './types';\n\n// ============================================================================\n// Layout Queries\n// ============================================================================\n\n/**\n * Get the bottom-most Y coordinate of the layout (max of y + h).\n */\nexport function bottom(layout: Layout): number {\n let max = 0;\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined) {\n const bottomY = item.y + item.h;\n if (bottomY > max) max = bottomY;\n }\n }\n return max;\n}\n\n/** Get a layout item by its ID. */\nexport function getLayoutItem(\n layout: Layout,\n id: string,\n): LayoutItem | undefined {\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined && item.i === id) {\n return item;\n }\n }\n return undefined;\n}\n\n/** Get all static items from the layout. */\nexport function getStatics(layout: Layout): LayoutItem[] {\n return layout.filter((l): l is LayoutItem => l.static === true);\n}\n\n// ============================================================================\n// Layout Cloning\n// ============================================================================\n\n/** Clone a layout item (shallow copy, boolean flags normalized). */\nexport function cloneLayoutItem(layoutItem: LayoutItem): LayoutItem {\n return {\n i: layoutItem.i,\n x: layoutItem.x,\n y: layoutItem.y,\n w: layoutItem.w,\n h: layoutItem.h,\n minW: layoutItem.minW,\n maxW: layoutItem.maxW,\n minH: layoutItem.minH,\n maxH: layoutItem.maxH,\n moved: Boolean(layoutItem.moved),\n static: Boolean(layoutItem.static),\n isDraggable: layoutItem.isDraggable,\n isResizable: layoutItem.isResizable,\n resizeHandles: layoutItem.resizeHandles,\n constraints: layoutItem.constraints,\n isBounded: layoutItem.isBounded,\n };\n}\n\n/** Clone an entire layout. */\nexport function cloneLayout(layout: Layout): LayoutItem[] {\n const newLayout: LayoutItem[] = new Array(layout.length);\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined) {\n newLayout[i] = cloneLayoutItem(item);\n }\n }\n return newLayout;\n}\n\n// ============================================================================\n// Layout Modification\n// ============================================================================\n\n/** Replace a layout item in a layout (matched by `i`). Other items untouched. */\nexport function modifyLayout(\n layout: Layout,\n layoutItem: LayoutItem,\n): LayoutItem[] {\n const newLayout: LayoutItem[] = new Array(layout.length);\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item !== undefined) {\n if (layoutItem.i === item.i) {\n newLayout[i] = layoutItem;\n } else {\n newLayout[i] = item;\n }\n }\n }\n return newLayout;\n}\n\n/**\n * Apply a transformation to a layout item. Finds the item by key, clones it,\n * applies the callback, and returns [new layout, modified item | null].\n */\nexport function withLayoutItem(\n layout: Layout,\n itemKey: string,\n cb: (item: LayoutItem) => LayoutItem,\n): [LayoutItem[], LayoutItem | null] {\n let item = getLayoutItem(layout, itemKey);\n if (!item) {\n return [[...layout], null];\n }\n\n item = cb(cloneLayoutItem(item));\n const newLayout = modifyLayout(layout, item);\n\n return [newLayout, item];\n}\n\n// ============================================================================\n// Bounds Correction\n// ============================================================================\n\n/**\n * Ensure all layout items fit within the grid bounds.\n *\n * **IMPORTANT**: mutates the layout items in place for performance. Clone the\n * layout first (e.g. with `cloneLayout()`) if you need immutability.\n */\nexport function correctBounds(\n layout: Mutable<LayoutItem>[],\n bounds: { cols: number },\n): LayoutItem[] {\n const collidesWith = getStatics(layout);\n\n for (let i = 0; i < layout.length; i++) {\n const l = layout[i];\n if (l === undefined) continue;\n\n // Overflows right\n if (l.x + l.w > bounds.cols) {\n l.x = bounds.cols - l.w;\n }\n\n // Overflows left\n if (l.x < 0) {\n l.x = 0;\n l.w = bounds.cols;\n }\n\n if (!l.static) {\n collidesWith.push(l);\n } else {\n // Static items that collide with other statics must be moved down\n while (getFirstCollision(collidesWith, l)) {\n l.y++;\n }\n }\n }\n\n return layout;\n}\n\n// ============================================================================\n// Move Operations\n// ============================================================================\n\n/**\n * Move a layout element to a new position.\n *\n * Handles collision detection and cascading movements. Does not compact the\n * layout - call the compactor separately.\n *\n * **Note**: mutates the `l` parameter directly for performance.\n */\nexport function moveElement(\n layout: Layout,\n l: LayoutItem,\n x: number | undefined,\n y: number | undefined,\n isUserAction: boolean | undefined,\n preventCollision: boolean | undefined,\n compactType: CompactType,\n cols: number,\n allowOverlap?: boolean,\n options?: MoveElementOptions,\n): LayoutItem[] {\n // Static items can't be moved unless explicitly draggable\n if (l.static && l.isDraggable !== true) {\n return [...layout];\n }\n\n // Short-circuit if position unchanged\n if (l.y === y && l.x === x) {\n return [...layout];\n }\n\n const oldX = l.x;\n const oldY = l.y;\n\n // Update position (mutates l directly - see JSDoc note)\n if (typeof x === 'number') (l as Mutable<LayoutItem>).x = x;\n if (typeof y === 'number') (l as Mutable<LayoutItem>).y = y;\n (l as Mutable<LayoutItem>).moved = true;\n\n // Sort for proper collision detection order\n let sorted = sortLayoutItems(layout, compactType);\n const movingUp =\n compactType === 'vertical' && typeof y === 'number'\n ? oldY >= y\n : compactType === 'horizontal' && typeof x === 'number'\n ? oldX >= x\n : false;\n\n if (movingUp) {\n sorted = sorted.reverse();\n }\n\n const collisions = getAllCollisions(sorted, l);\n const hasCollisions = collisions.length > 0;\n\n // Handle overlap mode - just clone and return\n if (hasCollisions && allowOverlap) {\n return cloneLayout(layout);\n }\n\n // Handle prevent collision mode. A resolver may rewrite the layout instead of\n // refusing the move outright - shrinking the item into the room that is there,\n // or trading places with the widget already in it (see `collision-modes.ts`).\n // Its result is required to be overlap-free, so nothing downstream has to\n // change; when it declines, we revert exactly as before.\n if (hasCollisions && preventCollision) {\n const resolved = options?.resolveCollision?.({\n layout,\n item: l,\n collisions,\n from: { x: oldX, y: oldY },\n });\n if (resolved) return resolved;\n\n // Revert position. Return same reference to signal no change occurred.\n (l as Mutable<LayoutItem>).x = oldX;\n (l as Mutable<LayoutItem>).y = oldY;\n (l as Mutable<LayoutItem>).moved = false;\n return layout as LayoutItem[];\n }\n\n // Resolve collisions by moving other items\n let resultLayout: LayoutItem[] = [...layout];\n for (let i = 0; i < collisions.length; i++) {\n const collision = collisions[i];\n if (collision === undefined) continue;\n\n // Skip already-moved items to prevent infinite loops\n if (collision.moved) continue;\n\n // Static items can't be moved - move the dragged item instead\n if (collision.static) {\n resultLayout = moveElementAwayFromCollision(\n resultLayout,\n collision,\n l,\n isUserAction,\n compactType,\n cols,\n );\n } else {\n resultLayout = moveElementAwayFromCollision(\n resultLayout,\n l,\n collision,\n isUserAction,\n compactType,\n cols,\n );\n }\n }\n\n return resultLayout;\n}\n\n/**\n * Move an item away from a collision. Attempts to move up/left first if there's\n * room, otherwise moves it down/right.\n */\nexport function moveElementAwayFromCollision(\n layout: Layout,\n collidesWith: LayoutItem,\n itemToMove: LayoutItem,\n isUserAction: boolean | undefined,\n compactType: CompactType,\n cols: number,\n): LayoutItem[] {\n const compactH = compactType === 'horizontal';\n const compactV = compactType === 'vertical';\n const preventCollision = collidesWith.static;\n\n // Try to move up/left first (only on primary collision from user action)\n if (isUserAction) {\n isUserAction = false; // Only try this once\n\n // Create a fake item to test if there's room above/left\n const fakeItem: LayoutItem = {\n x: compactH ? Math.max(collidesWith.x - itemToMove.w, 0) : itemToMove.x,\n y: compactV ? Math.max(collidesWith.y - itemToMove.h, 0) : itemToMove.y,\n w: itemToMove.w,\n h: itemToMove.h,\n i: '-1',\n };\n\n const firstCollision = getFirstCollision(layout, fakeItem);\n const collisionNorth =\n firstCollision !== undefined &&\n firstCollision.y + firstCollision.h > collidesWith.y;\n const collisionWest =\n firstCollision !== undefined &&\n collidesWith.x + collidesWith.w > firstCollision.x;\n\n // No collision above/left - we can move there\n if (!firstCollision) {\n return moveElement(\n layout,\n itemToMove,\n compactH ? fakeItem.x : undefined,\n compactV ? fakeItem.y : undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n\n // Handle specific collision cases\n if (collisionNorth && compactV) {\n return moveElement(\n layout,\n itemToMove,\n undefined,\n itemToMove.y + 1,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n\n if (collisionNorth && compactType === null) {\n // Swap positions in free-form mode\n (collidesWith as Mutable<LayoutItem>).y = itemToMove.y;\n (itemToMove as Mutable<LayoutItem>).y = itemToMove.y + itemToMove.h;\n return [...layout];\n }\n\n if (collisionWest && compactH) {\n return moveElement(\n layout,\n collidesWith,\n itemToMove.x,\n undefined,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n }\n }\n\n // Default: move down/right by 1\n const newX = compactH ? itemToMove.x + 1 : undefined;\n const newY = compactV ? itemToMove.y + 1 : undefined;\n\n if (newX === undefined && newY === undefined) {\n return [...layout];\n }\n\n return moveElement(\n layout,\n itemToMove,\n newX,\n newY,\n isUserAction,\n preventCollision,\n compactType,\n cols,\n );\n}\n\n// ============================================================================\n// Validation\n// ============================================================================\n\n/** Validate that a layout has the required numeric properties. */\nexport function validateLayout(\n layout: Layout,\n contextName: string = 'Layout',\n): void {\n const requiredProps = ['x', 'y', 'w', 'h'] as const;\n\n if (!Array.isArray(layout)) {\n throw new Error(`${contextName} must be an array!`);\n }\n\n for (let i = 0; i < layout.length; i++) {\n const item = layout[i];\n if (item === undefined) continue;\n\n for (const key of requiredProps) {\n const value = item[key];\n if (typeof value !== 'number' || Number.isNaN(value)) {\n throw new Error(\n `Board: ${contextName}[${i}].${key} must be a number! ` +\n `Received: ${String(value)} (${typeof value})`,\n );\n }\n }\n\n if (item.i !== undefined && typeof item.i !== 'string') {\n throw new Error(\n `Board: ${contextName}[${i}].i must be a string! ` +\n `Received: ${String(item.i)} (${typeof item.i})`,\n );\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -87,6 +87,24 @@ type Layout = readonly LayoutItem[];
|
|
|
87
87
|
* - null: No compaction (free-form positioning)
|
|
88
88
|
*/
|
|
89
89
|
type CompactType = 'horizontal' | 'vertical' | 'wrap' | null;
|
|
90
|
+
/**
|
|
91
|
+
* How a blocked placement is resolved when collisions are prevented.
|
|
92
|
+
*
|
|
93
|
+
* - `'revert'` - snap the item back to where it was (the engine's own default).
|
|
94
|
+
* - `'downscale'` - shrink the item into the free space at the cell it was
|
|
95
|
+
* dropped on, growing rightward and downward. Never upscales.
|
|
96
|
+
* - `'swap'` - inside one board, exchange with one widget: the dragged widget
|
|
97
|
+
* takes the cell of the widget the drop covers most, and that widget takes the
|
|
98
|
+
* cell the dragged one came from, each keeping as much of its own size as fits
|
|
99
|
+
* there. Across boards, insert only at an empty anchor and downscale without
|
|
100
|
+
* exchanging or reflowing destination widgets; an invalid landing cancels the
|
|
101
|
+
* transfer. Never displaces more than one widget. Else downscale, else revert.
|
|
102
|
+
*
|
|
103
|
+
* Only consulted where a move would otherwise be refused, so it has no effect in
|
|
104
|
+
* the compacting modes (a collision pushes neighbours there) or under
|
|
105
|
+
* `allowOverlap` (nothing is refused).
|
|
106
|
+
*/
|
|
107
|
+
type CollisionMode = 'revert' | 'downscale' | 'swap';
|
|
90
108
|
/**
|
|
91
109
|
* Interface for layout compaction strategies.
|
|
92
110
|
*
|
|
@@ -164,5 +182,5 @@ interface LayoutConstraint {
|
|
|
164
182
|
};
|
|
165
183
|
}
|
|
166
184
|
//#endregion
|
|
167
|
-
export { CompactType, Compactor, Layout, LayoutConstraint, LayoutItem, ResizeHandleAxis };
|
|
185
|
+
export { CollisionMode, CompactType, Compactor, Layout, LayoutConstraint, LayoutItem, ResizeHandleAxis };
|
|
168
186
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
|
|
2
|
-
import { Compactor, Layout, LayoutConstraint, LayoutItem, ResizeHandleAxis } from "./grid-core/types.js";
|
|
2
|
+
import { CollisionMode, Compactor, Layout, LayoutConstraint, LayoutItem, ResizeHandleAxis } from "./grid-core/types.js";
|
|
3
3
|
import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
|
|
4
4
|
import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
|
|
5
5
|
import { BoardSelectionMode } from "./use-board-selection.js";
|
|
6
|
-
import { CubeBoardWidgetProps, Widget } from "./Widget.js";
|
|
6
|
+
import { BoardResizeGripPlacement, CubeBoardWidgetProps, Widget } from "./Widget.js";
|
|
7
7
|
import { BOARD_SELECTION_CANCEL, BoardCompactType, BoardGridLines, BoardInteractionInfo, CubeBoardProps } from "./Board.js";
|
|
8
8
|
import { BreakpointCols, Breakpoints, ResponsiveLayouts } from "./responsive-utils.js";
|
|
9
9
|
import { BoardResponsive, CubeBoardResponsiveProps } from "./BoardResponsive.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.0 | Cube Dev Team */
|
|
2
2
|
import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
|
|
3
3
|
import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
|
|
4
4
|
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 } 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 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 { 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,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.165.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";
|