@cube-dev/ui-kit 0.0.0-canary-73fed1d → 0.0.0-canary-ea72271
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/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.js +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.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.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.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/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/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/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/TimeInput.js +1 -1
- package/dist/components/fields/DatePicker/intl.js +1 -1
- package/dist/components/fields/DatePicker/parseDate.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/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 +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/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/TextInputMapper/TextInputMapper.js +1 -1
- package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
- package/dist/components/form/FieldWrapper/extract-field-wrapper-props.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/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 +9 -0
- package/dist/components/layout/Board/Board.js +130 -52
- package/dist/components/layout/Board/Board.js.map +1 -1
- package/dist/components/layout/Board/BoardProvider.d.ts +7 -0
- package/dist/components/layout/Board/BoardProvider.js +3 -3
- package/dist/components/layout/Board/BoardProvider.js.map +1 -1
- package/dist/components/layout/Board/Widget.d.ts +6 -0
- package/dist/components/layout/Board/Widget.js +4 -3
- package/dist/components/layout/Board/Widget.js.map +1 -1
- package/dist/components/layout/Board/WidgetHost.js +71 -39
- package/dist/components/layout/Board/WidgetHost.js.map +1 -1
- package/dist/components/layout/Board/board-context.d.ts +16 -0
- package/dist/components/layout/Board/board-context.js +10 -2
- package/dist/components/layout/Board/board-context.js.map +1 -1
- package/dist/components/layout/Board/board-store.d.ts +3 -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 +2 -2
- 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/layout.js +23 -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/index.d.ts +1 -0
- package/dist/components/layout/Board/index.js +1 -1
- package/dist/components/layout/Board/index.js.map +1 -1
- package/dist/components/layout/Board/use-board-layout.js +1 -1
- package/dist/components/layout/Board/use-board-registry.js +123 -31
- package/dist/components/layout/Board/use-board-registry.js.map +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/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/FileTabs/FileTabs.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/RangeCalendar.js +1 -1
- package/dist/components/other/CloudLogo/CloudLogo.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.js +1 -1
- package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -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/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.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/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/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/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/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 +2 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +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/colors.js +1 -1
- package/dist/tokens/index.js +1 -1
- package/dist/tokens/layout.js +1 -1
- package/dist/tokens/palette.js +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/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/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 +2 -2
- package/docs/components/layout/Board.md +28 -1
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
3
3
|
import { BoardWidgetStore } from "./board-store.js";
|
|
4
4
|
import { cloneLayout, getLayoutItem, moveElement } from "./grid-core/layout.js";
|
|
@@ -13,21 +13,19 @@ function rectCenter(rect) {
|
|
|
13
13
|
y: rect.top + rect.height / 2
|
|
14
14
|
};
|
|
15
15
|
}
|
|
16
|
-
|
|
17
|
-
* Cross-board drag orchestration.
|
|
18
|
-
*
|
|
19
|
-
* Owns the shared widget-content store, the drag overlay ref, and the registry
|
|
20
|
-
* of boards. Handles moving an item inside a board and transferring it between
|
|
21
|
-
* boards (including nested ones) by hit-testing the pointer against each board's
|
|
22
|
-
* content rectangle.
|
|
23
|
-
*/
|
|
24
|
-
function useBoardRegistry() {
|
|
16
|
+
function useBoardRegistry(options) {
|
|
25
17
|
const store = useMemo(() => new BoardWidgetStore(), []);
|
|
18
|
+
const onTransferRef = useRef(options?.onWidgetTransfer);
|
|
19
|
+
onTransferRef.current = options?.onWidgetTransfer;
|
|
26
20
|
const overlayRef = useRef(null);
|
|
27
21
|
const boardsRef = useRef(/* @__PURE__ */ new Map());
|
|
28
22
|
const dragStateRef = useRef(null);
|
|
29
23
|
const affectedRef = useRef(/* @__PURE__ */ new Set());
|
|
30
24
|
const sourceSnapshotRef = useRef([]);
|
|
25
|
+
const targetSnapshotsRef = useRef(/* @__PURE__ */ new Map());
|
|
26
|
+
const previewRef = useRef(null);
|
|
27
|
+
const frozenRectsRef = useRef(/* @__PURE__ */ new Map());
|
|
28
|
+
const nestedInDraggedRef = useRef(/* @__PURE__ */ new Set());
|
|
31
29
|
const lastLandingRef = useRef(null);
|
|
32
30
|
const [dragState, setDragStateInternal] = useState(null);
|
|
33
31
|
const setDragState = useCallback((next) => {
|
|
@@ -40,6 +38,7 @@ function useBoardRegistry() {
|
|
|
40
38
|
if (boardsRef.current.get(entry.id) === entry) boardsRef.current.delete(entry.id);
|
|
41
39
|
};
|
|
42
40
|
}, []);
|
|
41
|
+
const getBoardRect = useCallback((entry) => frozenRectsRef.current.get(entry.id) ?? entry.getContentRect(), []);
|
|
43
42
|
/** Find the most-nested droppable board whose content rect contains a point. */
|
|
44
43
|
const hitTest = useCallback((point) => {
|
|
45
44
|
let best = null;
|
|
@@ -47,8 +46,9 @@ function useBoardRegistry() {
|
|
|
47
46
|
const overlay = overlayRef.current;
|
|
48
47
|
boardsRef.current.forEach((entry) => {
|
|
49
48
|
if (!entry.isDroppable()) return;
|
|
49
|
+
if (nestedInDraggedRef.current.has(entry.id)) return;
|
|
50
50
|
if (overlay && overlay.contains(entry.getContentNode())) return;
|
|
51
|
-
const rect = entry
|
|
51
|
+
const rect = getBoardRect(entry);
|
|
52
52
|
if (!rect) return;
|
|
53
53
|
if (point.x >= rect.left && point.x <= rect.right && point.y >= rect.top && point.y <= rect.bottom) {
|
|
54
54
|
const area = rect.width * rect.height;
|
|
@@ -59,13 +59,26 @@ function useBoardRegistry() {
|
|
|
59
59
|
}
|
|
60
60
|
});
|
|
61
61
|
return best;
|
|
62
|
-
}, []);
|
|
63
|
-
const onDragStart = useEvent((boardId, itemId, rect, pointerType) => {
|
|
62
|
+
}, [getBoardRect]);
|
|
63
|
+
const onDragStart = useEvent((boardId, itemId, rect, pointerType, widgetNode) => {
|
|
64
64
|
const entry = boardsRef.current.get(boardId);
|
|
65
65
|
const item = entry ? getLayoutItem(entry.getLayout(), itemId) : void 0;
|
|
66
66
|
if (!entry || !item) return;
|
|
67
|
+
const nested = /* @__PURE__ */ new Set();
|
|
68
|
+
if (widgetNode) boardsRef.current.forEach((e) => {
|
|
69
|
+
const node = e.getContentNode();
|
|
70
|
+
if (node && widgetNode.contains(node)) nested.add(e.id);
|
|
71
|
+
});
|
|
72
|
+
nestedInDraggedRef.current = nested;
|
|
73
|
+
const frozen = /* @__PURE__ */ new Map();
|
|
74
|
+
boardsRef.current.forEach((e) => {
|
|
75
|
+
const r = e.getContentRect();
|
|
76
|
+
if (r) frozen.set(e.id, r);
|
|
77
|
+
});
|
|
78
|
+
frozenRectsRef.current = frozen;
|
|
67
79
|
affectedRef.current = new Set([boardId]);
|
|
68
80
|
sourceSnapshotRef.current = cloneLayout(entry.getLayout());
|
|
81
|
+
previewRef.current = null;
|
|
69
82
|
lastLandingRef.current = {
|
|
70
83
|
x: item.x,
|
|
71
84
|
y: item.y
|
|
@@ -86,7 +99,7 @@ function useBoardRegistry() {
|
|
|
86
99
|
/** Compute the constrained landing position of an item on a target board. */
|
|
87
100
|
const computeLanding = useCallback((target, item, rect) => {
|
|
88
101
|
const pp = target.getPositionParams();
|
|
89
|
-
const contentRect = target
|
|
102
|
+
const contentRect = getBoardRect(target);
|
|
90
103
|
const localLeft = rect.left - (contentRect?.left ?? 0);
|
|
91
104
|
const raw = calcXYRaw(pp, rect.top - (contentRect?.top ?? 0), localLeft);
|
|
92
105
|
return applyPositionConstraints(target.getConstraints(), item, raw.x, raw.y, {
|
|
@@ -98,7 +111,7 @@ function useBoardRegistry() {
|
|
|
98
111
|
margin: pp.margin,
|
|
99
112
|
layout: target.getLayout()
|
|
100
113
|
});
|
|
101
|
-
}, []);
|
|
114
|
+
}, [getBoardRect]);
|
|
102
115
|
const moveWithinBoard = useCallback((entry, item, x, y) => {
|
|
103
116
|
const pp = entry.getPositionParams();
|
|
104
117
|
const compactor = entry.getCompactor();
|
|
@@ -115,6 +128,49 @@ function useBoardRegistry() {
|
|
|
115
128
|
entry.applyLayout(compacted, false);
|
|
116
129
|
entry.setPlaceholder(getLayoutItem(compacted, item.i) ?? null);
|
|
117
130
|
}, []);
|
|
131
|
+
/**
|
|
132
|
+
* Live cross-board reflow preview. Pushes the target board's *other* widgets
|
|
133
|
+
* aside to make room for the incoming item, without ever adding the dragged
|
|
134
|
+
* item's host to the target (it stays visualized as a placeholder + overlay
|
|
135
|
+
* clone, and its gesture host remains mounted in the source board).
|
|
136
|
+
*
|
|
137
|
+
* Continuity: the working layout (including the incoming item) is carried
|
|
138
|
+
* across frames via `previewRef`, so a small pointer movement moves the item
|
|
139
|
+
* one step and reflows the neighbours incrementally - identical to an in-board
|
|
140
|
+
* drag. Recomputing from the clean snapshot every frame instead lets
|
|
141
|
+
* `moveElement`/compaction sink the item to the bottom of an occupied column
|
|
142
|
+
* (the "pushed too far below" bug). On (re-)entry the working layout is seeded
|
|
143
|
+
* from a *clone* of the snapshot so the stored snapshot is never mutated.
|
|
144
|
+
*/
|
|
145
|
+
const previewOnTarget = useCallback((target, item, x, y) => {
|
|
146
|
+
const pp = target.getPositionParams();
|
|
147
|
+
const compactor = target.getCompactor();
|
|
148
|
+
const carried = previewRef.current?.boardId === target.id ? previewRef.current.working : null;
|
|
149
|
+
const base = (carried ?? cloneLayout(targetSnapshotsRef.current.get(target.id) ?? target.getLayout())).filter((l) => l.i !== item.i);
|
|
150
|
+
const prevItem = carried ? getLayoutItem(carried, item.i) : void 0;
|
|
151
|
+
const dragged = prevItem ? { ...prevItem } : compactor.type === "horizontal" ? {
|
|
152
|
+
...item,
|
|
153
|
+
x: Math.max(0, x) - 1,
|
|
154
|
+
y
|
|
155
|
+
} : {
|
|
156
|
+
...item,
|
|
157
|
+
x,
|
|
158
|
+
y: Math.max(0, y) - 1
|
|
159
|
+
};
|
|
160
|
+
const moved = moveElement([...base, dragged], dragged, x, y, true, compactor.preventCollision, compactor.type, pp.cols, compactor.allowOverlap);
|
|
161
|
+
const compacted = [...compactor.compact(moved, pp.cols)];
|
|
162
|
+
previewRef.current = {
|
|
163
|
+
boardId: target.id,
|
|
164
|
+
working: compacted
|
|
165
|
+
};
|
|
166
|
+
const landed = getLayoutItem(compacted, item.i) ?? {
|
|
167
|
+
...item,
|
|
168
|
+
x,
|
|
169
|
+
y
|
|
170
|
+
};
|
|
171
|
+
target.applyLayout(compacted.filter((l) => l.i !== item.i), false);
|
|
172
|
+
target.setPlaceholder({ ...landed });
|
|
173
|
+
}, []);
|
|
118
174
|
const onDragMove = useEvent((deltaX, deltaY, _pointerType) => {
|
|
119
175
|
const ds = dragStateRef.current;
|
|
120
176
|
if (!ds) return;
|
|
@@ -138,7 +194,13 @@ function useBoardRegistry() {
|
|
|
138
194
|
y
|
|
139
195
|
};
|
|
140
196
|
if (target.id === ds.sourceBoardId) {
|
|
141
|
-
if (ds.currentBoardId !== ds.sourceBoardId)
|
|
197
|
+
if (ds.currentBoardId !== ds.sourceBoardId) {
|
|
198
|
+
const prev = boardsRef.current.get(ds.currentBoardId);
|
|
199
|
+
const snap = targetSnapshotsRef.current.get(ds.currentBoardId);
|
|
200
|
+
if (snap) prev?.applyLayout(cloneLayout(snap), false);
|
|
201
|
+
prev?.setPlaceholder(null);
|
|
202
|
+
previewRef.current = null;
|
|
203
|
+
}
|
|
142
204
|
moveWithinBoard(target, ds.item, x, y);
|
|
143
205
|
setDragState({
|
|
144
206
|
...ds,
|
|
@@ -150,13 +212,15 @@ function useBoardRegistry() {
|
|
|
150
212
|
if (ds.currentBoardId !== target.id) {
|
|
151
213
|
const prev = boardsRef.current.get(ds.currentBoardId);
|
|
152
214
|
if (ds.currentBoardId === ds.sourceBoardId) prev?.applyLayout(cloneLayout(sourceSnapshotRef.current), false);
|
|
215
|
+
else {
|
|
216
|
+
const snap = targetSnapshotsRef.current.get(ds.currentBoardId);
|
|
217
|
+
if (snap) prev?.applyLayout(cloneLayout(snap), false);
|
|
218
|
+
}
|
|
153
219
|
prev?.setPlaceholder(null);
|
|
220
|
+
previewRef.current = null;
|
|
221
|
+
if (!targetSnapshotsRef.current.has(target.id)) targetSnapshotsRef.current.set(target.id, cloneLayout(target.getLayout()));
|
|
154
222
|
}
|
|
155
|
-
target.
|
|
156
|
-
...ds.item,
|
|
157
|
-
x,
|
|
158
|
-
y
|
|
159
|
-
});
|
|
223
|
+
previewOnTarget(target, ds.item, x, y);
|
|
160
224
|
affectedRef.current.add(target.id);
|
|
161
225
|
setDragState({
|
|
162
226
|
...ds,
|
|
@@ -169,8 +233,13 @@ function useBoardRegistry() {
|
|
|
169
233
|
if (!ds) return;
|
|
170
234
|
const source = boardsRef.current.get(ds.sourceBoardId);
|
|
171
235
|
const target = boardsRef.current.get(ds.currentBoardId);
|
|
172
|
-
if (!target || target.id === ds.sourceBoardId)
|
|
173
|
-
|
|
236
|
+
if (!target || target.id === ds.sourceBoardId) {
|
|
237
|
+
if (source) {
|
|
238
|
+
const sp = source.getPositionParams();
|
|
239
|
+
const sc = source.getCompactor();
|
|
240
|
+
source.applyLayout([...sc.compact(source.getLayout(), sp.cols)], true);
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
174
243
|
const landing = lastLandingRef.current ?? {
|
|
175
244
|
x: ds.item.x,
|
|
176
245
|
y: ds.item.y
|
|
@@ -183,14 +252,33 @@ function useBoardRegistry() {
|
|
|
183
252
|
}
|
|
184
253
|
const tp = target.getPositionParams();
|
|
185
254
|
const tc = target.getCompactor();
|
|
186
|
-
const
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
255
|
+
const carried = previewRef.current?.boardId === target.id && getLayoutItem(previewRef.current.working, ds.itemId) ? previewRef.current.working : null;
|
|
256
|
+
let finalLayout;
|
|
257
|
+
if (carried) finalLayout = [...tc.compact(cloneLayout(carried), tp.cols)];
|
|
258
|
+
else {
|
|
259
|
+
const newItem = tc.type === "horizontal" ? {
|
|
260
|
+
...ds.item,
|
|
261
|
+
x: Math.max(0, landing.x) - 1,
|
|
262
|
+
y: landing.y
|
|
263
|
+
} : {
|
|
264
|
+
...ds.item,
|
|
265
|
+
x: landing.x,
|
|
266
|
+
y: Math.max(0, landing.y) - 1
|
|
267
|
+
};
|
|
268
|
+
const moved = moveElement([...cloneLayout((targetSnapshotsRef.current.get(target.id) ?? target.getLayout()).filter((l) => l.i !== ds.itemId)), newItem], newItem, landing.x, landing.y, true, tc.preventCollision, tc.type, tp.cols, tc.allowOverlap);
|
|
269
|
+
finalLayout = [...tc.compact(moved, tp.cols)];
|
|
270
|
+
}
|
|
271
|
+
target.applyLayout(finalLayout, true);
|
|
272
|
+
onTransferRef.current?.({
|
|
273
|
+
widgetId: ds.itemId,
|
|
274
|
+
fromBoardId: ds.sourceBoardId,
|
|
275
|
+
toBoardId: target.id,
|
|
276
|
+
item: getLayoutItem(finalLayout, ds.itemId) ?? {
|
|
277
|
+
...ds.item,
|
|
278
|
+
x: landing.x,
|
|
279
|
+
y: landing.y
|
|
280
|
+
}
|
|
281
|
+
});
|
|
194
282
|
}
|
|
195
283
|
const ids = new Set(affectedRef.current);
|
|
196
284
|
ids.add(ds.sourceBoardId);
|
|
@@ -198,6 +286,10 @@ function useBoardRegistry() {
|
|
|
198
286
|
ids.forEach((id) => boardsRef.current.get(id)?.setPlaceholder(null));
|
|
199
287
|
affectedRef.current.clear();
|
|
200
288
|
sourceSnapshotRef.current = [];
|
|
289
|
+
targetSnapshotsRef.current.clear();
|
|
290
|
+
frozenRectsRef.current.clear();
|
|
291
|
+
nestedInDraggedRef.current = /* @__PURE__ */ new Set();
|
|
292
|
+
previewRef.current = null;
|
|
201
293
|
lastLandingRef.current = null;
|
|
202
294
|
setDragState(null);
|
|
203
295
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-board-registry.js","names":[],"sources":["../../../../src/components/layout/Board/use-board-registry.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport {\n BoardDragState,\n BoardEntry,\n BoardRegistryContextValue,\n ViewportRect,\n} from './board-context';\nimport { BoardWidgetStore } from './board-store';\nimport {\n applyPositionConstraints,\n calcXYRaw,\n cloneLayout,\n getLayoutItem,\n LayoutItem,\n moveElement,\n} from './grid-core';\n\nfunction rectCenter(rect: ViewportRect): { x: number; y: number } {\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n}\n\n/**\n * Cross-board drag orchestration.\n *\n * Owns the shared widget-content store, the drag overlay ref, and the registry\n * of boards. Handles moving an item inside a board and transferring it between\n * boards (including nested ones) by hit-testing the pointer against each board's\n * content rectangle.\n */\nexport function useBoardRegistry(): BoardRegistryContextValue {\n const store = useMemo(() => new BoardWidgetStore(), []);\n const overlayRef = useRef<HTMLDivElement | null>(null);\n const boardsRef = useRef<Map<string, BoardEntry>>(new Map());\n const dragStateRef = useRef<BoardDragState | null>(null);\n const affectedRef = useRef<Set<string>>(new Set());\n // Snapshot of the source board's layout at drag start, used to restore the\n // source when the pointer leaves it (the dragged item is never removed from\n // the source mid-drag, so its gesture host stays mounted).\n const sourceSnapshotRef = useRef<LayoutItem[]>([]);\n // Last landing position computed for the current target board (grid units).\n const lastLandingRef = useRef<{ x: number; y: number } | null>(null);\n const [dragState, setDragStateInternal] = useState<BoardDragState | null>(\n null,\n );\n\n const setDragState = useCallback((next: BoardDragState | null) => {\n dragStateRef.current = next;\n setDragStateInternal(next);\n }, []);\n\n const registerBoard = useCallback((entry: BoardEntry) => {\n boardsRef.current.set(entry.id, entry);\n return () => {\n // Only remove if a newer board instance hasn't already taken over this id\n // (boards can remount when their host widget is relocated, e.g. dragged).\n if (boardsRef.current.get(entry.id) === entry) {\n boardsRef.current.delete(entry.id);\n }\n };\n }, []);\n\n /** Find the most-nested droppable board whose content rect contains a point. */\n const hitTest = useCallback(\n (point: { x: number; y: number }): BoardEntry | null => {\n let best: BoardEntry | null = null;\n let bestArea = Infinity;\n\n // During a pointer drag the dragged widget (and any board nested inside it)\n // lives in the overlay portal. Such boards must never be drop targets -\n // dropping a widget into a board nested within itself would remove it from\n // the tree that renders that board.\n const overlay = overlayRef.current;\n\n boardsRef.current.forEach((entry) => {\n if (!entry.isDroppable()) return;\n if (overlay && overlay.contains(entry.getContentNode())) return;\n const rect = entry.getContentRect();\n if (!rect) return;\n if (\n point.x >= rect.left &&\n point.x <= rect.right &&\n point.y >= rect.top &&\n point.y <= rect.bottom\n ) {\n const area = rect.width * rect.height;\n if (area < bestArea) {\n bestArea = area;\n best = entry;\n }\n }\n });\n\n return best;\n },\n [],\n );\n\n const onDragStart = useEvent(\n (\n boardId: string,\n itemId: string,\n rect: ViewportRect,\n pointerType: string,\n ) => {\n const entry = boardsRef.current.get(boardId);\n const item = entry ? getLayoutItem(entry.getLayout(), itemId) : undefined;\n if (!entry || !item) return;\n\n affectedRef.current = new Set([boardId]);\n sourceSnapshotRef.current = cloneLayout(entry.getLayout());\n lastLandingRef.current = { x: item.x, y: item.y };\n // Layout-item constraints win; otherwise fall back to the ones declared on\n // the owning `Board.Widget` so position constraints apply during drag.\n const draggedItem: LayoutItem = {\n ...item,\n constraints: item.constraints ?? store.get(itemId)?.constraints,\n };\n const next: BoardDragState = {\n sourceBoardId: boardId,\n currentBoardId: boardId,\n itemId,\n item: draggedItem,\n rect,\n pointerType,\n };\n setDragState(next);\n entry.setPlaceholder({ ...item });\n },\n );\n\n /** Compute the constrained landing position of an item on a target board. */\n const computeLanding = useCallback(\n (\n target: BoardEntry,\n item: LayoutItem,\n rect: ViewportRect,\n ): { x: number; y: number } => {\n const pp = target.getPositionParams();\n const contentRect = target.getContentRect();\n const localLeft = rect.left - (contentRect?.left ?? 0);\n const localTop = rect.top - (contentRect?.top ?? 0);\n const raw = calcXYRaw(pp, localTop, localLeft);\n\n return applyPositionConstraints(\n target.getConstraints(),\n item,\n raw.x,\n raw.y,\n {\n cols: pp.cols,\n maxRows: target.getMaxRows(),\n containerWidth: pp.containerWidth,\n containerHeight: target.getContainerHeight(),\n rowHeight: pp.rowHeight,\n margin: pp.margin,\n layout: target.getLayout(),\n },\n );\n },\n [],\n );\n\n const moveWithinBoard = useCallback(\n (entry: BoardEntry, item: LayoutItem, x: number, y: number) => {\n const pp = entry.getPositionParams();\n const compactor = entry.getCompactor();\n const layout = entry.getLayout();\n const live = getLayoutItem(layout, item.i);\n const working = live ? [...layout] : [...layout, { ...item, x, y }];\n const target = getLayoutItem(working, item.i);\n if (!target) return;\n\n const moved = moveElement(\n working,\n target,\n x,\n y,\n true,\n compactor.preventCollision,\n compactor.type,\n pp.cols,\n compactor.allowOverlap,\n );\n const compacted = [...compactor.compact(moved, pp.cols)];\n entry.applyLayout(compacted, false);\n entry.setPlaceholder(getLayoutItem(compacted, item.i) ?? null);\n },\n [],\n );\n\n const onDragMove = useEvent(\n (deltaX: number, deltaY: number, _pointerType: string) => {\n const ds = dragStateRef.current;\n if (!ds) return;\n\n const newRect: ViewportRect = {\n ...ds.rect,\n left: ds.rect.left + deltaX,\n top: ds.rect.top + deltaY,\n };\n\n const source = boardsRef.current.get(ds.sourceBoardId);\n // Fall back to the source board so a pointer outside every board keeps the\n // widget anchored to where it came from.\n const target = hitTest(rectCenter(newRect)) ?? source ?? null;\n\n if (!target) {\n setDragState({ ...ds, rect: newRect });\n return;\n }\n\n const { x, y } = computeLanding(target, ds.item, newRect);\n lastLandingRef.current = { x, y };\n\n // Same board: run the live in-board preview (item stays owned by the\n // source, so its gesture host is never unmounted).\n if (target.id === ds.sourceBoardId) {\n if (ds.currentBoardId !== ds.sourceBoardId) {\n // Returning from another board: clear that board's placeholder.\n boardsRef.current.get(ds.currentBoardId)?.setPlaceholder(null);\n }\n moveWithinBoard(target, ds.item, x, y);\n setDragState({\n ...ds,\n currentBoardId: ds.sourceBoardId,\n rect: newRect,\n });\n return;\n }\n\n // Cross-board: never mutate layouts during the drag. Only preview the\n // landing slot on the target via a placeholder. The actual transfer is\n // committed on drop. This keeps the dragged widget's gesture host mounted\n // in the source board for the entire drag.\n if (ds.currentBoardId !== target.id) {\n const prev = boardsRef.current.get(ds.currentBoardId);\n if (ds.currentBoardId === ds.sourceBoardId) {\n // Leaving the source: restore it to its pre-drag arrangement.\n prev?.applyLayout(cloneLayout(sourceSnapshotRef.current), false);\n }\n prev?.setPlaceholder(null);\n }\n\n target.setPlaceholder({ ...ds.item, x, y });\n affectedRef.current.add(target.id);\n setDragState({ ...ds, currentBoardId: target.id, rect: newRect });\n },\n );\n\n const onDragEnd = useEvent(() => {\n const ds = dragStateRef.current;\n if (!ds) return;\n\n const source = boardsRef.current.get(ds.sourceBoardId);\n const target = boardsRef.current.get(ds.currentBoardId);\n const droppedInSource = !target || target.id === ds.sourceBoardId;\n\n if (droppedInSource) {\n // Commit the current source arrangement (already previewed in-board).\n source?.applyLayout([...(source.getLayout() ?? [])], true);\n } else {\n const landing = lastLandingRef.current ?? { x: ds.item.x, y: ds.item.y };\n\n // Remove the item from the source board and compact.\n if (source) {\n const sp = source.getPositionParams();\n const sc = source.getCompactor();\n const remaining = source.getLayout().filter((l) => l.i !== ds.itemId);\n source.applyLayout([...sc.compact(remaining, sp.cols)], true);\n }\n\n // Insert the item into the target board at the previewed landing slot.\n const tp = target!.getPositionParams();\n const tc = target!.getCompactor();\n const newItem: LayoutItem = {\n ...ds.item,\n x: landing.x,\n y: landing.y,\n moved: true,\n };\n const base = [\n ...target!.getLayout().filter((l) => l.i !== ds.itemId),\n newItem,\n ];\n const moved = moveElement(\n base,\n newItem,\n landing.x,\n landing.y,\n true,\n tc.preventCollision,\n tc.type,\n tp.cols,\n tc.allowOverlap,\n );\n target!.applyLayout([...tc.compact(moved, tp.cols)], true);\n }\n\n const ids = new Set(affectedRef.current);\n ids.add(ds.sourceBoardId);\n ids.add(ds.currentBoardId);\n ids.forEach((id) => boardsRef.current.get(id)?.setPlaceholder(null));\n\n affectedRef.current.clear();\n sourceSnapshotRef.current = [];\n lastLandingRef.current = null;\n setDragState(null);\n });\n\n return useMemo(\n () => ({\n store,\n overlayRef,\n registerBoard,\n onDragStart,\n onDragMove,\n onDragEnd,\n dragState,\n }),\n [store, registerBoard, onDragStart, onDragMove, onDragEnd, dragState],\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"use-board-registry.js","names":[],"sources":["../../../../src/components/layout/Board/use-board-registry.ts"],"sourcesContent":["import { useCallback, useMemo, useRef, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks';\n\nimport {\n BoardDragState,\n BoardEntry,\n BoardRegistryContextValue,\n ViewportRect,\n WidgetTransferInfo,\n} from './board-context';\nimport { BoardWidgetStore } from './board-store';\nimport {\n applyPositionConstraints,\n calcXYRaw,\n cloneLayout,\n getLayoutItem,\n LayoutItem,\n moveElement,\n} from './grid-core';\n\nfunction rectCenter(rect: ViewportRect): { x: number; y: number } {\n return {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n };\n}\n\n/**\n * Cross-board drag orchestration.\n *\n * Owns the shared widget-content store, the drag overlay ref, and the registry\n * of boards. Handles moving an item inside a board and transferring it between\n * boards (including nested ones) by hit-testing the pointer against each board's\n * content rectangle.\n */\nexport interface UseBoardRegistryOptions {\n /** Fired when a widget is dropped from one board into another. */\n onWidgetTransfer?: (info: WidgetTransferInfo) => void;\n}\n\nexport function useBoardRegistry(\n options?: UseBoardRegistryOptions,\n): BoardRegistryContextValue {\n const store = useMemo(() => new BoardWidgetStore(), []);\n // Latest transfer callback, read from a ref so the stable `onDragEnd` handler\n // always calls the current one without re-creating the registry.\n const onTransferRef = useRef(options?.onWidgetTransfer);\n onTransferRef.current = options?.onWidgetTransfer;\n const overlayRef = useRef<HTMLDivElement | null>(null);\n const boardsRef = useRef<Map<string, BoardEntry>>(new Map());\n const dragStateRef = useRef<BoardDragState | null>(null);\n const affectedRef = useRef<Set<string>>(new Set());\n // Snapshot of the source board's layout at drag start, used to restore the\n // source when the pointer leaves it (the dragged item is never removed from\n // the source mid-drag, so its gesture host stays mounted).\n const sourceSnapshotRef = useRef<LayoutItem[]>([]);\n // Snapshot of each visited target board's layout at the moment the pointer\n // first entered it. Used to restore a board when the pointer leaves it, and as\n // the clean seed for the reflow preview on (re-)entry. Never mutated.\n const targetSnapshotsRef = useRef<Map<string, LayoutItem[]>>(new Map());\n // The current target board's live working layout (including the incoming\n // item). Carried across frames so small pointer movements reflow the board\n // incrementally - exactly like an in-board drag - instead of recomputing from\n // scratch each frame (which lets collision resolution sink the item to the\n // bottom of an occupied column).\n const previewRef = useRef<{ boardId: string; working: LayoutItem[] } | null>(\n null,\n );\n // Board content rects captured at drag start. Reading geometry from here (not\n // live getBoundingClientRect) means the live-reflow preview can't move the\n // rects that selection/landing depend on -> no feedback loop.\n const frozenRectsRef = useRef<Map<string, DOMRect>>(new Map());\n // Ids of boards nested inside the dragged widget, captured at drag start.\n // Such a board must never be a drop target: dropping a widget into a board\n // nested within itself removes it from the tree that renders that board.\n // The overlay-containment check in `hitTest` only catches these once the\n // dragged widget has floated into the overlay, but `useMove` fires the first\n // `onMove` synchronously with `onMoveStart` (before React relocates the\n // widget into the overlay), so on a tiny one-move drag the nested board is\n // still in-grid and would be selected. Excluding these ids for the whole\n // gesture closes that window.\n const nestedInDraggedRef = useRef<Set<string>>(new Set());\n // Last landing position computed for the current target board (grid units).\n const lastLandingRef = useRef<{ x: number; y: number } | null>(null);\n const [dragState, setDragStateInternal] = useState<BoardDragState | null>(\n null,\n );\n\n const setDragState = useCallback((next: BoardDragState | null) => {\n dragStateRef.current = next;\n setDragStateInternal(next);\n }, []);\n\n const registerBoard = useCallback((entry: BoardEntry) => {\n boardsRef.current.set(entry.id, entry);\n return () => {\n // Only remove if a newer board instance hasn't already taken over this id\n // (boards can remount when their host widget is relocated, e.g. dragged).\n if (boardsRef.current.get(entry.id) === entry) {\n boardsRef.current.delete(entry.id);\n }\n };\n }, []);\n\n // Geometry frozen at drag start; falls back to the live rect for boards that\n // mount mid-drag (they weren't captured at start).\n const getBoardRect = useCallback(\n (entry: BoardEntry): DOMRect | null =>\n frozenRectsRef.current.get(entry.id) ?? entry.getContentRect(),\n [],\n );\n\n /** Find the most-nested droppable board whose content rect contains a point. */\n const hitTest = useCallback(\n (point: { x: number; y: number }): BoardEntry | null => {\n let best: BoardEntry | null = null;\n let bestArea = Infinity;\n\n // During a pointer drag the dragged widget (and any board nested inside it)\n // lives in the overlay portal. Such boards must never be drop targets -\n // dropping a widget into a board nested within itself would remove it from\n // the tree that renders that board.\n const overlay = overlayRef.current;\n\n boardsRef.current.forEach((entry) => {\n if (!entry.isDroppable()) return;\n if (nestedInDraggedRef.current.has(entry.id)) return;\n if (overlay && overlay.contains(entry.getContentNode())) return;\n const rect = getBoardRect(entry);\n if (!rect) return;\n if (\n point.x >= rect.left &&\n point.x <= rect.right &&\n point.y >= rect.top &&\n point.y <= rect.bottom\n ) {\n const area = rect.width * rect.height;\n if (area < bestArea) {\n bestArea = area;\n best = entry;\n }\n }\n });\n\n return best;\n },\n [getBoardRect],\n );\n\n const onDragStart = useEvent(\n (\n boardId: string,\n itemId: string,\n rect: ViewportRect,\n pointerType: string,\n widgetNode: HTMLElement | null,\n ) => {\n const entry = boardsRef.current.get(boardId);\n const item = entry ? getLayoutItem(entry.getLayout(), itemId) : undefined;\n if (!entry || !item) return;\n\n // Record boards nested inside the dragged widget so they are never picked\n // as a drop target (dropping a widget into a board nested within itself\n // would unmount it). Computed here, before the widget floats into the\n // overlay, while its nested boards are still in-grid descendants.\n const nested = new Set<string>();\n if (widgetNode) {\n boardsRef.current.forEach((e) => {\n const node = e.getContentNode();\n if (node && widgetNode.contains(node)) nested.add(e.id);\n });\n }\n nestedInDraggedRef.current = nested;\n\n // Freeze every board's geometry for the whole gesture so live-reflow\n // preview writes can't move the rects selection/landing read.\n const frozen = new Map<string, DOMRect>();\n boardsRef.current.forEach((e) => {\n const r = e.getContentRect();\n if (r) frozen.set(e.id, r);\n });\n frozenRectsRef.current = frozen;\n\n affectedRef.current = new Set([boardId]);\n sourceSnapshotRef.current = cloneLayout(entry.getLayout());\n previewRef.current = null;\n lastLandingRef.current = { x: item.x, y: item.y };\n // Layout-item constraints win; otherwise fall back to the ones declared on\n // the owning `Board.Widget` so position constraints apply during drag.\n const draggedItem: LayoutItem = {\n ...item,\n constraints: item.constraints ?? store.get(itemId)?.constraints,\n };\n const next: BoardDragState = {\n sourceBoardId: boardId,\n currentBoardId: boardId,\n itemId,\n item: draggedItem,\n rect,\n pointerType,\n };\n setDragState(next);\n entry.setPlaceholder({ ...item });\n },\n );\n\n /** Compute the constrained landing position of an item on a target board. */\n const computeLanding = useCallback(\n (\n target: BoardEntry,\n item: LayoutItem,\n rect: ViewportRect,\n ): { x: number; y: number } => {\n const pp = target.getPositionParams();\n const contentRect = getBoardRect(target);\n const localLeft = rect.left - (contentRect?.left ?? 0);\n const localTop = rect.top - (contentRect?.top ?? 0);\n const raw = calcXYRaw(pp, localTop, localLeft);\n\n return applyPositionConstraints(\n target.getConstraints(),\n item,\n raw.x,\n raw.y,\n {\n cols: pp.cols,\n maxRows: target.getMaxRows(),\n containerWidth: pp.containerWidth,\n containerHeight: target.getContainerHeight(),\n rowHeight: pp.rowHeight,\n margin: pp.margin,\n layout: target.getLayout(),\n },\n );\n },\n [getBoardRect],\n );\n\n const moveWithinBoard = useCallback(\n (entry: BoardEntry, item: LayoutItem, x: number, y: number) => {\n const pp = entry.getPositionParams();\n const compactor = entry.getCompactor();\n const layout = entry.getLayout();\n const live = getLayoutItem(layout, item.i);\n const working = live ? [...layout] : [...layout, { ...item, x, y }];\n const target = getLayoutItem(working, item.i);\n if (!target) return;\n\n const moved = moveElement(\n working,\n target,\n x,\n y,\n true,\n compactor.preventCollision,\n compactor.type,\n pp.cols,\n compactor.allowOverlap,\n );\n const compacted = [...compactor.compact(moved, pp.cols)];\n entry.applyLayout(compacted, false);\n entry.setPlaceholder(getLayoutItem(compacted, item.i) ?? null);\n },\n [],\n );\n\n /**\n * Live cross-board reflow preview. Pushes the target board's *other* widgets\n * aside to make room for the incoming item, without ever adding the dragged\n * item's host to the target (it stays visualized as a placeholder + overlay\n * clone, and its gesture host remains mounted in the source board).\n *\n * Continuity: the working layout (including the incoming item) is carried\n * across frames via `previewRef`, so a small pointer movement moves the item\n * one step and reflows the neighbours incrementally - identical to an in-board\n * drag. Recomputing from the clean snapshot every frame instead lets\n * `moveElement`/compaction sink the item to the bottom of an occupied column\n * (the \"pushed too far below\" bug). On (re-)entry the working layout is seeded\n * from a *clone* of the snapshot so the stored snapshot is never mutated.\n */\n const previewOnTarget = useCallback(\n (target: BoardEntry, item: LayoutItem, x: number, y: number) => {\n const pp = target.getPositionParams();\n const compactor = target.getCompactor();\n\n const carried =\n previewRef.current?.boardId === target.id\n ? previewRef.current.working\n : null;\n const base = (\n carried ??\n cloneLayout(\n targetSnapshotsRef.current.get(target.id) ?? target.getLayout(),\n )\n ).filter((l) => l.i !== item.i);\n\n // Reuse the item's carried position as the move origin (continuity). On\n // first entry there is none, so seed it just above (or left of) its target\n // cell: that makes the first `moveElement` an *active* placement (never a\n // no-op) that pushes colliding widgets aside instead of the item sinking.\n const prevItem = carried ? getLayoutItem(carried, item.i) : undefined;\n const dragged: LayoutItem = prevItem\n ? { ...prevItem }\n : compactor.type === 'horizontal'\n ? { ...item, x: Math.max(0, x) - 1, y }\n : { ...item, x, y: Math.max(0, y) - 1 };\n const working = [...base, dragged];\n\n const moved = moveElement(\n working,\n dragged,\n x,\n y,\n true,\n compactor.preventCollision,\n compactor.type,\n pp.cols,\n compactor.allowOverlap,\n );\n const compacted = [...compactor.compact(moved, pp.cols)];\n previewRef.current = { boardId: target.id, working: compacted };\n\n const landed = getLayoutItem(compacted, item.i) ?? { ...item, x, y };\n // Apply only the other widgets so the dragged item is never rendered as a\n // host on the target board.\n target.applyLayout(\n compacted.filter((l) => l.i !== item.i),\n false,\n );\n target.setPlaceholder({ ...landed });\n },\n [],\n );\n\n const onDragMove = useEvent(\n (deltaX: number, deltaY: number, _pointerType: string) => {\n const ds = dragStateRef.current;\n if (!ds) return;\n\n const newRect: ViewportRect = {\n ...ds.rect,\n left: ds.rect.left + deltaX,\n top: ds.rect.top + deltaY,\n };\n\n const source = boardsRef.current.get(ds.sourceBoardId);\n // Fall back to the source board so a pointer outside every board keeps the\n // widget anchored to where it came from. Frozen rects make this\n // deterministic per pointer position (no preview-induced flip-flop).\n const target = hitTest(rectCenter(newRect)) ?? source ?? null;\n\n if (!target) {\n setDragState({ ...ds, rect: newRect });\n return;\n }\n\n const { x, y } = computeLanding(target, ds.item, newRect);\n lastLandingRef.current = { x, y };\n\n // Same board: run the live in-board preview (item stays owned by the\n // source, so its gesture host is never unmounted).\n if (target.id === ds.sourceBoardId) {\n if (ds.currentBoardId !== ds.sourceBoardId) {\n // Returning from another board: restore that board's pushed widgets\n // to their pre-hover arrangement and clear its placeholder.\n const prev = boardsRef.current.get(ds.currentBoardId);\n const snap = targetSnapshotsRef.current.get(ds.currentBoardId);\n if (snap) prev?.applyLayout(cloneLayout(snap), false);\n prev?.setPlaceholder(null);\n previewRef.current = null;\n }\n moveWithinBoard(target, ds.item, x, y);\n setDragState({\n ...ds,\n currentBoardId: ds.sourceBoardId,\n rect: newRect,\n });\n return;\n }\n\n // Cross-board: preview the transfer live by pushing the target board's\n // other widgets aside (see `previewOnTarget`). The dragged item's host\n // stays mounted in the source board for the entire drag; the actual\n // transfer is committed on drop.\n if (ds.currentBoardId !== target.id) {\n const prev = boardsRef.current.get(ds.currentBoardId);\n if (ds.currentBoardId === ds.sourceBoardId) {\n // Leaving the source: restore it to its pre-drag arrangement.\n prev?.applyLayout(cloneLayout(sourceSnapshotRef.current), false);\n } else {\n // Leaving another target board: restore its pushed widgets.\n const snap = targetSnapshotsRef.current.get(ds.currentBoardId);\n if (snap) prev?.applyLayout(cloneLayout(snap), false);\n }\n prev?.setPlaceholder(null);\n // Drop the carried working layout so the newly entered target seeds a\n // fresh preview from its own clean snapshot.\n previewRef.current = null;\n\n // Snapshot the newly entered target once, as the stable base for its\n // reflow preview.\n if (!targetSnapshotsRef.current.has(target.id)) {\n targetSnapshotsRef.current.set(\n target.id,\n cloneLayout(target.getLayout()),\n );\n }\n }\n\n previewOnTarget(target, ds.item, x, y);\n affectedRef.current.add(target.id);\n setDragState({ ...ds, currentBoardId: target.id, rect: newRect });\n },\n );\n\n const onDragEnd = useEvent(() => {\n const ds = dragStateRef.current;\n if (!ds) return;\n\n const source = boardsRef.current.get(ds.sourceBoardId);\n const target = boardsRef.current.get(ds.currentBoardId);\n const droppedInSource = !target || target.id === ds.sourceBoardId;\n\n if (droppedInSource) {\n // Commit a freshly compacted source so the result never depends on the\n // last preview frame (which may have been mid-reflow).\n if (source) {\n const sp = source.getPositionParams();\n const sc = source.getCompactor();\n source.applyLayout([...sc.compact(source.getLayout(), sp.cols)], true);\n }\n } else {\n const landing = lastLandingRef.current ?? { x: ds.item.x, y: ds.item.y };\n\n // Remove the item from the source board and compact.\n if (source) {\n const sp = source.getPositionParams();\n const sc = source.getCompactor();\n const remaining = source.getLayout().filter((l) => l.i !== ds.itemId);\n source.applyLayout([...sc.compact(remaining, sp.cols)], true);\n }\n\n const tp = target!.getPositionParams();\n const tc = target!.getCompactor();\n\n // Prefer committing the exact arrangement the user was previewing (item\n // already placed with the neighbours reflowed around it via continuity).\n const carried =\n previewRef.current?.boardId === target!.id &&\n getLayoutItem(previewRef.current.working, ds.itemId)\n ? previewRef.current.working\n : null;\n\n let finalLayout: LayoutItem[];\n if (carried) {\n finalLayout = [...tc.compact(cloneLayout(carried), tp.cols)];\n } else {\n // No preview frame ran (e.g. a teleport drop). Seed the item just above\n // (or left of) its landing cell so `moveElement` actively places it\n // rather than no-opping and letting compaction sink it to the bottom.\n const newItem: LayoutItem =\n tc.type === 'horizontal'\n ? { ...ds.item, x: Math.max(0, landing.x) - 1, y: landing.y }\n : { ...ds.item, x: landing.x, y: Math.max(0, landing.y) - 1 };\n const base = [\n ...cloneLayout(\n (\n targetSnapshotsRef.current.get(target!.id) ?? target!.getLayout()\n ).filter((l) => l.i !== ds.itemId),\n ),\n newItem,\n ];\n const moved = moveElement(\n base,\n newItem,\n landing.x,\n landing.y,\n true,\n tc.preventCollision,\n tc.type,\n tp.cols,\n tc.allowOverlap,\n );\n finalLayout = [...tc.compact(moved, tp.cols)];\n }\n target!.applyLayout(finalLayout, true);\n\n // Signal the transfer so a controlled app can move the widget's\n // declaration into the destination container (positions are already\n // reported via each board's onLayoutChange).\n onTransferRef.current?.({\n widgetId: ds.itemId,\n fromBoardId: ds.sourceBoardId,\n toBoardId: target!.id,\n item: getLayoutItem(finalLayout, ds.itemId) ?? {\n ...ds.item,\n x: landing.x,\n y: landing.y,\n },\n });\n }\n\n const ids = new Set(affectedRef.current);\n ids.add(ds.sourceBoardId);\n ids.add(ds.currentBoardId);\n ids.forEach((id) => boardsRef.current.get(id)?.setPlaceholder(null));\n\n affectedRef.current.clear();\n sourceSnapshotRef.current = [];\n targetSnapshotsRef.current.clear();\n frozenRectsRef.current.clear();\n nestedInDraggedRef.current = new Set();\n previewRef.current = null;\n lastLandingRef.current = null;\n setDragState(null);\n });\n\n return useMemo(\n () => ({\n store,\n overlayRef,\n registerBoard,\n onDragStart,\n onDragMove,\n onDragEnd,\n dragState,\n }),\n [store, registerBoard, onDragStart, onDragMove, onDragEnd, dragState],\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { BASE_STYLES, BLOCK_STYLES, COLOR_STYLES, DIMENSION_STYLES, OUTER_STYLES, tasty } from "@tenphi/tasty";
|
|
3
3
|
import { forwardRef, useMemo } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useLayoutEffect as useLayoutEffect$1 } from "../../utils/react/useLayoutEffect.js";
|
|
4
4
|
import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../utils/react/mergeProps.js";
|
|
3
3
|
import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { useEvent } from "../../_internal/hooks/use-event.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { CONTAINER_STYLES, filterBaseProps, tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../utils/styles.js";
|
|
3
3
|
import { useCombinedRefs } from "../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { CONTAINER_STYLES, filterBaseProps, parseStyle, tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { DraggableCollection } from "../../shared/DraggableCollection.js";
|
|
3
3
|
import { jsx } from "react/jsx-runtime";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
3
3
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
4
4
|
import { ItemActionProvider } from "../../actions/ItemActionContext.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { DropIndicatorElement } from "./styled.js";
|
|
3
3
|
import { useTabsContext } from "./TabsContext.js";
|
|
4
4
|
import { useEffect, useRef, useState } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { TabPanelElement } from "./styled.js";
|
|
3
3
|
import { useEffect, useMemo, useRef } from "react";
|
|
4
4
|
import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
|
|
3
3
|
import { CloseIcon } from "../../../icons/CloseIcon.js";
|
|
4
4
|
import { MoreIcon } from "../../../icons/MoreIcon.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { useEvent } from "../../../_internal/hooks/use-event.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { _ItemButton } from "../../actions/ItemButton/ItemButton.js";
|
|
3
3
|
import { useOptionalTabsContext } from "./TabsContext.js";
|
|
4
4
|
import { tasty } from "@tenphi/tasty";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
//#region src/components/navigation/Tabs/popover-placement.ts
|
|
3
3
|
/**
|
|
4
4
|
* Maps the parent Tabs `placement` to the popover placement for menus and
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { chainRaf } from "../../../utils/raf.js";
|
|
3
3
|
import { useCallback, useEffect, useLayoutEffect, useRef, useState } from "react";
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
|
|
3
3
|
import { Block } from "../../Block.js";
|
|
4
4
|
import { Space } from "../../layout/Space.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { _Text } from "../../content/Text.js";
|
|
3
3
|
import { _Title } from "../../content/Title.js";
|
|
4
4
|
import { Card } from "../../content/Card/Card.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { _Title } from "../../content/Title.js";
|
|
3
3
|
import { useProviderProps } from "../../../provider.js";
|
|
4
4
|
import { Space } from "../../layout/Space.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { tasty } from "@tenphi/tasty";
|
|
3
3
|
import { useRef } from "react";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { CalendarCell } from "./CalendarCell.js";
|
|
3
3
|
import { tasty } from "@tenphi/tasty";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { _Title } from "../../content/Title.js";
|
|
3
3
|
import { useProviderProps } from "../../../provider.js";
|
|
4
4
|
import { Space } from "../../layout/Space.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { Button } from "../../actions/index.js";
|
|
3
3
|
import { tasty } from "@tenphi/tasty";
|
|
4
4
|
import { forwardRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { chain } from "../../../utils/react/chain.js";
|
|
3
3
|
import { Paragraph } from "../../content/Paragraph.js";
|
|
4
4
|
import { _Title } from "../../content/Title.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { AlertDialogZone } from "./AlertDialogZone.js";
|
|
3
3
|
import { createContext, useContext, useMemo, useRef, useState } from "react";
|
|
4
4
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { Portal } from "../../portal/Portal.js";
|
|
3
3
|
import { DialogContainer } from "../Dialog/DialogContainer.js";
|
|
4
4
|
import { _AlertDialog } from "./AlertDialog.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { extractStyles } from "../../../utils/styles.js";
|
|
3
3
|
import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
|
|
4
4
|
import { SlotProvider } from "../../../utils/react/Slots.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { _Modal } from "../Modal/Modal.js";
|
|
3
3
|
import { DialogContext } from "./context.js";
|
|
4
4
|
import { Children, isValidElement, useRef } from "react";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { _Title } from "../../content/Title.js";
|
|
3
3
|
import { ButtonGroup } from "../../actions/ButtonGroup/ButtonGroup.js";
|
|
4
4
|
import { Button } from "../../actions/index.js";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-
|
|
1
|
+
/** @license MIT | @cube-dev/ui-kit v0.0.0-canary-ea72271 | Cube Dev Team */
|
|
2
2
|
import { useLayoutEffect as useLayoutEffect$1 } from "../../../utils/react/useLayoutEffect.js";
|
|
3
3
|
import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
|
|
4
4
|
import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
|