@vuu-ui/vuu-layout 0.8.57 → 0.8.59
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/cjs/Component.js +2 -2
- package/cjs/Component.js.map +1 -1
- package/cjs/DraggableLayout.js +3 -3
- package/cjs/DraggableLayout.js.map +1 -1
- package/cjs/dock-layout/DockLayout.js +5 -4
- package/cjs/dock-layout/DockLayout.js.map +1 -1
- package/cjs/drag-drop/BoxModel.js +4 -5
- package/cjs/drag-drop/BoxModel.js.map +1 -1
- package/cjs/drag-drop/DropTarget.js +1 -0
- package/cjs/drag-drop/DropTarget.js.map +1 -1
- package/cjs/flexbox/FlexboxLayout.js +2 -2
- package/cjs/flexbox/FlexboxLayout.js.map +1 -1
- package/cjs/flexbox/FluidGridLayout.js +2 -2
- package/cjs/flexbox/FluidGridLayout.js.map +1 -1
- package/cjs/flexbox/flexbox-utils.js +1 -0
- package/cjs/flexbox/flexbox-utils.js.map +1 -1
- package/cjs/index.js +0 -6
- package/cjs/index.js.map +1 -1
- package/cjs/layout-provider/LayoutProvider.js.map +1 -1
- package/cjs/layout-reducer/flexUtils.js +2 -2
- package/cjs/layout-reducer/flexUtils.js.map +1 -1
- package/cjs/layout-reducer/layout-reducer.js +2 -2
- package/cjs/layout-reducer/layout-reducer.js.map +1 -1
- package/cjs/layout-reducer/layoutUtils.js +3 -4
- package/cjs/layout-reducer/layoutUtils.js.map +1 -1
- package/cjs/layout-reducer/wrap-layout-element.js +1 -2
- package/cjs/layout-reducer/wrap-layout-element.js.map +1 -1
- package/cjs/layout-view/View.js +1 -2
- package/cjs/layout-view/View.js.map +1 -1
- package/cjs/layout-view-actions/ViewContext.js.map +1 -1
- package/cjs/layout-view-actions/useViewActionDispatcher.js.map +1 -1
- package/cjs/palette/Palette.js +3 -4
- package/cjs/palette/Palette.js.map +1 -1
- package/cjs/placeholder/Placeholder.js +2 -2
- package/cjs/placeholder/Placeholder.js.map +1 -1
- package/cjs/stack/StackLayout.js +3 -4
- package/cjs/stack/StackLayout.js.map +1 -1
- package/cjs/utils/pathUtils.js +5 -5
- package/cjs/utils/pathUtils.js.map +1 -1
- package/esm/Component.js +2 -2
- package/esm/Component.js.map +1 -1
- package/esm/DraggableLayout.js +2 -2
- package/esm/DraggableLayout.js.map +1 -1
- package/esm/dock-layout/DockLayout.js +5 -4
- package/esm/dock-layout/DockLayout.js.map +1 -1
- package/esm/drag-drop/BoxModel.js +1 -2
- package/esm/drag-drop/BoxModel.js.map +1 -1
- package/esm/drag-drop/DropTarget.js +1 -0
- package/esm/drag-drop/DropTarget.js.map +1 -1
- package/esm/flexbox/FlexboxLayout.js +1 -1
- package/esm/flexbox/FlexboxLayout.js.map +1 -1
- package/esm/flexbox/FluidGridLayout.js +1 -1
- package/esm/flexbox/FluidGridLayout.js.map +1 -1
- package/esm/flexbox/flexbox-utils.js +1 -0
- package/esm/flexbox/flexbox-utils.js.map +1 -1
- package/esm/index.js +0 -1
- package/esm/index.js.map +1 -1
- package/esm/layout-provider/LayoutProvider.js.map +1 -1
- package/esm/layout-reducer/flexUtils.js +3 -3
- package/esm/layout-reducer/flexUtils.js.map +1 -1
- package/esm/layout-reducer/layout-reducer.js +1 -1
- package/esm/layout-reducer/layout-reducer.js.map +1 -1
- package/esm/layout-reducer/layoutUtils.js +2 -3
- package/esm/layout-reducer/layoutUtils.js.map +1 -1
- package/esm/layout-reducer/wrap-layout-element.js +2 -3
- package/esm/layout-reducer/wrap-layout-element.js.map +1 -1
- package/esm/layout-view/View.js +1 -2
- package/esm/layout-view/View.js.map +1 -1
- package/esm/layout-view-actions/ViewContext.js.map +1 -1
- package/esm/layout-view-actions/useViewActionDispatcher.js.map +1 -1
- package/esm/palette/Palette.js +2 -3
- package/esm/palette/Palette.js.map +1 -1
- package/esm/placeholder/Placeholder.js +2 -2
- package/esm/placeholder/Placeholder.js.map +1 -1
- package/esm/stack/StackLayout.js +3 -4
- package/esm/stack/StackLayout.js.map +1 -1
- package/esm/utils/pathUtils.js +1 -1
- package/esm/utils/pathUtils.js.map +1 -1
- package/package.json +10 -10
- package/types/Component.d.ts +1 -2
- package/types/dock-layout/DockLayout.d.ts +2 -4
- package/types/flexbox/FluidGridLayout.d.ts +1 -1
- package/types/index.d.ts +0 -1
- package/types/layout-provider/LayoutProvider.d.ts +1 -1
- package/types/layout-reducer/layoutUtils.d.ts +8 -4
- package/types/layout-view-actions/ViewContext.d.ts +1 -1
- package/cjs/registry/ComponentRegistry.js +0 -27
- package/cjs/registry/ComponentRegistry.js.map +0 -1
- package/esm/registry/ComponentRegistry.js +0 -21
- package/esm/registry/ComponentRegistry.js.map +0 -1
- package/types/registry/ComponentRegistry.d.ts +0 -13
- package/types/registry/index.d.ts +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Palette.js","sources":["../../src/palette/Palette.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"Palette.js","sources":["../../src/palette/Palette.tsx"],"sourcesContent":["import {\n List,\n ListItem,\n ListItemProps,\n ListProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { registerComponent, uuid } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport cx from \"clsx\";\nimport {\n HTMLAttributes,\n MouseEvent,\n ReactElement,\n cloneElement,\n memo,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { View, ViewProps } from \"../layout-view\";\n\nimport paletteCss from \"./Palette.css\";\n\nconst clonePaletteItem = (paletteItem: HTMLElement) => {\n const dolly = paletteItem.cloneNode(true) as HTMLElement;\n dolly.id = \"\";\n delete dolly.dataset.idx;\n return dolly;\n};\n\nexport interface PaletteItemProps extends ListItemProps {\n children: ReactElement;\n closeable?: boolean;\n header?: boolean;\n idx?: number;\n resize?: \"defer\";\n resizeable?: boolean;\n}\n\nexport const PaletteItem = memo(\n ({\n className,\n children: component,\n idx,\n resizeable,\n header,\n closeable,\n ...props\n }: PaletteItemProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-palette\",\n css: paletteCss,\n window: targetWindow,\n });\n\n return (\n <ListItem\n className={cx(\"vuuPaletteItem\", className)}\n data-draggable\n data-icon=\"draggable\"\n {...props}\n />\n );\n }\n);\n\nPaletteItem.displayName = \"PaletteItem\";\n\nexport interface PaletteProps\n extends Omit<\n HTMLAttributes<HTMLDivElement>,\n \"onDragStart\" | \"onDrop\" | \"onSelect\"\n > {\n ListProps?: Partial<ListProps>;\n ViewProps?: Partial<ViewProps>;\n children: ReactElement[];\n itemHeight?: number;\n orientation: \"horizontal\" | \"vertical\";\n selection?: string;\n}\n\nexport const Palette = ({\n ListProps,\n ViewProps,\n children,\n className,\n itemHeight = 41,\n orientation = \"horizontal\",\n ...props\n}: PaletteProps) => {\n const dispatch = useLayoutProviderDispatch();\n const classBase = \"vuuPalette\";\n\n function handleMouseDown(evt: MouseEvent) {\n const target = evt.target as HTMLElement;\n const listItemElement = target.closest(\".vuuPaletteItem\") as HTMLElement;\n const idx = parseInt(listItemElement.dataset?.index ?? \"-1\");\n const {\n props: { caption, children: payload, template, ...props },\n } = children[idx];\n const { ViewProps: componentViewProps } = payload.props;\n const { height, left, top, width } =\n listItemElement.getBoundingClientRect();\n const id = uuid();\n const identifiers = { id, key: id };\n const component = template ? (\n payload\n ) : (\n <View\n {...ViewProps}\n {...identifiers}\n {...props}\n {...componentViewProps}\n title={props.label}\n >\n {payload}\n </View>\n );\n\n dispatch({\n dragRect: {\n left,\n top,\n right: left + width,\n bottom: top + 150,\n width,\n height,\n },\n dragElement: clonePaletteItem(listItemElement),\n evt: evt.nativeEvent,\n instructions: {\n DoNotRemove: true,\n DoNotTransform: true,\n DriftHomeIfNoDropTarget: true,\n RemoveDraggableOnDragEnd: true,\n dragThreshold: 10,\n },\n path: \"*\",\n payload: component,\n type: \"drag-start\",\n });\n }\n\n return (\n <List\n {...ListProps}\n {...props}\n className={cx(classBase, className, `${classBase}-${orientation}`)}\n itemHeight={itemHeight}\n selected={null}\n >\n {children.map((child, idx) =>\n child.type === PaletteItem\n ? cloneElement(child, {\n key: idx,\n onMouseDown: handleMouseDown,\n })\n : child\n )}\n </List>\n );\n};\n\nregisterComponent(\"Palette\", Palette, \"view\");\n"],"names":["memo","useWindow","useComponentCssInjection","paletteCss","jsx","ListItem","ListProps","ViewProps","useLayoutProviderDispatch","props","uuid","View","List","cloneElement","registerComponent"],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
4
4
|
var cx = require('clsx');
|
|
5
5
|
var styles = require('@salt-ds/styles');
|
|
6
6
|
var window = require('@salt-ds/window');
|
|
7
|
-
var
|
|
7
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
8
8
|
var LayoutStartPanel = require('./LayoutStartPanel.js');
|
|
9
9
|
var View = require('../layout-view/View.js');
|
|
10
10
|
var Placeholder$1 = require('./Placeholder.css.js');
|
|
@@ -28,7 +28,7 @@ const Placeholder = ({
|
|
|
28
28
|
return /* @__PURE__ */ jsxRuntime.jsx(View.View, { ...viewProps, className, "data-placeholder": true, resizeable: true, children: /* @__PURE__ */ jsxRuntime.jsx(PlaceholderCore, { showStartMenu }) });
|
|
29
29
|
};
|
|
30
30
|
Placeholder.displayName = "Placeholder";
|
|
31
|
-
|
|
31
|
+
vuuUtils.registerComponent("Placeholder", Placeholder, "component");
|
|
32
32
|
|
|
33
33
|
exports.Placeholder = Placeholder;
|
|
34
34
|
//# sourceMappingURL=Placeholder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Placeholder.js","sources":["../../src/placeholder/Placeholder.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { registerComponent } from \"
|
|
1
|
+
{"version":3,"file":"Placeholder.js","sources":["../../src/placeholder/Placeholder.tsx"],"sourcesContent":["import cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { LayoutStartPanel } from \"./LayoutStartPanel\";\nimport { View, ViewProps } from \"../layout-view\";\n\nimport placeholderCss from \"./Placeholder.css\";\n\nconst classBase = \"vuuPlaceholder\";\n\nexport interface PlaceholderProps extends ViewProps {\n closeable?: boolean;\n flexFill?: boolean;\n resizeable?: boolean;\n showStartMenu?: boolean;\n /**\n * shim is only when we're dealing with intrinsically sized children, which is never\n * in an actual application. Intrinsic sizing is still experimental.\n */\n shim?: boolean;\n}\n\nconst PlaceholderCore = ({ showStartMenu = true }: PlaceholderProps) => {\n return <>{showStartMenu ? <LayoutStartPanel /> : null}</>;\n};\n\nexport const Placeholder = ({\n className: classNameProp,\n showStartMenu,\n ...viewProps\n}: PlaceholderProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-placeholder\",\n css: placeholderCss,\n window: targetWindow,\n });\n\n const className = cx(classBase, classNameProp);\n\n return (\n <View {...viewProps} className={className} data-placeholder resizeable>\n <PlaceholderCore showStartMenu={showStartMenu} />\n </View>\n );\n};\n\nPlaceholder.displayName = \"Placeholder\";\nregisterComponent(\"Placeholder\", Placeholder, \"component\");\n"],"names":["jsx","Fragment","LayoutStartPanel","useWindow","useComponentCssInjection","placeholderCss","View","registerComponent"],"mappings":";;;;;;;;;;;AASA,MAAM,SAAY,GAAA,gBAAA,CAAA;AAclB,MAAM,eAAkB,GAAA,CAAC,EAAE,aAAA,GAAgB,MAA6B,KAAA;AACtE,EAAA,uBAAUA,cAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAA,aAAA,mBAAiBD,cAAA,CAAAE,iCAAA,EAAA,EAAiB,IAAK,IAAK,EAAA,CAAA,CAAA;AACxD,CAAA,CAAA;AAEO,MAAM,cAAc,CAAC;AAAA,EAC1B,SAAW,EAAA,aAAA;AAAA,EACX,aAAA;AAAA,EACA,GAAG,SAAA;AACL,CAAwB,KAAA;AACtB,EAAA,MAAM,eAAeC,gBAAU,EAAA,CAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAAC,aAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAY,EAAG,CAAA,SAAA,EAAW,aAAa,CAAA,CAAA;AAE7C,EAAA,uBACGL,cAAA,CAAAM,SAAA,EAAA,EAAM,GAAG,SAAA,EAAW,SAAsB,EAAA,kBAAA,EAAgB,IAAC,EAAA,UAAA,EAAU,IACpE,EAAA,QAAA,kBAAAN,cAAA,CAAC,eAAgB,EAAA,EAAA,aAAA,EAA8B,CACjD,EAAA,CAAA,CAAA;AAEJ,EAAA;AAEA,WAAA,CAAY,WAAc,GAAA,aAAA,CAAA;AAC1BO,0BAAkB,CAAA,aAAA,EAAe,aAAa,WAAW,CAAA;;;;"}
|
package/cjs/stack/StackLayout.js
CHANGED
|
@@ -5,13 +5,12 @@ var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
|
5
5
|
var React = require('react');
|
|
6
6
|
var LayoutProvider = require('../layout-provider/LayoutProvider.js');
|
|
7
7
|
require('../layout-provider/LayoutProviderContext.js');
|
|
8
|
+
var layoutUtils = require('../layout-reducer/layoutUtils.js');
|
|
8
9
|
var useViewActionDispatcher = require('../layout-view-actions/useViewActionDispatcher.js');
|
|
9
10
|
require('../layout-view-actions/ViewContext.js');
|
|
10
|
-
var
|
|
11
|
+
var Placeholder = require('../placeholder/Placeholder.js');
|
|
11
12
|
var usePersistentState = require('../use-persistent-state.js');
|
|
12
13
|
var Stack = require('./Stack.js');
|
|
13
|
-
var layoutUtils = require('../layout-reducer/layoutUtils.js');
|
|
14
|
-
var Placeholder = require('../placeholder/Placeholder.js');
|
|
15
14
|
|
|
16
15
|
const defaultCreateNewChild = () => /* @__PURE__ */ jsxRuntime.jsx(
|
|
17
16
|
Placeholder.Placeholder,
|
|
@@ -116,7 +115,7 @@ const StackLayout = (props) => {
|
|
|
116
115
|
);
|
|
117
116
|
};
|
|
118
117
|
StackLayout.displayName = "Stack";
|
|
119
|
-
|
|
118
|
+
vuuUtils.registerComponent("Stack", StackLayout, "container");
|
|
120
119
|
|
|
121
120
|
exports.StackLayout = StackLayout;
|
|
122
121
|
//# sourceMappingURL=StackLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"StackLayout.js","sources":["../../src/stack/StackLayout.tsx"],"sourcesContent":["import { useId } from \"@vuu-ui/vuu-utils\";\nimport React, { useCallback, useRef } from \"react\";\nimport {\n useLayoutCreateNewChild,\n useLayoutProviderDispatch,\n} from \"../layout-provider\";\nimport { useViewActionDispatcher } from \"../layout-view-actions\";\nimport {
|
|
1
|
+
{"version":3,"file":"StackLayout.js","sources":["../../src/stack/StackLayout.tsx"],"sourcesContent":["import { registerComponent, useId } from \"@vuu-ui/vuu-utils\";\nimport React, { useCallback, useRef } from \"react\";\nimport {\n useLayoutCreateNewChild,\n useLayoutProviderDispatch,\n} from \"../layout-provider\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { useViewActionDispatcher } from \"../layout-view-actions\";\nimport { Placeholder } from \"../placeholder\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { Stack } from \"./Stack\";\nimport { StackProps, TabLabelFactory } from \"./stackTypes\";\n\nconst defaultCreateNewChild = () => (\n <Placeholder\n resizeable\n style={{ flexGrow: 1, flexShrink: 0, flexBasis: 0 }}\n />\n);\n\nexport const StackLayout = (props: StackProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const dispatch = useLayoutProviderDispatch();\n const { loadState } = usePersistentState();\n\n const {\n createNewChild: createNewChildProp,\n id: idProp,\n onTabSelectionChanged,\n path,\n ...restProps\n } = props;\n\n const { children } = props;\n\n const id = useId(idProp);\n\n const [dispatchViewAction] = useViewActionDispatcher(id, ref, path);\n const createNewChildFromContext = useLayoutCreateNewChild();\n const createNewChild =\n createNewChildProp ?? createNewChildFromContext ?? defaultCreateNewChild;\n\n const handleTabSelection = (nextIdx: number) => {\n if (path) {\n dispatch({ type: \"switch-tab\", id, path, nextIdx });\n onTabSelectionChanged?.(nextIdx);\n }\n };\n\n const handleTabClose = useCallback(\n (tabIndex: number) => {\n if (Array.isArray(children)) {\n const {\n props: { \"data-path\": dataPath, path = dataPath },\n } = children[tabIndex];\n dispatch({ type: \"remove\", path });\n }\n },\n [children, dispatch]\n );\n\n const handleTabAdd = useCallback(() => {\n if (path) {\n const tabIndex = React.Children.count(children);\n const component = createNewChild(tabIndex);\n dispatch({\n type: \"add\",\n path,\n component,\n });\n }\n }, [children, createNewChild, dispatch, path]);\n\n const handleMoveTab = useCallback(\n (fromIndex: number, toIndex: number) => {\n if (path) {\n dispatch({\n fromIndex,\n toIndex,\n path,\n type: \"move-child\",\n });\n }\n },\n [dispatch, path]\n );\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleMouseDown = async (e: any, index: number) => {\n let readyToDrag: undefined | ((value: unknown) => void);\n\n const preDragActivity = async () =>\n new Promise((resolve) => {\n console.log(\"preDragActivity: Ok, gonna release the drag\");\n readyToDrag = resolve;\n });\n\n const dragging = await dispatchViewAction(\n { type: \"mousedown\", index, preDragActivity },\n e\n );\n\n if (dragging) {\n readyToDrag?.(undefined);\n }\n };\n\n const handleTabEdit = (tabIndex: number, text: string) => {\n dispatch({ type: \"set-title\", path: `${path}.${tabIndex}`, title: text });\n };\n\n const getTabLabel: TabLabelFactory = (component, idx, existingLabels) => {\n const { id, title } = component.props;\n return (\n loadState(id, \"view-title\") ||\n title ||\n // This will normally never be called as title is always assigned in layout model\n getDefaultTabLabel(component, idx, existingLabels)\n );\n };\n\n return (\n <Stack\n {...restProps}\n id={id}\n getTabLabel={getTabLabel}\n onMouseDown={handleMouseDown}\n onMoveTab={handleMoveTab}\n onAddTab={handleTabAdd}\n onTabClose={handleTabClose}\n onTabEdit={handleTabEdit}\n onTabSelectionChanged={handleTabSelection}\n ref={ref}\n />\n );\n};\nStackLayout.displayName = \"Stack\";\n\nregisterComponent(\"Stack\", StackLayout, \"container\");\n"],"names":["jsx","Placeholder","useRef","useLayoutProviderDispatch","usePersistentState","useId","useViewActionDispatcher","useLayoutCreateNewChild","useCallback","path","id","getDefaultTabLabel","Stack","registerComponent"],"mappings":"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"}
|
package/cjs/utils/pathUtils.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
var vuuUtils = require('@vuu-ui/vuu-utils');
|
|
3
4
|
var React = require('react');
|
|
4
|
-
var ComponentRegistry = require('../registry/ComponentRegistry.js');
|
|
5
5
|
var propUtils = require('./propUtils.js');
|
|
6
6
|
var typeOf = require('./typeOf.js');
|
|
7
7
|
|
|
@@ -194,7 +194,7 @@ function nextLeaf(root, path) {
|
|
|
194
194
|
pathIndices = nextParent.props.path.split(".").map((idx) => parseInt(idx, 10));
|
|
195
195
|
if (nextParent.props.children.length - 1 > parentIdx) {
|
|
196
196
|
const nextStep2 = nextParent.props.children[parentIdx + 1];
|
|
197
|
-
if (
|
|
197
|
+
if (vuuUtils.isContainer(typeOf.typeOf(nextStep2))) {
|
|
198
198
|
return firstLeaf(nextStep2);
|
|
199
199
|
} else {
|
|
200
200
|
return nextStep2;
|
|
@@ -222,7 +222,7 @@ function previousLeaf(root, path) {
|
|
|
222
222
|
);
|
|
223
223
|
if (lastIdx > 0) {
|
|
224
224
|
const nextStep2 = parent.props.children[lastIdx - 1];
|
|
225
|
-
if (
|
|
225
|
+
if (vuuUtils.isContainer(typeOf.typeOf(nextStep2))) {
|
|
226
226
|
return lastLeaf(nextStep2);
|
|
227
227
|
}
|
|
228
228
|
return nextStep2;
|
|
@@ -233,14 +233,14 @@ function previousLeaf(root, path) {
|
|
|
233
233
|
return lastLeaf(root);
|
|
234
234
|
}
|
|
235
235
|
function firstLeaf(layoutRoot) {
|
|
236
|
-
if (
|
|
236
|
+
if (vuuUtils.isContainer(typeOf.typeOf(layoutRoot))) {
|
|
237
237
|
const { children } = layoutRoot.props || layoutRoot;
|
|
238
238
|
return firstLeaf(children[0]);
|
|
239
239
|
}
|
|
240
240
|
return layoutRoot;
|
|
241
241
|
}
|
|
242
242
|
function lastLeaf(root) {
|
|
243
|
-
if (
|
|
243
|
+
if (vuuUtils.isContainer(typeOf.typeOf(root))) {
|
|
244
244
|
const { children } = root.props || root;
|
|
245
245
|
return lastLeaf(children[children.length - 1]);
|
|
246
246
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pathUtils.js","sources":["../../src/utils/pathUtils.ts"],"sourcesContent":["import React, { isValidElement, ReactElement } from \"react\";\nimport { LayoutJSON, LayoutModel, WithActive } from \"../layout-reducer\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport { getProp, getProps } from \"./propUtils\";\nimport { typeOf } from \"./typeOf\";\n\nconst removeFinalPathSegment = (path: string) => {\n const pos = path.lastIndexOf(\".\");\n if (pos === -1) {\n return path;\n } else {\n return path.slice(0, pos);\n }\n};\n\nconst getChildren = (c: ReactElement) =>\n React.isValidElement(c.props.children)\n ? [c.props.children]\n : c.props.children;\n\n/**\n * This is a very specific function at the moment. It resolves a path of the form\n * '#{componentid}.ACTIVE_CHILD'\n * It allows a templated path to be resolved to a concrete path at runtime.\n * The above pattern is used to identify a layout drop target. Further patterns\n * will be added if needed.\n */\nexport const resolvePath = (source: ReactElement, path = \"\"): string => {\n const [step1, ...steps] = path.split(\".\");\n if (step1?.startsWith(\"#\")) {\n const node = findTargetById(source, step1.slice(1), true);\n if (node && steps.length) {\n return resolvePath(node, steps.join(\".\"));\n }\n } else if (step1 === \"ACTIVE_CHILD\") {\n const { active } = getProps(source);\n const children = getChildren(source);\n const { path } = getProps(children[active]);\n return path;\n }\n\n return \"\";\n};\n\n/**\n * Similar to resolvePath but operates on a JSON\n * layout structure and returns the matching JSON node.\n */\nexport const resolveJSONPath = (\n source: LayoutJSON,\n path = \"\"\n): LayoutJSON | undefined => {\n const [step1, ...steps] = path.split(\".\");\n if (step1?.startsWith(\"#\")) {\n const node = findTargetJSONById(source, step1.slice(1), true);\n if (node && steps.length) {\n return resolveJSONPath(node, steps.join(\".\"));\n }\n } else if (step1 === \"ACTIVE_CHILD\") {\n const { children, props } = source;\n const { active } = props as WithActive;\n if (typeof active === \"number\" && children?.[active]) {\n return children[active];\n }\n }\n return;\n};\n\nexport function followPathToParent(\n source: ReactElement,\n path: string\n): ReactElement | null {\n const { \"data-path\": dataPath, path: sourcePath = dataPath } =\n getProps(source);\n\n if (path === \"0\") return null;\n if (path === sourcePath) return null;\n\n return followPath(source, removeFinalPathSegment(path), true);\n}\n\nexport function findTarget(\n source: LayoutModel,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n test: (props: any) => boolean\n): LayoutModel | undefined {\n const { children, ...props } = getProps(source);\n if (test(props)) {\n return source;\n }\n if (React.Children.count(children) > 0) {\n const array = React.isValidElement(children) ? [children] : children;\n for (const child of array) {\n const target = findTarget(child, test);\n if (target) {\n return target;\n }\n }\n }\n}\n\nexport function containerOf(\n source: LayoutModel,\n target: LayoutModel\n): LayoutModel | null {\n if (target === source) {\n return null;\n }\n const { path: sourcePath, children } = getProps(source);\n const { idx, finalStep } = nextStep(sourcePath, getProp(target, \"path\"));\n if (finalStep) {\n return source;\n }\n if (children === undefined || children[idx] === undefined) {\n return null;\n }\n return containerOf(children[idx], target);\n}\n\nexport const getChild = (\n children: ReactElement[],\n idx: number\n): ReactElement | undefined => {\n if (React.isValidElement(children) && idx == 0) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[idx];\n }\n};\n\nexport function followPathToComponent(component: ReactElement, path: string) {\n const paths = path.split(\".\");\n let children = [component];\n\n for (let i = 0; i < paths.length; i++) {\n const idx = parseInt(paths[i]);\n const child = children[idx];\n if (i === paths.length - 1) {\n return child;\n }\n children = getChildren(child);\n }\n}\n\nconst findTargetById = (\n source: ReactElement,\n id: string,\n throwIfNotFound = true\n): ReactElement | undefined => {\n const { children, id: idProp } = source.props;\n if (idProp === id) {\n return source;\n }\n\n if (React.Children.count(children) > 0) {\n const childArray = isValidElement(children) ? [children] : children;\n for (const child of childArray) {\n if (isValidElement(child)) {\n const target = findTargetById(child, id, false);\n if (target) {\n return target;\n }\n }\n }\n }\n\n if (throwIfNotFound === true) {\n throw Error(`pathUtils.findTargetById id #${id} not found in source`);\n }\n};\n\nconst findTargetJSONById = (\n source: LayoutJSON,\n id: string,\n throwIfNotFound = true\n): LayoutJSON | undefined => {\n const { children, id: idProp } = source;\n if (idProp === id) {\n return source;\n }\n\n if (Array.isArray(children) && children.length > 0) {\n for (const child of children) {\n if (child !== null && typeof child === \"object\") {\n const target = findTargetJSONById(child, id, false);\n if (target) {\n return target;\n }\n }\n }\n }\n\n if (throwIfNotFound === true) {\n throw Error(`pathUtils.findTargetJSONById id #${id} not found in source`);\n }\n};\n\nexport function followPath(\n source: LayoutModel,\n path: string\n): LayoutModel | undefined;\nexport function followPath(\n source: ReactElement,\n path: string,\n throwIfNotFound: true\n): ReactElement;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function followPath(source: any, path: any, throwIfNotFound = false) {\n if (path.startsWith(\"#\")) {\n return findTargetById(source, path.slice(1), throwIfNotFound);\n }\n\n const { \"data-path\": dataPath, path: sourcePath = dataPath } =\n getProps(source);\n if (path.indexOf(sourcePath) !== 0) {\n throw Error(\n `pathUtils.followPath path ${path} is not within source path ${sourcePath}`\n );\n }\n const route = path.slice(sourcePath.length + 1);\n if (route === \"\") {\n return source;\n }\n\n let target = source;\n const paths = route.split(\".\");\n\n for (let i = 0; i < paths.length; i++) {\n if (React.Children.count(target.props.children) === 0) {\n const message = `element at 0.${paths\n .slice(0, i)\n .join(\".\")} has no children, so cannot fulfill rest of path ${paths\n .slice(i)\n .join(\".\")}`;\n\n if (throwIfNotFound) {\n throw Error(message);\n } else {\n console.warn(message);\n return;\n }\n }\n\n target = getChild(target.props.children, parseInt(paths[i]));\n\n if (target === undefined) {\n const message = `model at 0.${paths\n .slice(0, i)\n .join(\".\")} has no children that fulfill next step of path ${paths\n .slice(i)\n .join(\".\")}`;\n\n if (throwIfNotFound) {\n throw Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n return target;\n}\n\nexport function nextLeaf(root: ReactElement, path: string) {\n const parent = followPathToParent(root, path);\n let pathIndices = path.split(\".\").map((idx) => parseInt(idx, 10));\n if (parent) {\n const lastIdx = pathIndices.pop();\n const { children } = parent.props;\n if (children.length - 1 > lastIdx!) {\n return firstLeaf(children[lastIdx! + 1]);\n } else {\n const parentIdx = pathIndices.pop();\n const nextParent = followPathToParent(root, getProp(parent, \"path\"));\n if (nextParent && typeof parentIdx === \"number\") {\n pathIndices = nextParent.props.path\n .split(\".\")\n .map((idx: string) => parseInt(idx, 10));\n if (nextParent.props.children.length - 1 > parentIdx) {\n const nextStep = nextParent.props.children[parentIdx + 1];\n if (isContainer(typeOf(nextStep) as string)) {\n return firstLeaf(nextStep);\n } else {\n return nextStep;\n }\n }\n }\n }\n }\n\n return firstLeaf(root);\n}\n\nexport function previousLeaf(root: ReactElement, path: string) {\n const pathIndices = path.split(\".\").map((idx) => parseInt(idx, 10));\n let lastIdx = pathIndices.pop();\n let parent = followPathToParent(root, path);\n if (parent != null && typeof lastIdx === \"number\") {\n const { children } = parent.props;\n if (lastIdx > 0) {\n return lastLeaf(children[lastIdx - 1]);\n } else {\n while (pathIndices.length > 1) {\n lastIdx = pathIndices.pop() as number;\n parent = followPathToParent(\n root,\n getProp(parent, \"path\")\n ) as ReactElement;\n if (lastIdx > 0) {\n const nextStep = parent.props.children[lastIdx - 1];\n if (isContainer(typeOf(nextStep) as string)) {\n return lastLeaf(nextStep);\n }\n return nextStep;\n }\n }\n }\n }\n return lastLeaf(root);\n}\n\nfunction firstLeaf(layoutRoot: ReactElement): ReactElement {\n if (isContainer(typeOf(layoutRoot) as string)) {\n const { children } = layoutRoot.props || layoutRoot;\n return firstLeaf(children[0]);\n }\n return layoutRoot;\n}\n\nfunction lastLeaf(root: ReactElement): ReactElement {\n if (isContainer(typeOf(root) as string)) {\n const { children } = root.props || root;\n return lastLeaf(children[children.length - 1]);\n }\n return root;\n}\n\ntype NextStepResult = {\n idx: number;\n finalStep: boolean;\n};\n\nexport function nextStep(\n pathSoFar: string,\n targetPath: string,\n followPathToEnd = false\n): NextStepResult {\n if (pathSoFar === targetPath) {\n return { idx: -1, finalStep: true };\n }\n\n const pathVisited = `${pathSoFar}.`;\n if (!targetPath.startsWith(pathVisited)) {\n throw Error(\"pathUtils nextStep has strayed from the path\");\n }\n\n const endOfTheLine = followPathToEnd ? 0 : 1;\n const paths = targetPath\n .replace(pathVisited, \"\")\n .split(\".\")\n .map((n) => parseInt(n, 10));\n return { idx: paths[0], finalStep: paths.length === endOfTheLine };\n}\n\nexport function resetPath(\n model: ReactElement,\n path: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additionalProps?: any\n): ReactElement {\n if (getProp(model, \"path\") === path) {\n return model;\n }\n const children: ReactElement[] = [];\n React.Children.forEach(model.props.children, (child, i) => {\n if (!getProp(child, \"path\")) {\n children.push(child);\n } else {\n children.push(resetPath(child, `${path}.${i}`));\n }\n });\n const pathPropName = model.props[\"data-path\"] ? \"data-path\" : \"path\";\n return React.cloneElement(\n model,\n { [pathPropName]: path, ...additionalProps },\n children\n );\n}\n"],"names":["getProps","path","getProp","isValidElement","nextStep","isContainer","typeOf"],"mappings":";;;;;;;AAMA,MAAM,sBAAA,GAAyB,CAAC,IAAiB,KAAA;AAC/C,EAAM,MAAA,GAAA,GAAM,IAAK,CAAA,WAAA,CAAY,GAAG,CAAA,CAAA;AAChC,EAAA,IAAI,QAAQ,CAAI,CAAA,EAAA;AACd,IAAO,OAAA,IAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAO,OAAA,IAAA,CAAK,KAAM,CAAA,CAAA,EAAG,GAAG,CAAA,CAAA;AAAA,GAC1B;AACF,CAAA,CAAA;AAEA,MAAM,WAAc,GAAA,CAAC,CACnB,KAAA,KAAA,CAAM,eAAe,CAAE,CAAA,KAAA,CAAM,QAAQ,CAAA,GACjC,CAAC,CAAE,CAAA,KAAA,CAAM,QAAQ,CAAA,GACjB,EAAE,KAAM,CAAA,QAAA,CAAA;AASP,MAAM,WAAc,GAAA,CAAC,MAAsB,EAAA,IAAA,GAAO,EAAe,KAAA;AACtE,EAAA,MAAM,CAAC,KAAO,EAAA,GAAG,KAAK,CAAI,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA,CAAA;AACxC,EAAI,IAAA,KAAA,EAAO,UAAW,CAAA,GAAG,CAAG,EAAA;AAC1B,IAAA,MAAM,OAAO,cAAe,CAAA,MAAA,EAAQ,MAAM,KAAM,CAAA,CAAC,GAAG,IAAI,CAAA,CAAA;AACxD,IAAI,IAAA,IAAA,IAAQ,MAAM,MAAQ,EAAA;AACxB,MAAA,OAAO,WAAY,CAAA,IAAA,EAAM,KAAM,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KAC1C;AAAA,GACF,MAAA,IAAW,UAAU,cAAgB,EAAA;AACnC,IAAA,MAAM,EAAE,MAAA,EAAW,GAAAA,kBAAA,CAAS,MAAM,CAAA,CAAA;AAClC,IAAM,MAAA,QAAA,GAAW,YAAY,MAAM,CAAA,CAAA;AACnC,IAAA,MAAM,EAAE,IAAAC,EAAAA,KAAAA,KAASD,kBAAS,CAAA,QAAA,CAAS,MAAM,CAAC,CAAA,CAAA;AAC1C,IAAOC,OAAAA,KAAAA,CAAAA;AAAA,GACT;AAEA,EAAO,OAAA,EAAA,CAAA;AACT,EAAA;AAMO,MAAM,eAAkB,GAAA,CAC7B,MACA,EAAA,IAAA,GAAO,EACoB,KAAA;AAC3B,EAAA,MAAM,CAAC,KAAO,EAAA,GAAG,KAAK,CAAI,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA,CAAA;AACxC,EAAI,IAAA,KAAA,EAAO,UAAW,CAAA,GAAG,CAAG,EAAA;AAC1B,IAAA,MAAM,OAAO,kBAAmB,CAAA,MAAA,EAAQ,MAAM,KAAM,CAAA,CAAC,GAAG,IAAI,CAAA,CAAA;AAC5D,IAAI,IAAA,IAAA,IAAQ,MAAM,MAAQ,EAAA;AACxB,MAAA,OAAO,eAAgB,CAAA,IAAA,EAAM,KAAM,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AAAA,KAC9C;AAAA,GACF,MAAA,IAAW,UAAU,cAAgB,EAAA;AACnC,IAAM,MAAA,EAAE,QAAU,EAAA,KAAA,EAAU,GAAA,MAAA,CAAA;AAC5B,IAAM,MAAA,EAAE,QAAW,GAAA,KAAA,CAAA;AACnB,IAAA,IAAI,OAAO,MAAA,KAAW,QAAY,IAAA,QAAA,GAAW,MAAM,CAAG,EAAA;AACpD,MAAA,OAAO,SAAS,MAAM,CAAA,CAAA;AAAA,KACxB;AAAA,GACF;AACA,EAAA,OAAA;AACF,EAAA;AAEgB,SAAA,kBAAA,CACd,QACA,IACqB,EAAA;AACrB,EAAM,MAAA,EAAE,aAAa,QAAU,EAAA,IAAA,EAAM,aAAa,QAAS,EAAA,GACzDD,mBAAS,MAAM,CAAA,CAAA;AAEjB,EAAA,IAAI,IAAS,KAAA,GAAA;AAAK,IAAO,OAAA,IAAA,CAAA;AACzB,EAAA,IAAI,IAAS,KAAA,UAAA;AAAY,IAAO,OAAA,IAAA,CAAA;AAEhC,EAAA,OAAO,UAAW,CAAA,MAAA,EAAQ,sBAAuB,CAAA,IAAI,GAAG,IAAI,CAAA,CAAA;AAC9D,CAAA;AAEgB,SAAA,UAAA,CACd,QAEA,IACyB,EAAA;AACzB,EAAA,MAAM,EAAE,QAAU,EAAA,GAAG,KAAM,EAAA,GAAIA,mBAAS,MAAM,CAAA,CAAA;AAC9C,EAAI,IAAA,IAAA,CAAK,KAAK,CAAG,EAAA;AACf,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACA,EAAA,IAAI,KAAM,CAAA,QAAA,CAAS,KAAM,CAAA,QAAQ,IAAI,CAAG,EAAA;AACtC,IAAA,MAAM,QAAQ,KAAM,CAAA,cAAA,CAAe,QAAQ,CAAI,GAAA,CAAC,QAAQ,CAAI,GAAA,QAAA,CAAA;AAC5D,IAAA,KAAA,MAAW,SAAS,KAAO,EAAA;AACzB,MAAM,MAAA,MAAA,GAAS,UAAW,CAAA,KAAA,EAAO,IAAI,CAAA,CAAA;AACrC,MAAA,IAAI,MAAQ,EAAA;AACV,QAAO,OAAA,MAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AACF,CAAA;AAEgB,SAAA,WAAA,CACd,QACA,MACoB,EAAA;AACpB,EAAA,IAAI,WAAW,MAAQ,EAAA;AACrB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,MAAM,EAAE,IAAM,EAAA,UAAA,EAAY,QAAS,EAAA,GAAIA,mBAAS,MAAM,CAAA,CAAA;AACtD,EAAM,MAAA,EAAE,KAAK,SAAU,EAAA,GAAI,SAAS,UAAY,EAAAE,iBAAA,CAAQ,MAAQ,EAAA,MAAM,CAAC,CAAA,CAAA;AACvE,EAAA,IAAI,SAAW,EAAA;AACb,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AACA,EAAA,IAAI,QAAa,KAAA,KAAA,CAAA,IAAa,QAAS,CAAA,GAAG,MAAM,KAAW,CAAA,EAAA;AACzD,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,OAAO,WAAY,CAAA,QAAA,CAAS,GAAG,CAAA,EAAG,MAAM,CAAA,CAAA;AAC1C,CAAA;AAEa,MAAA,QAAA,GAAW,CACtB,QAAA,EACA,GAC6B,KAAA;AAC7B,EAAA,IAAI,KAAM,CAAA,cAAA,CAAe,QAAQ,CAAA,IAAK,OAAO,CAAG,EAAA;AAC9C,IAAO,OAAA,QAAA,CAAA;AAAA,GACT;AACA,EAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,QAAQ,CAAG,EAAA;AAC3B,IAAA,OAAO,SAAS,GAAG,CAAA,CAAA;AAAA,GACrB;AACF,EAAA;AAEgB,SAAA,qBAAA,CAAsB,WAAyB,IAAc,EAAA;AAC3E,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAC5B,EAAI,IAAA,QAAA,GAAW,CAAC,SAAS,CAAA,CAAA;AAEzB,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAA,MAAM,GAAM,GAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAC,CAAA,CAAA;AAC7B,IAAM,MAAA,KAAA,GAAQ,SAAS,GAAG,CAAA,CAAA;AAC1B,IAAI,IAAA,CAAA,KAAM,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC1B,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AACA,IAAA,QAAA,GAAW,YAAY,KAAK,CAAA,CAAA;AAAA,GAC9B;AACF,CAAA;AAEA,MAAM,cAAiB,GAAA,CACrB,MACA,EAAA,EAAA,EACA,kBAAkB,IACW,KAAA;AAC7B,EAAA,MAAM,EAAE,QAAA,EAAU,EAAI,EAAA,MAAA,KAAW,MAAO,CAAA,KAAA,CAAA;AACxC,EAAA,IAAI,WAAW,EAAI,EAAA;AACjB,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,KAAM,CAAA,QAAA,CAAS,KAAM,CAAA,QAAQ,IAAI,CAAG,EAAA;AACtC,IAAA,MAAM,aAAaC,oBAAe,CAAA,QAAQ,CAAI,GAAA,CAAC,QAAQ,CAAI,GAAA,QAAA,CAAA;AAC3D,IAAA,KAAA,MAAW,SAAS,UAAY,EAAA;AAC9B,MAAI,IAAAA,oBAAA,CAAe,KAAK,CAAG,EAAA;AACzB,QAAA,MAAM,MAAS,GAAA,cAAA,CAAe,KAAO,EAAA,EAAA,EAAI,KAAK,CAAA,CAAA;AAC9C,QAAA,IAAI,MAAQ,EAAA;AACV,UAAO,OAAA,MAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,IAAM,MAAA,KAAA,CAAM,CAAgC,6BAAA,EAAA,EAAE,CAAsB,oBAAA,CAAA,CAAA,CAAA;AAAA,GACtE;AACF,CAAA,CAAA;AAEA,MAAM,kBAAqB,GAAA,CACzB,MACA,EAAA,EAAA,EACA,kBAAkB,IACS,KAAA;AAC3B,EAAA,MAAM,EAAE,QAAA,EAAU,EAAI,EAAA,MAAA,EAAW,GAAA,MAAA,CAAA;AACjC,EAAA,IAAI,WAAW,EAAI,EAAA;AACjB,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,MAAM,OAAQ,CAAA,QAAQ,CAAK,IAAA,QAAA,CAAS,SAAS,CAAG,EAAA;AAClD,IAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,MAAA,IAAI,KAAU,KAAA,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAU,EAAA;AAC/C,QAAA,MAAM,MAAS,GAAA,kBAAA,CAAmB,KAAO,EAAA,EAAA,EAAI,KAAK,CAAA,CAAA;AAClD,QAAA,IAAI,MAAQ,EAAA;AACV,UAAO,OAAA,MAAA,CAAA;AAAA,SACT;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,IAAM,MAAA,KAAA,CAAM,CAAoC,iCAAA,EAAA,EAAE,CAAsB,oBAAA,CAAA,CAAA,CAAA;AAAA,GAC1E;AACF,CAAA,CAAA;AAYO,SAAS,UAAW,CAAA,MAAA,EAAa,IAAW,EAAA,eAAA,GAAkB,KAAO,EAAA;AAC1E,EAAI,IAAA,IAAA,CAAK,UAAW,CAAA,GAAG,CAAG,EAAA;AACxB,IAAA,OAAO,eAAe,MAAQ,EAAA,IAAA,CAAK,KAAM,CAAA,CAAC,GAAG,eAAe,CAAA,CAAA;AAAA,GAC9D;AAEA,EAAM,MAAA,EAAE,aAAa,QAAU,EAAA,IAAA,EAAM,aAAa,QAAS,EAAA,GACzDH,mBAAS,MAAM,CAAA,CAAA;AACjB,EAAA,IAAI,IAAK,CAAA,OAAA,CAAQ,UAAU,CAAA,KAAM,CAAG,EAAA;AAClC,IAAM,MAAA,KAAA;AAAA,MACJ,CAAA,0BAAA,EAA6B,IAAI,CAAA,2BAAA,EAA8B,UAAU,CAAA,CAAA;AAAA,KAC3E,CAAA;AAAA,GACF;AACA,EAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,KAAM,CAAA,UAAA,CAAW,SAAS,CAAC,CAAA,CAAA;AAC9C,EAAA,IAAI,UAAU,EAAI,EAAA;AAChB,IAAO,OAAA,MAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,MAAS,GAAA,MAAA,CAAA;AACb,EAAM,MAAA,KAAA,GAAQ,KAAM,CAAA,KAAA,CAAM,GAAG,CAAA,CAAA;AAE7B,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACrC,IAAA,IAAI,MAAM,QAAS,CAAA,KAAA,CAAM,OAAO,KAAM,CAAA,QAAQ,MAAM,CAAG,EAAA;AACrD,MAAA,MAAM,UAAU,CAAgB,aAAA,EAAA,KAAA,CAC7B,KAAM,CAAA,CAAA,EAAG,CAAC,CACV,CAAA,IAAA,CAAK,GAAG,CAAC,oDAAoD,KAC7D,CAAA,KAAA,CAAM,CAAC,CACP,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAEZ,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAA,MAAM,MAAM,OAAO,CAAA,CAAA;AAAA,OACd,MAAA;AACL,QAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAA;AACpB,QAAA,OAAA;AAAA,OACF;AAAA,KACF;AAEA,IAAS,MAAA,GAAA,QAAA,CAAS,OAAO,KAAM,CAAA,QAAA,EAAU,SAAS,KAAM,CAAA,CAAC,CAAC,CAAC,CAAA,CAAA;AAE3D,IAAA,IAAI,WAAW,KAAW,CAAA,EAAA;AACxB,MAAA,MAAM,UAAU,CAAc,WAAA,EAAA,KAAA,CAC3B,KAAM,CAAA,CAAA,EAAG,CAAC,CACV,CAAA,IAAA,CAAK,GAAG,CAAC,mDAAmD,KAC5D,CAAA,KAAA,CAAM,CAAC,CACP,CAAA,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA,CAAA;AAEZ,MAAA,IAAI,eAAiB,EAAA;AACnB,QAAA,MAAM,MAAM,OAAO,CAAA,CAAA;AAAA,OACd,MAAA;AACL,QAAA,OAAA,CAAQ,KAAK,OAAO,CAAA,CAAA;AAAA,OACtB;AAAA,KACF;AAAA,GACF;AACA,EAAO,OAAA,MAAA,CAAA;AACT,CAAA;AAEgB,SAAA,QAAA,CAAS,MAAoB,IAAc,EAAA;AACzD,EAAM,MAAA,MAAA,GAAS,kBAAmB,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAC5C,EAAI,IAAA,WAAA,GAAc,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,GAAQ,KAAA,QAAA,CAAS,GAAK,EAAA,EAAE,CAAC,CAAA,CAAA;AAChE,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,OAAA,GAAU,YAAY,GAAI,EAAA,CAAA;AAChC,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,MAAO,CAAA,KAAA,CAAA;AAC5B,IAAI,IAAA,QAAA,CAAS,MAAS,GAAA,CAAA,GAAI,OAAU,EAAA;AAClC,MAAA,OAAO,SAAU,CAAA,QAAA,CAAS,OAAW,GAAA,CAAC,CAAC,CAAA,CAAA;AAAA,KAClC,MAAA;AACL,MAAM,MAAA,SAAA,GAAY,YAAY,GAAI,EAAA,CAAA;AAClC,MAAA,MAAM,aAAa,kBAAmB,CAAA,IAAA,EAAME,iBAAQ,CAAA,MAAA,EAAQ,MAAM,CAAC,CAAA,CAAA;AACnE,MAAI,IAAA,UAAA,IAAc,OAAO,SAAA,KAAc,QAAU,EAAA;AAC/C,QAAA,WAAA,GAAc,UAAW,CAAA,KAAA,CAAM,IAC5B,CAAA,KAAA,CAAM,GAAG,CAAA,CACT,GAAI,CAAA,CAAC,GAAgB,KAAA,QAAA,CAAS,GAAK,EAAA,EAAE,CAAC,CAAA,CAAA;AACzC,QAAA,IAAI,UAAW,CAAA,KAAA,CAAM,QAAS,CAAA,MAAA,GAAS,IAAI,SAAW,EAAA;AACpD,UAAA,MAAME,SAAW,GAAA,UAAA,CAAW,KAAM,CAAA,QAAA,CAAS,YAAY,CAAC,CAAA,CAAA;AACxD,UAAA,IAAIC,6BAAY,CAAAC,aAAA,CAAOF,SAAQ,CAAW,CAAG,EAAA;AAC3C,YAAA,OAAO,UAAUA,SAAQ,CAAA,CAAA;AAAA,WACpB,MAAA;AACL,YAAOA,OAAAA,SAAAA,CAAAA;AAAA,WACT;AAAA,SACF;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,UAAU,IAAI,CAAA,CAAA;AACvB,CAAA;AAEgB,SAAA,YAAA,CAAa,MAAoB,IAAc,EAAA;AAC7D,EAAM,MAAA,WAAA,GAAc,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA,CAAE,GAAI,CAAA,CAAC,GAAQ,KAAA,QAAA,CAAS,GAAK,EAAA,EAAE,CAAC,CAAA,CAAA;AAClE,EAAI,IAAA,OAAA,GAAU,YAAY,GAAI,EAAA,CAAA;AAC9B,EAAI,IAAA,MAAA,GAAS,kBAAmB,CAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAC1C,EAAA,IAAI,MAAU,IAAA,IAAA,IAAQ,OAAO,OAAA,KAAY,QAAU,EAAA;AACjD,IAAM,MAAA,EAAE,QAAS,EAAA,GAAI,MAAO,CAAA,KAAA,CAAA;AAC5B,IAAA,IAAI,UAAU,CAAG,EAAA;AACf,MAAA,OAAO,QAAS,CAAA,QAAA,CAAS,OAAU,GAAA,CAAC,CAAC,CAAA,CAAA;AAAA,KAChC,MAAA;AACL,MAAO,OAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC7B,QAAA,OAAA,GAAU,YAAY,GAAI,EAAA,CAAA;AAC1B,QAAS,MAAA,GAAA,kBAAA;AAAA,UACP,IAAA;AAAA,UACAF,iBAAA,CAAQ,QAAQ,MAAM,CAAA;AAAA,SACxB,CAAA;AACA,QAAA,IAAI,UAAU,CAAG,EAAA;AACf,UAAA,MAAME,SAAW,GAAA,MAAA,CAAO,KAAM,CAAA,QAAA,CAAS,UAAU,CAAC,CAAA,CAAA;AAClD,UAAA,IAAIC,6BAAY,CAAAC,aAAA,CAAOF,SAAQ,CAAW,CAAG,EAAA;AAC3C,YAAA,OAAO,SAASA,SAAQ,CAAA,CAAA;AAAA,WAC1B;AACA,UAAOA,OAAAA,SAAAA,CAAAA;AAAA,SACT;AAAA,OACF;AAAA,KACF;AAAA,GACF;AACA,EAAA,OAAO,SAAS,IAAI,CAAA,CAAA;AACtB,CAAA;AAEA,SAAS,UAAU,UAAwC,EAAA;AACzD,EAAA,IAAIC,6BAAY,CAAAC,aAAA,CAAO,UAAU,CAAW,CAAG,EAAA;AAC7C,IAAA,MAAM,EAAE,QAAA,EAAa,GAAA,UAAA,CAAW,KAAS,IAAA,UAAA,CAAA;AACzC,IAAO,OAAA,SAAA,CAAU,QAAS,CAAA,CAAC,CAAC,CAAA,CAAA;AAAA,GAC9B;AACA,EAAO,OAAA,UAAA,CAAA;AACT,CAAA;AAEA,SAAS,SAAS,IAAkC,EAAA;AAClD,EAAA,IAAID,6BAAY,CAAAC,aAAA,CAAO,IAAI,CAAW,CAAG,EAAA;AACvC,IAAA,MAAM,EAAE,QAAA,EAAa,GAAA,IAAA,CAAK,KAAS,IAAA,IAAA,CAAA;AACnC,IAAA,OAAO,QAAS,CAAA,QAAA,CAAS,QAAS,CAAA,MAAA,GAAS,CAAC,CAAC,CAAA,CAAA;AAAA,GAC/C;AACA,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAOO,SAAS,QACd,CAAA,SAAA,EACA,UACA,EAAA,eAAA,GAAkB,KACF,EAAA;AAChB,EAAA,IAAI,cAAc,UAAY,EAAA;AAC5B,IAAA,OAAO,EAAE,GAAA,EAAK,CAAI,CAAA,EAAA,SAAA,EAAW,IAAK,EAAA,CAAA;AAAA,GACpC;AAEA,EAAM,MAAA,WAAA,GAAc,GAAG,SAAS,CAAA,CAAA,CAAA,CAAA;AAChC,EAAA,IAAI,CAAC,UAAA,CAAW,UAAW,CAAA,WAAW,CAAG,EAAA;AACvC,IAAA,MAAM,MAAM,8CAA8C,CAAA,CAAA;AAAA,GAC5D;AAEA,EAAM,MAAA,YAAA,GAAe,kBAAkB,CAAI,GAAA,CAAA,CAAA;AAC3C,EAAA,MAAM,KAAQ,GAAA,UAAA,CACX,OAAQ,CAAA,WAAA,EAAa,EAAE,CACvB,CAAA,KAAA,CAAM,GAAG,CAAA,CACT,IAAI,CAAC,CAAA,KAAM,QAAS,CAAA,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAC7B,EAAO,OAAA,EAAE,KAAK,KAAM,CAAA,CAAC,GAAG,SAAW,EAAA,KAAA,CAAM,WAAW,YAAa,EAAA,CAAA;AACnE,CAAA;AAEgB,SAAA,SAAA,CACd,KACA,EAAA,IAAA,EAEA,eACc,EAAA;AACd,EAAA,IAAIJ,iBAAQ,CAAA,KAAA,EAAO,MAAM,CAAA,KAAM,IAAM,EAAA;AACnC,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACA,EAAA,MAAM,WAA2B,EAAC,CAAA;AAClC,EAAA,KAAA,CAAM,SAAS,OAAQ,CAAA,KAAA,CAAM,MAAM,QAAU,EAAA,CAAC,OAAO,CAAM,KAAA;AACzD,IAAA,IAAI,CAACA,iBAAA,CAAQ,KAAO,EAAA,MAAM,CAAG,EAAA;AAC3B,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA,CAAA;AAAA,KACd,MAAA;AACL,MAAS,QAAA,CAAA,IAAA,CAAK,UAAU,KAAO,EAAA,CAAA,EAAG,IAAI,CAAI,CAAA,EAAA,CAAC,EAAE,CAAC,CAAA,CAAA;AAAA,KAChD;AAAA,GACD,CAAA,CAAA;AACD,EAAA,MAAM,YAAe,GAAA,KAAA,CAAM,KAAM,CAAA,WAAW,IAAI,WAAc,GAAA,MAAA,CAAA;AAC9D,EAAA,OAAO,KAAM,CAAA,YAAA;AAAA,IACX,KAAA;AAAA,IACA,EAAE,CAAC,YAAY,GAAG,IAAA,EAAM,GAAG,eAAgB,EAAA;AAAA,IAC3C,QAAA;AAAA,GACF,CAAA;AACF;;;;;;;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"pathUtils.js","sources":["../../src/utils/pathUtils.ts"],"sourcesContent":["import { isContainer } from \"@vuu-ui/vuu-utils\";\nimport React, { isValidElement, ReactElement } from \"react\";\nimport { LayoutJSON, LayoutModel, WithActive } from \"../layout-reducer\";\nimport { getProp, getProps } from \"./propUtils\";\nimport { typeOf } from \"./typeOf\";\n\nconst removeFinalPathSegment = (path: string) => {\n const pos = path.lastIndexOf(\".\");\n if (pos === -1) {\n return path;\n } else {\n return path.slice(0, pos);\n }\n};\n\nconst getChildren = (c: ReactElement) =>\n React.isValidElement(c.props.children)\n ? [c.props.children]\n : c.props.children;\n\n/**\n * This is a very specific function at the moment. It resolves a path of the form\n * '#{componentid}.ACTIVE_CHILD'\n * It allows a templated path to be resolved to a concrete path at runtime.\n * The above pattern is used to identify a layout drop target. Further patterns\n * will be added if needed.\n */\nexport const resolvePath = (source: ReactElement, path = \"\"): string => {\n const [step1, ...steps] = path.split(\".\");\n if (step1?.startsWith(\"#\")) {\n const node = findTargetById(source, step1.slice(1), true);\n if (node && steps.length) {\n return resolvePath(node, steps.join(\".\"));\n }\n } else if (step1 === \"ACTIVE_CHILD\") {\n const { active } = getProps(source);\n const children = getChildren(source);\n const { path } = getProps(children[active]);\n return path;\n }\n\n return \"\";\n};\n\n/**\n * Similar to resolvePath but operates on a JSON\n * layout structure and returns the matching JSON node.\n */\nexport const resolveJSONPath = (\n source: LayoutJSON,\n path = \"\"\n): LayoutJSON | undefined => {\n const [step1, ...steps] = path.split(\".\");\n if (step1?.startsWith(\"#\")) {\n const node = findTargetJSONById(source, step1.slice(1), true);\n if (node && steps.length) {\n return resolveJSONPath(node, steps.join(\".\"));\n }\n } else if (step1 === \"ACTIVE_CHILD\") {\n const { children, props } = source;\n const { active } = props as WithActive;\n if (typeof active === \"number\" && children?.[active]) {\n return children[active];\n }\n }\n return;\n};\n\nexport function followPathToParent(\n source: ReactElement,\n path: string\n): ReactElement | null {\n const { \"data-path\": dataPath, path: sourcePath = dataPath } =\n getProps(source);\n\n if (path === \"0\") return null;\n if (path === sourcePath) return null;\n\n return followPath(source, removeFinalPathSegment(path), true);\n}\n\nexport function findTarget(\n source: LayoutModel,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n test: (props: any) => boolean\n): LayoutModel | undefined {\n const { children, ...props } = getProps(source);\n if (test(props)) {\n return source;\n }\n if (React.Children.count(children) > 0) {\n const array = React.isValidElement(children) ? [children] : children;\n for (const child of array) {\n const target = findTarget(child, test);\n if (target) {\n return target;\n }\n }\n }\n}\n\nexport function containerOf(\n source: LayoutModel,\n target: LayoutModel\n): LayoutModel | null {\n if (target === source) {\n return null;\n }\n const { path: sourcePath, children } = getProps(source);\n const { idx, finalStep } = nextStep(sourcePath, getProp(target, \"path\"));\n if (finalStep) {\n return source;\n }\n if (children === undefined || children[idx] === undefined) {\n return null;\n }\n return containerOf(children[idx], target);\n}\n\nexport const getChild = (\n children: ReactElement[],\n idx: number\n): ReactElement | undefined => {\n if (React.isValidElement(children) && idx == 0) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[idx];\n }\n};\n\nexport function followPathToComponent(component: ReactElement, path: string) {\n const paths = path.split(\".\");\n let children = [component];\n\n for (let i = 0; i < paths.length; i++) {\n const idx = parseInt(paths[i]);\n const child = children[idx];\n if (i === paths.length - 1) {\n return child;\n }\n children = getChildren(child);\n }\n}\n\nconst findTargetById = (\n source: ReactElement,\n id: string,\n throwIfNotFound = true\n): ReactElement | undefined => {\n const { children, id: idProp } = source.props;\n if (idProp === id) {\n return source;\n }\n\n if (React.Children.count(children) > 0) {\n const childArray = isValidElement(children) ? [children] : children;\n for (const child of childArray) {\n if (isValidElement(child)) {\n const target = findTargetById(child, id, false);\n if (target) {\n return target;\n }\n }\n }\n }\n\n if (throwIfNotFound === true) {\n throw Error(`pathUtils.findTargetById id #${id} not found in source`);\n }\n};\n\nconst findTargetJSONById = (\n source: LayoutJSON,\n id: string,\n throwIfNotFound = true\n): LayoutJSON | undefined => {\n const { children, id: idProp } = source;\n if (idProp === id) {\n return source;\n }\n\n if (Array.isArray(children) && children.length > 0) {\n for (const child of children) {\n if (child !== null && typeof child === \"object\") {\n const target = findTargetJSONById(child, id, false);\n if (target) {\n return target;\n }\n }\n }\n }\n\n if (throwIfNotFound === true) {\n throw Error(`pathUtils.findTargetJSONById id #${id} not found in source`);\n }\n};\n\nexport function followPath(\n source: LayoutModel,\n path: string\n): LayoutModel | undefined;\nexport function followPath(\n source: ReactElement,\n path: string,\n throwIfNotFound: true\n): ReactElement;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function followPath(source: any, path: any, throwIfNotFound = false) {\n if (path.startsWith(\"#\")) {\n return findTargetById(source, path.slice(1), throwIfNotFound);\n }\n\n const { \"data-path\": dataPath, path: sourcePath = dataPath } =\n getProps(source);\n if (path.indexOf(sourcePath) !== 0) {\n throw Error(\n `pathUtils.followPath path ${path} is not within source path ${sourcePath}`\n );\n }\n const route = path.slice(sourcePath.length + 1);\n if (route === \"\") {\n return source;\n }\n\n let target = source;\n const paths = route.split(\".\");\n\n for (let i = 0; i < paths.length; i++) {\n if (React.Children.count(target.props.children) === 0) {\n const message = `element at 0.${paths\n .slice(0, i)\n .join(\".\")} has no children, so cannot fulfill rest of path ${paths\n .slice(i)\n .join(\".\")}`;\n\n if (throwIfNotFound) {\n throw Error(message);\n } else {\n console.warn(message);\n return;\n }\n }\n\n target = getChild(target.props.children, parseInt(paths[i]));\n\n if (target === undefined) {\n const message = `model at 0.${paths\n .slice(0, i)\n .join(\".\")} has no children that fulfill next step of path ${paths\n .slice(i)\n .join(\".\")}`;\n\n if (throwIfNotFound) {\n throw Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n return target;\n}\n\nexport function nextLeaf(root: ReactElement, path: string) {\n const parent = followPathToParent(root, path);\n let pathIndices = path.split(\".\").map((idx) => parseInt(idx, 10));\n if (parent) {\n const lastIdx = pathIndices.pop();\n const { children } = parent.props;\n if (children.length - 1 > lastIdx!) {\n return firstLeaf(children[lastIdx! + 1]);\n } else {\n const parentIdx = pathIndices.pop();\n const nextParent = followPathToParent(root, getProp(parent, \"path\"));\n if (nextParent && typeof parentIdx === \"number\") {\n pathIndices = nextParent.props.path\n .split(\".\")\n .map((idx: string) => parseInt(idx, 10));\n if (nextParent.props.children.length - 1 > parentIdx) {\n const nextStep = nextParent.props.children[parentIdx + 1];\n if (isContainer(typeOf(nextStep) as string)) {\n return firstLeaf(nextStep);\n } else {\n return nextStep;\n }\n }\n }\n }\n }\n\n return firstLeaf(root);\n}\n\nexport function previousLeaf(root: ReactElement, path: string) {\n const pathIndices = path.split(\".\").map((idx) => parseInt(idx, 10));\n let lastIdx = pathIndices.pop();\n let parent = followPathToParent(root, path);\n if (parent != null && typeof lastIdx === \"number\") {\n const { children } = parent.props;\n if (lastIdx > 0) {\n return lastLeaf(children[lastIdx - 1]);\n } else {\n while (pathIndices.length > 1) {\n lastIdx = pathIndices.pop() as number;\n parent = followPathToParent(\n root,\n getProp(parent, \"path\")\n ) as ReactElement;\n if (lastIdx > 0) {\n const nextStep = parent.props.children[lastIdx - 1];\n if (isContainer(typeOf(nextStep) as string)) {\n return lastLeaf(nextStep);\n }\n return nextStep;\n }\n }\n }\n }\n return lastLeaf(root);\n}\n\nfunction firstLeaf(layoutRoot: ReactElement): ReactElement {\n if (isContainer(typeOf(layoutRoot) as string)) {\n const { children } = layoutRoot.props || layoutRoot;\n return firstLeaf(children[0]);\n }\n return layoutRoot;\n}\n\nfunction lastLeaf(root: ReactElement): ReactElement {\n if (isContainer(typeOf(root) as string)) {\n const { children } = root.props || root;\n return lastLeaf(children[children.length - 1]);\n }\n return root;\n}\n\ntype NextStepResult = {\n idx: number;\n finalStep: boolean;\n};\n\nexport function nextStep(\n pathSoFar: string,\n targetPath: string,\n followPathToEnd = false\n): NextStepResult {\n if (pathSoFar === targetPath) {\n return { idx: -1, finalStep: true };\n }\n\n const pathVisited = `${pathSoFar}.`;\n if (!targetPath.startsWith(pathVisited)) {\n throw Error(\"pathUtils nextStep has strayed from the path\");\n }\n\n const endOfTheLine = followPathToEnd ? 0 : 1;\n const paths = targetPath\n .replace(pathVisited, \"\")\n .split(\".\")\n .map((n) => parseInt(n, 10));\n return { idx: paths[0], finalStep: paths.length === endOfTheLine };\n}\n\nexport function resetPath(\n model: ReactElement,\n path: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n additionalProps?: any\n): ReactElement {\n if (getProp(model, \"path\") === path) {\n return model;\n }\n const children: ReactElement[] = [];\n React.Children.forEach(model.props.children, (child, i) => {\n if (!getProp(child, \"path\")) {\n children.push(child);\n } else {\n children.push(resetPath(child, `${path}.${i}`));\n }\n });\n const pathPropName = model.props[\"data-path\"] ? \"data-path\" : \"path\";\n return React.cloneElement(\n model,\n { [pathPropName]: path, ...additionalProps },\n children\n );\n}\n"],"names":["getProps","path","getProp","isValidElement","nextStep","isContainer","typeOf"],"mappings":"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"}
|
package/esm/Component.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
2
|
import { forwardRef } from 'react';
|
|
3
|
-
import { registerComponent } from '
|
|
3
|
+
import { registerComponent } from '@vuu-ui/vuu-utils';
|
|
4
4
|
|
|
5
5
|
const Component = forwardRef(function Component2({ resizeable, ...props }, ref) {
|
|
6
6
|
return /* @__PURE__ */ jsx("div", { ...props, className: "Component", ref });
|
|
7
7
|
});
|
|
8
8
|
Component.displayName = "Component";
|
|
9
|
-
registerComponent("Component", Component);
|
|
9
|
+
registerComponent("Component", Component, "component");
|
|
10
10
|
|
|
11
11
|
export { Component as default };
|
|
12
12
|
//# sourceMappingURL=Component.js.map
|
package/esm/Component.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { forwardRef, HTMLAttributes } from
|
|
1
|
+
{"version":3,"file":"Component.js","sources":["../src/Component.tsx"],"sourcesContent":["import React, { forwardRef, HTMLAttributes } from \"react\";\nimport { registerComponent } from \"@vuu-ui/vuu-utils\";\n\nexport interface ComponentProps extends HTMLAttributes<HTMLDivElement> {\n resizeable?: boolean;\n}\n\nconst Component = forwardRef(function Component(\n { resizeable, ...props }: ComponentProps,\n ref: React.ForwardedRef<HTMLDivElement>\n) {\n return <div {...props} className=\"Component\" ref={ref} />;\n}) as React.FunctionComponent<ComponentProps>;\nComponent.displayName = \"Component\";\n\nexport default Component;\n\nregisterComponent(\"Component\", Component, \"component\");\n"],"names":["Component"],"mappings":";;;;AAOM,MAAA,SAAA,GAAY,WAAW,SAASA,UAAAA,CACpC,EAAE,UAAY,EAAA,GAAG,KAAM,EAAA,EACvB,GACA,EAAA;AACA,EAAA,2BAAQ,KAAK,EAAA,EAAA,GAAG,KAAO,EAAA,SAAA,EAAU,aAAY,GAAU,EAAA,CAAA,CAAA;AACzD,CAAC,EAAA;AACD,SAAA,CAAU,WAAc,GAAA,WAAA,CAAA;AAIxB,iBAAkB,CAAA,WAAA,EAAa,WAAW,WAAW,CAAA;;;;"}
|
package/esm/DraggableLayout.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { jsx } from 'react/jsx-runtime';
|
|
2
|
-
import
|
|
2
|
+
import { registerComponent } from '@vuu-ui/vuu-utils';
|
|
3
3
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
4
4
|
import { useWindow } from '@salt-ds/window';
|
|
5
|
+
import cx from 'clsx';
|
|
5
6
|
import { forwardRef } from 'react';
|
|
6
|
-
import { registerComponent } from './registry/ComponentRegistry.js';
|
|
7
7
|
import draggableLayoutCss from './DraggableLayout.css.js';
|
|
8
8
|
|
|
9
9
|
const DraggableLayout = forwardRef(function DraggableLayout2({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DraggableLayout.js","sources":["../src/DraggableLayout.tsx"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"DraggableLayout.js","sources":["../src/DraggableLayout.tsx"],"sourcesContent":["import { registerComponent } from \"@vuu-ui/vuu-utils\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport classnames from \"clsx\";\nimport { ForwardedRef, forwardRef, HTMLAttributes } from \"react\";\n\nimport draggableLayoutCss from \"./DraggableLayout.css\";\n\nexport interface DraggableLayoutProps extends HTMLAttributes<HTMLDivElement> {\n dropTarget?: boolean;\n resizeable?: boolean;\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const DraggableLayout = forwardRef(function DraggableLayout(\n {\n children,\n className: classNameProp,\n dropTarget,\n resizeable: _, // ignore, its just a marker used by the layout system\n ...htmlAttributes\n }: DraggableLayoutProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-draggable-layout\",\n css: draggableLayoutCss,\n window: targetWindow,\n });\n\n const className = classnames(\"DraggableLayout\", classNameProp);\n return (\n <div className={className} ref={forwardedRef} {...htmlAttributes}>\n {children}\n </div>\n );\n});\n\nconst componentName = \"DraggableLayout\";\n\nDraggableLayout.displayName = componentName;\n\nregisterComponent(componentName, DraggableLayout, \"container\");\n"],"names":["DraggableLayout","classnames"],"mappings":";;;;;;;;AAaa,MAAA,eAAA,GAAkB,UAAW,CAAA,SAASA,gBACjD,CAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAW,EAAA,aAAA;AAAA,EACX,UAAA;AAAA,EACA,UAAY,EAAA,CAAA;AAAA;AAAA,EACZ,GAAG,cAAA;AACL,CAAA,EACA,YACA,EAAA;AACA,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,sBAAA;AAAA,IACR,GAAK,EAAA,kBAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAM,MAAA,SAAA,GAAYC,EAAW,CAAA,iBAAA,EAAmB,aAAa,CAAA,CAAA;AAC7D,EAAA,2BACG,KAAI,EAAA,EAAA,SAAA,EAAsB,KAAK,YAAe,EAAA,GAAG,gBAC/C,QACH,EAAA,CAAA,CAAA;AAEJ,CAAC,EAAA;AAED,MAAM,aAAgB,GAAA,iBAAA,CAAA;AAEtB,eAAA,CAAgB,WAAc,GAAA,aAAA,CAAA;AAE9B,iBAAkB,CAAA,aAAA,EAAe,iBAAiB,WAAW,CAAA;;;;"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
-
import { partition } from '@vuu-ui/vuu-utils';
|
|
2
|
+
import { registerComponent, asReactElements, partition } from '@vuu-ui/vuu-utils';
|
|
3
3
|
import cx from 'clsx';
|
|
4
4
|
import { useComponentCssInjection } from '@salt-ds/styles';
|
|
5
5
|
import { useWindow } from '@salt-ds/window';
|
|
6
|
-
import {
|
|
6
|
+
import { useMemo } from 'react';
|
|
7
7
|
import Drawer from './Drawer.js';
|
|
8
8
|
import dockLayoutCss from './DockLayout.css.js';
|
|
9
9
|
|
|
10
10
|
const isDrawer = (component) => component.type === Drawer;
|
|
11
11
|
const isVertical = ({ props: { position = "left" } }) => position.match(/top|bottom/);
|
|
12
|
+
const classBase = "vuuDockLayout";
|
|
12
13
|
const DockLayout = (props) => {
|
|
13
14
|
const targetWindow = useWindow();
|
|
14
15
|
useComponentCssInjection({
|
|
@@ -17,8 +18,8 @@ const DockLayout = (props) => {
|
|
|
17
18
|
window: targetWindow
|
|
18
19
|
});
|
|
19
20
|
const { children, className: classNameProp, id, style } = props;
|
|
20
|
-
const
|
|
21
|
-
const [drawers, content] = partition(
|
|
21
|
+
const childElements = useMemo(() => asReactElements(children), [children]);
|
|
22
|
+
const [drawers, content] = partition(childElements, isDrawer);
|
|
22
23
|
const [verticalDrawers, horizontalDrawers] = partition(drawers, isVertical);
|
|
23
24
|
const orientation = verticalDrawers.length === 0 ? "horizontal" : horizontalDrawers.length === 0 ? "vertical" : "both";
|
|
24
25
|
const className = cx(classBase, classNameProp, `${classBase}-${orientation}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DockLayout.js","sources":["../../src/dock-layout/DockLayout.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"DockLayout.js","sources":["../../src/dock-layout/DockLayout.tsx"],"sourcesContent":["import {\n asReactElements,\n partition,\n registerComponent,\n} from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { HTMLAttributes, ReactElement, useMemo } from \"react\";\nimport Drawer from \"./Drawer\";\n\nimport dockLayoutCss from \"./DockLayout.css\";\n\nconst isDrawer = (component: ReactElement) => component.type === Drawer;\nconst isVertical = ({ props: { position = \"left\" } }: ReactElement) =>\n position.match(/top|bottom/);\n\nexport type DockLayoutProps = HTMLAttributes<HTMLDivElement>;\n\nconst classBase = \"vuuDockLayout\";\n\nconst DockLayout = (props: DockLayoutProps) => {\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"vuu-dock-layput\",\n css: dockLayoutCss,\n window: targetWindow,\n });\n\n const { children, className: classNameProp, id, style } = props;\n const childElements = useMemo(() => asReactElements(children), [children]);\n\n const [drawers, content] = partition(childElements, isDrawer);\n const [verticalDrawers, horizontalDrawers] = partition(drawers, isVertical);\n const orientation =\n verticalDrawers.length === 0\n ? \"horizontal\"\n : horizontalDrawers.length === 0\n ? \"vertical\"\n : \"both\";\n\n const className = cx(classBase, classNameProp, `${classBase}-${orientation}`);\n\n return (\n <div className={className} id={id} style={style}>\n {drawers}\n <div className={`${classBase}-content`}>{content}</div>\n </div>\n );\n};\nDockLayout.displayName = \"DockLayout\";\n\nexport default DockLayout;\n\nregisterComponent(\"DockLayout\", DockLayout, \"container\");\n"],"names":[],"mappings":";;;;;;;;;AAaA,MAAM,QAAW,GAAA,CAAC,SAA4B,KAAA,SAAA,CAAU,IAAS,KAAA,MAAA,CAAA;AACjE,MAAM,UAAA,GAAa,CAAC,EAAE,KAAO,EAAA,EAAE,QAAW,GAAA,MAAA,EAAS,EAAA,KACjD,QAAS,CAAA,KAAA,CAAM,YAAY,CAAA,CAAA;AAI7B,MAAM,SAAY,GAAA,eAAA,CAAA;AAEZ,MAAA,UAAA,GAAa,CAAC,KAA2B,KAAA;AAC7C,EAAA,MAAM,eAAe,SAAU,EAAA,CAAA;AAC/B,EAAyB,wBAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,iBAAA;AAAA,IACR,GAAK,EAAA,aAAA;AAAA,IACL,MAAQ,EAAA,YAAA;AAAA,GACT,CAAA,CAAA;AAED,EAAA,MAAM,EAAE,QAAU,EAAA,SAAA,EAAW,aAAe,EAAA,EAAA,EAAI,OAAU,GAAA,KAAA,CAAA;AAC1D,EAAM,MAAA,aAAA,GAAgB,QAAQ,MAAM,eAAA,CAAgB,QAAQ,CAAG,EAAA,CAAC,QAAQ,CAAC,CAAA,CAAA;AAEzE,EAAA,MAAM,CAAC,OAAS,EAAA,OAAO,CAAI,GAAA,SAAA,CAAU,eAAe,QAAQ,CAAA,CAAA;AAC5D,EAAA,MAAM,CAAC,eAAiB,EAAA,iBAAiB,CAAI,GAAA,SAAA,CAAU,SAAS,UAAU,CAAA,CAAA;AAC1E,EAAM,MAAA,WAAA,GACJ,gBAAgB,MAAW,KAAA,CAAA,GACvB,eACA,iBAAkB,CAAA,MAAA,KAAW,IAC7B,UACA,GAAA,MAAA,CAAA;AAEN,EAAM,MAAA,SAAA,GAAY,GAAG,SAAW,EAAA,aAAA,EAAe,GAAG,SAAS,CAAA,CAAA,EAAI,WAAW,CAAE,CAAA,CAAA,CAAA;AAE5E,EAAA,uBACG,IAAA,CAAA,KAAA,EAAA,EAAI,SAAsB,EAAA,EAAA,EAAQ,KAChC,EAAA,QAAA,EAAA;AAAA,IAAA,OAAA;AAAA,wBACA,KAAI,EAAA,EAAA,SAAA,EAAW,CAAG,EAAA,SAAS,YAAa,QAAQ,EAAA,OAAA,EAAA,CAAA;AAAA,GACnD,EAAA,CAAA,CAAA;AAEJ,EAAA;AACA,UAAA,CAAW,WAAc,GAAA,YAAA,CAAA;AAIzB,iBAAkB,CAAA,YAAA,EAAc,YAAY,WAAW,CAAA;;;;"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import { boxContainsPoint } from '@vuu-ui/vuu-utils';
|
|
2
|
-
import { isContainer } from '../registry/ComponentRegistry.js';
|
|
1
|
+
import { boxContainsPoint, isContainer } from '@vuu-ui/vuu-utils';
|
|
3
2
|
import 'react';
|
|
4
3
|
import { getProps } from '../utils/propUtils.js';
|
|
5
4
|
import { typeOf } from '../utils/typeOf.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BoxModel.js","sources":["../../src/drag-drop/BoxModel.ts"],"sourcesContent":["import { ReactElement } from \"react\";\nimport { boxContainsPoint } from \"@vuu-ui/vuu-utils\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport { getProps, typeOf } from \"../utils\";\nimport { DragDropRect, DropPos, RelativePosition } from \"./dragDropTypes\";\n\nexport const positionValues = {\n north: 1,\n east: 2,\n south: 4,\n west: 8,\n header: 16,\n centre: 32,\n absolute: 64,\n};\n\nexport const RelativeDropPosition = {\n AFTER: \"after\" as RelativePosition,\n BEFORE: \"before\" as RelativePosition,\n};\n\nexport const Position = Object.freeze({\n North: _position(\"north\"),\n East: _position(\"east\"),\n South: _position(\"south\"),\n West: _position(\"west\"),\n Header: _position(\"header\"),\n Centre: _position(\"centre\"),\n Absolute: _position(\"absolute\"),\n});\n\nfunction _position(str: keyof typeof positionValues) {\n return Object.freeze({\n offset:\n str === \"north\" || str === \"west\"\n ? 0\n : str === \"south\" || str === \"east\"\n ? 1\n : NaN,\n valueOf: function () {\n return positionValues[str];\n },\n toString: function () {\n return str;\n },\n North: str === \"north\",\n South: str === \"south\",\n East: str === \"east\",\n West: str === \"west\",\n Header: str === \"header\",\n Centre: str === \"centre\",\n NorthOrSouth: str === \"north\" || str === \"south\",\n EastOrWest: str === \"east\" || str === \"west\",\n NorthOrWest: str === \"north\" || str === \"west\",\n SouthOrEast: str === \"east\" || str === \"south\",\n Absolute: str === \"absolute\",\n });\n}\n\nconst NORTH = Position.North,\n SOUTH = Position.South,\n EAST = Position.East,\n WEST = Position.West,\n HEADER = Position.Header,\n CENTRE = Position.Centre;\n\nexport interface Measurements {\n [key: string]: DragDropRect;\n}\n\nexport class BoxModel {\n //TODO we should accept initial let,top offsets here\n // if dropTargets are supplied, we will only allow drop operations directly on these targets\n // TODO we will need to make this more flexible e.g allowing drop anywhere within these target\n static measure(\n model: ReactElement,\n dropTargetPaths: string[] = []\n ): Measurements {\n const measurements: Measurements = {};\n measureRootComponent(model, measurements, dropTargetPaths);\n return measurements;\n }\n\n static allBoxesContainingPoint(\n layout: LayoutModel,\n measurements: Measurements,\n x: number,\n y: number,\n validDropTargets?: string[]\n ) {\n return allBoxesContainingPoint(\n layout,\n measurements,\n x,\n y,\n validDropTargets\n ).reverse();\n }\n}\n\nexport function pointPositionWithinRect(\n x: number,\n y: number,\n rect: DragDropRect,\n borderZone = 30\n) {\n const width = rect.right - rect.left;\n const height = rect.bottom - rect.top;\n const posX = x - rect.left;\n const posY = y - rect.top;\n let closeToTheEdge = 0;\n\n if (posX < borderZone) closeToTheEdge += 8;\n if (posX > width - borderZone) closeToTheEdge += 2;\n if (posY < borderZone) closeToTheEdge += 1;\n if (posY > height - borderZone) closeToTheEdge += 4;\n\n return { pctX: posX / width, pctY: posY / height, closeToTheEdge };\n}\n\nexport function getPosition(\n x: number,\n y: number,\n rect: DragDropRect,\n targetOrientation?: \"row\" | \"column\"\n): DropPos {\n const { BEFORE, AFTER } = RelativeDropPosition;\n const { pctX, pctY, closeToTheEdge } = pointPositionWithinRect(x, y, rect);\n let position;\n let tab;\n\n if (targetOrientation === \"row\") {\n position = pctX < 0.5 ? WEST : EAST;\n } else if (rect.header && boxContainsPoint(rect.header, x, y)) {\n position = HEADER;\n\n if (rect.Stack) {\n const tabCount = rect.Stack.length;\n if (tabCount === 0) {\n tab = {\n index: -1,\n left: rect.left,\n positionRelativeToTab: AFTER,\n width: 0,\n };\n } else {\n //TODO account for gaps between tabs\n const targetTab = rect.Stack.find(\n ({ left, right }) => x >= left && x <= right\n );\n if (targetTab) {\n const tabWidth = targetTab.right - targetTab.left;\n tab = {\n index: rect.Stack.indexOf(targetTab),\n left: targetTab.left,\n positionRelativeToTab:\n (x - targetTab.left) / tabWidth < 0.5 ? BEFORE : AFTER,\n width: tabWidth,\n };\n } else {\n const lastTab = rect.Stack[tabCount - 1];\n tab = {\n left: lastTab.right,\n width: 0,\n index: tabCount,\n positionRelativeToTab: AFTER,\n };\n }\n }\n } else if (rect.header.titleWidth) {\n const tabWidth = rect.header.titleWidth;\n tab = {\n index: -1,\n left: rect.left,\n positionRelativeToTab:\n (x - rect.left) / tabWidth < 0.5 ? BEFORE : AFTER,\n width: tabWidth,\n };\n } else {\n tab = {\n left: rect.left,\n width: 0,\n positionRelativeToTab: BEFORE,\n index: -1,\n };\n }\n } else {\n position = getPositionWithinBox(x, y, rect, pctX, pctY);\n }\n return { position: position!, x, y, closeToTheEdge, tab };\n}\n\nfunction getPositionWithinBox(\n x: number,\n y: number,\n rect: DragDropRect,\n pctX: number,\n pctY: number\n) {\n const centerBox = getCenteredBox(rect, 0.2);\n if (boxContainsPoint(centerBox, x, y)) {\n return CENTRE;\n } else {\n const quadrant = `${pctY < 0.5 ? \"north\" : \"south\"}${\n pctX < 0.5 ? \"west\" : \"east\"\n }`;\n\n switch (quadrant) {\n case \"northwest\":\n return pctX > pctY ? NORTH : WEST;\n case \"northeast\":\n return 1 - pctX > pctY ? NORTH : EAST;\n case \"southeast\":\n return pctX > pctY ? EAST : SOUTH;\n case \"southwest\":\n return 1 - pctX > pctY ? WEST : SOUTH;\n default:\n }\n }\n}\n\nfunction getCenteredBox(\n { right, left, top, bottom }: DragDropRect,\n pctSize: number\n) {\n const pctOffset = (1 - pctSize) / 2;\n const w = (right - left) * pctOffset;\n const h = (bottom - top) * pctOffset;\n return { left: left + w, top: top + h, right: right - w, bottom: bottom - h };\n}\n\nfunction measureRootComponent(\n rootComponent: ReactElement,\n measurements: Measurements,\n dropTargets: string[]\n) {\n const {\n id,\n \"data-path\": dataPath,\n path = dataPath,\n } = getProps(rootComponent);\n const type = typeOf(rootComponent) as string;\n\n if (id && path) {\n const [rect, el] = measureComponentDomElement(rootComponent);\n measureComponent(rootComponent, rect, el, measurements);\n if (isContainer(type)) {\n collectChildMeasurements(rootComponent, measurements, dropTargets);\n }\n }\n}\n\nfunction measureComponent(\n component: LayoutModel,\n rect: DragDropRect,\n el: HTMLElement,\n measurements: Measurements\n) {\n const {\n \"data-path\": dataPath,\n path = dataPath,\n header,\n } = getProps(component);\n\n measurements[path] = rect;\n\n const type = typeOf(component);\n if (header || type === \"Stack\") {\n const query = type === \"Stack\" ? \".vuuTabstrip\" : \".vuuHeader\";\n const headerEl = el.querySelector(query);\n if (headerEl) {\n const { top, left, right, bottom } = headerEl.getBoundingClientRect();\n measurements[path].header = {\n top: Math.round(top),\n left: Math.round(left),\n right: Math.round(right),\n bottom: Math.round(bottom),\n };\n if (type === \"Stack\") {\n measurements[path].Stack = Array.from(\n headerEl.querySelectorAll(\".vuuTab\")\n )\n .map((tab) => tab.getBoundingClientRect())\n .map(({ left, right }) => ({ left, right }));\n } else {\n const titleEl = headerEl.querySelector('[class^=\"vuuHeader-title\"]');\n const { header } = measurements[path];\n if (titleEl && header) {\n header.titleWidth = titleEl.clientWidth;\n }\n }\n }\n }\n\n return measurements[path];\n}\n\nfunction collectChildMeasurements(\n component: LayoutModel,\n measurements: Measurements,\n dropTargets: string[],\n preX = 0,\n posX = 0,\n preY = 0,\n posY = 0\n) {\n const {\n children,\n \"data-path\": dataPath,\n path = dataPath,\n style,\n active = 0,\n } = getProps(component);\n\n const type = typeOf(component);\n const isFlexbox = type === \"Flexbox\";\n const isStack = type === \"Stack\";\n const isTower = isFlexbox && style.flexDirection === \"column\";\n const isTerrace = isFlexbox && style.flexDirection === \"row\";\n\n const childrenToMeasure = isStack\n ? children.filter((_child: ReactElement, idx: number) => idx === active)\n : children.filter(omitDragging);\n\n type measuredTuple = [DragDropRect, HTMLElement, ReactElement];\n // Collect all the measurements in first pass ...\n const childMeasurements: measuredTuple[] = childrenToMeasure.map(\n (child: ReactElement) => {\n const [rect, el] = measureComponentDomElement(child);\n\n return [\n {\n ...rect,\n top: rect.top - preY,\n right: rect.right + posX,\n bottom: rect.bottom + posY,\n left: rect.left - preX,\n },\n el,\n child,\n ];\n }\n );\n\n // ...so that, in the second pass, we can identify gaps ...\n const expandedMeasurements = childMeasurements.map(\n ([rect, el, child], i, all) => {\n // generate a 'local' splitter adjustment for children adjacent to splitters\n let localPreX;\n let localPosX;\n let localPreY;\n let localPosY;\n let gapPre;\n let gapPos;\n const n = all.length - 1;\n if (isTerrace) {\n gapPre = i === 0 ? 0 : rect.left - all[i - 1][0].right;\n gapPos = i === n ? 0 : all[i + 1][0].left - rect.right;\n // we don't need to divide the leading gap, as half the gap will\n // already have been assigned to the preceeding child in the\n // previous loop iteration.\n localPreX = i === 0 ? 0 : gapPre === 0 ? 0 : gapPre;\n localPosX = i === n ? 0 : gapPos === 0 ? 0 : gapPos - gapPos / 2;\n rect.left -= localPreX;\n rect.right += localPosX;\n localPreY = preY;\n localPosY = posY;\n } else if (isTower) {\n gapPre = i === 0 ? 0 : rect.top - all[i - 1][0].bottom;\n gapPos = i === n ? 0 : all[i + 1][0].top - rect.bottom;\n // we don't need to divide the leading gap, as half the gap will\n // already have been assigned to the preceeding child in the\n // previous loop iteration.\n localPreY = i === 0 ? 0 : gapPre === 0 ? 0 : gapPre;\n localPosY = i === n ? 0 : gapPos === 0 ? 0 : gapPos - gapPos / 2;\n rect.top -= localPreY;\n rect.bottom += localPosY;\n localPreX = preX;\n localPosX = posX;\n }\n\n const componentMeasurements = measureComponent(\n child,\n rect,\n el,\n measurements\n );\n\n const childType = typeOf(child) as string;\n if (isContainer(childType)) {\n collectChildMeasurements(\n child,\n measurements,\n dropTargets,\n localPreX,\n localPosX,\n localPreY,\n localPosY\n );\n }\n return componentMeasurements;\n }\n );\n if (childMeasurements.length) {\n measurements[path].children = expandedMeasurements;\n }\n}\n\nfunction omitDragging(component: ReactElement) {\n const { id } = getProps(component);\n const el = document.getElementById(id);\n if (el) {\n return el.dataset.dragging !== \"true\";\n } else {\n console.warn(`BoxModel: no element found with id #${id}`);\n return false;\n }\n}\n\nfunction measureComponentDomElement(\n component: LayoutModel\n): [DragDropRect, HTMLElement, LayoutModel] {\n const { id } = getProps(component) as { id: string };\n if (id === undefined) {\n throw Error(\"`BoxModel.measureComponentElement, component has no id\");\n }\n const el = document.getElementById(id);\n if (!el) {\n throw Error(\n \"BoxModel.measureComponentElement, no DOM element found for component\"\n );\n }\n // Note: height and width are not required for dropTarget identification, but\n // are used in sizing calculations on drop\n const { top, left, right, bottom, height, width } =\n el.getBoundingClientRect();\n let scrolling = undefined;\n const type = typeOf(component) as string;\n if (isContainer(type)) {\n const scrollHeight = el.scrollHeight;\n if (scrollHeight > height) {\n scrolling = { id, scrollHeight, scrollTop: el.scrollTop };\n }\n }\n return [\n {\n top: Math.round(top),\n left: Math.round(left),\n right: Math.round(right),\n bottom: Math.round(bottom),\n height: Math.round(height),\n width: Math.round(width),\n scrolling,\n },\n el,\n component,\n ];\n}\n\nfunction allBoxesContainingPoint(\n component: LayoutModel,\n measurements: Measurements,\n x: number,\n y: number,\n dropTargets?: string[],\n boxes: LayoutModel[] = []\n): LayoutModel[] {\n const {\n children,\n \"data-path\": dataPath,\n path = dataPath,\n } = getProps(component);\n\n const type = typeOf(component) as string;\n const rect = measurements[path];\n if (!boxContainsPoint(rect, x, y)) return boxes;\n\n if (dropTargets && dropTargets.length) {\n if (dropTargets.includes(path)) {\n boxes.push(component);\n } else if (\n dropTargets.some((dropTargetPath) => dropTargetPath.startsWith(path))\n ) {\n // keep going\n } else {\n return boxes;\n }\n } else {\n boxes.push(component);\n }\n\n if (!isContainer(type)) {\n return boxes;\n }\n\n if (rect.header && boxContainsPoint(rect.header, x, y)) {\n return boxes;\n }\n\n if (rect.scrolling) {\n scrollIntoViewIfNeccesary(rect, x, y);\n }\n\n for (let i = 0; i < children.length; i++) {\n if (type === \"Stack\" && component.props.active !== i) {\n continue;\n }\n const nestedBoxes = allBoxesContainingPoint(\n children[i],\n measurements,\n x,\n y,\n dropTargets\n );\n if (nestedBoxes.length) {\n return boxes.concat(nestedBoxes);\n }\n }\n return boxes;\n}\n\nfunction scrollIntoViewIfNeccesary(\n { top, bottom, scrolling }: DragDropRect,\n x: number,\n y: number\n) {\n if (scrolling) {\n const { id, scrollTop, scrollHeight } = scrolling;\n const height = bottom - top;\n if (scrollTop === 0 && bottom - y < 50) {\n const scrollMax = scrollHeight - height;\n const el = document.getElementById(id) as HTMLElement;\n el.scrollTo({ left: 0, top: scrollMax, behavior: \"smooth\" });\n scrolling.scrollTop = scrollMax;\n } else if (scrollTop > 0 && y - top < 50) {\n const el = document.getElementById(id) as HTMLElement;\n el.scrollTo({ left: 0, top: 0, behavior: \"smooth\" });\n scrolling.scrollTop = 0;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n"],"names":["left","right","header"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BoxModel.js","sources":["../../src/drag-drop/BoxModel.ts"],"sourcesContent":["import { ReactElement } from \"react\";\nimport { boxContainsPoint, isContainer } from \"@vuu-ui/vuu-utils\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { getProps, typeOf } from \"../utils\";\nimport { DragDropRect, DropPos, RelativePosition } from \"./dragDropTypes\";\n\nexport const positionValues = {\n north: 1,\n east: 2,\n south: 4,\n west: 8,\n header: 16,\n centre: 32,\n absolute: 64,\n};\n\nexport const RelativeDropPosition = {\n AFTER: \"after\" as RelativePosition,\n BEFORE: \"before\" as RelativePosition,\n};\n\nexport const Position = Object.freeze({\n North: _position(\"north\"),\n East: _position(\"east\"),\n South: _position(\"south\"),\n West: _position(\"west\"),\n Header: _position(\"header\"),\n Centre: _position(\"centre\"),\n Absolute: _position(\"absolute\"),\n});\n\nfunction _position(str: keyof typeof positionValues) {\n return Object.freeze({\n offset:\n str === \"north\" || str === \"west\"\n ? 0\n : str === \"south\" || str === \"east\"\n ? 1\n : NaN,\n valueOf: function () {\n return positionValues[str];\n },\n toString: function () {\n return str;\n },\n North: str === \"north\",\n South: str === \"south\",\n East: str === \"east\",\n West: str === \"west\",\n Header: str === \"header\",\n Centre: str === \"centre\",\n NorthOrSouth: str === \"north\" || str === \"south\",\n EastOrWest: str === \"east\" || str === \"west\",\n NorthOrWest: str === \"north\" || str === \"west\",\n SouthOrEast: str === \"east\" || str === \"south\",\n Absolute: str === \"absolute\",\n });\n}\n\nconst NORTH = Position.North,\n SOUTH = Position.South,\n EAST = Position.East,\n WEST = Position.West,\n HEADER = Position.Header,\n CENTRE = Position.Centre;\n\nexport interface Measurements {\n [key: string]: DragDropRect;\n}\n\nexport class BoxModel {\n //TODO we should accept initial let,top offsets here\n // if dropTargets are supplied, we will only allow drop operations directly on these targets\n // TODO we will need to make this more flexible e.g allowing drop anywhere within these target\n static measure(\n model: ReactElement,\n dropTargetPaths: string[] = []\n ): Measurements {\n const measurements: Measurements = {};\n measureRootComponent(model, measurements, dropTargetPaths);\n return measurements;\n }\n\n static allBoxesContainingPoint(\n layout: LayoutModel,\n measurements: Measurements,\n x: number,\n y: number,\n validDropTargets?: string[]\n ) {\n return allBoxesContainingPoint(\n layout,\n measurements,\n x,\n y,\n validDropTargets\n ).reverse();\n }\n}\n\nexport function pointPositionWithinRect(\n x: number,\n y: number,\n rect: DragDropRect,\n borderZone = 30\n) {\n const width = rect.right - rect.left;\n const height = rect.bottom - rect.top;\n const posX = x - rect.left;\n const posY = y - rect.top;\n let closeToTheEdge = 0;\n\n if (posX < borderZone) closeToTheEdge += 8;\n if (posX > width - borderZone) closeToTheEdge += 2;\n if (posY < borderZone) closeToTheEdge += 1;\n if (posY > height - borderZone) closeToTheEdge += 4;\n\n return { pctX: posX / width, pctY: posY / height, closeToTheEdge };\n}\n\nexport function getPosition(\n x: number,\n y: number,\n rect: DragDropRect,\n targetOrientation?: \"row\" | \"column\"\n): DropPos {\n const { BEFORE, AFTER } = RelativeDropPosition;\n const { pctX, pctY, closeToTheEdge } = pointPositionWithinRect(x, y, rect);\n let position;\n let tab;\n\n if (targetOrientation === \"row\") {\n position = pctX < 0.5 ? WEST : EAST;\n } else if (rect.header && boxContainsPoint(rect.header, x, y)) {\n position = HEADER;\n\n if (rect.Stack) {\n const tabCount = rect.Stack.length;\n if (tabCount === 0) {\n tab = {\n index: -1,\n left: rect.left,\n positionRelativeToTab: AFTER,\n width: 0,\n };\n } else {\n //TODO account for gaps between tabs\n const targetTab = rect.Stack.find(\n ({ left, right }) => x >= left && x <= right\n );\n if (targetTab) {\n const tabWidth = targetTab.right - targetTab.left;\n tab = {\n index: rect.Stack.indexOf(targetTab),\n left: targetTab.left,\n positionRelativeToTab:\n (x - targetTab.left) / tabWidth < 0.5 ? BEFORE : AFTER,\n width: tabWidth,\n };\n } else {\n const lastTab = rect.Stack[tabCount - 1];\n tab = {\n left: lastTab.right,\n width: 0,\n index: tabCount,\n positionRelativeToTab: AFTER,\n };\n }\n }\n } else if (rect.header.titleWidth) {\n const tabWidth = rect.header.titleWidth;\n tab = {\n index: -1,\n left: rect.left,\n positionRelativeToTab:\n (x - rect.left) / tabWidth < 0.5 ? BEFORE : AFTER,\n width: tabWidth,\n };\n } else {\n tab = {\n left: rect.left,\n width: 0,\n positionRelativeToTab: BEFORE,\n index: -1,\n };\n }\n } else {\n position = getPositionWithinBox(x, y, rect, pctX, pctY);\n }\n return { position: position!, x, y, closeToTheEdge, tab };\n}\n\nfunction getPositionWithinBox(\n x: number,\n y: number,\n rect: DragDropRect,\n pctX: number,\n pctY: number\n) {\n const centerBox = getCenteredBox(rect, 0.2);\n if (boxContainsPoint(centerBox, x, y)) {\n return CENTRE;\n } else {\n const quadrant = `${pctY < 0.5 ? \"north\" : \"south\"}${\n pctX < 0.5 ? \"west\" : \"east\"\n }`;\n\n switch (quadrant) {\n case \"northwest\":\n return pctX > pctY ? NORTH : WEST;\n case \"northeast\":\n return 1 - pctX > pctY ? NORTH : EAST;\n case \"southeast\":\n return pctX > pctY ? EAST : SOUTH;\n case \"southwest\":\n return 1 - pctX > pctY ? WEST : SOUTH;\n default:\n }\n }\n}\n\nfunction getCenteredBox(\n { right, left, top, bottom }: DragDropRect,\n pctSize: number\n) {\n const pctOffset = (1 - pctSize) / 2;\n const w = (right - left) * pctOffset;\n const h = (bottom - top) * pctOffset;\n return { left: left + w, top: top + h, right: right - w, bottom: bottom - h };\n}\n\nfunction measureRootComponent(\n rootComponent: ReactElement,\n measurements: Measurements,\n dropTargets: string[]\n) {\n const {\n id,\n \"data-path\": dataPath,\n path = dataPath,\n } = getProps(rootComponent);\n const type = typeOf(rootComponent) as string;\n\n if (id && path) {\n const [rect, el] = measureComponentDomElement(rootComponent);\n measureComponent(rootComponent, rect, el, measurements);\n if (isContainer(type)) {\n collectChildMeasurements(rootComponent, measurements, dropTargets);\n }\n }\n}\n\nfunction measureComponent(\n component: LayoutModel,\n rect: DragDropRect,\n el: HTMLElement,\n measurements: Measurements\n) {\n const {\n \"data-path\": dataPath,\n path = dataPath,\n header,\n } = getProps(component);\n\n measurements[path] = rect;\n\n const type = typeOf(component);\n if (header || type === \"Stack\") {\n const query = type === \"Stack\" ? \".vuuTabstrip\" : \".vuuHeader\";\n const headerEl = el.querySelector(query);\n if (headerEl) {\n const { top, left, right, bottom } = headerEl.getBoundingClientRect();\n measurements[path].header = {\n top: Math.round(top),\n left: Math.round(left),\n right: Math.round(right),\n bottom: Math.round(bottom),\n };\n if (type === \"Stack\") {\n measurements[path].Stack = Array.from(\n headerEl.querySelectorAll(\".vuuTab\")\n )\n .map((tab) => tab.getBoundingClientRect())\n .map(({ left, right }) => ({ left, right }));\n } else {\n const titleEl = headerEl.querySelector('[class^=\"vuuHeader-title\"]');\n const { header } = measurements[path];\n if (titleEl && header) {\n header.titleWidth = titleEl.clientWidth;\n }\n }\n }\n }\n\n return measurements[path];\n}\n\nfunction collectChildMeasurements(\n component: LayoutModel,\n measurements: Measurements,\n dropTargets: string[],\n preX = 0,\n posX = 0,\n preY = 0,\n posY = 0\n) {\n const {\n children,\n \"data-path\": dataPath,\n path = dataPath,\n style,\n active = 0,\n } = getProps(component);\n\n const type = typeOf(component);\n const isFlexbox = type === \"Flexbox\";\n const isStack = type === \"Stack\";\n const isTower = isFlexbox && style.flexDirection === \"column\";\n const isTerrace = isFlexbox && style.flexDirection === \"row\";\n\n const childrenToMeasure = isStack\n ? children.filter((_child: ReactElement, idx: number) => idx === active)\n : children.filter(omitDragging);\n\n type measuredTuple = [DragDropRect, HTMLElement, ReactElement];\n // Collect all the measurements in first pass ...\n const childMeasurements: measuredTuple[] = childrenToMeasure.map(\n (child: ReactElement) => {\n const [rect, el] = measureComponentDomElement(child);\n\n return [\n {\n ...rect,\n top: rect.top - preY,\n right: rect.right + posX,\n bottom: rect.bottom + posY,\n left: rect.left - preX,\n },\n el,\n child,\n ];\n }\n );\n\n // ...so that, in the second pass, we can identify gaps ...\n const expandedMeasurements = childMeasurements.map(\n ([rect, el, child], i, all) => {\n // generate a 'local' splitter adjustment for children adjacent to splitters\n let localPreX;\n let localPosX;\n let localPreY;\n let localPosY;\n let gapPre;\n let gapPos;\n const n = all.length - 1;\n if (isTerrace) {\n gapPre = i === 0 ? 0 : rect.left - all[i - 1][0].right;\n gapPos = i === n ? 0 : all[i + 1][0].left - rect.right;\n // we don't need to divide the leading gap, as half the gap will\n // already have been assigned to the preceeding child in the\n // previous loop iteration.\n localPreX = i === 0 ? 0 : gapPre === 0 ? 0 : gapPre;\n localPosX = i === n ? 0 : gapPos === 0 ? 0 : gapPos - gapPos / 2;\n rect.left -= localPreX;\n rect.right += localPosX;\n localPreY = preY;\n localPosY = posY;\n } else if (isTower) {\n gapPre = i === 0 ? 0 : rect.top - all[i - 1][0].bottom;\n gapPos = i === n ? 0 : all[i + 1][0].top - rect.bottom;\n // we don't need to divide the leading gap, as half the gap will\n // already have been assigned to the preceeding child in the\n // previous loop iteration.\n localPreY = i === 0 ? 0 : gapPre === 0 ? 0 : gapPre;\n localPosY = i === n ? 0 : gapPos === 0 ? 0 : gapPos - gapPos / 2;\n rect.top -= localPreY;\n rect.bottom += localPosY;\n localPreX = preX;\n localPosX = posX;\n }\n\n const componentMeasurements = measureComponent(\n child,\n rect,\n el,\n measurements\n );\n\n const childType = typeOf(child) as string;\n if (isContainer(childType)) {\n collectChildMeasurements(\n child,\n measurements,\n dropTargets,\n localPreX,\n localPosX,\n localPreY,\n localPosY\n );\n }\n return componentMeasurements;\n }\n );\n if (childMeasurements.length) {\n measurements[path].children = expandedMeasurements;\n }\n}\n\nfunction omitDragging(component: ReactElement) {\n const { id } = getProps(component);\n const el = document.getElementById(id);\n if (el) {\n return el.dataset.dragging !== \"true\";\n } else {\n console.warn(`BoxModel: no element found with id #${id}`);\n return false;\n }\n}\n\nfunction measureComponentDomElement(\n component: LayoutModel\n): [DragDropRect, HTMLElement, LayoutModel] {\n const { id } = getProps(component) as { id: string };\n if (id === undefined) {\n throw Error(\"`BoxModel.measureComponentElement, component has no id\");\n }\n const el = document.getElementById(id);\n if (!el) {\n throw Error(\n \"BoxModel.measureComponentElement, no DOM element found for component\"\n );\n }\n // Note: height and width are not required for dropTarget identification, but\n // are used in sizing calculations on drop\n const { top, left, right, bottom, height, width } =\n el.getBoundingClientRect();\n let scrolling = undefined;\n const type = typeOf(component) as string;\n if (isContainer(type)) {\n const scrollHeight = el.scrollHeight;\n if (scrollHeight > height) {\n scrolling = { id, scrollHeight, scrollTop: el.scrollTop };\n }\n }\n return [\n {\n top: Math.round(top),\n left: Math.round(left),\n right: Math.round(right),\n bottom: Math.round(bottom),\n height: Math.round(height),\n width: Math.round(width),\n scrolling,\n },\n el,\n component,\n ];\n}\n\nfunction allBoxesContainingPoint(\n component: LayoutModel,\n measurements: Measurements,\n x: number,\n y: number,\n dropTargets?: string[],\n boxes: LayoutModel[] = []\n): LayoutModel[] {\n const {\n children,\n \"data-path\": dataPath,\n path = dataPath,\n } = getProps(component);\n\n const type = typeOf(component) as string;\n const rect = measurements[path];\n if (!boxContainsPoint(rect, x, y)) return boxes;\n\n if (dropTargets && dropTargets.length) {\n if (dropTargets.includes(path)) {\n boxes.push(component);\n } else if (\n dropTargets.some((dropTargetPath) => dropTargetPath.startsWith(path))\n ) {\n // keep going\n } else {\n return boxes;\n }\n } else {\n boxes.push(component);\n }\n\n if (!isContainer(type)) {\n return boxes;\n }\n\n if (rect.header && boxContainsPoint(rect.header, x, y)) {\n return boxes;\n }\n\n if (rect.scrolling) {\n scrollIntoViewIfNeccesary(rect, x, y);\n }\n\n for (let i = 0; i < children.length; i++) {\n if (type === \"Stack\" && component.props.active !== i) {\n continue;\n }\n const nestedBoxes = allBoxesContainingPoint(\n children[i],\n measurements,\n x,\n y,\n dropTargets\n );\n if (nestedBoxes.length) {\n return boxes.concat(nestedBoxes);\n }\n }\n return boxes;\n}\n\nfunction scrollIntoViewIfNeccesary(\n { top, bottom, scrolling }: DragDropRect,\n x: number,\n y: number\n) {\n if (scrolling) {\n const { id, scrollTop, scrollHeight } = scrolling;\n const height = bottom - top;\n if (scrollTop === 0 && bottom - y < 50) {\n const scrollMax = scrollHeight - height;\n const el = document.getElementById(id) as HTMLElement;\n el.scrollTo({ left: 0, top: scrollMax, behavior: \"smooth\" });\n scrolling.scrollTop = scrollMax;\n } else if (scrollTop > 0 && y - top < 50) {\n const el = document.getElementById(id) as HTMLElement;\n el.scrollTo({ left: 0, top: 0, behavior: \"smooth\" });\n scrolling.scrollTop = 0;\n } else {\n return false;\n }\n } else {\n return false;\n }\n}\n"],"names":["left","right","header"],"mappings":";;;;;AAMO,MAAM,cAAiB,GAAA;AAAA,EAC5B,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA,CAAA;AAAA,EACN,KAAO,EAAA,CAAA;AAAA,EACP,IAAM,EAAA,CAAA;AAAA,EACN,MAAQ,EAAA,EAAA;AAAA,EACR,MAAQ,EAAA,EAAA;AAAA,EACR,QAAU,EAAA,EAAA;AACZ,EAAA;AAEO,MAAM,oBAAuB,GAAA;AAAA,EAClC,KAAO,EAAA,OAAA;AAAA,EACP,MAAQ,EAAA,QAAA;AACV,EAAA;AAEa,MAAA,QAAA,GAAW,OAAO,MAAO,CAAA;AAAA,EACpC,KAAA,EAAO,UAAU,OAAO,CAAA;AAAA,EACxB,IAAA,EAAM,UAAU,MAAM,CAAA;AAAA,EACtB,KAAA,EAAO,UAAU,OAAO,CAAA;AAAA,EACxB,IAAA,EAAM,UAAU,MAAM,CAAA;AAAA,EACtB,MAAA,EAAQ,UAAU,QAAQ,CAAA;AAAA,EAC1B,MAAA,EAAQ,UAAU,QAAQ,CAAA;AAAA,EAC1B,QAAA,EAAU,UAAU,UAAU,CAAA;AAChC,CAAC,EAAA;AAED,SAAS,UAAU,GAAkC,EAAA;AACnD,EAAA,OAAO,OAAO,MAAO,CAAA;AAAA,IACnB,MAAA,EACE,GAAQ,KAAA,OAAA,IAAW,GAAQ,KAAA,MAAA,GACvB,IACA,GAAQ,KAAA,OAAA,IAAW,GAAQ,KAAA,MAAA,GAC3B,CACA,GAAA,GAAA;AAAA,IACN,SAAS,WAAY;AACnB,MAAA,OAAO,eAAe,GAAG,CAAA,CAAA;AAAA,KAC3B;AAAA,IACA,UAAU,WAAY;AACpB,MAAO,OAAA,GAAA,CAAA;AAAA,KACT;AAAA,IACA,OAAO,GAAQ,KAAA,OAAA;AAAA,IACf,OAAO,GAAQ,KAAA,OAAA;AAAA,IACf,MAAM,GAAQ,KAAA,MAAA;AAAA,IACd,MAAM,GAAQ,KAAA,MAAA;AAAA,IACd,QAAQ,GAAQ,KAAA,QAAA;AAAA,IAChB,QAAQ,GAAQ,KAAA,QAAA;AAAA,IAChB,YAAA,EAAc,GAAQ,KAAA,OAAA,IAAW,GAAQ,KAAA,OAAA;AAAA,IACzC,UAAA,EAAY,GAAQ,KAAA,MAAA,IAAU,GAAQ,KAAA,MAAA;AAAA,IACtC,WAAA,EAAa,GAAQ,KAAA,OAAA,IAAW,GAAQ,KAAA,MAAA;AAAA,IACxC,WAAA,EAAa,GAAQ,KAAA,MAAA,IAAU,GAAQ,KAAA,OAAA;AAAA,IACvC,UAAU,GAAQ,KAAA,UAAA;AAAA,GACnB,CAAA,CAAA;AACH,CAAA;AAEA,MAAM,QAAQ,QAAS,CAAA,KAAA,EACrB,KAAQ,GAAA,QAAA,CAAS,OACjB,IAAO,GAAA,QAAA,CAAS,IAChB,EAAA,IAAA,GAAO,SAAS,IAChB,EAAA,MAAA,GAAS,QAAS,CAAA,MAAA,EAClB,SAAS,QAAS,CAAA,MAAA,CAAA;AAMb,MAAM,QAAS,CAAA;AAAA;AAAA;AAAA;AAAA,EAIpB,OAAO,OAAA,CACL,KACA,EAAA,eAAA,GAA4B,EACd,EAAA;AACd,IAAA,MAAM,eAA6B,EAAC,CAAA;AACpC,IAAqB,oBAAA,CAAA,KAAA,EAAO,cAAc,eAAe,CAAA,CAAA;AACzD,IAAO,OAAA,YAAA,CAAA;AAAA,GACT;AAAA,EAEA,OAAO,uBACL,CAAA,MAAA,EACA,YACA,EAAA,CAAA,EACA,GACA,gBACA,EAAA;AACA,IAAO,OAAA,uBAAA;AAAA,MACL,MAAA;AAAA,MACA,YAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,gBAAA;AAAA,MACA,OAAQ,EAAA,CAAA;AAAA,GACZ;AACF,CAAA;AAEO,SAAS,uBACd,CAAA,CAAA,EACA,CACA,EAAA,IAAA,EACA,aAAa,EACb,EAAA;AACA,EAAM,MAAA,KAAA,GAAQ,IAAK,CAAA,KAAA,GAAQ,IAAK,CAAA,IAAA,CAAA;AAChC,EAAM,MAAA,MAAA,GAAS,IAAK,CAAA,MAAA,GAAS,IAAK,CAAA,GAAA,CAAA;AAClC,EAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,IAAA,CAAA;AACtB,EAAM,MAAA,IAAA,GAAO,IAAI,IAAK,CAAA,GAAA,CAAA;AACtB,EAAA,IAAI,cAAiB,GAAA,CAAA,CAAA;AAErB,EAAA,IAAI,IAAO,GAAA,UAAA;AAAY,IAAkB,cAAA,IAAA,CAAA,CAAA;AACzC,EAAA,IAAI,OAAO,KAAQ,GAAA,UAAA;AAAY,IAAkB,cAAA,IAAA,CAAA,CAAA;AACjD,EAAA,IAAI,IAAO,GAAA,UAAA;AAAY,IAAkB,cAAA,IAAA,CAAA,CAAA;AACzC,EAAA,IAAI,OAAO,MAAS,GAAA,UAAA;AAAY,IAAkB,cAAA,IAAA,CAAA,CAAA;AAElD,EAAA,OAAO,EAAE,IAAM,EAAA,IAAA,GAAO,OAAO,IAAM,EAAA,IAAA,GAAO,QAAQ,cAAe,EAAA,CAAA;AACnE,CAAA;AAEO,SAAS,WACd,CAAA,CAAA,EACA,CACA,EAAA,IAAA,EACA,iBACS,EAAA;AACT,EAAM,MAAA,EAAE,MAAQ,EAAA,KAAA,EAAU,GAAA,oBAAA,CAAA;AAC1B,EAAM,MAAA,EAAE,MAAM,IAAM,EAAA,cAAA,KAAmB,uBAAwB,CAAA,CAAA,EAAG,GAAG,IAAI,CAAA,CAAA;AACzE,EAAI,IAAA,QAAA,CAAA;AACJ,EAAI,IAAA,GAAA,CAAA;AAEJ,EAAA,IAAI,sBAAsB,KAAO,EAAA;AAC/B,IAAW,QAAA,GAAA,IAAA,GAAO,MAAM,IAAO,GAAA,IAAA,CAAA;AAAA,GACjC,MAAA,IAAW,KAAK,MAAU,IAAA,gBAAA,CAAiB,KAAK,MAAQ,EAAA,CAAA,EAAG,CAAC,CAAG,EAAA;AAC7D,IAAW,QAAA,GAAA,MAAA,CAAA;AAEX,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAM,MAAA,QAAA,GAAW,KAAK,KAAM,CAAA,MAAA,CAAA;AAC5B,MAAA,IAAI,aAAa,CAAG,EAAA;AAClB,QAAM,GAAA,GAAA;AAAA,UACJ,KAAO,EAAA,CAAA,CAAA;AAAA,UACP,MAAM,IAAK,CAAA,IAAA;AAAA,UACX,qBAAuB,EAAA,KAAA;AAAA,UACvB,KAAO,EAAA,CAAA;AAAA,SACT,CAAA;AAAA,OACK,MAAA;AAEL,QAAM,MAAA,SAAA,GAAY,KAAK,KAAM,CAAA,IAAA;AAAA,UAC3B,CAAC,EAAE,IAAA,EAAM,OAAY,KAAA,CAAA,IAAK,QAAQ,CAAK,IAAA,KAAA;AAAA,SACzC,CAAA;AACA,QAAA,IAAI,SAAW,EAAA;AACb,UAAM,MAAA,QAAA,GAAW,SAAU,CAAA,KAAA,GAAQ,SAAU,CAAA,IAAA,CAAA;AAC7C,UAAM,GAAA,GAAA;AAAA,YACJ,KAAO,EAAA,IAAA,CAAK,KAAM,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,YACnC,MAAM,SAAU,CAAA,IAAA;AAAA,YAChB,wBACG,CAAI,GAAA,SAAA,CAAU,IAAQ,IAAA,QAAA,GAAW,MAAM,MAAS,GAAA,KAAA;AAAA,YACnD,KAAO,EAAA,QAAA;AAAA,WACT,CAAA;AAAA,SACK,MAAA;AACL,UAAA,MAAM,OAAU,GAAA,IAAA,CAAK,KAAM,CAAA,QAAA,GAAW,CAAC,CAAA,CAAA;AACvC,UAAM,GAAA,GAAA;AAAA,YACJ,MAAM,OAAQ,CAAA,KAAA;AAAA,YACd,KAAO,EAAA,CAAA;AAAA,YACP,KAAO,EAAA,QAAA;AAAA,YACP,qBAAuB,EAAA,KAAA;AAAA,WACzB,CAAA;AAAA,SACF;AAAA,OACF;AAAA,KACF,MAAA,IAAW,IAAK,CAAA,MAAA,CAAO,UAAY,EAAA;AACjC,MAAM,MAAA,QAAA,GAAW,KAAK,MAAO,CAAA,UAAA,CAAA;AAC7B,MAAM,GAAA,GAAA;AAAA,QACJ,KAAO,EAAA,CAAA,CAAA;AAAA,QACP,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,wBACG,CAAI,GAAA,IAAA,CAAK,IAAQ,IAAA,QAAA,GAAW,MAAM,MAAS,GAAA,KAAA;AAAA,QAC9C,KAAO,EAAA,QAAA;AAAA,OACT,CAAA;AAAA,KACK,MAAA;AACL,MAAM,GAAA,GAAA;AAAA,QACJ,MAAM,IAAK,CAAA,IAAA;AAAA,QACX,KAAO,EAAA,CAAA;AAAA,QACP,qBAAuB,EAAA,MAAA;AAAA,QACvB,KAAO,EAAA,CAAA,CAAA;AAAA,OACT,CAAA;AAAA,KACF;AAAA,GACK,MAAA;AACL,IAAA,QAAA,GAAW,oBAAqB,CAAA,CAAA,EAAG,CAAG,EAAA,IAAA,EAAM,MAAM,IAAI,CAAA,CAAA;AAAA,GACxD;AACA,EAAA,OAAO,EAAE,QAAA,EAAqB,CAAG,EAAA,CAAA,EAAG,gBAAgB,GAAI,EAAA,CAAA;AAC1D,CAAA;AAEA,SAAS,oBACP,CAAA,CAAA,EACA,CACA,EAAA,IAAA,EACA,MACA,IACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAY,cAAe,CAAA,IAAA,EAAM,GAAG,CAAA,CAAA;AAC1C,EAAA,IAAI,gBAAiB,CAAA,SAAA,EAAW,CAAG,EAAA,CAAC,CAAG,EAAA;AACrC,IAAO,OAAA,MAAA,CAAA;AAAA,GACF,MAAA;AACL,IAAM,MAAA,QAAA,GAAW,CAAG,EAAA,IAAA,GAAO,GAAM,GAAA,OAAA,GAAU,OAAO,CAChD,EAAA,IAAA,GAAO,GAAM,GAAA,MAAA,GAAS,MACxB,CAAA,CAAA,CAAA;AAEA,IAAA,QAAQ,QAAU;AAAA,MAChB,KAAK,WAAA;AACH,QAAO,OAAA,IAAA,GAAO,OAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,MAC/B,KAAK,WAAA;AACH,QAAO,OAAA,CAAA,GAAI,IAAO,GAAA,IAAA,GAAO,KAAQ,GAAA,IAAA,CAAA;AAAA,MACnC,KAAK,WAAA;AACH,QAAO,OAAA,IAAA,GAAO,OAAO,IAAO,GAAA,KAAA,CAAA;AAAA,MAC9B,KAAK,WAAA;AACH,QAAO,OAAA,CAAA,GAAI,IAAO,GAAA,IAAA,GAAO,IAAO,GAAA,KAAA,CAAA;AAClC,KACF;AAAA,GACF;AACF,CAAA;AAEA,SAAS,eACP,EAAE,KAAA,EAAO,MAAM,GAAK,EAAA,MAAA,IACpB,OACA,EAAA;AACA,EAAM,MAAA,SAAA,GAAA,CAAa,IAAI,OAAW,IAAA,CAAA,CAAA;AAClC,EAAM,MAAA,CAAA,GAAA,CAAK,QAAQ,IAAQ,IAAA,SAAA,CAAA;AAC3B,EAAM,MAAA,CAAA,GAAA,CAAK,SAAS,GAAO,IAAA,SAAA,CAAA;AAC3B,EAAA,OAAO,EAAE,IAAA,EAAM,IAAO,GAAA,CAAA,EAAG,GAAK,EAAA,GAAA,GAAM,CAAG,EAAA,KAAA,EAAO,KAAQ,GAAA,CAAA,EAAG,MAAQ,EAAA,MAAA,GAAS,CAAE,EAAA,CAAA;AAC9E,CAAA;AAEA,SAAS,oBAAA,CACP,aACA,EAAA,YAAA,EACA,WACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,EAAA;AAAA,IACA,WAAa,EAAA,QAAA;AAAA,IACb,IAAO,GAAA,QAAA;AAAA,GACT,GAAI,SAAS,aAAa,CAAA,CAAA;AAC1B,EAAM,MAAA,IAAA,GAAO,OAAO,aAAa,CAAA,CAAA;AAEjC,EAAA,IAAI,MAAM,IAAM,EAAA;AACd,IAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,2BAA2B,aAAa,CAAA,CAAA;AAC3D,IAAiB,gBAAA,CAAA,aAAA,EAAe,IAAM,EAAA,EAAA,EAAI,YAAY,CAAA,CAAA;AACtD,IAAI,IAAA,WAAA,CAAY,IAAI,CAAG,EAAA;AACrB,MAAyB,wBAAA,CAAA,aAAA,EAAe,cAAc,WAAW,CAAA,CAAA;AAAA,KACnE;AAAA,GACF;AACF,CAAA;AAEA,SAAS,gBACP,CAAA,SAAA,EACA,IACA,EAAA,EAAA,EACA,YACA,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,WAAa,EAAA,QAAA;AAAA,IACb,IAAO,GAAA,QAAA;AAAA,IACP,MAAA;AAAA,GACF,GAAI,SAAS,SAAS,CAAA,CAAA;AAEtB,EAAA,YAAA,CAAa,IAAI,CAAI,GAAA,IAAA,CAAA;AAErB,EAAM,MAAA,IAAA,GAAO,OAAO,SAAS,CAAA,CAAA;AAC7B,EAAI,IAAA,MAAA,IAAU,SAAS,OAAS,EAAA;AAC9B,IAAM,MAAA,KAAA,GAAQ,IAAS,KAAA,OAAA,GAAU,cAAiB,GAAA,YAAA,CAAA;AAClD,IAAM,MAAA,QAAA,GAAW,EAAG,CAAA,aAAA,CAAc,KAAK,CAAA,CAAA;AACvC,IAAA,IAAI,QAAU,EAAA;AACZ,MAAA,MAAM,EAAE,GAAK,EAAA,IAAA,EAAM,OAAO,MAAO,EAAA,GAAI,SAAS,qBAAsB,EAAA,CAAA;AACpE,MAAa,YAAA,CAAA,IAAI,EAAE,MAAS,GAAA;AAAA,QAC1B,GAAA,EAAK,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,QACnB,IAAA,EAAM,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA;AAAA,QACrB,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,QACvB,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA,OAC3B,CAAA;AACA,MAAA,IAAI,SAAS,OAAS,EAAA;AACpB,QAAa,YAAA,CAAA,IAAI,CAAE,CAAA,KAAA,GAAQ,KAAM,CAAA,IAAA;AAAA,UAC/B,QAAA,CAAS,iBAAiB,SAAS,CAAA;AAAA,SACrC,CACG,IAAI,CAAC,GAAA,KAAQ,IAAI,qBAAsB,EAAC,EACxC,GAAI,CAAA,CAAC,EAAE,IAAAA,EAAAA,KAAAA,EAAM,OAAAC,MAAM,EAAA,MAAO,EAAE,IAAAD,EAAAA,KAAAA,EAAM,KAAAC,EAAAA,MAAAA,EAAQ,CAAA,CAAA,CAAA;AAAA,OACxC,MAAA;AACL,QAAM,MAAA,OAAA,GAAU,QAAS,CAAA,aAAA,CAAc,4BAA4B,CAAA,CAAA;AACnE,QAAA,MAAM,EAAE,MAAA,EAAAC,OAAO,EAAA,GAAI,aAAa,IAAI,CAAA,CAAA;AACpC,QAAA,IAAI,WAAWA,OAAQ,EAAA;AACrB,UAAAA,OAAAA,CAAO,aAAa,OAAQ,CAAA,WAAA,CAAA;AAAA,SAC9B;AAAA,OACF;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,aAAa,IAAI,CAAA,CAAA;AAC1B,CAAA;AAEA,SAAS,wBAAA,CACP,SACA,EAAA,YAAA,EACA,WACA,EAAA,IAAA,GAAO,CACP,EAAA,IAAA,GAAO,CACP,EAAA,IAAA,GAAO,CACP,EAAA,IAAA,GAAO,CACP,EAAA;AACA,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,WAAa,EAAA,QAAA;AAAA,IACb,IAAO,GAAA,QAAA;AAAA,IACP,KAAA;AAAA,IACA,MAAS,GAAA,CAAA;AAAA,GACX,GAAI,SAAS,SAAS,CAAA,CAAA;AAEtB,EAAM,MAAA,IAAA,GAAO,OAAO,SAAS,CAAA,CAAA;AAC7B,EAAA,MAAM,YAAY,IAAS,KAAA,SAAA,CAAA;AAC3B,EAAA,MAAM,UAAU,IAAS,KAAA,OAAA,CAAA;AACzB,EAAM,MAAA,OAAA,GAAU,SAAa,IAAA,KAAA,CAAM,aAAkB,KAAA,QAAA,CAAA;AACrD,EAAM,MAAA,SAAA,GAAY,SAAa,IAAA,KAAA,CAAM,aAAkB,KAAA,KAAA,CAAA;AAEvD,EAAA,MAAM,iBAAoB,GAAA,OAAA,GACtB,QAAS,CAAA,MAAA,CAAO,CAAC,MAAA,EAAsB,GAAgB,KAAA,GAAA,KAAQ,MAAM,CAAA,GACrE,QAAS,CAAA,MAAA,CAAO,YAAY,CAAA,CAAA;AAIhC,EAAA,MAAM,oBAAqC,iBAAkB,CAAA,GAAA;AAAA,IAC3D,CAAC,KAAwB,KAAA;AACvB,MAAA,MAAM,CAAC,IAAA,EAAM,EAAE,CAAA,GAAI,2BAA2B,KAAK,CAAA,CAAA;AAEnD,MAAO,OAAA;AAAA,QACL;AAAA,UACE,GAAG,IAAA;AAAA,UACH,GAAA,EAAK,KAAK,GAAM,GAAA,IAAA;AAAA,UAChB,KAAA,EAAO,KAAK,KAAQ,GAAA,IAAA;AAAA,UACpB,MAAA,EAAQ,KAAK,MAAS,GAAA,IAAA;AAAA,UACtB,IAAA,EAAM,KAAK,IAAO,GAAA,IAAA;AAAA,SACpB;AAAA,QACA,EAAA;AAAA,QACA,KAAA;AAAA,OACF,CAAA;AAAA,KACF;AAAA,GACF,CAAA;AAGA,EAAA,MAAM,uBAAuB,iBAAkB,CAAA,GAAA;AAAA,IAC7C,CAAC,CAAC,IAAA,EAAM,IAAI,KAAK,CAAA,EAAG,GAAG,GAAQ,KAAA;AAE7B,MAAI,IAAA,SAAA,CAAA;AACJ,MAAI,IAAA,SAAA,CAAA;AACJ,MAAI,IAAA,SAAA,CAAA;AACJ,MAAI,IAAA,SAAA,CAAA;AACJ,MAAI,IAAA,MAAA,CAAA;AACJ,MAAI,IAAA,MAAA,CAAA;AACJ,MAAM,MAAA,CAAA,GAAI,IAAI,MAAS,GAAA,CAAA,CAAA;AACvB,MAAA,IAAI,SAAW,EAAA;AACb,QAAS,MAAA,GAAA,CAAA,KAAM,CAAI,GAAA,CAAA,GAAI,IAAK,CAAA,IAAA,GAAO,IAAI,CAAI,GAAA,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,KAAA,CAAA;AACjD,QAAS,MAAA,GAAA,CAAA,KAAM,CAAI,GAAA,CAAA,GAAI,GAAI,CAAA,CAAA,GAAI,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,IAAA,GAAO,IAAK,CAAA,KAAA,CAAA;AAIjD,QAAA,SAAA,GAAY,CAAM,KAAA,CAAA,GAAI,CAAI,GAAA,MAAA,KAAW,IAAI,CAAI,GAAA,MAAA,CAAA;AAC7C,QAAA,SAAA,GAAY,MAAM,CAAI,GAAA,CAAA,GAAI,WAAW,CAAI,GAAA,CAAA,GAAI,SAAS,MAAS,GAAA,CAAA,CAAA;AAC/D,QAAA,IAAA,CAAK,IAAQ,IAAA,SAAA,CAAA;AACb,QAAA,IAAA,CAAK,KAAS,IAAA,SAAA,CAAA;AACd,QAAY,SAAA,GAAA,IAAA,CAAA;AACZ,QAAY,SAAA,GAAA,IAAA,CAAA;AAAA,iBACH,OAAS,EAAA;AAClB,QAAS,MAAA,GAAA,CAAA,KAAM,CAAI,GAAA,CAAA,GAAI,IAAK,CAAA,GAAA,GAAM,IAAI,CAAI,GAAA,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,MAAA,CAAA;AAChD,QAAS,MAAA,GAAA,CAAA,KAAM,CAAI,GAAA,CAAA,GAAI,GAAI,CAAA,CAAA,GAAI,CAAC,CAAE,CAAA,CAAC,CAAE,CAAA,GAAA,GAAM,IAAK,CAAA,MAAA,CAAA;AAIhD,QAAA,SAAA,GAAY,CAAM,KAAA,CAAA,GAAI,CAAI,GAAA,MAAA,KAAW,IAAI,CAAI,GAAA,MAAA,CAAA;AAC7C,QAAA,SAAA,GAAY,MAAM,CAAI,GAAA,CAAA,GAAI,WAAW,CAAI,GAAA,CAAA,GAAI,SAAS,MAAS,GAAA,CAAA,CAAA;AAC/D,QAAA,IAAA,CAAK,GAAO,IAAA,SAAA,CAAA;AACZ,QAAA,IAAA,CAAK,MAAU,IAAA,SAAA,CAAA;AACf,QAAY,SAAA,GAAA,IAAA,CAAA;AACZ,QAAY,SAAA,GAAA,IAAA,CAAA;AAAA,OACd;AAEA,MAAA,MAAM,qBAAwB,GAAA,gBAAA;AAAA,QAC5B,KAAA;AAAA,QACA,IAAA;AAAA,QACA,EAAA;AAAA,QACA,YAAA;AAAA,OACF,CAAA;AAEA,MAAM,MAAA,SAAA,GAAY,OAAO,KAAK,CAAA,CAAA;AAC9B,MAAI,IAAA,WAAA,CAAY,SAAS,CAAG,EAAA;AAC1B,QAAA,wBAAA;AAAA,UACE,KAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA;AAAA,UACA,SAAA;AAAA,SACF,CAAA;AAAA,OACF;AACA,MAAO,OAAA,qBAAA,CAAA;AAAA,KACT;AAAA,GACF,CAAA;AACA,EAAA,IAAI,kBAAkB,MAAQ,EAAA;AAC5B,IAAa,YAAA,CAAA,IAAI,EAAE,QAAW,GAAA,oBAAA,CAAA;AAAA,GAChC;AACF,CAAA;AAEA,SAAS,aAAa,SAAyB,EAAA;AAC7C,EAAA,MAAM,EAAE,EAAA,EAAO,GAAA,QAAA,CAAS,SAAS,CAAA,CAAA;AACjC,EAAM,MAAA,EAAA,GAAK,QAAS,CAAA,cAAA,CAAe,EAAE,CAAA,CAAA;AACrC,EAAA,IAAI,EAAI,EAAA;AACN,IAAO,OAAA,EAAA,CAAG,QAAQ,QAAa,KAAA,MAAA,CAAA;AAAA,GAC1B,MAAA;AACL,IAAQ,OAAA,CAAA,IAAA,CAAK,CAAuC,oCAAA,EAAA,EAAE,CAAE,CAAA,CAAA,CAAA;AACxD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF,CAAA;AAEA,SAAS,2BACP,SAC0C,EAAA;AAC1C,EAAA,MAAM,EAAE,EAAA,EAAO,GAAA,QAAA,CAAS,SAAS,CAAA,CAAA;AACjC,EAAA,IAAI,OAAO,KAAW,CAAA,EAAA;AACpB,IAAA,MAAM,MAAM,wDAAwD,CAAA,CAAA;AAAA,GACtE;AACA,EAAM,MAAA,EAAA,GAAK,QAAS,CAAA,cAAA,CAAe,EAAE,CAAA,CAAA;AACrC,EAAA,IAAI,CAAC,EAAI,EAAA;AACP,IAAM,MAAA,KAAA;AAAA,MACJ,uEAAA;AAAA,KACF,CAAA;AAAA,GACF;AAGA,EAAM,MAAA,EAAE,KAAK,IAAM,EAAA,KAAA,EAAO,QAAQ,MAAQ,EAAA,KAAA,EACxC,GAAA,EAAA,CAAG,qBAAsB,EAAA,CAAA;AAC3B,EAAA,IAAI,SAAY,GAAA,KAAA,CAAA,CAAA;AAChB,EAAM,MAAA,IAAA,GAAO,OAAO,SAAS,CAAA,CAAA;AAC7B,EAAI,IAAA,WAAA,CAAY,IAAI,CAAG,EAAA;AACrB,IAAA,MAAM,eAAe,EAAG,CAAA,YAAA,CAAA;AACxB,IAAA,IAAI,eAAe,MAAQ,EAAA;AACzB,MAAA,SAAA,GAAY,EAAE,EAAA,EAAI,YAAc,EAAA,SAAA,EAAW,GAAG,SAAU,EAAA,CAAA;AAAA,KAC1D;AAAA,GACF;AACA,EAAO,OAAA;AAAA,IACL;AAAA,MACE,GAAA,EAAK,IAAK,CAAA,KAAA,CAAM,GAAG,CAAA;AAAA,MACnB,IAAA,EAAM,IAAK,CAAA,KAAA,CAAM,IAAI,CAAA;AAAA,MACrB,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,MACvB,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA,MACzB,MAAA,EAAQ,IAAK,CAAA,KAAA,CAAM,MAAM,CAAA;AAAA,MACzB,KAAA,EAAO,IAAK,CAAA,KAAA,CAAM,KAAK,CAAA;AAAA,MACvB,SAAA;AAAA,KACF;AAAA,IACA,EAAA;AAAA,IACA,SAAA;AAAA,GACF,CAAA;AACF,CAAA;AAEA,SAAS,uBAAA,CACP,WACA,YACA,EAAA,CAAA,EACA,GACA,WACA,EAAA,KAAA,GAAuB,EACR,EAAA;AACf,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,WAAa,EAAA,QAAA;AAAA,IACb,IAAO,GAAA,QAAA;AAAA,GACT,GAAI,SAAS,SAAS,CAAA,CAAA;AAEtB,EAAM,MAAA,IAAA,GAAO,OAAO,SAAS,CAAA,CAAA;AAC7B,EAAM,MAAA,IAAA,GAAO,aAAa,IAAI,CAAA,CAAA;AAC9B,EAAA,IAAI,CAAC,gBAAA,CAAiB,IAAM,EAAA,CAAA,EAAG,CAAC,CAAA;AAAG,IAAO,OAAA,KAAA,CAAA;AAE1C,EAAI,IAAA,WAAA,IAAe,YAAY,MAAQ,EAAA;AACrC,IAAI,IAAA,WAAA,CAAY,QAAS,CAAA,IAAI,CAAG,EAAA;AAC9B,MAAA,KAAA,CAAM,KAAK,SAAS,CAAA,CAAA;AAAA,KACtB,MAAA,IACE,YAAY,IAAK,CAAA,CAAC,mBAAmB,cAAe,CAAA,UAAA,CAAW,IAAI,CAAC,CACpE,EAAA,CAEK,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACK,MAAA;AACL,IAAA,KAAA,CAAM,KAAK,SAAS,CAAA,CAAA;AAAA,GACtB;AAEA,EAAI,IAAA,CAAC,WAAY,CAAA,IAAI,CAAG,EAAA;AACtB,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,KAAK,MAAU,IAAA,gBAAA,CAAiB,KAAK,MAAQ,EAAA,CAAA,EAAG,CAAC,CAAG,EAAA;AACtD,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,IAAI,KAAK,SAAW,EAAA;AAClB,IAA0B,yBAAA,CAAA,IAAA,EAAM,GAAG,CAAC,CAAA,CAAA;AAAA,GACtC;AAEA,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,IAAA,IAAI,IAAS,KAAA,OAAA,IAAW,SAAU,CAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACpD,MAAA,SAAA;AAAA,KACF;AACA,IAAA,MAAM,WAAc,GAAA,uBAAA;AAAA,MAClB,SAAS,CAAC,CAAA;AAAA,MACV,YAAA;AAAA,MACA,CAAA;AAAA,MACA,CAAA;AAAA,MACA,WAAA;AAAA,KACF,CAAA;AACA,IAAA,IAAI,YAAY,MAAQ,EAAA;AACtB,MAAO,OAAA,KAAA,CAAM,OAAO,WAAW,CAAA,CAAA;AAAA,KACjC;AAAA,GACF;AACA,EAAO,OAAA,KAAA,CAAA;AACT,CAAA;AAEA,SAAS,0BACP,EAAE,GAAA,EAAK,QAAQ,SAAU,EAAA,EACzB,GACA,CACA,EAAA;AACA,EAAA,IAAI,SAAW,EAAA;AACb,IAAA,MAAM,EAAE,EAAA,EAAI,SAAW,EAAA,YAAA,EAAiB,GAAA,SAAA,CAAA;AACxC,IAAA,MAAM,SAAS,MAAS,GAAA,GAAA,CAAA;AACxB,IAAA,IAAI,SAAc,KAAA,CAAA,IAAK,MAAS,GAAA,CAAA,GAAI,EAAI,EAAA;AACtC,MAAA,MAAM,YAAY,YAAe,GAAA,MAAA,CAAA;AACjC,MAAM,MAAA,EAAA,GAAK,QAAS,CAAA,cAAA,CAAe,EAAE,CAAA,CAAA;AACrC,MAAG,EAAA,CAAA,QAAA,CAAS,EAAE,IAAM,EAAA,CAAA,EAAG,KAAK,SAAW,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AAC3D,MAAA,SAAA,CAAU,SAAY,GAAA,SAAA,CAAA;AAAA,KACb,MAAA,IAAA,SAAA,GAAY,CAAK,IAAA,CAAA,GAAI,MAAM,EAAI,EAAA;AACxC,MAAM,MAAA,EAAA,GAAK,QAAS,CAAA,cAAA,CAAe,EAAE,CAAA,CAAA;AACrC,MAAG,EAAA,CAAA,QAAA,CAAS,EAAE,IAAM,EAAA,CAAA,EAAG,KAAK,CAAG,EAAA,QAAA,EAAU,UAAU,CAAA,CAAA;AACnD,MAAA,SAAA,CAAU,SAAY,GAAA,CAAA,CAAA;AAAA,KACjB,MAAA;AACL,MAAO,OAAA,KAAA,CAAA;AAAA,KACT;AAAA,GACK,MAAA;AACL,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AACF;;;;"}
|