@vuu-ui/vuu-layout 2.1.18 → 2.1.19-beta.2
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/package.json +15 -18
- package/src/Component.js +14 -0
- package/src/LayoutContainer.css.js +24 -0
- package/src/LayoutContainer.js +26 -0
- package/src/debug.js +16 -0
- package/src/dock-layout/DockLayout.css.js +36 -0
- package/src/dock-layout/DockLayout.js +43 -0
- package/src/dock-layout/Drawer.css.js +150 -0
- package/src/dock-layout/Drawer.js +82 -0
- package/src/dock-layout/index.js +2 -0
- package/src/drag-drop/BoxModel.js +337 -0
- package/src/drag-drop/DragState.js +119 -0
- package/src/drag-drop/Draggable.js +140 -0
- package/src/drag-drop/DropTarget.js +286 -0
- package/src/drag-drop/DropTargetRenderer.js +275 -0
- package/src/drag-drop/dragDropTypes.js +0 -0
- package/src/drag-drop/index.js +3 -0
- package/src/flexbox/Flexbox.css.js +45 -0
- package/src/flexbox/Flexbox.js +45 -0
- package/src/flexbox/FlexboxLayout.js +27 -0
- package/src/flexbox/Splitter.css.js +57 -0
- package/src/flexbox/Splitter.js +112 -0
- package/src/flexbox/flexbox-utils.js +92 -0
- package/src/flexbox/flexboxTypes.js +0 -0
- package/src/flexbox/index.js +2 -0
- package/src/flexbox/useSplitterResizing.js +181 -0
- package/src/index.js +20 -0
- package/src/layout-action.js +20 -0
- package/src/layout-header/ActionButton.js +15 -0
- package/src/layout-header/Header.css.js +32 -0
- package/src/layout-header/Header.js +99 -0
- package/src/layout-header/index.js +1 -0
- package/src/layout-header/useHeader.js +76 -0
- package/src/layout-provider/LayoutProvider.js +242 -0
- package/src/layout-provider/LayoutProviderContext.js +13 -0
- package/src/layout-provider/index.js +2 -0
- package/src/layout-provider/useLayoutDragDrop.js +147 -0
- package/src/layout-reducer/flexUtils.js +186 -0
- package/src/layout-reducer/index.js +4 -0
- package/src/layout-reducer/insert-layout-element.js +179 -0
- package/src/layout-reducer/layout-reducer.js +121 -0
- package/src/layout-reducer/layoutTypes.js +34 -0
- package/src/layout-reducer/layoutUtils.js +178 -0
- package/src/layout-reducer/move-layout-element.js +18 -0
- package/src/layout-reducer/remove-layout-element.js +161 -0
- package/src/layout-reducer/replace-layout-element.js +70 -0
- package/src/layout-reducer/resize-flex-children.js +48 -0
- package/src/layout-reducer/wrap-layout-element.js +134 -0
- package/src/layout-view/View.css.js +76 -0
- package/src/layout-view/View.js +116 -0
- package/src/layout-view/useView.js +69 -0
- package/src/layout-view/useViewBroadcastChannel.js +29 -0
- package/src/layout-view/useViewResize.js +27 -0
- package/src/layout-view/viewTypes.js +0 -0
- package/src/layout-view-actions/ViewContext.js +11 -0
- package/src/layout-view-actions/useViewActionDispatcher.js +116 -0
- package/src/layout-view-actions/useViewContributions.js +31 -0
- package/src/palette/Palette.css.js +31 -0
- package/src/palette/Palette.js +85 -0
- package/src/palette/index.js +1 -0
- package/src/placeholder/LayoutStartPanel.css.js +35 -0
- package/src/placeholder/LayoutStartPanel.js +57 -0
- package/src/placeholder/Placeholder.css.js +20 -0
- package/src/placeholder/Placeholder.js +33 -0
- package/src/placeholder/index.js +1 -0
- package/src/responsive/index.js +2 -0
- package/src/responsive/measureMinimumNodeSize.js +24 -0
- package/src/responsive/useResizeObserver.js +109 -0
- package/src/responsive/utils.js +27 -0
- package/src/stack/Stack.css.js +44 -0
- package/src/stack/Stack.js +98 -0
- package/src/stack/StackLayout.js +116 -0
- package/src/stack/index.js +3 -0
- package/src/stack/stackTypes.js +0 -0
- package/src/tabs/TabPanel.css.js +17 -0
- package/src/tabs/TabPanel.js +11 -0
- package/src/tabs/index.js +1 -0
- package/src/tools/config-wrapper/ConfigWrapper.js +55 -0
- package/src/tools/config-wrapper/index.js +1 -0
- package/src/tools/devtools-box/layout-configurator.css.js +113 -0
- package/src/tools/devtools-tree/layout-tree-viewer.css.js +17 -0
- package/src/tools/index.js +3 -0
- package/src/use-persistent-state.js +43 -0
- package/src/utils/index.js +5 -0
- package/src/utils/pathUtils.js +212 -0
- package/src/utils/propUtils.js +15 -0
- package/src/utils/refUtils.js +5 -0
- package/src/utils/styleUtils.js +9 -0
- package/src/utils/typeOf.js +15 -0
- package/types/dock-layout/DockLayout.d.ts +4 -4
- package/types/dock-layout/Drawer.d.ts +4 -4
- package/types/drag-drop/BoxModel.d.ts +7 -7
- package/types/flexbox/FlexboxLayout.d.ts +4 -4
- package/types/flexbox/Splitter.d.ts +1 -1
- package/types/layout-reducer/layoutUtils.d.ts +1 -1
- package/types/layout-reducer/remove-layout-element.d.ts +1 -1
- package/types/layout-reducer/replace-layout-element.d.ts +2 -2
- package/types/layout-reducer/resize-flex-children.d.ts +2 -2
- package/types/layout-view/useView.d.ts +1 -1
- package/types/placeholder/Placeholder.d.ts +4 -4
- package/types/responsive/overflowUtils.d.ts +2 -2
- package/types/stack/StackLayout.d.ts +4 -4
- package/types/tools/devtools-box/layout-configurator.d.ts +26 -26
- package/types/tools/devtools-tree/layout-tree-viewer.d.ts +2 -2
- package/types/utils/pathUtils.d.ts +1 -1
- package/cjs/Component.js +0 -14
- package/cjs/Component.js.map +0 -1
- package/cjs/LayoutContainer.css.js +0 -6
- package/cjs/LayoutContainer.css.js.map +0 -1
- package/cjs/LayoutContainer.js +0 -33
- package/cjs/LayoutContainer.js.map +0 -1
- package/cjs/dock-layout/DockLayout.css.js +0 -6
- package/cjs/dock-layout/DockLayout.css.js.map +0 -1
- package/cjs/dock-layout/DockLayout.js +0 -41
- package/cjs/dock-layout/DockLayout.js.map +0 -1
- package/cjs/dock-layout/Drawer.css.js +0 -6
- package/cjs/dock-layout/Drawer.css.js.map +0 -1
- package/cjs/dock-layout/Drawer.js +0 -95
- package/cjs/dock-layout/Drawer.js.map +0 -1
- package/cjs/drag-drop/BoxModel.js +0 -416
- package/cjs/drag-drop/BoxModel.js.map +0 -1
- package/cjs/drag-drop/DragState.js +0 -161
- package/cjs/drag-drop/DragState.js.map +0 -1
- package/cjs/drag-drop/Draggable.js +0 -192
- package/cjs/drag-drop/Draggable.js.map +0 -1
- package/cjs/drag-drop/DropTarget.js +0 -257
- package/cjs/drag-drop/DropTarget.js.map +0 -1
- package/cjs/drag-drop/DropTargetRenderer.js +0 -218
- package/cjs/drag-drop/DropTargetRenderer.js.map +0 -1
- package/cjs/flexbox/Flexbox.css.js +0 -6
- package/cjs/flexbox/Flexbox.css.js.map +0 -1
- package/cjs/flexbox/Flexbox.js +0 -69
- package/cjs/flexbox/Flexbox.js.map +0 -1
- package/cjs/flexbox/FlexboxLayout.js +0 -30
- package/cjs/flexbox/FlexboxLayout.js.map +0 -1
- package/cjs/flexbox/Splitter.css.js +0 -6
- package/cjs/flexbox/Splitter.css.js.map +0 -1
- package/cjs/flexbox/Splitter.js +0 -122
- package/cjs/flexbox/Splitter.js.map +0 -1
- package/cjs/flexbox/flexbox-utils.js +0 -95
- package/cjs/flexbox/flexbox-utils.js.map +0 -1
- package/cjs/flexbox/useSplitterResizing.js +0 -197
- package/cjs/flexbox/useSplitterResizing.js.map +0 -1
- package/cjs/index.js +0 -122
- package/cjs/index.js.map +0 -1
- package/cjs/layout-action.js +0 -24
- package/cjs/layout-action.js.map +0 -1
- package/cjs/layout-header/Header.css.js +0 -6
- package/cjs/layout-header/Header.css.js.map +0 -1
- package/cjs/layout-header/Header.js +0 -152
- package/cjs/layout-header/Header.js.map +0 -1
- package/cjs/layout-header/useHeader.js +0 -85
- package/cjs/layout-header/useHeader.js.map +0 -1
- package/cjs/layout-provider/LayoutProvider.js +0 -304
- package/cjs/layout-provider/LayoutProvider.js.map +0 -1
- package/cjs/layout-provider/LayoutProviderContext.js +0 -23
- package/cjs/layout-provider/LayoutProviderContext.js.map +0 -1
- package/cjs/layout-provider/useLayoutDragDrop.js +0 -177
- package/cjs/layout-provider/useLayoutDragDrop.js.map +0 -1
- package/cjs/layout-reducer/flexUtils.js +0 -227
- package/cjs/layout-reducer/flexUtils.js.map +0 -1
- package/cjs/layout-reducer/insert-layout-element.js +0 -286
- package/cjs/layout-reducer/insert-layout-element.js.map +0 -1
- package/cjs/layout-reducer/layout-reducer.js +0 -202
- package/cjs/layout-reducer/layout-reducer.js.map +0 -1
- package/cjs/layout-reducer/layoutTypes.js +0 -40
- package/cjs/layout-reducer/layoutTypes.js.map +0 -1
- package/cjs/layout-reducer/layoutUtils.js +0 -237
- package/cjs/layout-reducer/layoutUtils.js.map +0 -1
- package/cjs/layout-reducer/move-layout-element.js +0 -31
- package/cjs/layout-reducer/move-layout-element.js.map +0 -1
- package/cjs/layout-reducer/remove-layout-element.js +0 -237
- package/cjs/layout-reducer/remove-layout-element.js.map +0 -1
- package/cjs/layout-reducer/replace-layout-element.js +0 -96
- package/cjs/layout-reducer/replace-layout-element.js.map +0 -1
- package/cjs/layout-reducer/resize-flex-children.js +0 -62
- package/cjs/layout-reducer/resize-flex-children.js.map +0 -1
- package/cjs/layout-reducer/wrap-layout-element.js +0 -211
- package/cjs/layout-reducer/wrap-layout-element.js.map +0 -1
- package/cjs/layout-view/View.css.js +0 -6
- package/cjs/layout-view/View.css.js.map +0 -1
- package/cjs/layout-view/View.js +0 -160
- package/cjs/layout-view/View.js.map +0 -1
- package/cjs/layout-view/useView.js +0 -75
- package/cjs/layout-view/useView.js.map +0 -1
- package/cjs/layout-view/useViewBroadcastChannel.js +0 -35
- package/cjs/layout-view/useViewBroadcastChannel.js.map +0 -1
- package/cjs/layout-view/useViewResize.js +0 -42
- package/cjs/layout-view/useViewResize.js.map +0 -1
- package/cjs/layout-view-actions/ViewContext.js +0 -16
- package/cjs/layout-view-actions/ViewContext.js.map +0 -1
- package/cjs/layout-view-actions/useViewActionDispatcher.js +0 -112
- package/cjs/layout-view-actions/useViewActionDispatcher.js.map +0 -1
- package/cjs/layout-view-actions/useViewContributions.js +0 -33
- package/cjs/layout-view-actions/useViewContributions.js.map +0 -1
- package/cjs/palette/Palette.css.js +0 -6
- package/cjs/palette/Palette.css.js.map +0 -1
- package/cjs/palette/Palette.js +0 -115
- package/cjs/palette/Palette.js.map +0 -1
- package/cjs/placeholder/LayoutStartPanel.css.js +0 -6
- package/cjs/placeholder/LayoutStartPanel.css.js.map +0 -1
- package/cjs/placeholder/LayoutStartPanel.js +0 -56
- package/cjs/placeholder/LayoutStartPanel.js.map +0 -1
- package/cjs/placeholder/Placeholder.css.js +0 -6
- package/cjs/placeholder/Placeholder.css.js.map +0 -1
- package/cjs/placeholder/Placeholder.js +0 -34
- package/cjs/placeholder/Placeholder.js.map +0 -1
- package/cjs/responsive/useResizeObserver.js +0 -118
- package/cjs/responsive/useResizeObserver.js.map +0 -1
- package/cjs/responsive/utils.js +0 -34
- package/cjs/responsive/utils.js.map +0 -1
- package/cjs/stack/Stack.css.js +0 -6
- package/cjs/stack/Stack.css.js.map +0 -1
- package/cjs/stack/Stack.js +0 -150
- package/cjs/stack/Stack.js.map +0 -1
- package/cjs/stack/StackLayout.js +0 -116
- package/cjs/stack/StackLayout.js.map +0 -1
- package/cjs/use-persistent-state.js +0 -63
- package/cjs/use-persistent-state.js.map +0 -1
- package/cjs/utils/pathUtils.js +0 -293
- package/cjs/utils/pathUtils.js.map +0 -1
- package/cjs/utils/propUtils.js +0 -27
- package/cjs/utils/propUtils.js.map +0 -1
- package/cjs/utils/refUtils.js +0 -12
- package/cjs/utils/refUtils.js.map +0 -1
- package/cjs/utils/styleUtils.js +0 -15
- package/cjs/utils/styleUtils.js.map +0 -1
- package/cjs/utils/typeOf.js +0 -27
- package/cjs/utils/typeOf.js.map +0 -1
- package/esm/Component.js +0 -12
- package/esm/Component.js.map +0 -1
- package/esm/LayoutContainer.css.js +0 -4
- package/esm/LayoutContainer.css.js.map +0 -1
- package/esm/LayoutContainer.js +0 -31
- package/esm/LayoutContainer.js.map +0 -1
- package/esm/dock-layout/DockLayout.css.js +0 -4
- package/esm/dock-layout/DockLayout.css.js.map +0 -1
- package/esm/dock-layout/DockLayout.js +0 -39
- package/esm/dock-layout/DockLayout.js.map +0 -1
- package/esm/dock-layout/Drawer.css.js +0 -4
- package/esm/dock-layout/Drawer.css.js.map +0 -1
- package/esm/dock-layout/Drawer.js +0 -93
- package/esm/dock-layout/Drawer.js.map +0 -1
- package/esm/drag-drop/BoxModel.js +0 -409
- package/esm/drag-drop/BoxModel.js.map +0 -1
- package/esm/drag-drop/DragState.js +0 -159
- package/esm/drag-drop/DragState.js.map +0 -1
- package/esm/drag-drop/Draggable.js +0 -190
- package/esm/drag-drop/Draggable.js.map +0 -1
- package/esm/drag-drop/DropTarget.js +0 -253
- package/esm/drag-drop/DropTarget.js.map +0 -1
- package/esm/drag-drop/DropTargetRenderer.js +0 -216
- package/esm/drag-drop/DropTargetRenderer.js.map +0 -1
- package/esm/flexbox/Flexbox.css.js +0 -4
- package/esm/flexbox/Flexbox.css.js.map +0 -1
- package/esm/flexbox/Flexbox.js +0 -67
- package/esm/flexbox/Flexbox.js.map +0 -1
- package/esm/flexbox/FlexboxLayout.js +0 -28
- package/esm/flexbox/FlexboxLayout.js.map +0 -1
- package/esm/flexbox/Splitter.css.js +0 -4
- package/esm/flexbox/Splitter.css.js.map +0 -1
- package/esm/flexbox/Splitter.js +0 -120
- package/esm/flexbox/Splitter.js.map +0 -1
- package/esm/flexbox/flexbox-utils.js +0 -89
- package/esm/flexbox/flexbox-utils.js.map +0 -1
- package/esm/flexbox/useSplitterResizing.js +0 -195
- package/esm/flexbox/useSplitterResizing.js.map +0 -1
- package/esm/index.js +0 -33
- package/esm/index.js.map +0 -1
- package/esm/layout-action.js +0 -22
- package/esm/layout-action.js.map +0 -1
- package/esm/layout-header/Header.css.js +0 -4
- package/esm/layout-header/Header.css.js.map +0 -1
- package/esm/layout-header/Header.js +0 -150
- package/esm/layout-header/Header.js.map +0 -1
- package/esm/layout-header/useHeader.js +0 -83
- package/esm/layout-header/useHeader.js.map +0 -1
- package/esm/layout-provider/LayoutProvider.js +0 -297
- package/esm/layout-provider/LayoutProvider.js.map +0 -1
- package/esm/layout-provider/LayoutProviderContext.js +0 -20
- package/esm/layout-provider/LayoutProviderContext.js.map +0 -1
- package/esm/layout-provider/useLayoutDragDrop.js +0 -175
- package/esm/layout-provider/useLayoutDragDrop.js.map +0 -1
- package/esm/layout-reducer/flexUtils.js +0 -218
- package/esm/layout-reducer/flexUtils.js.map +0 -1
- package/esm/layout-reducer/insert-layout-element.js +0 -282
- package/esm/layout-reducer/insert-layout-element.js.map +0 -1
- package/esm/layout-reducer/layout-reducer.js +0 -200
- package/esm/layout-reducer/layout-reducer.js.map +0 -1
- package/esm/layout-reducer/layoutTypes.js +0 -36
- package/esm/layout-reducer/layoutTypes.js.map +0 -1
- package/esm/layout-reducer/layoutUtils.js +0 -226
- package/esm/layout-reducer/layoutUtils.js.map +0 -1
- package/esm/layout-reducer/move-layout-element.js +0 -29
- package/esm/layout-reducer/move-layout-element.js.map +0 -1
- package/esm/layout-reducer/remove-layout-element.js +0 -235
- package/esm/layout-reducer/remove-layout-element.js.map +0 -1
- package/esm/layout-reducer/replace-layout-element.js +0 -92
- package/esm/layout-reducer/replace-layout-element.js.map +0 -1
- package/esm/layout-reducer/resize-flex-children.js +0 -59
- package/esm/layout-reducer/resize-flex-children.js.map +0 -1
- package/esm/layout-reducer/wrap-layout-element.js +0 -209
- package/esm/layout-reducer/wrap-layout-element.js.map +0 -1
- package/esm/layout-view/View.css.js +0 -4
- package/esm/layout-view/View.css.js.map +0 -1
- package/esm/layout-view/View.js +0 -158
- package/esm/layout-view/View.js.map +0 -1
- package/esm/layout-view/useView.js +0 -73
- package/esm/layout-view/useView.js.map +0 -1
- package/esm/layout-view/useViewBroadcastChannel.js +0 -33
- package/esm/layout-view/useViewBroadcastChannel.js.map +0 -1
- package/esm/layout-view/useViewResize.js +0 -40
- package/esm/layout-view/useViewResize.js.map +0 -1
- package/esm/layout-view-actions/ViewContext.js +0 -12
- package/esm/layout-view-actions/ViewContext.js.map +0 -1
- package/esm/layout-view-actions/useViewActionDispatcher.js +0 -110
- package/esm/layout-view-actions/useViewActionDispatcher.js.map +0 -1
- package/esm/layout-view-actions/useViewContributions.js +0 -31
- package/esm/layout-view-actions/useViewContributions.js.map +0 -1
- package/esm/palette/Palette.css.js +0 -4
- package/esm/palette/Palette.css.js.map +0 -1
- package/esm/palette/Palette.js +0 -112
- package/esm/palette/Palette.js.map +0 -1
- package/esm/placeholder/LayoutStartPanel.css.js +0 -4
- package/esm/placeholder/LayoutStartPanel.css.js.map +0 -1
- package/esm/placeholder/LayoutStartPanel.js +0 -54
- package/esm/placeholder/LayoutStartPanel.js.map +0 -1
- package/esm/placeholder/Placeholder.css.js +0 -4
- package/esm/placeholder/Placeholder.css.js.map +0 -1
- package/esm/placeholder/Placeholder.js +0 -32
- package/esm/placeholder/Placeholder.js.map +0 -1
- package/esm/responsive/useResizeObserver.js +0 -112
- package/esm/responsive/useResizeObserver.js.map +0 -1
- package/esm/responsive/utils.js +0 -31
- package/esm/responsive/utils.js.map +0 -1
- package/esm/stack/Stack.css.js +0 -4
- package/esm/stack/Stack.css.js.map +0 -1
- package/esm/stack/Stack.js +0 -148
- package/esm/stack/Stack.js.map +0 -1
- package/esm/stack/StackLayout.js +0 -114
- package/esm/stack/StackLayout.js.map +0 -1
- package/esm/use-persistent-state.js +0 -58
- package/esm/use-persistent-state.js.map +0 -1
- package/esm/utils/pathUtils.js +0 -280
- package/esm/utils/pathUtils.js.map +0 -1
- package/esm/utils/propUtils.js +0 -23
- package/esm/utils/propUtils.js.map +0 -1
- package/esm/utils/refUtils.js +0 -10
- package/esm/utils/refUtils.js.map +0 -1
- package/esm/utils/styleUtils.js +0 -13
- package/esm/utils/styleUtils.js.map +0 -1
- package/esm/utils/typeOf.js +0 -23
- package/esm/utils/typeOf.js.map +0 -1
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import { useRef, useCallback } from 'react';
|
|
2
|
-
import { Draggable } from '../drag-drop/Draggable.js';
|
|
3
|
-
import { followPath, resolvePath } from '../utils/pathUtils.js';
|
|
4
|
-
import '../drag-drop/BoxModel.js';
|
|
5
|
-
import { getIntrinsicSize } from '../layout-reducer/flexUtils.js';
|
|
6
|
-
|
|
7
|
-
const NO_INSTRUCTIONS = {};
|
|
8
|
-
const NO_OFFSETS = [0, 0];
|
|
9
|
-
const getDragElement = (rect, id, dragElement) => {
|
|
10
|
-
const wrapper = document.createElement("div");
|
|
11
|
-
wrapper.className = "vuuSimpleDraggableWrapper";
|
|
12
|
-
wrapper.classList.add(
|
|
13
|
-
"vuuSimpleDraggableWrapper",
|
|
14
|
-
"salt-theme",
|
|
15
|
-
"salt-density-medium"
|
|
16
|
-
);
|
|
17
|
-
wrapper.dataset.dragging = "true";
|
|
18
|
-
const div = dragElement ?? document.createElement("div");
|
|
19
|
-
div.id = id;
|
|
20
|
-
wrapper.appendChild(div);
|
|
21
|
-
document.body.appendChild(wrapper);
|
|
22
|
-
const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;
|
|
23
|
-
return [wrapper, cssText, rect.left, rect.top];
|
|
24
|
-
};
|
|
25
|
-
const determineDragOffsets = (draggedElement) => {
|
|
26
|
-
const { offsetParent } = draggedElement;
|
|
27
|
-
if (offsetParent === null) {
|
|
28
|
-
return NO_OFFSETS;
|
|
29
|
-
} else {
|
|
30
|
-
const { left: offsetLeft, top: offsetTop } = offsetParent.getBoundingClientRect();
|
|
31
|
-
return [offsetLeft, offsetTop];
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
const useLayoutDragDrop = (rootLayoutRef, dispatch, pathToDropTarget) => {
|
|
35
|
-
const dragActionRef = useRef(void 0);
|
|
36
|
-
const dragOperationRef = useRef(void 0);
|
|
37
|
-
const draggableHTMLElementRef = useRef(void 0);
|
|
38
|
-
const handleDrag = useCallback((x, y) => {
|
|
39
|
-
if (dragOperationRef.current && draggableHTMLElementRef.current) {
|
|
40
|
-
const {
|
|
41
|
-
dragOffsets: [offsetX, offsetY],
|
|
42
|
-
targetPosition
|
|
43
|
-
} = dragOperationRef.current;
|
|
44
|
-
const left = typeof x === "number" ? x - offsetX : targetPosition.left;
|
|
45
|
-
const top = typeof y === "number" ? y - offsetY : targetPosition.top;
|
|
46
|
-
if (left !== targetPosition.left || top !== targetPosition.top) {
|
|
47
|
-
dragOperationRef.current.targetPosition.left = left;
|
|
48
|
-
dragOperationRef.current.targetPosition.top = top;
|
|
49
|
-
draggableHTMLElementRef.current.style.top = top + "px";
|
|
50
|
-
draggableHTMLElementRef.current.style.left = left + "px";
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}, []);
|
|
54
|
-
const handleDrop = useCallback(
|
|
55
|
-
(dropTarget) => {
|
|
56
|
-
if (dragOperationRef.current) {
|
|
57
|
-
const {
|
|
58
|
-
dragInstructions,
|
|
59
|
-
payload: draggedReactElement,
|
|
60
|
-
originalCSS
|
|
61
|
-
} = dragOperationRef.current;
|
|
62
|
-
if (dropTarget) {
|
|
63
|
-
dispatch({
|
|
64
|
-
type: "drag-drop",
|
|
65
|
-
draggedReactElement,
|
|
66
|
-
dragInstructions,
|
|
67
|
-
dropTarget
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
if (draggableHTMLElementRef.current) {
|
|
71
|
-
if (!dropTarget && dragInstructions.DriftHomeIfNoDropTarget) {
|
|
72
|
-
console.log("drift back to start");
|
|
73
|
-
document.body.removeChild(draggableHTMLElementRef.current);
|
|
74
|
-
} else if (dragInstructions.RemoveDraggableOnDragEnd) {
|
|
75
|
-
document.body.removeChild(draggableHTMLElementRef.current);
|
|
76
|
-
} else {
|
|
77
|
-
draggableHTMLElementRef.current.style.cssText = originalCSS;
|
|
78
|
-
delete draggableHTMLElementRef.current.dataset.dragging;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
dragActionRef.current = void 0;
|
|
82
|
-
dragOperationRef.current = void 0;
|
|
83
|
-
draggableHTMLElementRef.current = void 0;
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
[dispatch]
|
|
87
|
-
);
|
|
88
|
-
const handleDragStart = useCallback(
|
|
89
|
-
(evt) => {
|
|
90
|
-
if (dragActionRef.current) {
|
|
91
|
-
const {
|
|
92
|
-
payload: component,
|
|
93
|
-
dragContainerPath,
|
|
94
|
-
dragElement,
|
|
95
|
-
dragRect,
|
|
96
|
-
instructions = NO_INSTRUCTIONS,
|
|
97
|
-
path
|
|
98
|
-
} = dragActionRef.current;
|
|
99
|
-
const { current: rootLayout } = rootLayoutRef;
|
|
100
|
-
const dragPos = { x: evt.clientX, y: evt.clientY };
|
|
101
|
-
const dragPayload = component ?? followPath(rootLayout, path, true);
|
|
102
|
-
const { id: dragPayloadId } = dragPayload.props;
|
|
103
|
-
const intrinsicSize = getIntrinsicSize(dragPayload);
|
|
104
|
-
let originalCSS = "", dragCSS = "", dragTransform = "";
|
|
105
|
-
let dragStartLeft = -1;
|
|
106
|
-
let dragStartTop = -1;
|
|
107
|
-
let dragOffsets = NO_OFFSETS;
|
|
108
|
-
let element = document.getElementById(dragPayloadId);
|
|
109
|
-
if (element === null) {
|
|
110
|
-
[element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(
|
|
111
|
-
dragRect,
|
|
112
|
-
dragPayloadId,
|
|
113
|
-
dragElement
|
|
114
|
-
);
|
|
115
|
-
} else {
|
|
116
|
-
dragOffsets = determineDragOffsets(element);
|
|
117
|
-
const [offsetLeft, offsetTop] = dragOffsets;
|
|
118
|
-
const { width, height, left, top } = element.getBoundingClientRect();
|
|
119
|
-
dragStartLeft = left - offsetLeft;
|
|
120
|
-
dragStartTop = top - offsetTop;
|
|
121
|
-
dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;
|
|
122
|
-
element.dataset.dragging = "true";
|
|
123
|
-
originalCSS = element.style.cssText;
|
|
124
|
-
}
|
|
125
|
-
dragTransform = Draggable.initDrag(
|
|
126
|
-
rootLayoutRef.current,
|
|
127
|
-
dragContainerPath,
|
|
128
|
-
dragRect,
|
|
129
|
-
dragPos,
|
|
130
|
-
{
|
|
131
|
-
drag: handleDrag,
|
|
132
|
-
drop: handleDrop
|
|
133
|
-
},
|
|
134
|
-
intrinsicSize
|
|
135
|
-
// dropTargets
|
|
136
|
-
);
|
|
137
|
-
element.style.cssText = dragCSS + dragTransform;
|
|
138
|
-
draggableHTMLElementRef.current = element;
|
|
139
|
-
dragOperationRef.current = {
|
|
140
|
-
payload: dragPayload,
|
|
141
|
-
originalCSS,
|
|
142
|
-
dragRect,
|
|
143
|
-
dragOffsets,
|
|
144
|
-
dragInstructions: instructions,
|
|
145
|
-
targetPosition: { left: dragStartLeft, top: dragStartTop }
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
},
|
|
149
|
-
[handleDrag, handleDrop, rootLayoutRef]
|
|
150
|
-
);
|
|
151
|
-
const prepareToDrag = useCallback(
|
|
152
|
-
(action) => {
|
|
153
|
-
const { evt, ...options } = action;
|
|
154
|
-
try {
|
|
155
|
-
dragActionRef.current = {
|
|
156
|
-
...options,
|
|
157
|
-
dragContainerPath: resolvePath(
|
|
158
|
-
rootLayoutRef.current,
|
|
159
|
-
pathToDropTarget
|
|
160
|
-
)
|
|
161
|
-
};
|
|
162
|
-
Draggable.handleMousedown(evt, handleDragStart, options.instructions);
|
|
163
|
-
} catch (err) {
|
|
164
|
-
console.warn(
|
|
165
|
-
`[useLayoutDragDrop] path ${pathToDropTarget} not resolved, the application layout does not have the required elements to support drag drop`
|
|
166
|
-
);
|
|
167
|
-
}
|
|
168
|
-
},
|
|
169
|
-
[handleDragStart, pathToDropTarget, rootLayoutRef]
|
|
170
|
-
);
|
|
171
|
-
return prepareToDrag;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
export { useLayoutDragDrop };
|
|
175
|
-
//# sourceMappingURL=useLayoutDragDrop.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useLayoutDragDrop.js","sources":["../../../../packages/vuu-layout/src/layout-provider/useLayoutDragDrop.ts"],"sourcesContent":["import { MutableRefObject, ReactElement, useCallback, useRef } from \"react\";\nimport {\n DragDropRect,\n DragEndCallback,\n Draggable,\n DragInstructions,\n DragMoveCallback,\n} from \"../drag-drop\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { getIntrinsicSize } from \"../layout-reducer/flexUtils\";\nimport { followPath, resolvePath } from \"../utils\";\nimport { LayoutProviderDispatch } from \"./LayoutProviderContext\";\n\nconst NO_INSTRUCTIONS = {} as DragInstructions;\nconst NO_OFFSETS: [number, number] = [0, 0];\n\ninterface CurrentDragAction extends Omit<DragStartAction, \"evt\" | \"type\"> {\n dragContainerPath: string;\n}\n\ninterface DragOperation {\n payload: ReactElement;\n originalCSS: string;\n dragRect: unknown;\n dragInstructions: DragInstructions;\n dragOffsets: [number, number];\n targetPosition: { left: number; top: number };\n}\n\nconst getDragElement = (\n rect: DragDropRect,\n id: string,\n dragElement?: HTMLElement,\n): [HTMLElement, string, number, number] => {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"vuuSimpleDraggableWrapper\";\n wrapper.classList.add(\n \"vuuSimpleDraggableWrapper\",\n \"salt-theme\",\n \"salt-density-medium\",\n );\n wrapper.dataset.dragging = \"true\";\n\n const div = dragElement ?? document.createElement(\"div\");\n div.id = id;\n\n wrapper.appendChild(div);\n document.body.appendChild(wrapper);\n const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;\n return [wrapper, cssText, rect.left, rect.top];\n};\n\nconst determineDragOffsets = (\n draggedElement: HTMLElement,\n): [number, number] => {\n const { offsetParent } = draggedElement;\n if (offsetParent === null) {\n return NO_OFFSETS;\n } else {\n const { left: offsetLeft, top: offsetTop } =\n offsetParent.getBoundingClientRect();\n return [offsetLeft, offsetTop];\n }\n};\n\nexport const useLayoutDragDrop = (\n rootLayoutRef: MutableRefObject<ReactElement>,\n dispatch: LayoutProviderDispatch,\n pathToDropTarget?: string,\n) => {\n const dragActionRef = useRef<CurrentDragAction>(undefined);\n const dragOperationRef = useRef<DragOperation>(undefined);\n const draggableHTMLElementRef = useRef<HTMLElement>(undefined);\n\n const handleDrag = useCallback<DragMoveCallback>((x, y) => {\n if (dragOperationRef.current && draggableHTMLElementRef.current) {\n const {\n dragOffsets: [offsetX, offsetY],\n targetPosition,\n } = dragOperationRef.current;\n const left = typeof x === \"number\" ? x - offsetX : targetPosition.left;\n const top = typeof y === \"number\" ? y - offsetY : targetPosition.top;\n if (left !== targetPosition.left || top !== targetPosition.top) {\n dragOperationRef.current.targetPosition.left = left;\n dragOperationRef.current.targetPosition.top = top;\n draggableHTMLElementRef.current.style.top = top + \"px\";\n draggableHTMLElementRef.current.style.left = left + \"px\";\n }\n }\n }, []);\n\n const handleDrop: DragEndCallback = useCallback(\n (dropTarget) => {\n if (dragOperationRef.current) {\n const {\n dragInstructions,\n payload: draggedReactElement,\n originalCSS,\n } = dragOperationRef.current;\n\n if (dropTarget) {\n dispatch({\n type: \"drag-drop\",\n draggedReactElement,\n dragInstructions,\n dropTarget,\n });\n }\n\n if (draggableHTMLElementRef.current) {\n if (!dropTarget && dragInstructions.DriftHomeIfNoDropTarget) {\n console.log(\"drift back to start\");\n document.body.removeChild(draggableHTMLElementRef.current);\n } else if (dragInstructions.RemoveDraggableOnDragEnd) {\n document.body.removeChild(draggableHTMLElementRef.current);\n } else {\n draggableHTMLElementRef.current.style.cssText = originalCSS;\n delete draggableHTMLElementRef.current.dataset.dragging;\n }\n }\n\n dragActionRef.current = undefined;\n dragOperationRef.current = undefined;\n draggableHTMLElementRef.current = undefined;\n }\n },\n [dispatch],\n );\n\n const handleDragStart = useCallback(\n (evt: MouseEvent) => {\n if (dragActionRef.current) {\n const {\n payload: component,\n dragContainerPath,\n dragElement,\n dragRect,\n instructions = NO_INSTRUCTIONS,\n path,\n } = dragActionRef.current;\n const { current: rootLayout } = rootLayoutRef;\n const dragPos = { x: evt.clientX, y: evt.clientY };\n const dragPayload = component ?? followPath(rootLayout, path, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { id: dragPayloadId } = dragPayload.props as any;\n const intrinsicSize = getIntrinsicSize(dragPayload);\n let originalCSS = \"\",\n dragCSS = \"\",\n dragTransform = \"\";\n\n let dragStartLeft = -1;\n let dragStartTop = -1;\n let dragOffsets: [number, number] = NO_OFFSETS;\n\n let element = document.getElementById(dragPayloadId);\n\n if (element === null) {\n [element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(\n dragRect,\n dragPayloadId,\n dragElement,\n );\n } else {\n dragOffsets = determineDragOffsets(element);\n const [offsetLeft, offsetTop] = dragOffsets;\n const { width, height, left, top } = element.getBoundingClientRect();\n dragStartLeft = left - offsetLeft;\n dragStartTop = top - offsetTop;\n dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;\n element.dataset.dragging = \"true\";\n originalCSS = element.style.cssText;\n }\n\n dragTransform = Draggable.initDrag(\n rootLayoutRef.current,\n dragContainerPath,\n dragRect,\n dragPos,\n {\n drag: handleDrag,\n drop: handleDrop,\n },\n intrinsicSize,\n // dropTargets\n );\n\n element.style.cssText = dragCSS + dragTransform;\n draggableHTMLElementRef.current = element;\n\n dragOperationRef.current = {\n payload: dragPayload,\n originalCSS,\n dragRect,\n dragOffsets,\n dragInstructions: instructions,\n targetPosition: { left: dragStartLeft, top: dragStartTop },\n };\n }\n },\n [handleDrag, handleDrop, rootLayoutRef],\n );\n\n const prepareToDrag = useCallback(\n (action: DragStartAction) => {\n const { evt, ...options } = action;\n try {\n dragActionRef.current = {\n ...options,\n dragContainerPath: resolvePath(\n rootLayoutRef.current,\n pathToDropTarget,\n ),\n };\n Draggable.handleMousedown(evt, handleDragStart, options.instructions);\n } catch (err) {\n console.warn(\n `[useLayoutDragDrop] path ${pathToDropTarget} not resolved, the application layout does not have the required elements to support drag drop`,\n );\n }\n },\n [handleDragStart, pathToDropTarget, rootLayoutRef],\n );\n\n return prepareToDrag;\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { uuid, getLayoutComponent } from '@vuu-ui/vuu-utils';
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { resetPath } from '../utils/pathUtils.js';
|
|
4
|
-
import { getProps } from '../utils/propUtils.js';
|
|
5
|
-
|
|
6
|
-
const placeHolderProps = { "data-placeholder": true, "data-resizeable": true };
|
|
7
|
-
const NO_STYLE = {};
|
|
8
|
-
const auto = "auto";
|
|
9
|
-
const defaultFlexStyle = {
|
|
10
|
-
flexBasis: 0,
|
|
11
|
-
flexGrow: 1,
|
|
12
|
-
flexShrink: 1,
|
|
13
|
-
height: auto,
|
|
14
|
-
width: auto
|
|
15
|
-
};
|
|
16
|
-
const CROSS_DIMENSION = {
|
|
17
|
-
height: "width",
|
|
18
|
-
width: "height"
|
|
19
|
-
};
|
|
20
|
-
const getFlexDimensions = (flexDirection = "row") => {
|
|
21
|
-
if (flexDirection === "row") {
|
|
22
|
-
return ["width", "height", "column"];
|
|
23
|
-
} else {
|
|
24
|
-
return ["height", "width", "row"];
|
|
25
|
-
}
|
|
26
|
-
};
|
|
27
|
-
const isPercentageSize = (value) => typeof value === "string" && value.endsWith("%");
|
|
28
|
-
const getIntrinsicSize = (component) => {
|
|
29
|
-
const { style: { width = auto, height = auto } = NO_STYLE } = (
|
|
30
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
31
|
-
component.props
|
|
32
|
-
);
|
|
33
|
-
const numHeight = typeof height === "number";
|
|
34
|
-
const numWidth = typeof width === "number";
|
|
35
|
-
if (numHeight && numWidth) {
|
|
36
|
-
return { height, width };
|
|
37
|
-
} else if (numHeight) {
|
|
38
|
-
return { height };
|
|
39
|
-
} else if (numWidth) {
|
|
40
|
-
return { width };
|
|
41
|
-
} else {
|
|
42
|
-
return void 0;
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
function getFlexStyle(component, dimension2, pos) {
|
|
46
|
-
const crossDimension = CROSS_DIMENSION[dimension2];
|
|
47
|
-
const {
|
|
48
|
-
style: {
|
|
49
|
-
[crossDimension]: intrinsicCrossSize = auto,
|
|
50
|
-
...intrinsicStyles
|
|
51
|
-
} = NO_STYLE
|
|
52
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
53
|
-
} = component.props;
|
|
54
|
-
if (pos && pos[dimension2]) {
|
|
55
|
-
return {
|
|
56
|
-
...intrinsicStyles,
|
|
57
|
-
...defaultFlexStyle,
|
|
58
|
-
flexBasis: pos[dimension2],
|
|
59
|
-
flexGrow: 0,
|
|
60
|
-
flexShrink: 0
|
|
61
|
-
};
|
|
62
|
-
} else {
|
|
63
|
-
return {
|
|
64
|
-
...intrinsicStyles,
|
|
65
|
-
...defaultFlexStyle,
|
|
66
|
-
[crossDimension]: intrinsicCrossSize
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
function hasUnboundedFlexStyle(component) {
|
|
71
|
-
const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } = (
|
|
72
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
73
|
-
component.props
|
|
74
|
-
);
|
|
75
|
-
if (typeof flex === "number") {
|
|
76
|
-
return true;
|
|
77
|
-
}
|
|
78
|
-
if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {
|
|
79
|
-
return true;
|
|
80
|
-
}
|
|
81
|
-
if (typeof flexBasis === "number") {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
return true;
|
|
85
|
-
}
|
|
86
|
-
function getFlexOrIntrinsicStyle(component, dimension2, pos) {
|
|
87
|
-
const crossDimension = CROSS_DIMENSION[dimension2];
|
|
88
|
-
const {
|
|
89
|
-
style: {
|
|
90
|
-
[dimension2]: intrinsicSize = auto,
|
|
91
|
-
[crossDimension]: intrinsicCrossSize = auto,
|
|
92
|
-
...intrinsicStyles
|
|
93
|
-
} = NO_STYLE
|
|
94
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
95
|
-
} = component.props;
|
|
96
|
-
if (intrinsicSize !== auto) {
|
|
97
|
-
if (isPercentageSize(intrinsicSize)) {
|
|
98
|
-
return {
|
|
99
|
-
flexBasis: 0,
|
|
100
|
-
flexGrow: 1,
|
|
101
|
-
flexShrink: 1,
|
|
102
|
-
[dimension2]: void 0,
|
|
103
|
-
[crossDimension]: intrinsicCrossSize
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
flexBasis: intrinsicSize,
|
|
108
|
-
flexGrow: 0,
|
|
109
|
-
flexShrink: 0,
|
|
110
|
-
[dimension2]: intrinsicSize,
|
|
111
|
-
[crossDimension]: intrinsicCrossSize
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
if (pos && pos[dimension2]) {
|
|
115
|
-
return {
|
|
116
|
-
...intrinsicStyles,
|
|
117
|
-
...defaultFlexStyle,
|
|
118
|
-
flexBasis: pos[dimension2],
|
|
119
|
-
flexGrow: 0,
|
|
120
|
-
flexShrink: 0
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
...intrinsicStyles,
|
|
125
|
-
[crossDimension]: intrinsicCrossSize
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
function wrapIntrinsicSizeComponentWithFlexbox(component, flexDirection, path, clientRect, dropRect) {
|
|
129
|
-
const wrappedChildren = [];
|
|
130
|
-
let pathIndex = 0;
|
|
131
|
-
let endPlaceholder;
|
|
132
|
-
if (clientRect && dropRect) {
|
|
133
|
-
let startPlaceholder;
|
|
134
|
-
const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;
|
|
135
|
-
[startPlaceholder, endPlaceholder] = flexDirection === "column" ? [dropTop - clientRect.top, clientRect.bottom - dropBottom] : [dropLeft - clientRect.left, clientRect.right - dropRight];
|
|
136
|
-
if (startPlaceholder) {
|
|
137
|
-
wrappedChildren.push(
|
|
138
|
-
createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {
|
|
139
|
-
flexGrow: 0,
|
|
140
|
-
flexShrink: 0
|
|
141
|
-
})
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
} else {
|
|
145
|
-
endPlaceholder = true;
|
|
146
|
-
}
|
|
147
|
-
const { version = 0, style } = getProps(component);
|
|
148
|
-
wrappedChildren.push(
|
|
149
|
-
resetPath(component, `${path}.${pathIndex++}`, {
|
|
150
|
-
version: version + 1,
|
|
151
|
-
style: {
|
|
152
|
-
...style,
|
|
153
|
-
flexBasis: "auto",
|
|
154
|
-
flexGrow: 0,
|
|
155
|
-
flexShrink: 0
|
|
156
|
-
}
|
|
157
|
-
})
|
|
158
|
-
);
|
|
159
|
-
if (endPlaceholder) {
|
|
160
|
-
wrappedChildren.push(
|
|
161
|
-
createPlaceHolder(`${path}.${pathIndex++}`, 0, void 0, {
|
|
162
|
-
[`data-${flexDirection}-placeholder`]: true
|
|
163
|
-
})
|
|
164
|
-
);
|
|
165
|
-
}
|
|
166
|
-
return createFlexbox(
|
|
167
|
-
flexDirection,
|
|
168
|
-
{ resizeable: false, style: { flexBasis: "auto" } },
|
|
169
|
-
wrappedChildren,
|
|
170
|
-
path
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
const getFlexValue = (flexBasis, flexFill) => {
|
|
174
|
-
if (flexFill) {
|
|
175
|
-
return void 0;
|
|
176
|
-
}
|
|
177
|
-
return flexBasis === 0 ? 1 : 0;
|
|
178
|
-
};
|
|
179
|
-
function createFlexbox(flexDirection, props, children, path) {
|
|
180
|
-
const id = uuid();
|
|
181
|
-
const { flexFill, style, resizeable = true } = props;
|
|
182
|
-
const { flexBasis = flexFill ? void 0 : "auto" } = style;
|
|
183
|
-
const flex = getFlexValue(flexBasis, flexFill);
|
|
184
|
-
const FlexboxLayout = getLayoutComponent("Flexbox");
|
|
185
|
-
return React.createElement(
|
|
186
|
-
FlexboxLayout,
|
|
187
|
-
{
|
|
188
|
-
id,
|
|
189
|
-
key: id,
|
|
190
|
-
path,
|
|
191
|
-
flexFill,
|
|
192
|
-
style: {
|
|
193
|
-
...style,
|
|
194
|
-
flexDirection,
|
|
195
|
-
flexBasis,
|
|
196
|
-
flexGrow: flex,
|
|
197
|
-
flexShrink: flex
|
|
198
|
-
},
|
|
199
|
-
resizeable
|
|
200
|
-
},
|
|
201
|
-
children
|
|
202
|
-
);
|
|
203
|
-
}
|
|
204
|
-
const baseStyle = { flexGrow: 1, flexShrink: 1 };
|
|
205
|
-
function createPlaceHolder(path, size, style, props) {
|
|
206
|
-
const id = uuid();
|
|
207
|
-
return React.createElement("div", {
|
|
208
|
-
...placeHolderProps,
|
|
209
|
-
...props,
|
|
210
|
-
"data-path": path,
|
|
211
|
-
id,
|
|
212
|
-
key: id,
|
|
213
|
-
style: { ...baseStyle, ...style, flexBasis: size }
|
|
214
|
-
});
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
export { createFlexbox, createPlaceHolder, getFlexDimensions, getFlexOrIntrinsicStyle, getFlexStyle, getIntrinsicSize, hasUnboundedFlexStyle, wrapIntrinsicSizeComponentWithFlexbox };
|
|
218
|
-
//# sourceMappingURL=flexUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"flexUtils.js","sources":["../../../../packages/vuu-layout/src/layout-reducer/flexUtils.ts"],"sourcesContent":["import {\n dimension,\n getLayoutComponent,\n rect,\n rectTuple,\n uuid,\n} from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { getProps, resetPath } from \"../utils\";\nconst placeHolderProps = { \"data-placeholder\": true, \"data-resizeable\": true };\n\nconst NO_STYLE = {};\nconst auto = \"auto\";\nconst defaultFlexStyle = {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n height: auto,\n width: auto,\n};\n\nconst CROSS_DIMENSION = {\n height: \"width\",\n width: \"height\",\n};\n\nexport type flexDirection = \"row\" | \"column\";\n\ntype contraDimension = dimension;\ntype flexDimensionTuple = [dimension, contraDimension, flexDirection];\nexport type position = {\n height?: number;\n width?: number;\n};\n\nexport const getFlexDimensions = (flexDirection: flexDirection = \"row\") => {\n if (flexDirection === \"row\") {\n return [\"width\", \"height\", \"column\"] as flexDimensionTuple;\n } else {\n return [\"height\", \"width\", \"row\"] as flexDimensionTuple;\n }\n};\n\nconst isPercentageSize = (value: string | number) =>\n typeof value === \"string\" && value.endsWith(\"%\");\n\nexport const getIntrinsicSize = (\n component: ReactElement,\n): { height?: number; width?: number } | undefined => {\n const { style: { width = auto, height = auto } = NO_STYLE } =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component.props as any;\n\n const numHeight = typeof height === \"number\";\n const numWidth = typeof width === \"number\";\n\n if (numHeight && numWidth) {\n return { height, width };\n } else if (numHeight) {\n return { height };\n } else if (numWidth) {\n return { width };\n } else {\n return undefined;\n }\n};\n\nexport function getFlexStyle(\n component: ReactElement,\n dimension: dimension,\n pos?: DropPos,\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = component.props as any;\n\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n } else {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n}\n\nexport function hasUnboundedFlexStyle(component: ReactElement) {\n const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } =\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component.props as any;\n if (typeof flex === \"number\") {\n return true;\n }\n if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {\n return true;\n }\n if (typeof flexBasis === \"number\") {\n return false;\n }\n return true;\n}\n\nexport function getFlexOrIntrinsicStyle(\n component: ReactElement,\n dimension: dimension,\n pos: position,\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [dimension]: intrinsicSize = auto,\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } = component.props as any;\n\n if (intrinsicSize !== auto) {\n if (isPercentageSize(intrinsicSize)) {\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n [dimension]: undefined,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n return {\n flexBasis: intrinsicSize,\n flexGrow: 0,\n flexShrink: 0,\n [dimension]: intrinsicSize,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n return {\n ...intrinsicStyles,\n [crossDimension]: intrinsicCrossSize,\n };\n}\n\nexport function wrapIntrinsicSizeComponentWithFlexbox(\n component: ReactElement,\n flexDirection: flexDirection,\n path: string,\n clientRect?: rect,\n dropRect?: rectTuple,\n) {\n const wrappedChildren = [];\n let pathIndex = 0;\n let endPlaceholder;\n\n if (clientRect && dropRect) {\n let startPlaceholder;\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n\n if (startPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n }),\n );\n }\n } else {\n endPlaceholder = true;\n }\n\n const { version = 0, style } = getProps(component);\n\n wrappedChildren.push(\n resetPath(component, `${path}.${pathIndex++}`, {\n version: version + 1,\n style: {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n },\n }),\n );\n\n if (endPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, 0, undefined, {\n [`data-${flexDirection}-placeholder`]: true,\n }),\n );\n }\n\n return createFlexbox(\n flexDirection,\n { resizeable: false, style: { flexBasis: \"auto\" } },\n wrappedChildren,\n path,\n );\n}\n\nconst getFlexValue = (\n flexBasis: number,\n flexFill: boolean,\n): number | undefined => {\n if (flexFill) {\n return undefined;\n }\n return flexBasis === 0 ? 1 : 0;\n};\n\nexport function createFlexbox(\n flexDirection: flexDirection,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n children: ReactNode,\n path: string,\n) {\n const id = uuid();\n const { flexFill, style, resizeable = true } = props;\n const { flexBasis = flexFill ? undefined : \"auto\" } = style;\n const flex = getFlexValue(flexBasis, flexFill);\n // A direct import triggers a circular ref chain\n const FlexboxLayout = getLayoutComponent(\"Flexbox\");\n return React.createElement(\n FlexboxLayout,\n {\n id,\n key: id,\n path,\n flexFill,\n style: {\n ...style,\n flexDirection,\n flexBasis,\n flexGrow: flex,\n flexShrink: flex,\n },\n resizeable,\n },\n children,\n );\n}\n\nconst baseStyle = { flexGrow: 1, flexShrink: 1 };\n\nexport function createPlaceHolder(\n path: string,\n size: number,\n style?: CSSProperties,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props?: any,\n) {\n const id = uuid();\n return React.createElement(\"div\", {\n ...placeHolderProps,\n ...props,\n \"data-path\": path,\n id,\n key: id,\n style: { ...baseStyle, ...style, flexBasis: size },\n });\n}\n"],"names":["dimension"],"mappings":"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"}
|