@cube-dev/ui-kit 0.165.0 → 0.167.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -7
- package/dist/CHANGELOG.md +48 -0
- package/dist/README.md +4 -7
- 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 +4 -4
- package/dist/components/GlobalStyles.js.map +1 -1
- package/dist/components/GridProvider.js +1 -1
- package/dist/components/HiddenInput.js +1 -1
- package/dist/components/Root.js +1 -2
- package/dist/components/Root.js.map +1 -1
- package/dist/components/actions/Action/Action.js +1 -1
- package/dist/components/actions/Banner/Banner.js +1 -1
- package/dist/components/actions/Button/Button.d.ts +1 -0
- package/dist/components/actions/Button/Button.js +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.js +1 -1
- package/dist/components/actions/ItemActionContext.js +1 -1
- package/dist/components/actions/ItemButton/ItemButton.js +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.js +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.d.ts +7 -3
- package/dist/components/actions/use-anchored-menu.js +17 -12
- package/dist/components/actions/use-anchored-menu.js.map +1 -1
- package/dist/components/actions/use-context-menu.d.ts +6 -3
- package/dist/components/actions/use-context-menu.js +25 -13
- package/dist/components/actions/use-context-menu.js.map +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.js +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/Item/Item.js +1 -1
- package/dist/components/content/ItemBadge/ItemBadge.js +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.js +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.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 +1 -1
- package/dist/components/data/ItemTable/ItemTable.js +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/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 +1 -1
- package/dist/components/data/TableBase/TableView.js +1 -1
- package/dist/components/data/TableBase/column-menu.js +1 -1
- package/dist/components/data/TableBase/column-tint.js +1 -1
- package/dist/components/data/TableBase/row-menu.js +1 -1
- package/dist/components/data/TableBase/styled.d.ts +2 -1
- package/dist/components/data/TableBase/styled.js +1 -1
- package/dist/components/data/TableBase/table-tree.js +1 -1
- package/dist/components/data/TableBase/types.js +1 -1
- package/dist/components/data/TableBase/use-cell-selection.d.ts +1 -0
- 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 +1 -1
- package/dist/components/data/TableBase/use-table-selection.js +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 +1 -1
- 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 +1 -1
- package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
- package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
- package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
- package/dist/components/fields/ComboBox/ComboBox.js +1 -1
- package/dist/components/fields/CommandTextArea/CommandTextArea.js +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 +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 +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/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 +1 -0
- package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
- package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +2 -0
- 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 +1 -1
- package/dist/components/fields/Picker/Picker.js +1 -1
- package/dist/components/fields/RadioGroup/Radio.js +1 -1
- package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
- package/dist/components/fields/RadioGroup/context.js +1 -1
- package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
- package/dist/components/fields/SearchInput/SearchInput.js +1 -1
- package/dist/components/fields/Select/Select.js +1 -1
- package/dist/components/fields/Slider/Gradation.js +1 -1
- package/dist/components/fields/Slider/HueSlider.js +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 +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 +1 -1
- 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 +1 -1
- package/dist/components/fields/color/context.js +1 -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 +33 -7
- package/dist/components/layout/Board/Board.js +29 -11
- 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.d.ts +6 -3
- package/dist/components/layout/Board/BoardResponsive.js +3 -3
- package/dist/components/layout/Board/BoardResponsive.js.map +1 -1
- package/dist/components/layout/Board/Widget.d.ts +38 -1
- package/dist/components/layout/Board/Widget.js +6 -2
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +69 -18
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.js +1 -1
- package/dist/components/layout/Board/board-context.js.map +1 -1
- 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 +1 -1
- 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 +1 -1
- package/dist/components/layout/Board/grid-core/placement.d.ts +58 -0
- package/dist/components/layout/Board/grid-core/placement.js +153 -0
- package/dist/components/layout/Board/grid-core/placement.js.map +1 -0
- package/dist/components/layout/Board/grid-core/sort.js +1 -1
- package/dist/components/layout/Board/index.d.ts +3 -1
- package/dist/components/layout/Board/index.js +2 -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.d.ts +26 -0
- package/dist/components/layout/Board/use-board-layout.js +4 -4
- package/dist/components/layout/Board/use-board-layout.js.map +1 -1
- package/dist/components/layout/Board/use-board-registry.js +5 -56
- 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 +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.js +1 -1
- 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 +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.js +1 -1
- package/dist/components/overlays/Dialog/context.js +1 -1
- package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
- package/dist/components/overlays/Modal/Modal.d.ts +2 -1
- 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 +1 -0
- 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 +1 -0
- 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 +2 -0
- 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 +2 -1
- package/dist/components/overlays/Tooltip/Tooltip.js.map +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.d.ts +2 -0
- package/dist/components/portal/PortalProvider.js +1 -1
- package/dist/components/portal/index.d.ts +1 -0
- 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/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.js +1 -1
- package/dist/data/themes.js +1 -1
- package/dist/eslint-plugin/defaults.generated.js +25 -1
- 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 +1 -1
- package/dist/i18n/locales/en-US/uikit.js +1 -1
- package/dist/i18n/locales/es-ES/uikit.js +1 -1
- package/dist/i18n/locales/es-MX/uikit.js +1 -1
- package/dist/i18n/locales/fr-FR/uikit.js +1 -1
- package/dist/i18n/locales/it-IT/uikit.js +1 -1
- package/dist/i18n/locales/ja-JP/uikit.js +1 -1
- package/dist/i18n/locales/nb-NO/uikit.js +1 -1
- package/dist/i18n/locales/pt-BR/uikit.js +1 -1
- package/dist/i18n/locales/pt-PT/uikit.js +1 -1
- package/dist/i18n/locales/sv-SE/uikit.js +1 -1
- package/dist/i18n/locales/vi-VN/uikit.js +1 -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 +7 -3
- package/dist/index.js +5 -3
- 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/all-tokens.d.ts +10 -0
- package/dist/tokens/{index.js → all-tokens.js} +7 -25
- package/dist/tokens/all-tokens.js.map +1 -0
- package/dist/tokens/base.js +2 -1
- package/dist/tokens/base.js.map +1 -1
- package/dist/tokens/color-seed.js +1 -1
- package/dist/tokens/color-theme.js +1 -1
- package/dist/tokens/colors.js +1 -1
- package/dist/tokens/index.d.ts +3 -10
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/lazy-styles.js +1 -1
- package/dist/tokens/palette-config.js +1 -1
- package/dist/tokens/palette.js +1 -1
- package/dist/tokens/resolve.d.ts +113 -0
- package/dist/tokens/resolve.js +403 -0
- package/dist/tokens/resolve.js.map +1 -0
- 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.d.ts +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/Colors.md +16 -40
- package/docs/ComplexLayout.md +8 -0
- package/docs/CreateComponent.md +15 -8
- package/docs/Introduction.md +15 -36
- package/docs/RenderCache.md +8 -6
- package/docs/Theming.md +164 -497
- package/docs/Usage.md +129 -138
- package/docs/Utilities.md +2 -2
- package/docs/components/CollectionItem.md +1 -0
- package/docs/components/actions/Banner.md +1 -0
- package/docs/components/actions/Button.md +8 -36
- package/docs/components/actions/ButtonSplit.md +2 -0
- package/docs/components/actions/CommandMenu.md +8 -8
- package/docs/components/actions/ItemButton.md +6 -20
- package/docs/components/actions/Link.md +10 -5
- package/docs/components/actions/Menu.md +24 -11
- package/docs/components/actions/MenuTrigger.md +3 -12
- package/docs/components/actions/use-anchored-menu.md +5 -5
- package/docs/components/actions/use-context-menu.md +11 -7
- package/docs/components/content/Badge.md +3 -0
- package/docs/components/content/HotKeys.md +21 -14
- package/docs/components/content/InlineInput.md +14 -14
- package/docs/components/content/Item.md +25 -17
- package/docs/components/content/ItemCard.md +1 -0
- package/docs/components/content/Layout.md +12 -1
- package/docs/components/content/PrismCode.md +13 -18
- package/docs/components/content/Tag.md +1 -1
- package/docs/components/content/TextItem.md +5 -3
- package/docs/components/content/Tree.md +69 -154
- package/docs/components/data/DataTable.md +56 -168
- package/docs/components/data/ItemTable.md +182 -485
- package/docs/components/fields/Checkbox.md +2 -0
- package/docs/components/fields/ColorInput.md +38 -79
- package/docs/components/fields/ColorPicker.md +17 -39
- package/docs/components/fields/ColorSwatch.md +11 -30
- package/docs/components/fields/ColorSwatchGroup.md +18 -42
- package/docs/components/fields/ComboBox.md +13 -1
- package/docs/components/fields/CommandTextArea.md +10 -37
- package/docs/components/fields/DatePicker.md +3 -0
- package/docs/components/fields/FileInput.md +3 -0
- package/docs/components/fields/FilterListBox.md +34 -14
- package/docs/components/fields/FilterPicker.md +33 -16
- package/docs/components/fields/HueSlider.md +5 -5
- package/docs/components/fields/ListBox.md +35 -9
- package/docs/components/fields/NumberInput.md +3 -0
- package/docs/components/fields/PasswordInput.md +3 -0
- package/docs/components/fields/PeriodPicker.md +7 -17
- package/docs/components/fields/Picker.md +54 -29
- package/docs/components/fields/RadioGroup.md +13 -5
- package/docs/components/fields/SearchComboBox.md +3 -0
- package/docs/components/fields/SearchInput.md +4 -2
- package/docs/components/fields/Select.md +23 -13
- package/docs/components/fields/Switch.md +3 -0
- package/docs/components/fields/TextInput.md +3 -0
- package/docs/components/fields/TextInputMapper.md +1 -2
- package/docs/components/form/Field.md +5 -2
- package/docs/components/form/Form.md +5 -0
- package/docs/components/form/FormInstance.md +1 -1
- package/docs/components/helpers/DisplayTransition.md +10 -6
- package/docs/components/helpers/IconSwitch.md +1 -0
- package/docs/components/layout/Board.md +89 -193
- package/docs/components/navigation/Pagination.md +36 -75
- package/docs/components/navigation/Tabs.md +3 -15
- package/docs/components/other/Calendar.md +22 -39
- package/docs/components/other/CubeLogo.md +1 -1
- package/docs/components/overlays/Dialog.md +3 -0
- package/docs/components/overlays/DialogContainer.md +2 -0
- package/docs/components/overlays/DialogForm.md +6 -2
- package/docs/components/overlays/DialogTrigger.md +4 -2
- package/docs/components/overlays/Notifications.md +7 -0
- package/docs/components/overlays/Toast.md +12 -8
- package/docs/components/overlays/Tooltip.md +16 -0
- package/docs/components/overlays/UseDialogContainer.md +16 -10
- package/docs/components/status/LoadingAnimation.md +3 -9
- package/docs/tasty/configuration.md +195 -15
- package/docs/tasty/dsl.md +40 -5
- package/docs/tasty/injector.md +11 -0
- package/docs/tasty/methodology.md +1 -1
- package/docs/tasty/pipeline.md +1 -4
- package/docs/tasty/react-api.md +1 -1
- package/docs/tasty/styles.md +8 -1
- package/package.json +4 -4
- package/dist/tokens/index.js.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
2
|
import { collides, getFirstCollision } from "./collision.js";
|
|
3
3
|
import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
|
|
4
4
|
import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
2
|
//#region src/components/layout/Board/grid-core/constraints.ts
|
|
3
3
|
function clamp(value, min, max) {
|
|
4
4
|
return Math.max(min, Math.min(max, value));
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
2
|
import { collides, getFirstCollision } from "./collision.js";
|
|
3
3
|
import { sortLayoutItemsByColRow, sortLayoutItemsByRowCol } from "./sort.js";
|
|
4
4
|
import { bottom, cloneLayout, cloneLayoutItem, getStatics } from "./layout.js";
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
|
|
2
|
+
import { Layout, LayoutItem } from "./types.js";
|
|
3
|
+
|
|
4
|
+
//#region src/components/layout/Board/grid-core/placement.d.ts
|
|
5
|
+
/**
|
|
6
|
+
* The first position at or below the preferred cell where `item` fits without
|
|
7
|
+
* overlapping any of `others` (which must themselves be overlap-free), scanning
|
|
8
|
+
* left-to-right then top-to-bottom and never past `maxRows`; if the band below
|
|
9
|
+
* is full, upward toward the top.
|
|
10
|
+
*
|
|
11
|
+
* This is the rule the board itself applies when it has to land a widget that
|
|
12
|
+
* cannot stay where it was dropped, so using it for a programmatic add is what
|
|
13
|
+
* makes the two agree.
|
|
14
|
+
*
|
|
15
|
+
* A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path
|
|
16
|
+
* applies (`clamp(y, 0, maxRows - h)`): the item's bottom edge stays within the
|
|
17
|
+
* row limit even when the landing cell is blocked, so the downward scan cannot
|
|
18
|
+
* push it off the board. If the whole valid band is full the item is clamped to
|
|
19
|
+
* the limit — bounds win over overlap, exactly as `gridBounds` does. With an
|
|
20
|
+
* unbounded `maxRows` there is always a free slot below every existing item, so
|
|
21
|
+
* the downward scan terminates on its own.
|
|
22
|
+
*
|
|
23
|
+
* The returned item is a copy; `item` is not mutated. Its `w` is capped to
|
|
24
|
+
* `cols`, and no other dimension is changed — this never resizes to fit.
|
|
25
|
+
*/
|
|
26
|
+
declare function placeInFreeSlot(others: Layout, item: LayoutItem, cols: number, maxRows?: number): LayoutItem;
|
|
27
|
+
/**
|
|
28
|
+
* Tile every item evenly across both axes of a `cols × rows` grid, keeping the
|
|
29
|
+
* row structure the layout already has: items are grouped into visual rows by
|
|
30
|
+
* their current `y`, `rows` is divided across those groups, and `cols` across
|
|
31
|
+
* each group's members.
|
|
32
|
+
*
|
|
33
|
+
* So three items on one line become three equal full-height columns; move one
|
|
34
|
+
* below and the top line becomes two half-width cells while the lower item
|
|
35
|
+
* spans the full width at half height. Grouping by `y` rather than reflowing
|
|
36
|
+
* from scratch is what makes the result recognisably the user's arrangement
|
|
37
|
+
* instead of an arbitrary repack.
|
|
38
|
+
*
|
|
39
|
+
* A visual row holding more items than the grid is wide is wrapped into
|
|
40
|
+
* sub-rows of at most `cols`, so nothing tiles past the right edge. That can
|
|
41
|
+
* take the result past `rows`; the caller decides whether to grow the grid or
|
|
42
|
+
* let its bounds clip.
|
|
43
|
+
*
|
|
44
|
+
* This is the one operation that deliberately GROWS items — every gesture-driven
|
|
45
|
+
* path refuses to, because growing on a move is a surprise. Here it is the whole
|
|
46
|
+
* point, which is why it is a call the app makes rather than a mode the board is
|
|
47
|
+
* in. Returns new items in the input's order; the input is not mutated.
|
|
48
|
+
*/
|
|
49
|
+
declare function distributeEvenly(layout: Layout, {
|
|
50
|
+
cols,
|
|
51
|
+
rows
|
|
52
|
+
}: {
|
|
53
|
+
cols: number;
|
|
54
|
+
rows: number;
|
|
55
|
+
}): LayoutItem[];
|
|
56
|
+
//#endregion
|
|
57
|
+
export { distributeEvenly, placeInFreeSlot };
|
|
58
|
+
//# sourceMappingURL=placement.d.ts.map
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
|
+
import { collides } from "./collision.js";
|
|
3
|
+
|
|
4
|
+
//#region src/components/layout/Board/grid-core/placement.ts
|
|
5
|
+
/**
|
|
6
|
+
* Placing items into a grid without dragging them there.
|
|
7
|
+
*
|
|
8
|
+
* A board's own gestures resolve placement through the compactor and the
|
|
9
|
+
* collision resolver. An app that adds a widget programmatically — a toolbar
|
|
10
|
+
* drop, a widget moved between boards by code, an "arrange these for me"
|
|
11
|
+
* command — has to answer the same question with no gesture in hand, and had no
|
|
12
|
+
* way to ask the engine for the answer. Left to solve it themselves, apps
|
|
13
|
+
* re-implement the scan, and the same drop lands in two different cells
|
|
14
|
+
* depending on whether a pointer or a code path served it.
|
|
15
|
+
*
|
|
16
|
+
* Original UI Kit code (not vendored from react-grid-layout).
|
|
17
|
+
*/
|
|
18
|
+
/**
|
|
19
|
+
* The first position at or below the preferred cell where `item` fits without
|
|
20
|
+
* overlapping any of `others` (which must themselves be overlap-free), scanning
|
|
21
|
+
* left-to-right then top-to-bottom and never past `maxRows`; if the band below
|
|
22
|
+
* is full, upward toward the top.
|
|
23
|
+
*
|
|
24
|
+
* This is the rule the board itself applies when it has to land a widget that
|
|
25
|
+
* cannot stay where it was dropped, so using it for a programmatic add is what
|
|
26
|
+
* makes the two agree.
|
|
27
|
+
*
|
|
28
|
+
* A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path
|
|
29
|
+
* applies (`clamp(y, 0, maxRows - h)`): the item's bottom edge stays within the
|
|
30
|
+
* row limit even when the landing cell is blocked, so the downward scan cannot
|
|
31
|
+
* push it off the board. If the whole valid band is full the item is clamped to
|
|
32
|
+
* the limit — bounds win over overlap, exactly as `gridBounds` does. With an
|
|
33
|
+
* unbounded `maxRows` there is always a free slot below every existing item, so
|
|
34
|
+
* the downward scan terminates on its own.
|
|
35
|
+
*
|
|
36
|
+
* The returned item is a copy; `item` is not mutated. Its `w` is capped to
|
|
37
|
+
* `cols`, and no other dimension is changed — this never resizes to fit.
|
|
38
|
+
*/
|
|
39
|
+
function placeInFreeSlot(others, item, cols, maxRows = Infinity) {
|
|
40
|
+
const w = Math.min(item.w, cols);
|
|
41
|
+
const maxY = Number.isFinite(maxRows) ? Math.max(0, maxRows - item.h) : Infinity;
|
|
42
|
+
const fits = (x, y) => !others.some((o) => collides(o, {
|
|
43
|
+
...item,
|
|
44
|
+
x,
|
|
45
|
+
y,
|
|
46
|
+
w
|
|
47
|
+
}));
|
|
48
|
+
const preferX = Math.min(Math.max(0, item.x), cols - w);
|
|
49
|
+
const startY = Math.min(Math.max(0, item.y), maxY);
|
|
50
|
+
if (fits(preferX, startY)) return {
|
|
51
|
+
...item,
|
|
52
|
+
x: preferX,
|
|
53
|
+
y: startY,
|
|
54
|
+
w
|
|
55
|
+
};
|
|
56
|
+
const scanBottom = Number.isFinite(maxRows) ? maxY : startY + others.reduce((m, o) => Math.max(m, o.y + o.h), 0) + 1;
|
|
57
|
+
for (let y = startY; y <= scanBottom; y++) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
|
|
58
|
+
...item,
|
|
59
|
+
x,
|
|
60
|
+
y,
|
|
61
|
+
w
|
|
62
|
+
};
|
|
63
|
+
for (let y = startY - 1; y >= 0; y--) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
|
|
64
|
+
...item,
|
|
65
|
+
x,
|
|
66
|
+
y,
|
|
67
|
+
w
|
|
68
|
+
};
|
|
69
|
+
return {
|
|
70
|
+
...item,
|
|
71
|
+
x: preferX,
|
|
72
|
+
y: startY,
|
|
73
|
+
w
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Split `total` cells across `parts` groups as evenly as possible: each group
|
|
78
|
+
* gets at least one, and the first `total % parts` groups get one extra so the
|
|
79
|
+
* pieces sum to `total`. With more groups than cells every group still gets one
|
|
80
|
+
* and the sum overflows, which the grid's own bounds then clip — the best
|
|
81
|
+
* available answer when there is less than a cell to go round.
|
|
82
|
+
*/
|
|
83
|
+
function splitEvenly(total, parts) {
|
|
84
|
+
if (parts <= 0) return [];
|
|
85
|
+
const base = Math.max(1, Math.floor(total / parts));
|
|
86
|
+
const remainder = base * parts >= total ? 0 : total - base * parts;
|
|
87
|
+
return Array.from({ length: parts }, (_, i) => base + (i < remainder ? 1 : 0));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Tile every item evenly across both axes of a `cols × rows` grid, keeping the
|
|
91
|
+
* row structure the layout already has: items are grouped into visual rows by
|
|
92
|
+
* their current `y`, `rows` is divided across those groups, and `cols` across
|
|
93
|
+
* each group's members.
|
|
94
|
+
*
|
|
95
|
+
* So three items on one line become three equal full-height columns; move one
|
|
96
|
+
* below and the top line becomes two half-width cells while the lower item
|
|
97
|
+
* spans the full width at half height. Grouping by `y` rather than reflowing
|
|
98
|
+
* from scratch is what makes the result recognisably the user's arrangement
|
|
99
|
+
* instead of an arbitrary repack.
|
|
100
|
+
*
|
|
101
|
+
* A visual row holding more items than the grid is wide is wrapped into
|
|
102
|
+
* sub-rows of at most `cols`, so nothing tiles past the right edge. That can
|
|
103
|
+
* take the result past `rows`; the caller decides whether to grow the grid or
|
|
104
|
+
* let its bounds clip.
|
|
105
|
+
*
|
|
106
|
+
* This is the one operation that deliberately GROWS items — every gesture-driven
|
|
107
|
+
* path refuses to, because growing on a move is a surprise. Here it is the whole
|
|
108
|
+
* point, which is why it is a call the app makes rather than a mode the board is
|
|
109
|
+
* in. Returns new items in the input's order; the input is not mutated.
|
|
110
|
+
*/
|
|
111
|
+
function distributeEvenly(layout, { cols, rows }) {
|
|
112
|
+
if (layout.length === 0) return [];
|
|
113
|
+
const gridCols = Math.max(1, cols);
|
|
114
|
+
const gridRows = Math.max(1, rows);
|
|
115
|
+
const sorted = [...layout].sort((a, b) => a.y !== b.y ? a.y - b.y : a.x - b.x);
|
|
116
|
+
const groups = [];
|
|
117
|
+
let lastY = null;
|
|
118
|
+
for (const item of sorted) {
|
|
119
|
+
if (lastY === null || item.y !== lastY) {
|
|
120
|
+
groups.push([]);
|
|
121
|
+
lastY = item.y;
|
|
122
|
+
}
|
|
123
|
+
groups[groups.length - 1].push(item);
|
|
124
|
+
}
|
|
125
|
+
const rowGroups = [];
|
|
126
|
+
for (const group of groups) if (group.length <= gridCols) rowGroups.push(group);
|
|
127
|
+
else for (let i = 0; i < group.length; i += gridCols) rowGroups.push(group.slice(i, i + gridCols));
|
|
128
|
+
const rowHeights = splitEvenly(gridRows, rowGroups.length);
|
|
129
|
+
const placed = /* @__PURE__ */ new Map();
|
|
130
|
+
let y = 0;
|
|
131
|
+
rowGroups.forEach((group, gi) => {
|
|
132
|
+
const h = rowHeights[gi];
|
|
133
|
+
const widths = splitEvenly(gridCols, group.length);
|
|
134
|
+
let x = 0;
|
|
135
|
+
group.forEach((item, ci) => {
|
|
136
|
+
const w = widths[ci];
|
|
137
|
+
placed.set(item.i, {
|
|
138
|
+
...item,
|
|
139
|
+
x,
|
|
140
|
+
y,
|
|
141
|
+
w,
|
|
142
|
+
h
|
|
143
|
+
});
|
|
144
|
+
x += w;
|
|
145
|
+
});
|
|
146
|
+
y += h;
|
|
147
|
+
});
|
|
148
|
+
return layout.map((item) => placed.get(item.i) ?? item);
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
//#endregion
|
|
152
|
+
export { distributeEvenly, placeInFreeSlot };
|
|
153
|
+
//# sourceMappingURL=placement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"placement.js","names":[],"sources":["../../../../../src/components/layout/Board/grid-core/placement.ts"],"sourcesContent":["/**\n * Placing items into a grid without dragging them there.\n *\n * A board's own gestures resolve placement through the compactor and the\n * collision resolver. An app that adds a widget programmatically — a toolbar\n * drop, a widget moved between boards by code, an \"arrange these for me\"\n * command — has to answer the same question with no gesture in hand, and had no\n * way to ask the engine for the answer. Left to solve it themselves, apps\n * re-implement the scan, and the same drop lands in two different cells\n * depending on whether a pointer or a code path served it.\n *\n * Original UI Kit code (not vendored from react-grid-layout).\n */\n\nimport { collides } from './collision';\n\nimport type { Layout, LayoutItem } from './types';\n\n/**\n * The first position at or below the preferred cell where `item` fits without\n * overlapping any of `others` (which must themselves be overlap-free), scanning\n * left-to-right then top-to-bottom and never past `maxRows`; if the band below\n * is full, upward toward the top.\n *\n * This is the rule the board itself applies when it has to land a widget that\n * cannot stay where it was dropped, so using it for a programmatic add is what\n * makes the two agree.\n *\n * A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path\n * applies (`clamp(y, 0, maxRows - h)`): the item's bottom edge stays within the\n * row limit even when the landing cell is blocked, so the downward scan cannot\n * push it off the board. If the whole valid band is full the item is clamped to\n * the limit — bounds win over overlap, exactly as `gridBounds` does. With an\n * unbounded `maxRows` there is always a free slot below every existing item, so\n * the downward scan terminates on its own.\n *\n * The returned item is a copy; `item` is not mutated. Its `w` is capped to\n * `cols`, and no other dimension is changed — this never resizes to fit.\n */\nexport function placeInFreeSlot(\n others: Layout,\n item: LayoutItem,\n cols: number,\n maxRows = Infinity,\n): LayoutItem {\n const w = Math.min(item.w, cols);\n const maxY = Number.isFinite(maxRows)\n ? Math.max(0, maxRows - item.h)\n : Infinity;\n const fits = (x: number, y: number) =>\n !others.some((o) => collides(o, { ...item, x, y, w }));\n const preferX = Math.min(Math.max(0, item.x), cols - w);\n const startY = Math.min(Math.max(0, item.y), maxY);\n if (fits(preferX, startY)) return { ...item, x: preferX, y: startY, w };\n const scanBottom = Number.isFinite(maxRows)\n ? maxY\n : startY + others.reduce((m, o) => Math.max(m, o.y + o.h), 0) + 1;\n for (let y = startY; y <= scanBottom; y++) {\n for (let x = 0; x <= cols - w; x++) {\n if (fits(x, y)) return { ...item, x, y, w };\n }\n }\n // The landing row (clamped to the limit) and everything below it were full;\n // look upward for a free slot still inside the board before giving up.\n for (let y = startY - 1; y >= 0; y--) {\n for (let x = 0; x <= cols - w; x++) {\n if (fits(x, y)) return { ...item, x, y, w };\n }\n }\n return { ...item, x: preferX, y: startY, w };\n}\n\n/**\n * Split `total` cells across `parts` groups as evenly as possible: each group\n * gets at least one, and the first `total % parts` groups get one extra so the\n * pieces sum to `total`. With more groups than cells every group still gets one\n * and the sum overflows, which the grid's own bounds then clip — the best\n * available answer when there is less than a cell to go round.\n */\nfunction splitEvenly(total: number, parts: number): number[] {\n if (parts <= 0) return [];\n const base = Math.max(1, Math.floor(total / parts));\n const remainder = base * parts >= total ? 0 : total - base * parts;\n return Array.from(\n { length: parts },\n (_, i) => base + (i < remainder ? 1 : 0),\n );\n}\n\n/**\n * Tile every item evenly across both axes of a `cols × rows` grid, keeping the\n * row structure the layout already has: items are grouped into visual rows by\n * their current `y`, `rows` is divided across those groups, and `cols` across\n * each group's members.\n *\n * So three items on one line become three equal full-height columns; move one\n * below and the top line becomes two half-width cells while the lower item\n * spans the full width at half height. Grouping by `y` rather than reflowing\n * from scratch is what makes the result recognisably the user's arrangement\n * instead of an arbitrary repack.\n *\n * A visual row holding more items than the grid is wide is wrapped into\n * sub-rows of at most `cols`, so nothing tiles past the right edge. That can\n * take the result past `rows`; the caller decides whether to grow the grid or\n * let its bounds clip.\n *\n * This is the one operation that deliberately GROWS items — every gesture-driven\n * path refuses to, because growing on a move is a surprise. Here it is the whole\n * point, which is why it is a call the app makes rather than a mode the board is\n * in. Returns new items in the input's order; the input is not mutated.\n */\nexport function distributeEvenly(\n layout: Layout,\n { cols, rows }: { cols: number; rows: number },\n): LayoutItem[] {\n if (layout.length === 0) return [];\n\n const gridCols = Math.max(1, cols);\n const gridRows = Math.max(1, rows);\n\n const sorted = [...layout].sort((a, b) =>\n a.y !== b.y ? a.y - b.y : a.x - b.x,\n );\n\n const groups: LayoutItem[][] = [];\n let lastY: number | null = null;\n for (const item of sorted) {\n if (lastY === null || item.y !== lastY) {\n groups.push([]);\n lastY = item.y;\n }\n groups[groups.length - 1].push(item);\n }\n\n const rowGroups: LayoutItem[][] = [];\n for (const group of groups) {\n if (group.length <= gridCols) {\n rowGroups.push(group);\n } else {\n for (let i = 0; i < group.length; i += gridCols) {\n rowGroups.push(group.slice(i, i + gridCols));\n }\n }\n }\n\n const rowHeights = splitEvenly(gridRows, rowGroups.length);\n const placed = new Map<string, LayoutItem>();\n let y = 0;\n rowGroups.forEach((group, gi) => {\n const h = rowHeights[gi];\n const widths = splitEvenly(gridCols, group.length);\n let x = 0;\n group.forEach((item, ci) => {\n const w = widths[ci];\n placed.set(item.i, { ...item, x, y, w, h });\n x += w;\n });\n y += h;\n });\n\n // Emit in the caller's order, not the sort's: a layout is keyed by `i`, and\n // reordering it would churn every consumer that diffs the array positionally.\n return layout.map((item) => placed.get(item.i) ?? item);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA,SAAgB,gBACd,QACA,MACA,MACA,UAAU,UACE;CACZ,MAAM,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK;CAChC,MAAM,OAAO,OAAO,SAAS,QAAQ,GACjC,KAAK,IAAI,GAAG,UAAU,KAAK,EAAE,GAC7B;CACJ,MAAM,QAAQ,GAAW,MACvB,CAAC,OAAO,MAAM,MAAM,SAAS,GAAG;EAAE,GAAG;EAAM;EAAG;EAAG;EAAG,CAAC,CAAC;CACxD,MAAM,UAAU,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE,EAAE,OAAO,EAAE;CACvD,MAAM,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,EAAE,EAAE,KAAK;AAClD,KAAI,KAAK,SAAS,OAAO,CAAE,QAAO;EAAE,GAAG;EAAM,GAAG;EAAS,GAAG;EAAQ;EAAG;CACvE,MAAM,aAAa,OAAO,SAAS,QAAQ,GACvC,OACA,SAAS,OAAO,QAAQ,GAAG,MAAM,KAAK,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG;AAClE,MAAK,IAAI,IAAI,QAAQ,KAAK,YAAY,IACpC,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAC7B,KAAI,KAAK,GAAG,EAAE,CAAE,QAAO;EAAE,GAAG;EAAM;EAAG;EAAG;EAAG;AAK/C,MAAK,IAAI,IAAI,SAAS,GAAG,KAAK,GAAG,IAC/B,MAAK,IAAI,IAAI,GAAG,KAAK,OAAO,GAAG,IAC7B,KAAI,KAAK,GAAG,EAAE,CAAE,QAAO;EAAE,GAAG;EAAM;EAAG;EAAG;EAAG;AAG/C,QAAO;EAAE,GAAG;EAAM,GAAG;EAAS,GAAG;EAAQ;EAAG;;;;;;;;;AAU9C,SAAS,YAAY,OAAe,OAAyB;AAC3D,KAAI,SAAS,EAAG,QAAO,EAAE;CACzB,MAAM,OAAO,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,MAAM,CAAC;CACnD,MAAM,YAAY,OAAO,SAAS,QAAQ,IAAI,QAAQ,OAAO;AAC7D,QAAO,MAAM,KACX,EAAE,QAAQ,OAAO,GAChB,GAAG,MAAM,QAAQ,IAAI,YAAY,IAAI,GACvC;;;;;;;;;;;;;;;;;;;;;;;;AAyBH,SAAgB,iBACd,QACA,EAAE,MAAM,QACM;AACd,KAAI,OAAO,WAAW,EAAG,QAAO,EAAE;CAElC,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK;CAClC,MAAM,WAAW,KAAK,IAAI,GAAG,KAAK;CAElC,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,MAClC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EACnC;CAED,MAAM,SAAyB,EAAE;CACjC,IAAI,QAAuB;AAC3B,MAAK,MAAM,QAAQ,QAAQ;AACzB,MAAI,UAAU,QAAQ,KAAK,MAAM,OAAO;AACtC,UAAO,KAAK,EAAE,CAAC;AACf,WAAQ,KAAK;;AAEf,SAAO,OAAO,SAAS,GAAG,KAAK,KAAK;;CAGtC,MAAM,YAA4B,EAAE;AACpC,MAAK,MAAM,SAAS,OAClB,KAAI,MAAM,UAAU,SAClB,WAAU,KAAK,MAAM;KAErB,MAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,SACrC,WAAU,KAAK,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;CAKlD,MAAM,aAAa,YAAY,UAAU,UAAU,OAAO;CAC1D,MAAM,yBAAS,IAAI,KAAyB;CAC5C,IAAI,IAAI;AACR,WAAU,SAAS,OAAO,OAAO;EAC/B,MAAM,IAAI,WAAW;EACrB,MAAM,SAAS,YAAY,UAAU,MAAM,OAAO;EAClD,IAAI,IAAI;AACR,QAAM,SAAS,MAAM,OAAO;GAC1B,MAAM,IAAI,OAAO;AACjB,UAAO,IAAI,KAAK,GAAG;IAAE,GAAG;IAAM;IAAG;IAAG;IAAG;IAAG,CAAC;AAC3C,QAAK;IACL;AACF,OAAK;GACL;AAIF,QAAO,OAAO,KAAK,SAAS,OAAO,IAAI,KAAK,EAAE,IAAI,KAAK"}
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
import { CollisionMode, Compactor, Layout, LayoutConstraint, LayoutItem, ResizeHandleAxis } from "./grid-core/types.js";
|
|
3
|
+
import { distributeEvenly, placeInFreeSlot } from "./grid-core/placement.js";
|
|
3
4
|
import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
|
|
4
5
|
import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
|
|
5
6
|
import { BoardSelectionMode } from "./use-board-selection.js";
|
|
6
|
-
import {
|
|
7
|
+
import { BoardLayoutChangeInfo, BoardLayoutChangeReason } from "./use-board-layout.js";
|
|
8
|
+
import { BoardCornerPlacement, BoardResizeGripPlacement, CubeBoardWidgetProps, Widget } from "./Widget.js";
|
|
7
9
|
import { BOARD_SELECTION_CANCEL, BoardCompactType, BoardGridLines, BoardInteractionInfo, CubeBoardProps } from "./Board.js";
|
|
8
10
|
import { BreakpointCols, Breakpoints, ResponsiveLayouts } from "./responsive-utils.js";
|
|
9
11
|
import { BoardResponsive, CubeBoardResponsiveProps } from "./BoardResponsive.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
|
+
import { distributeEvenly, placeInFreeSlot } from "./grid-core/placement.js";
|
|
2
3
|
import { getCompactor, horizontalCompactor, noCompactor, verticalCompactor } from "./grid-core/compactors.js";
|
|
3
4
|
import { aspectRatio, boundedX, boundedY, containerBounds, gridBounds, maxSize, minMaxSize, minSize, snapToGrid } from "./grid-core/constraints.js";
|
|
4
5
|
import { BoardProvider } from "./BoardProvider.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["BoardBase"],"sources":["../../../../src/components/layout/Board/index.tsx"],"sourcesContent":["import { Board as BoardBase } from './Board';\nimport { BoardProvider } from './BoardProvider';\nimport { BoardResponsive } from './BoardResponsive';\nimport { Widget } from './Widget';\n\nconst Board = Object.assign(BoardBase, {\n Widget,\n Provider: BoardProvider,\n Responsive: BoardResponsive,\n});\n\nexport { Board };\nexport { BoardProvider };\nexport { BoardResponsive };\nexport { Widget as BoardWidget };\nexport { BOARD_SELECTION_CANCEL } from './Board';\n\nexport type {\n CubeBoardProps,\n BoardCompactType,\n BoardGridLines,\n BoardInteractionInfo,\n} from './Board';\nexport type { BoardSelectionMode } from './use-board-selection';\nexport type { CubeBoardResponsiveProps } from './BoardResponsive';\nexport type {
|
|
1
|
+
{"version":3,"file":"index.js","names":["BoardBase"],"sources":["../../../../src/components/layout/Board/index.tsx"],"sourcesContent":["import { Board as BoardBase } from './Board';\nimport { BoardProvider } from './BoardProvider';\nimport { BoardResponsive } from './BoardResponsive';\nimport { Widget } from './Widget';\n\nconst Board = Object.assign(BoardBase, {\n Widget,\n Provider: BoardProvider,\n Responsive: BoardResponsive,\n});\n\nexport { Board };\nexport { BoardProvider };\nexport { BoardResponsive };\nexport { Widget as BoardWidget };\nexport { BOARD_SELECTION_CANCEL } from './Board';\n\nexport type {\n CubeBoardProps,\n BoardCompactType,\n BoardGridLines,\n BoardInteractionInfo,\n} from './Board';\nexport type { BoardSelectionMode } from './use-board-selection';\nexport type { CubeBoardResponsiveProps } from './BoardResponsive';\nexport type {\n CubeBoardWidgetProps,\n BoardResizeGripPlacement,\n BoardCornerPlacement,\n} from './Widget';\nexport type {\n BoardLayoutChangeInfo,\n BoardLayoutChangeReason,\n} from './use-board-layout';\nexport type { CubeBoardProviderProps } from './BoardProvider';\nexport type { WidgetTransferInfo } from './board-context';\nexport type {\n Breakpoints as BoardBreakpoints,\n BreakpointCols as BoardBreakpointCols,\n ResponsiveLayouts as BoardResponsiveLayouts,\n} from './responsive-utils';\n\nexport type {\n Layout,\n LayoutItem,\n ResizeHandleAxis,\n CollisionMode,\n Compactor,\n LayoutConstraint,\n PositionParams,\n} from './grid-core';\n\nexport { placeInFreeSlot, distributeEvenly } from './grid-core';\n\nexport {\n verticalCompactor,\n horizontalCompactor,\n noCompactor,\n getCompactor,\n gridBounds,\n minMaxSize,\n containerBounds,\n boundedX,\n boundedY,\n aspectRatio,\n snapToGrid,\n minSize,\n maxSize,\n} from './grid-core';\n"],"mappings":";;;;;;;;;;AAKA,MAAM,QAAQ,OAAO,OAAOA,SAAW;CACrC;CACA,UAAU;CACV,YAAY;CACb,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/components/layout/Board/use-board-layout.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* Why the layout changed.
|
|
5
|
+
*
|
|
6
|
+
* A board commits for two different kinds of reason, and an app usually cares
|
|
7
|
+
* which: a gesture is the user arranging their board, while a normalization is
|
|
8
|
+
* the board fitting an existing arrangement to a constraint that moved
|
|
9
|
+
* underneath it. Without this, an app that persists `onLayoutChange` has no way
|
|
10
|
+
* to tell "the user dragged a widget" from "the column count changed and the
|
|
11
|
+
* board reflowed", so it writes the reflow back as if it were an edit — marking
|
|
12
|
+
* a document dirty nobody touched.
|
|
13
|
+
*
|
|
14
|
+
* - `drag` / `resize` — a pointer or keyboard gesture on this board.
|
|
15
|
+
* - `transfer` — a widget arrived from, or left for, another board.
|
|
16
|
+
* - `normalize` — no gesture: a reflow for a changed column count, or an
|
|
17
|
+
* auto-height widget growing to fit its content.
|
|
18
|
+
*/
|
|
19
|
+
type BoardLayoutChangeReason = 'drag' | 'resize' | 'transfer' | 'normalize';
|
|
20
|
+
/** What `onLayoutChange` reports alongside the new layout. */
|
|
21
|
+
interface BoardLayoutChangeInfo {
|
|
22
|
+
reason: BoardLayoutChangeReason;
|
|
23
|
+
}
|
|
24
|
+
//#endregion
|
|
25
|
+
export { BoardLayoutChangeInfo, BoardLayoutChangeReason };
|
|
26
|
+
//# sourceMappingURL=use-board-layout.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { cloneLayout } from "./grid-core/layout.js";
|
|
4
4
|
import { useCallback, useEffect, useRef, useState } from "react";
|
|
@@ -25,7 +25,7 @@ function useBoardLayout(options) {
|
|
|
25
25
|
placeholderRef.current = items[0] ?? null;
|
|
26
26
|
setPlaceholdersState(items);
|
|
27
27
|
}, []);
|
|
28
|
-
const onLayoutChangeEvent = useEvent((next) => onLayoutChange?.(next));
|
|
28
|
+
const onLayoutChangeEvent = useEvent((next, reason) => onLayoutChange?.(next, { reason }));
|
|
29
29
|
const prevControlledRef = useRef(controlledLayout);
|
|
30
30
|
useEffect(() => {
|
|
31
31
|
if (isControlled && controlledLayout !== prevControlledRef.current) {
|
|
@@ -35,10 +35,10 @@ function useBoardLayout(options) {
|
|
|
35
35
|
setLayout(next);
|
|
36
36
|
}
|
|
37
37
|
}, [controlledLayout, isControlled]);
|
|
38
|
-
const applyLayout = useCallback((next, commit) => {
|
|
38
|
+
const applyLayout = useCallback((next, commit, reason = "normalize") => {
|
|
39
39
|
layoutRef.current = next;
|
|
40
40
|
setLayout(next);
|
|
41
|
-
if (commit) onLayoutChangeEvent(next);
|
|
41
|
+
if (commit) onLayoutChangeEvent(next, reason);
|
|
42
42
|
}, [onLayoutChangeEvent]);
|
|
43
43
|
return {
|
|
44
44
|
layout,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-board-layout.js","names":[],"sources":["../../../../src/components/layout/Board/use-board-layout.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { cloneLayout, LayoutItem } from './grid-core';\n\nexport interface UseBoardLayoutOptions {\n /** Controlled layout. */\n layout?: LayoutItem[];\n /** Initial layout for uncontrolled usage. */\n defaultLayout?: LayoutItem[];\n onLayoutChange?: (layout: LayoutItem[]) => void;\n}\n\nexport interface UseBoardLayoutResult {\n layout: LayoutItem[];\n layoutRef: React.MutableRefObject<LayoutItem[]>;\n /**\n * Every drop-slot preview for the gesture in flight. A single-widget drag or\n * resize produces one; a group drag produces one per moving widget.\n */\n placeholders: LayoutItem[];\n /**\n * The grabbed widget's placeholder — `placeholders[0]`, or `null` when there\n * is none. Kept as a derived singular so the public `BoardInteractionInfo`\n * keeps its exact shape.\n */\n placeholder: LayoutItem | null;\n /**\n * Synchronously-updated mirrors of the two above. `setPlaceholders` only\n * schedules a re-render, so consumers that run in the same tick as a\n * `setPlaceholders` call (e.g. drag lifecycle callbacks fired right after the\n * registry updates the placeholders) must read a ref to see the live value.\n */\n placeholdersRef: React.MutableRefObject<LayoutItem[]>;\n placeholderRef: React.MutableRefObject<LayoutItem | null>;\n setPlaceholders: (items: LayoutItem[]) => void;\n
|
|
1
|
+
{"version":3,"file":"use-board-layout.js","names":[],"sources":["../../../../src/components/layout/Board/use-board-layout.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport { cloneLayout, LayoutItem } from './grid-core';\n\n/**\n * Why the layout changed.\n *\n * A board commits for two different kinds of reason, and an app usually cares\n * which: a gesture is the user arranging their board, while a normalization is\n * the board fitting an existing arrangement to a constraint that moved\n * underneath it. Without this, an app that persists `onLayoutChange` has no way\n * to tell \"the user dragged a widget\" from \"the column count changed and the\n * board reflowed\", so it writes the reflow back as if it were an edit — marking\n * a document dirty nobody touched.\n *\n * - `drag` / `resize` — a pointer or keyboard gesture on this board.\n * - `transfer` — a widget arrived from, or left for, another board.\n * - `normalize` — no gesture: a reflow for a changed column count, or an\n * auto-height widget growing to fit its content.\n */\nexport type BoardLayoutChangeReason =\n | 'drag'\n | 'resize'\n | 'transfer'\n | 'normalize';\n\n/** What `onLayoutChange` reports alongside the new layout. */\nexport interface BoardLayoutChangeInfo {\n reason: BoardLayoutChangeReason;\n}\n\nexport interface UseBoardLayoutOptions {\n /** Controlled layout. */\n layout?: LayoutItem[];\n /** Initial layout for uncontrolled usage. */\n defaultLayout?: LayoutItem[];\n onLayoutChange?: (layout: LayoutItem[], info: BoardLayoutChangeInfo) => void;\n}\n\nexport interface UseBoardLayoutResult {\n layout: LayoutItem[];\n layoutRef: React.MutableRefObject<LayoutItem[]>;\n /**\n * Every drop-slot preview for the gesture in flight. A single-widget drag or\n * resize produces one; a group drag produces one per moving widget.\n */\n placeholders: LayoutItem[];\n /**\n * The grabbed widget's placeholder — `placeholders[0]`, or `null` when there\n * is none. Kept as a derived singular so the public `BoardInteractionInfo`\n * keeps its exact shape.\n */\n placeholder: LayoutItem | null;\n /**\n * Synchronously-updated mirrors of the two above. `setPlaceholders` only\n * schedules a re-render, so consumers that run in the same tick as a\n * `setPlaceholders` call (e.g. drag lifecycle callbacks fired right after the\n * registry updates the placeholders) must read a ref to see the live value.\n */\n placeholdersRef: React.MutableRefObject<LayoutItem[]>;\n placeholderRef: React.MutableRefObject<LayoutItem | null>;\n setPlaceholders: (items: LayoutItem[]) => void;\n /**\n * Update the layout. `commit` fires `onLayoutChange` with `reason`, which is\n * required on a commit so a new commit path cannot forget to say why it\n * fired.\n */\n applyLayout: (\n layout: LayoutItem[],\n commit: boolean,\n reason?: BoardLayoutChangeReason,\n ) => void;\n}\n\n/**\n * Headless layout state for a single board.\n *\n * Supports both controlled (`layout`) and uncontrolled (`defaultLayout`) usage.\n * Intermediate drag/resize previews always update local state; only committed\n * changes call `onLayoutChange`.\n */\nexport function useBoardLayout(\n options: UseBoardLayoutOptions,\n): UseBoardLayoutResult {\n const { layout: controlledLayout, defaultLayout, onLayoutChange } = options;\n const isControlled = controlledLayout !== undefined;\n\n const [layout, setLayout] = useState<LayoutItem[]>(() =>\n cloneLayout(controlledLayout ?? defaultLayout ?? []),\n );\n const layoutRef = useRef<LayoutItem[]>(layout);\n layoutRef.current = layout;\n\n const [placeholders, setPlaceholdersState] = useState<LayoutItem[]>([]);\n const placeholdersRef = useRef<LayoutItem[]>([]);\n const placeholderRef = useRef<LayoutItem | null>(null);\n const setPlaceholders = useCallback((items: LayoutItem[]) => {\n placeholdersRef.current = items;\n // Both mirrors move in the same synchronous call, so a same-tick reader can\n // never see the two disagree.\n placeholderRef.current = items[0] ?? null;\n setPlaceholdersState(items);\n }, []);\n\n const onLayoutChangeEvent = useEvent(\n (next: LayoutItem[], reason: BoardLayoutChangeReason) =>\n onLayoutChange?.(next, { reason }),\n );\n\n // Sync controlled prop into local state when it changes by reference.\n const prevControlledRef = useRef(controlledLayout);\n useEffect(() => {\n if (isControlled && controlledLayout !== prevControlledRef.current) {\n prevControlledRef.current = controlledLayout;\n const next = cloneLayout(controlledLayout ?? []);\n layoutRef.current = next;\n setLayout(next);\n }\n }, [controlledLayout, isControlled]);\n\n const applyLayout = useCallback(\n (\n next: LayoutItem[],\n commit: boolean,\n reason: BoardLayoutChangeReason = 'normalize',\n ) => {\n layoutRef.current = next;\n setLayout(next);\n if (commit) {\n onLayoutChangeEvent(next, reason);\n }\n },\n [onLayoutChangeEvent],\n );\n\n return {\n layout,\n layoutRef,\n placeholders,\n placeholder: placeholders[0] ?? null,\n placeholdersRef,\n placeholderRef,\n setPlaceholders,\n applyLayout,\n };\n}\n"],"mappings":";;;;;;;;;;;;;AAmFA,SAAgB,eACd,SACsB;CACtB,MAAM,EAAE,QAAQ,kBAAkB,eAAe,mBAAmB;CACpE,MAAM,eAAe,qBAAqB;CAE1C,MAAM,CAAC,QAAQ,aAAa,eAC1B,YAAY,oBAAoB,iBAAiB,EAAE,CAAC,CACrD;CACD,MAAM,YAAY,OAAqB,OAAO;AAC9C,WAAU,UAAU;CAEpB,MAAM,CAAC,cAAc,wBAAwB,SAAuB,EAAE,CAAC;CACvE,MAAM,kBAAkB,OAAqB,EAAE,CAAC;CAChD,MAAM,iBAAiB,OAA0B,KAAK;CACtD,MAAM,kBAAkB,aAAa,UAAwB;AAC3D,kBAAgB,UAAU;AAG1B,iBAAe,UAAU,MAAM,MAAM;AACrC,uBAAqB,MAAM;IAC1B,EAAE,CAAC;CAEN,MAAM,sBAAsB,UACzB,MAAoB,WACnB,iBAAiB,MAAM,EAAE,QAAQ,CAAC,CACrC;CAGD,MAAM,oBAAoB,OAAO,iBAAiB;AAClD,iBAAgB;AACd,MAAI,gBAAgB,qBAAqB,kBAAkB,SAAS;AAClE,qBAAkB,UAAU;GAC5B,MAAM,OAAO,YAAY,oBAAoB,EAAE,CAAC;AAChD,aAAU,UAAU;AACpB,aAAU,KAAK;;IAEhB,CAAC,kBAAkB,aAAa,CAAC;CAEpC,MAAM,cAAc,aAEhB,MACA,QACA,SAAkC,gBAC/B;AACH,YAAU,UAAU;AACpB,YAAU,KAAK;AACf,MAAI,OACF,qBAAoB,MAAM,OAAO;IAGrC,CAAC,oBAAoB,CACtB;AAED,QAAO;EACL;EACA;EACA;EACA,aAAa,aAAa,MAAM;EAChC;EACA;EACA;EACA;EACD"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.167.0 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { BoardWidgetStore } from "./board-store.js";
|
|
4
4
|
import { collides } from "./grid-core/collision.js";
|
|
5
5
|
import { createCollisionResolver } from "./grid-core/collision-modes.js";
|
|
6
|
+
import { placeInFreeSlot } from "./grid-core/placement.js";
|
|
6
7
|
import { bottom, cloneLayout, getLayoutItem, moveElement } from "./grid-core/layout.js";
|
|
7
8
|
import { moveElements } from "./grid-core/group-move.js";
|
|
8
9
|
import { calcXYRaw } from "./grid-core/calculate.js";
|
|
@@ -77,58 +78,6 @@ function resizesAnything(before, after) {
|
|
|
77
78
|
return !!b && (b.w !== a.w || b.h !== a.h);
|
|
78
79
|
});
|
|
79
80
|
}
|
|
80
|
-
/**
|
|
81
|
-
* First position at or below the preferred cell where `item` fits without
|
|
82
|
-
* overlapping any of `others` (assumed overlap-free), scanning left-to-right
|
|
83
|
-
* then top-to-bottom, never past `maxRows`. Last-resort placement for a legacy
|
|
84
|
-
* (no-op compaction) cross-board drop that would otherwise stack widgets.
|
|
85
|
-
*
|
|
86
|
-
* A finite `maxRows` mirrors the `gridBounds` constraint the normal landing path
|
|
87
|
-
* applies (`clamp(y, 0, maxRows - h)`): the widget's bottom edge (`y + h`) stays
|
|
88
|
-
* within the row limit even when the landing cell is blocked, so the downward
|
|
89
|
-
* scan can't push it off the board. Rows are searched from the (clamped) landing
|
|
90
|
-
* row down to the limit first, then upward toward the top; if the whole valid
|
|
91
|
-
* band is full the widget is clamped to the limit (bounds win over overlap, as
|
|
92
|
-
* `gridBounds` does). With an unbounded `maxRows` there is always a free slot
|
|
93
|
-
* below every existing item, so the downward scan terminates on its own.
|
|
94
|
-
*/
|
|
95
|
-
function placeInFreeSlot(others, item, cols, maxRows = Infinity) {
|
|
96
|
-
const w = Math.min(item.w, cols);
|
|
97
|
-
const maxY = Number.isFinite(maxRows) ? Math.max(0, maxRows - item.h) : Infinity;
|
|
98
|
-
const fits = (x, y) => !others.some((o) => collides(o, {
|
|
99
|
-
...item,
|
|
100
|
-
x,
|
|
101
|
-
y,
|
|
102
|
-
w
|
|
103
|
-
}));
|
|
104
|
-
const preferX = Math.min(Math.max(0, item.x), cols - w);
|
|
105
|
-
const startY = Math.min(Math.max(0, item.y), maxY);
|
|
106
|
-
if (fits(preferX, startY)) return {
|
|
107
|
-
...item,
|
|
108
|
-
x: preferX,
|
|
109
|
-
y: startY,
|
|
110
|
-
w
|
|
111
|
-
};
|
|
112
|
-
const scanBottom = Number.isFinite(maxRows) ? maxY : startY + others.reduce((m, o) => Math.max(m, o.y + o.h), 0) + 1;
|
|
113
|
-
for (let y = startY; y <= scanBottom; y++) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
|
|
114
|
-
...item,
|
|
115
|
-
x,
|
|
116
|
-
y,
|
|
117
|
-
w
|
|
118
|
-
};
|
|
119
|
-
for (let y = startY - 1; y >= 0; y--) for (let x = 0; x <= cols - w; x++) if (fits(x, y)) return {
|
|
120
|
-
...item,
|
|
121
|
-
x,
|
|
122
|
-
y,
|
|
123
|
-
w
|
|
124
|
-
};
|
|
125
|
-
return {
|
|
126
|
-
...item,
|
|
127
|
-
x: preferX,
|
|
128
|
-
y: startY,
|
|
129
|
-
w
|
|
130
|
-
};
|
|
131
|
-
}
|
|
132
81
|
function useBoardRegistry(options) {
|
|
133
82
|
const store = useMemo(() => new BoardWidgetStore(), []);
|
|
134
83
|
const onTransferRef = useRef(options?.onWidgetTransfer);
|
|
@@ -640,7 +589,7 @@ function useBoardRegistry(options) {
|
|
|
640
589
|
if (source) {
|
|
641
590
|
const sp = source.getPositionParams();
|
|
642
591
|
const sc = source.getCompactor();
|
|
643
|
-
source.applyLayout([...sc.compact(source.getLayout(), sp.cols)], true);
|
|
592
|
+
source.applyLayout([...sc.compact(source.getLayout(), sp.cols)], true, "drag");
|
|
644
593
|
}
|
|
645
594
|
} else {
|
|
646
595
|
const landing = lastLandingRef.current ?? {
|
|
@@ -661,7 +610,7 @@ function useBoardRegistry(options) {
|
|
|
661
610
|
const sp = source.getPositionParams();
|
|
662
611
|
const sc = source.getCompactor();
|
|
663
612
|
const remaining = source.getLayout().filter((l) => l.i !== ds.itemId);
|
|
664
|
-
source.applyLayout([...sc.compact(remaining, sp.cols)], true);
|
|
613
|
+
source.applyLayout([...sc.compact(remaining, sp.cols)], true, "transfer");
|
|
665
614
|
}
|
|
666
615
|
let finalLayout;
|
|
667
616
|
if (carried) finalLayout = strictIncomingSwap ? cloneLayout(carried) : [...tc.compact(cloneLayout(carried), tp.cols)];
|
|
@@ -692,7 +641,7 @@ function useBoardRegistry(options) {
|
|
|
692
641
|
x: landing.x,
|
|
693
642
|
y: landing.y
|
|
694
643
|
}, tp.cols, tp.maxRows)];
|
|
695
|
-
target.applyLayout(finalLayout, true);
|
|
644
|
+
target.applyLayout(finalLayout, true, "transfer");
|
|
696
645
|
onTransferRef.current?.({
|
|
697
646
|
widgetId: ds.itemId,
|
|
698
647
|
fromBoardId: ds.sourceBoardId,
|