@vuu-ui/vuu-layout 0.8.22-debug → 0.8.23-debug
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/index.js +354 -1803
- package/cjs/index.js.map +4 -4
- package/esm/index.js +81 -1568
- package/esm/index.js.map +4 -4
- package/index.css +0 -151
- package/index.css.map +3 -3
- package/package.json +8 -8
- package/types/index.d.ts +0 -3
- package/types/utils/index.d.ts +0 -1
- package/types/utils/typeOf.d.ts +2 -1
- package/types/measured-container/MeasuredContainer.d.ts +0 -15
- package/types/measured-container/index.d.ts +0 -2
- package/types/measured-container/useMeasuredContainer.d.ts +0 -22
- package/types/measured-container/useResizeObserver.d.ts +0 -15
- package/types/overflow-container/OverflowContainer.d.ts +0 -17
- package/types/overflow-container/index.d.ts +0 -2
- package/types/overflow-container/overflow-utils.d.ts +0 -49
- package/types/overflow-container/useOverflowContainer.d.ts +0 -20
- package/types/toolbar/Toolbar.d.ts +0 -21
- package/types/toolbar/index.d.ts +0 -1
- package/types/toolbar/toolbar-dom-utils.d.ts +0 -3
- package/types/toolbar/useKeyboardNavigation.d.ts +0 -32
- package/types/toolbar/useSelection.d.ts +0 -22
- package/types/toolbar/useToolbar.d.ts +0 -28
- package/types/utils/react-utils.d.ts +0 -2
package/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../packages/vuu-layout/src/index.ts", "../../../packages/vuu-layout/src/dock-layout/DockLayout.tsx", "../../../packages/vuu-layout/src/registry/ComponentRegistry.ts", "../../../packages/vuu-layout/src/dock-layout/Drawer.tsx", "../../../packages/vuu-layout/src/Component.tsx", "../../../packages/vuu-layout/src/utils/pathUtils.ts", "../../../packages/vuu-layout/src/utils/propUtils.ts", "../../../packages/vuu-layout/src/utils/typeOf.ts", "../../../packages/vuu-layout/src/utils/refUtils.ts", "../../../packages/vuu-layout/src/utils/
|
|
4
|
-
"sourcesContent": ["export * from \"./dock-layout\";\nexport { default as Component } from \"./Component\";\nexport * from \"./drag-drop\";\nexport * from \"./DraggableLayout\";\nexport * from \"./flexbox\";\nexport { Action } from \"./layout-action\";\nexport * from \"./layout-header\";\nexport * from \"./layout-provider\";\nexport * from \"./layout-reducer\";\nexport * from \"./layout-view\";\nexport * from \"./measured-container\";\nexport * from \"./overflow-container\";\nexport * from \"./palette\";\nexport * from \"./placeholder\";\nexport * from \"./registry\";\nexport * from \"./responsive\";\nexport * from \"./stack\";\nexport * from \"./toolbar\";\nexport * from \"./tools\";\nexport * from \"./use-persistent-state\";\nexport * from \"./utils\";\n", "import { partition } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, ReactElement } from \"react\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Drawer from \"./Drawer\";\n\nimport \"./DockLayout.css\";\n\nconst isDrawer = (component: ReactElement) => component.type === Drawer;\nconst isVertical = ({ props: { position = \"left\" } }: ReactElement) =>\n position.match(/top|bottom/);\n\nexport interface DockLayoutProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement[];\n}\n\nconst DockLayout = (props: DockLayoutProps) => {\n const { children, className: classNameProp, id, style } = props;\n const classBase = \"vuuDockLayout\";\n const [drawers, content] = partition(children, 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", "import { FunctionComponent } from \"react\";\n\nconst _containers: { [key: string]: boolean } = {};\nconst _views: { [key: string]: boolean } = {};\n\nexport type layoutComponentType = \"component\" | \"container\" | \"view\";\n\nexport interface ComponentWithId {\n id: string;\n [key: string]: unknown;\n}\n\nexport const ComponentRegistry: {\n [key: string]: FunctionComponent<ComponentWithId>;\n} = {};\n\nexport function isContainer(componentType: string) {\n return _containers[componentType] === true;\n}\n\nexport function isView(componentType: string) {\n return _views[componentType] === true;\n}\n\nexport const isLayoutComponent = (type: string) =>\n isContainer(type) || isView(type);\n\n// export const isRegistered = (className: string) =>\n// !!ComponentRegistry[className];\n\nexport function registerComponent(\n componentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: FunctionComponent<any>,\n type: layoutComponentType = \"component\"\n) {\n ComponentRegistry[componentName] = component;\n\n if (type === \"container\") {\n _containers[componentName] = true;\n } else if (type === \"view\") {\n _views[componentName] = true;\n }\n}\n", "import { Button, useControlled } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { CSSProperties, HTMLAttributes, useCallback } from \"react\";\n\nimport \"./Drawer.css\";\n\nconst classBase = \"vuuDrawer\";\n\nconst sizeAttribute = (value: string | number) => {\n return typeof value === \"string\" ? value : value + \"px\";\n};\n\nconst getStyle = (\n styleProp?: CSSProperties,\n sizeOpen?: number,\n sizeClosed?: number\n) => {\n const hasSizeOpen = sizeOpen !== undefined;\n const hasSizeClosed = sizeClosed !== undefined;\n\n if (!styleProp && !hasSizeClosed && !hasSizeOpen) {\n return undefined;\n }\n\n if (!hasSizeClosed && !hasSizeOpen) {\n return styleProp;\n }\n\n return {\n ...styleProp,\n \"--drawer-size\": hasSizeOpen ? sizeAttribute(sizeOpen) : undefined,\n \"--drawer-peek-size\": hasSizeClosed ? sizeAttribute(sizeClosed) : undefined,\n };\n};\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n clickToOpen?: boolean;\n defaultOpen?: boolean;\n inline?: boolean;\n open?: boolean;\n peekaboo?: boolean;\n position?: \"left\" | \"right\" | \"top\" | \"bottom\";\n sizeOpen?: number;\n sizeClosed?: number;\n toggleButton?: \"start\" | \"end\";\n}\nconst Drawer = ({\n children,\n className: classNameProp,\n clickToOpen,\n defaultOpen,\n sizeOpen,\n sizeClosed,\n style: styleProp,\n open: openProp,\n position = \"left\",\n inline,\n onClick,\n peekaboo = false,\n toggleButton,\n ...props\n}: DrawerProps) => {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen ?? false,\n name: \"Drawer\",\n state: \"open\",\n });\n\n console.log(`Drawer sizeOpen ${sizeOpen} sizeClosed ${sizeClosed}`);\n\n const className = cx(classBase, classNameProp, `${classBase}-${position}`, {\n [`${classBase}-open`]: open,\n [`${classBase}-inline`]: inline,\n [`${classBase}-over`]: !inline,\n [`${classBase}-peekaboo`]: peekaboo,\n });\n\n const toggleDrawer = useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const style = getStyle(styleProp, sizeOpen, sizeClosed);\n\n const handleClick = clickToOpen ? toggleDrawer : onClick;\n\n const renderToggleButton = () => (\n <div className={cx(\"vuuToggleButton-container\")}>\n {open ? (\n <Button\n aria-label=\"close\"\n onClick={toggleDrawer}\n data-icon=\"close\"\n variant=\"secondary\"\n />\n ) : (\n <Button\n aria-label=\"open\"\n onClick={toggleDrawer}\n data-icon=\"close\"\n variant=\"secondary\"\n />\n )}\n </div>\n );\n\n return (\n <div {...props} className={className} onClick={handleClick} style={style}>\n {toggleButton == \"start\" ? renderToggleButton() : null}\n <div className={`${classBase}-liner`}>\n <div className={`${classBase}-content`}>{children}</div>\n </div>\n {toggleButton == \"end\" ? renderToggleButton() : null}\n </div>\n );\n};\nDrawer.displayName = \"Drawer\";\n\nexport default Drawer;\n", "import React, { forwardRef, HTMLAttributes } from 'react';\nimport { registerComponent } from './registry/ComponentRegistry';\n\nimport './Component.css';\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);\n", "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", "import { ReactElement } from \"react\";\nimport { LayoutModel } from \"../layout-reducer\";\n\nconst NO_PROPS = {};\nexport const getProp = (\n component: LayoutModel | undefined,\n propName: string\n) => {\n const props = getProps(component);\n return props[propName] ?? props[`data-${propName}`];\n};\n\nexport const getProps = (component?: LayoutModel) =>\n component?.props || component || NO_PROPS;\n\nexport const getChildProp = (container: LayoutModel) => {\n const props = getProps(container);\n if (props.children) {\n const {\n children: [target, ...rest],\n } = props;\n if (rest.length > 0) {\n console.warn(\n `getChild expected a single child, found ${rest.length + 1}`\n );\n }\n return target as ReactElement;\n }\n};\n", "import { ReactElement } from 'react';\nimport { LayoutModel, WithType } from '../layout-reducer';\n\nexport function typeOf(element?: LayoutModel | WithType): string | undefined {\n if (element) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const type = element.type as any;\n if (typeof type === 'function' || typeof type === 'object') {\n const elementName = type.displayName || type.name || type.type?.name;\n if (typeof elementName === 'string') {\n return elementName;\n }\n }\n if (typeof element.type === 'string') {\n return element.type;\n }\n if (element.constructor) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (element.constructor as any).displayName as string;\n }\n throw Error(`typeOf unable to determine type of element`);\n }\n}\n\nexport const isTypeOf = (element: ReactElement, type: string) => typeOf(element) === type;\n", "import { MutableRefObject } from \"react\";\n\nexport function setRef<T>(\n ref:\n | MutableRefObject<T | null>\n | ((instance: T | null) => void)\n | null\n | undefined,\n value: T | null\n): void {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n", "import { Children, isValidElement, ReactElement, ReactNode } from \"react\";\n\nconst EMPTY_ARRAY: ReactElement[] = [];\n\nexport const asReactElements = (children: ReactNode): ReactElement[] => {\n const isArray = Array.isArray(children);\n const count = isArray ? children.length : Children.count(children);\n if (isArray && children.every(isValidElement)) {\n return children;\n } else if (count === 1 && !isArray && isValidElement(children)) {\n return [children];\n } else if (count > 1) {\n return children as ReactElement[];\n } else {\n return EMPTY_ARRAY;\n }\n};\n", "import { CSSProperties } from 'react';\nexport type CSSFlexProperties = Pick<CSSProperties, 'flexBasis' | 'flexGrow' | 'flexShrink'>;\n\nexport const expandFlex = (flex: number | CSSFlexProperties): CSSFlexProperties => {\n if (typeof flex !== 'number') {\n throw Error(`\"no support yet for flex value ${flex}`);\n }\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1\n };\n};\n", "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", "import { pointPositionWithinRect } from './BoxModel';\nimport { DragDropRect } from './dragDropTypes';\n\nconst SCALE_FACTOR = 0.4;\n\nexport type IntrinsicSizes = {\n height?: number;\n width?: number;\n};\n\ninterface ZoneRange {\n hi: number;\n lo: number;\n}\ntype DragConstraint = {\n zone: {\n x: ZoneRange;\n y: ZoneRange;\n };\n pos: {\n x: ZoneRange;\n y: ZoneRange;\n };\n mouse: {\n x: ZoneRange;\n y: ZoneRange;\n };\n};\n\ninterface ExtendedZoneRange {\n lo: boolean;\n hi: boolean;\n mousePct: number;\n mousePos: number;\n pos: number;\n}\n\nexport class DragState {\n public constraint!: DragConstraint;\n public x!: ExtendedZoneRange;\n public y!: ExtendedZoneRange;\n public intrinsicSize: IntrinsicSizes | undefined;\n\n constructor(\n zone: DragDropRect,\n mouseX: number,\n mouseY: number,\n measurements: DragDropRect,\n intrinsicSize?: IntrinsicSizes\n ) {\n this.init(zone, mouseX, mouseY, measurements, intrinsicSize);\n }\n\n init(\n zone: DragDropRect,\n mouseX: number,\n mouseY: number,\n rect: DragDropRect,\n intrinsicSize?: IntrinsicSizes\n ) {\n const { left: x, top: y } = rect;\n\n const { pctX, pctY } = pointPositionWithinRect(mouseX, mouseY, rect);\n\n // We are applying a scale factor of 0.4 to the draggee. This is purely a visual\n // effect - the actual box size remains the original size. The 'leading' values\n // represent the difference between the visual scaled down box and the actual box.\n\n const scaleFactor = SCALE_FACTOR;\n\n const leadX = pctX * rect.width;\n const trailX = rect.width - leadX;\n const leadY = pctY * rect.height;\n const trailY = rect.height - leadY;\n\n // When we assign position to rect using css. positioning units are applied to the\n // unscaled shape, so we have to adjust values to take scaling into account.\n const scaledWidth = rect.width * scaleFactor,\n scaledHeight = rect.height * scaleFactor;\n\n const scaleDiff = 1 - scaleFactor;\n const leadXScaleDiff = leadX * scaleDiff;\n const leadYScaleDiff = leadY * scaleDiff;\n const trailXScaleDiff = trailX * scaleDiff;\n const trailYScaleDiff = trailY * scaleDiff;\n\n this.intrinsicSize = intrinsicSize;\n\n this.constraint = {\n zone: {\n x: {\n lo: zone.left,\n hi: zone.right\n },\n y: {\n lo: zone.top,\n hi: zone.bottom\n }\n },\n\n pos: {\n x: {\n lo: /* left */ zone.left - leadXScaleDiff,\n hi: /* right */ zone.right - rect.width + trailXScaleDiff\n },\n y: {\n lo: /* top */ zone.top - leadYScaleDiff,\n hi: /* bottom */ zone.bottom - rect.height + trailYScaleDiff\n }\n },\n mouse: {\n x: {\n lo: /* left */ zone.left + scaledWidth * pctX,\n hi: /* right */ zone.right - scaledWidth * (1 - pctX)\n },\n y: {\n lo: /* top */ zone.top + scaledHeight * pctY,\n hi: /* bottom */ zone.bottom - scaledHeight * (1 - pctY)\n }\n }\n };\n\n this.x = {\n pos: x,\n lo: false,\n hi: false,\n mousePos: mouseX,\n mousePct: pctX\n };\n this.y = {\n pos: y,\n lo: false,\n hi: false,\n mousePos: mouseY,\n mousePct: pctY\n };\n }\n\n outOfBounds() {\n return this.x.lo || this.x.hi || this.y.lo || this.y.hi;\n }\n\n inBounds() {\n return !this.outOfBounds();\n }\n\n dropX() {\n return this.dropXY('x');\n }\n\n dropY() {\n return this.dropXY('y');\n }\n\n hasIntrinsicSize(): number | undefined {\n return this?.intrinsicSize?.height && this?.intrinsicSize?.width;\n }\n\n /*\n * diff = mouse movement, signed int\n * xy = 'x' or 'y'\n */\n //todo, diff can be calculated in here\n update(xy: 'x' | 'y', mousePos: number) {\n const state = this[xy],\n mouseConstraint = this.constraint.mouse[xy],\n posConstraint = this.constraint.pos[xy],\n previousPos = state.pos;\n\n const diff = mousePos - state.mousePos;\n\n //xy==='x' && console.log(`update: state.lo=${state.lo}, mPos=${mousePos}, mC.lo=${mouseConstraint.lo}, prevPos=${previousPos}, diff=${diff} ` );\n\n if (diff < 0) {\n if (state.lo) {\n /* do nothing */\n } else if (mousePos < mouseConstraint.lo) {\n state.lo = true;\n state.pos = posConstraint.lo;\n } else if (state.hi) {\n if (mousePos < mouseConstraint.hi) {\n state.hi = false;\n state.pos += diff;\n }\n } else {\n state.pos += diff;\n }\n } else if (diff > 0) {\n if (state.hi) {\n /* do nothing */\n } else if (mousePos > mouseConstraint.hi) {\n state.hi = true;\n state.pos = posConstraint.hi;\n } else if (state.lo) {\n if (mousePos > mouseConstraint.lo) {\n state.lo = false;\n state.pos += diff;\n }\n } else {\n state.pos += diff;\n }\n }\n\n state.mousePos = mousePos;\n\n return previousPos !== state.pos;\n }\n\n private dropXY(this: DragState, dir: 'x' | 'y') {\n const pos = this[dir],\n rect = this.constraint.zone[dir];\n // why not do the rounding +/- 1 on the rect initially - this is all it is usef for\n return pos.lo\n ? Math.max(rect.lo, pos.mousePos)\n : pos.hi\n ? Math.min(pos.mousePos, Math.round(rect.hi) - 1)\n : pos.mousePos;\n }\n}\n", "import { rect, rectTuple } from \"@vuu-ui/vuu-utils\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { getProps, typeOf } from \"../utils\";\nimport {\n BoxModel,\n getPosition,\n Measurements,\n Position,\n positionValues,\n RelativeDropPosition,\n} from \"./BoxModel\";\nimport { DragDropRect, DropPos, DropPosTab } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\n\nexport const isTabstrip = (dropTarget: DropTarget) =>\n dropTarget.pos.tab &&\n typeOf(dropTarget.component) === \"Stack\" &&\n dropTarget.pos.position.Header;\n\nconst { north, south, east, west } = positionValues;\nconst eastwest = east + west;\nconst northsouth = north + south;\n\nexport interface DropTargetProps {\n component: LayoutModel;\n pos: DropPos;\n clientRect: DragDropRect;\n nextDropTarget: DropTarget | null;\n}\n\nexport type GuideLine = [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n];\nexport interface TargetDropOutline {\n l: number;\n r: number;\n t: number;\n b: number;\n tabLeft?: number;\n tabWidth?: number;\n tabHeight?: number;\n guideLines?: GuideLine;\n}\n\nexport class DropTarget {\n private active: boolean;\n\n public box: unknown;\n public clientRect: DragDropRect;\n public component: LayoutModel;\n public dropRect: rectTuple | undefined;\n public nextDropTarget: DropTarget | null;\n public pos: DropPos;\n\n constructor({\n component,\n pos,\n clientRect /*, closeToTheEdge*/,\n nextDropTarget,\n }: DropTargetProps) {\n this.component = component;\n this.pos = pos;\n this.clientRect = clientRect;\n this.nextDropTarget = nextDropTarget;\n this.active = false;\n this.dropRect = undefined;\n }\n\n targetTabPos(tab: DropPosTab) {\n const { left: tabLeft, width: tabWidth, positionRelativeToTab } = tab;\n return positionRelativeToTab === RelativeDropPosition.BEFORE\n ? tabLeft\n : tabLeft + tabWidth;\n }\n\n /**\n * Determine what will be rendered by the dropTargetRenderer\n *\n * @param {*} lineWidth\n * @param {*} dragState\n * @returns {l, t, r, b, tabLeft, tabWidth, tabHeight}\n */\n getTargetDropOutline(\n lineWidth: number,\n dragState?: DragState\n ): TargetDropOutline {\n if (this.pos.tab) {\n return this.getDropTabOutline(lineWidth, this.pos.tab);\n } else if (dragState && dragState.hasIntrinsicSize()) {\n return this.getIntrinsicDropRect(dragState);\n } else {\n const [l, t, r, b] = this.getDropRectOutline(\n lineWidth,\n dragState\n ) as rectTuple;\n return { l, t, r, b };\n }\n }\n\n getDropTabOutline(lineWidth: number, tab: DropPosTab): TargetDropOutline {\n const {\n clientRect: { top, left, right, bottom, header },\n } = this;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n const t = Math.round(top);\n const l = Math.round(left + gap);\n const r = Math.round(right - gap);\n const b = Math.round(bottom - gap);\n const tabLeft = this.targetTabPos(tab);\n const tabWidth = 60; // should really measure text\n const tabHeight = (header?.bottom ?? 0) - (header?.top ?? 0);\n return { l, t, r, b, tabLeft, tabWidth, tabHeight };\n }\n\n getIntrinsicDropRect(dragState: DragState): TargetDropOutline {\n const { pos, clientRect: rect } = this;\n\n const { x, y } = dragState;\n\n let height = dragState.intrinsicSize?.height ?? 0;\n let width = dragState.intrinsicSize?.height ?? 0;\n\n if (height && height > rect.height) {\n console.log(`DropTarget: we're going to blow the gaff`);\n height = rect.height;\n } else if (width && width > rect.width) {\n console.log(`DropTarget: we're going to blow the gaff`);\n width = rect.width;\n }\n\n const left = Math.min(\n rect.right - width,\n Math.max(rect.left, Math.round(pos.x - x.mousePct * width))\n );\n const top = Math.min(\n rect.bottom - height,\n Math.max(rect.top, Math.round(pos.y - y.mousePct * height))\n );\n const [l, t, r, b] = (this.dropRect = [\n left,\n top,\n left + width,\n top + height,\n ]);\n\n const guideLines: GuideLine = pos.position.EastOrWest\n ? [l, rect.top, l, rect.bottom, r, rect.top, r, rect.bottom]\n : [rect.left, t, rect.right, t, rect.left, b, rect.right, b];\n\n return { l, r, t, b, guideLines };\n }\n\n /**\n * @returns [left, top, right, bottom]\n */\n getDropRectOutline(lineWidth: number, dragState?: DragState) {\n const { pos, clientRect: rect } = this;\n const { width: suggestedWidth, height: suggestedHeight, position } = pos;\n\n const { width: intrinsicWidth, height: intrinsicHeight } =\n dragState?.intrinsicSize ?? {};\n const sizeHeight = intrinsicHeight ?? suggestedHeight ?? 0;\n const sizeWidth = intrinsicWidth ?? suggestedWidth ?? 0;\n\n this.dropRect = undefined;\n\n const { top: t, left: l, right: r, bottom: b } = rect;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n switch (position) {\n case Position.North:\n case Position.Header: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, t + gap, l + sizeWidth - gap, t + gap + height] // need flex direction indicator\n : [l + gap, t + gap, r - gap, t + gap + height];\n }\n case Position.West: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [l + gap, t + gap, l - gap + width, t + sizeHeight + gap] // need flex direction indicator\n : [l + gap, t + gap, l - gap + width, b - gap];\n }\n case Position.East: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [r - gap - width, t + gap, r - gap, t + sizeHeight + gap] // need flex direction indicator\n : [r - gap - width, t + gap, r - gap, b - gap];\n }\n case Position.South: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, b - gap - height, l + sizeWidth - gap, b - gap] // need flex direction indicator\n : [l + gap, b - gap - height, r - gap, b - gap];\n }\n case Position.Centre: {\n return [l + gap, t + gap, r - gap, b - gap];\n }\n default:\n console.warn(`DropTarget does not recognize position ${position}`);\n return null;\n }\n }\n\n activate() {\n this.active = true;\n return this;\n }\n\n toArray(this: DropTarget) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let dropTarget: DropTarget | null = this;\n const dropTargets = [dropTarget];\n // eslint-disable-next-line no-cond-assign\n while ((dropTarget = dropTarget.nextDropTarget)) {\n dropTargets.push(dropTarget);\n }\n return dropTargets;\n }\n\n static getActiveDropTarget(dropTarget: DropTarget | null): DropTarget | null {\n return dropTarget === null\n ? null\n : dropTarget?.active\n ? dropTarget\n : DropTarget.getActiveDropTarget(dropTarget.nextDropTarget);\n }\n}\n\n// Initial entry to this method is always via the app (may be it should be *on* the app)\nexport function identifyDropTarget(\n x: number,\n y: number,\n rootLayout: LayoutModel,\n measurements: Measurements,\n intrinsicSize?: number,\n validDropTargets?: string[]\n) {\n let dropTarget = null;\n\n const allBoxesContainingPoint = BoxModel.allBoxesContainingPoint(\n rootLayout,\n measurements,\n x,\n y,\n validDropTargets\n );\n\n if (allBoxesContainingPoint.length) {\n const [component, ...containers] = allBoxesContainingPoint;\n const {\n \"data-path\": dataPath,\n path = dataPath,\n \"data-row-placeholder\": isRowPlaceholder,\n } = getProps(component);\n const clientRect = measurements[path];\n const placeholderOrientation =\n intrinsicSize && isRowPlaceholder ? \"row\" : undefined;\n const pos = getPosition(x, y, clientRect, placeholderOrientation);\n const box = measurements[path];\n\n const nextDropTarget = ([nextTarget, ...targets]: LayoutModel[]):\n | DropTarget\n | undefined => {\n if (pos.position?.Header || pos.closeToTheEdge) {\n const targetPosition = getTargetPosition(\n nextTarget,\n pos,\n box,\n measurements,\n x,\n y\n );\n if (targetPosition) {\n const [containerPos, clientRect] = targetPosition;\n\n return new DropTarget({\n component: nextTarget,\n pos: containerPos,\n clientRect,\n nextDropTarget: nextDropTarget(targets) ?? null,\n });\n } else if (targets.length) {\n return nextDropTarget(targets);\n }\n }\n };\n dropTarget = new DropTarget({\n component,\n pos,\n clientRect,\n nextDropTarget: nextDropTarget(containers) ?? null,\n }).activate();\n }\n\n return dropTarget;\n}\n\nfunction getTargetPosition(\n container: LayoutModel,\n { closeToTheEdge, position }: DropPos,\n box: rect,\n measurements: Measurements,\n x: number,\n y: number\n): [DropPos, DragDropRect] | undefined {\n if (!container || container.type === \"DraggableLayout\") {\n return;\n }\n\n const containingBox = measurements[container.props.path];\n const closeToTop = closeToTheEdge & positionValues.north;\n const closeToRight = closeToTheEdge & positionValues.east;\n const closeToBottom = closeToTheEdge & positionValues.south;\n const closeToLeft = closeToTheEdge & positionValues.west;\n\n const atTop =\n (closeToTop || position.Header) &&\n Math.round(box.top) === Math.round(containingBox.top);\n const atRight =\n closeToRight && Math.round(box.right) === Math.round(containingBox.right);\n const atBottom =\n closeToBottom &&\n Math.round(box.bottom) === Math.round(containingBox.bottom);\n const atLeft =\n closeToLeft && Math.round(box.left) === Math.round(containingBox.left);\n\n if (atTop || atRight || atBottom || atLeft) {\n const { \"data-path\": dataPath, path = dataPath } = container.props;\n const clientRect = measurements[path];\n const containerPos = getPosition(x, y, clientRect);\n\n // if its a VBox and we're close to left or right ...\n if (\n (isVBox(container) || isTabbedContainer(container)) &&\n closeToTheEdge & eastwest\n ) {\n containerPos.width = 120;\n return [containerPos, clientRect];\n }\n // if it's a HBox and we're close to top or bottom ...\n else if (\n (isHBox(container) || isTabbedContainer(container)) &&\n (position.Header || closeToTheEdge & northsouth)\n ) {\n containerPos.height = 120;\n return [containerPos, clientRect];\n }\n }\n}\n\nfunction isTabbedContainer(component: LayoutModel) {\n return typeOf(component) === \"Stack\";\n}\n\nfunction isVBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n component.props.style.flexDirection === \"column\"\n );\n}\n\nfunction isHBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n component.props.style.flexDirection === \"row\"\n );\n}\n", "import { PopupService } from \"@vuu-ui/vuu-popups\";\nimport { RelativeDropPosition } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\nimport { computeMenuPosition, DropMenu } from \"./DropMenu\";\nimport { DropTarget, GuideLine } from \"./DropTarget\";\n\nimport \"./DropTargetRenderer.css\";\n\ntype Point = [number, number];\ntype TabMode = \"full-view\" | \"tab-only\";\n\nlet _multiDropOptions = false;\nlet _hoverDropTarget: DropTarget | null = null;\nlet _shiftedTab: HTMLElement | null = null;\n\nconst onHoverDropTarget = (dropTarget: DropTarget | null) =>\n (_hoverDropTarget = dropTarget);\n\nconst start = ([x, y]: Point) => `M${x},${y}`;\nconst point = ([x, y]: Point) => `L${x},${y}`;\nconst pathFromPoints = ([p1, ...points]: Point[]) =>\n `${start(p1)} ${points.map(point)}Z`;\n\nconst pathFromGuideLines = (guideLines?: GuideLine) => {\n if (guideLines) {\n const [x1, y1, x2, y2, x3, y3, x4, y4] = guideLines;\n return `M${x1},${y1} L${x2},${y2} M${x3},${y3} L${x4},${y4}`;\n } else {\n return \"\";\n }\n};\n\nfunction insertSVGRoot() {\n if (document.getElementById(\"hw-drag-canvas\") === null) {\n const root = document.getElementById(\"root\");\n const container = document.createElement(\"div\");\n container.id = \"hw-drag-canvas\";\n container.innerHTML = `\n <svg width=\"100%\" height=\"100%\">\n <path id=\"hw-drop-guides\" />\n <path\n id=\"vuu-drop-outline\"\n d=\"M300,132 L380,132 L380,100 L460,100 L460,132, L550,132 L550,350 L300,350z\">\n <animate\n attributeName=\"d\"\n id=\"hw-drop-outline-animate\"\n begin=\"indefinite\"\n dur=\"300ms\"\n fill=\"freeze\"\n to=\"M255,33 L255,33,L255,1,L315,1,L315,1,L794,1,L794,164,L255,164Z\"\n />\n </path>\n </svg>\n `;\n document.body.insertBefore(container, root);\n }\n}\nexport default class DropTargetCanvas {\n private currentPath: string | null = null;\n private tabMode: TabMode | null = null;\n\n constructor() {\n insertSVGRoot();\n }\n\n prepare(dragRect: DragDropRect, tabMode: TabMode = \"full-view\") {\n // don't do this on body\n document.body.classList.add(\"drawing\");\n this.currentPath = null;\n this.tabMode = tabMode;\n\n const points = this.getPoints(0, 0, 0, 0);\n // const points = this.getPoints(left, top, width, height);\n const d = pathFromPoints(points);\n\n const dropOutlinePath = document.getElementById(\"vuu-drop-outline\");\n dropOutlinePath?.setAttribute(\"d\", d);\n this.currentPath = d;\n }\n\n clear() {\n // don't do this on body\n _hoverDropTarget = null;\n clearShiftedTab();\n document.body.classList.remove(\"drawing\");\n PopupService.hidePopup();\n }\n\n get hoverDropTarget() {\n return _hoverDropTarget;\n }\n\n getPoints(\n x: number,\n y: number,\n width: number,\n height: number,\n tabLeft = 0,\n tabWidth = 0,\n tabHeight = 0\n ): Point[] {\n const tabOnly = this.tabMode === \"tab-only\";\n if (tabWidth === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n ];\n } else if (tabOnly) {\n const left = tabLeft;\n return [\n [left, y],\n [left, y],\n [left + tabWidth, y],\n [left + tabWidth, y],\n [left + tabWidth, y + tabHeight],\n [left + tabWidth, y + tabHeight],\n [left, y + tabHeight],\n [left, y + tabHeight],\n ];\n } else if (tabLeft === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n } else {\n return [\n [x, y + tabHeight],\n [x + tabLeft, y + tabHeight],\n [x + tabLeft, y],\n [x + tabLeft, y],\n [x + tabLeft, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n }\n }\n\n draw(dropTarget: DropTarget, dragState: DragState) {\n const sameDropTarget = false;\n const wasMultiDrop = _multiDropOptions;\n\n if (_hoverDropTarget !== null) {\n this.drawTarget(_hoverDropTarget);\n } else {\n if (sameDropTarget === false) {\n _multiDropOptions = dropTarget.nextDropTarget != null;\n if (dropTarget.pos.tab) {\n moveExistingTabs(dropTarget);\n } else if (_shiftedTab) {\n clearShiftedTab();\n }\n this.drawTarget(dropTarget, dragState);\n }\n\n if (_multiDropOptions) {\n const [left, top, orientation] = computeMenuPosition(dropTarget);\n if (!wasMultiDrop || !sameDropTarget) {\n const component = (\n <DropMenu\n dropTarget={dropTarget}\n onHover={onHoverDropTarget}\n orientation={orientation}\n />\n );\n PopupService.showPopup({\n left,\n top,\n component,\n });\n }\n } else {\n PopupService.hidePopup();\n }\n }\n }\n\n drawTarget(dropTarget: DropTarget, dragState?: DragState) {\n const lineWidth = 6;\n\n const targetDropOutline = dropTarget.getTargetDropOutline(\n lineWidth,\n dragState\n );\n\n if (targetDropOutline) {\n const { l, t, r, b, tabLeft, tabWidth, tabHeight, guideLines } =\n targetDropOutline;\n const w = r - l;\n const h = b - t;\n\n if (this.currentPath) {\n const path = document.getElementById(\"vuu-drop-outline\");\n path?.setAttribute(\"d\", this.currentPath);\n }\n\n const points = this.getPoints(l, t, w, h, tabLeft, tabWidth, tabHeight);\n const path = pathFromPoints(points);\n const animation = document.getElementById(\n \"hw-drop-outline-animate\"\n ) as unknown as SVGAnimateElement;\n animation?.setAttribute(\"to\", path);\n animation?.beginElement();\n this.currentPath = path;\n\n const dropGuidePath = document.getElementById(\"hw-drop-guides\");\n dropGuidePath?.setAttribute(\"d\", pathFromGuideLines(guideLines));\n }\n }\n}\n\nconst cssShiftRight = \"transition:margin-left .4s ease-out;margin-left: 63px\";\nconst cssShiftBack = \"transition:margin-left .4s ease-out;margin-left: 0px\";\n\nfunction moveExistingTabs(dropTarget: DropTarget) {\n const { AFTER, BEFORE } = RelativeDropPosition;\n const {\n clientRect: { Stack },\n pos: {\n // tab: { index: tabIndex, positionRelativeToTab }\n tab,\n },\n } = dropTarget;\n\n const { id } = dropTarget.component.props;\n let tabEl = null;\n // console.log(`tabPos = ${tabPos} (width=${tabWidth}) x=${x}`)\n if (Stack && tab && tab.positionRelativeToTab !== AFTER) {\n const tabOffset = tab.positionRelativeToTab === BEFORE ? 1 : 2;\n const selector = `:scope .hwTabstrip > .hwTabstrip-inner > .hwTab:nth-child(${\n tab.index + tabOffset\n })`;\n tabEl = document.getElementById(id)?.querySelector(selector) as HTMLElement;\n if (tabEl) {\n if (_shiftedTab === null || _shiftedTab !== tabEl) {\n tabEl.style.cssText = cssShiftRight;\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n }\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n } else if (tab?.positionRelativeToTab === BEFORE) {\n if (_shiftedTab === null) {\n const selector = \".vuuHeader-title\";\n tabEl = document\n .getElementById(id)\n ?.querySelector(selector) as HTMLElement;\n tabEl.style.cssText = cssShiftRight;\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n}\n\nfunction clearShiftedTab() {\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n _shiftedTab = null;\n }\n}\n", "import cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { DropTarget } from \"./DropTarget\";\n\nimport \"./DropMenu.css\";\n\nexport function computeMenuPosition(\n dropTarget: DropTarget,\n offsetTop = 0,\n offsetLeft = 0\n): [number, number, \"left\" | \"bottom\" | \"right\" | \"top\"] {\n const { pos, clientRect: box } = dropTarget;\n const menuOffset = 20;\n\n return pos.position.West\n ? [box.left - offsetLeft + menuOffset, pos.y - offsetTop, \"left\"]\n : pos.position.South\n ? [pos.x - offsetLeft, box.bottom - offsetTop - menuOffset, \"bottom\"]\n : pos.position.East\n ? [box.right - offsetLeft - menuOffset, pos.y - offsetTop, \"right\"]\n : /* North | Header*/ [\n pos.x - offsetLeft,\n box.top - offsetTop + menuOffset,\n \"top\",\n ];\n}\n\nconst classBase = \"vuuDropMenu\";\n\nexport interface DropMenuProps extends HTMLAttributes<HTMLDivElement> {\n dropTarget: DropTarget;\n onHover: (target: DropTarget | null) => void;\n orientation?: \"left\" | \"top\" | \"right\" | \"bottom\";\n}\n\nexport const DropMenu = ({\n className,\n dropTarget,\n onHover,\n orientation,\n}: DropMenuProps) => {\n const dropTargets = dropTarget.toArray();\n // TODO we have all the information here to draw a mini target map\n // but maybe thats overkill ...\n\n return (\n <div\n className={cx(classBase, className, `${classBase}-${orientation}`)}\n onMouseLeave={() => onHover(null)}\n >\n {dropTargets.map((target, i) => (\n <div\n key={i}\n className={`${classBase}-item`}\n data-icon={i === 0 ? \"column-2A\" : \"column-2B\"}\n onMouseEnter={() => onHover(target)}\n />\n ))}\n </div>\n );\n};\n", "import { rect } from \"@vuu-ui/vuu-utils\";\nimport { ReactElement } from \"react\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { findTarget, followPath, getProps } from \"../utils\";\nimport { BoxModel, Measurements } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState, IntrinsicSizes } from \"./DragState\";\nimport { DropTarget, identifyDropTarget } from \"./DropTarget\";\nimport DropTargetRenderer from \"./DropTargetRenderer\";\n\nexport type DragStartCallback = (e: MouseEvent, x: number, y: number) => void;\nexport type DragMoveCallback = (\n x: number | undefined,\n y: number | undefined\n) => void;\nexport type DragEndCallback = (droppedTarget?: Partial<DropTarget>) => void;\nexport type DragInstructions = {\n DoNotRemove?: boolean;\n DoNotTransform?: boolean;\n dragThreshold?: number;\n DriftHomeIfNoDropTarget?: boolean;\n RemoveDraggableOnDragEnd?: boolean;\n};\n\nlet _dragStartCallback: DragStartCallback | null;\nlet _dragMoveCallback: DragMoveCallback | null;\nlet _dragEndCallback: DragEndCallback | null;\n\nlet _dragStartX: number;\nlet _dragStartY: number;\nlet _dragContainer: ReactElement | undefined;\nlet _dragState: DragState;\nlet _dropTarget: DropTarget | null = null;\nlet _validDropTargetPaths: string[] | undefined;\nlet _dragInstructions: DragInstructions;\nlet _measurements: Measurements;\nlet _simpleDrag: boolean;\nlet _dragThreshold: number;\nlet _mouseDownTimer: number | null = null;\n\nconst DEFAULT_DRAG_THRESHOLD = 3;\nconst _dropTargetRenderer = new DropTargetRenderer();\nconst SCALE_FACTOR = 0.4;\n\nfunction getDragContainer(\n rootContainer: ReactElement,\n dragContainerPath: string\n) {\n if (dragContainerPath) {\n return followPath(rootContainer, dragContainerPath) as ReactElement;\n } else {\n return findTarget(\n rootContainer,\n // TODO dropTarget is not good\n (props) => props.dropTarget\n ) as ReactElement;\n }\n}\n\nexport const Draggable = {\n handleMousedown(\n e: MouseEvent,\n dragStartCallback: DragStartCallback,\n dragInstructions: DragInstructions = {}\n ) {\n _dragStartCallback = dragStartCallback;\n _dragInstructions = dragInstructions;\n\n _dragStartX = e.clientX;\n _dragStartY = e.clientY;\n\n _dragThreshold =\n dragInstructions.dragThreshold === undefined\n ? DEFAULT_DRAG_THRESHOLD\n : dragInstructions.dragThreshold;\n\n if (_dragThreshold === 0) {\n // maybe this should be -1\n _dragStartCallback(e, 0, 0);\n } else {\n window.addEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", preDragMouseupHandler, false);\n\n _mouseDownTimer = window.setTimeout(() => {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, 0, 0);\n }, 500);\n }\n\n e.preventDefault();\n },\n\n // called from handleDragStart (_dragCallback)\n initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n { top, left, right, bottom }: rect,\n dragPos: { x: number; y: number },\n dragHandler: {\n drag: DragMoveCallback;\n drop: DragEndCallback;\n },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[]\n ) {\n ({ drag: _dragMoveCallback, drop: _dragEndCallback } = dragHandler);\n return initDrag(\n rootContainer,\n dragContainerPath,\n { top, left, right, bottom } as DragDropRect,\n dragPos,\n intrinsicSize,\n dropTargets\n );\n },\n};\n\nfunction preDragMousemoveHandler(e: MouseEvent) {\n const x = true;\n const y = true;\n\n const x_diff = x ? e.clientX - _dragStartX : 0;\n const y_diff = y ? e.clientY - _dragStartY : 0;\n const mouseMoveDistance = Math.max(Math.abs(x_diff), Math.abs(y_diff));\n\n // when we do finally move the draggee, we are going to 'jump' by the amount of the drag threshold, should we\n // attempt to animate this ?\n if (mouseMoveDistance > _dragThreshold) {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, x_diff, y_diff);\n _dragStartCallback = null;\n }\n}\n\nfunction preDragMouseupHandler() {\n if (_mouseDownTimer) {\n window.clearTimeout(_mouseDownTimer);\n _mouseDownTimer = null;\n }\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n}\n\nfunction initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n dragRect: DragDropRect,\n dragPos: { x: number; y: number },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[]\n) {\n _dragContainer = getDragContainer(rootContainer, dragContainerPath);\n\n const { \"data-path\": dataPath, path = dataPath } = getProps(_dragContainer);\n\n if (dropTargets) {\n const dropPaths = dropTargets\n .map((id) => findTarget(rootContainer, (props) => props.id === id))\n .map((target) => (target as LayoutModel).props.path);\n _validDropTargetPaths = dropPaths;\n }\n\n // const start = window.performance.now();\n // translate the layout $position to drag-oriented co-ordinates, ignoring splitters\n\n _measurements = BoxModel.measure(_dragContainer, dropTargets);\n // console.log({ _measurements });\n // onsole.log({ measurements: _measurements });\n // const end = window.performance.now();\n // console.log(`[Draggable] measurements took ${end - start}ms`, _measurements);\n\n const dragZone = _measurements[path];\n\n _dragState = new DragState(\n dragZone,\n dragPos.x,\n dragPos.y,\n dragRect,\n intrinsicSize\n );\n\n const pctX = Math.round(_dragState.x.mousePct * 100);\n const pctY = Math.round(_dragState.y.mousePct * 100);\n\n window.addEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", dragMouseupHandler, false);\n window.addEventListener(\"keydown\", dragKeydownHandler, false);\n\n _simpleDrag = false;\n\n _dropTargetRenderer.prepare(dragRect, \"tab-only\");\n\n return _dragInstructions.DoNotTransform\n ? \"transform:none\"\n : // scale factor should be applied in caller, not here\n `transform:scale(${SCALE_FACTOR},${SCALE_FACTOR});transform-origin:${pctX}% ${pctY}%;`;\n}\n\nfunction dragMousemoveHandler(evt: MouseEvent) {\n const x = evt.clientX;\n const y = evt.clientY;\n const dragState = _dragState;\n const currentDropTarget = _dropTarget;\n let dropTarget;\n let newX, newY;\n\n if (dragState.update(\"x\", x)) {\n newX = dragState.x.pos;\n }\n\n if (dragState.update(\"y\", y)) {\n newY = dragState.y.pos;\n }\n\n if (newX === undefined && newY === undefined) {\n //onsole.log('both x and y are unchanged');\n } else {\n _dragMoveCallback?.(newX, newY);\n }\n\n if (_simpleDrag || _dragContainer === undefined) {\n return;\n }\n\n if (dragState.inBounds()) {\n dropTarget = identifyDropTarget(\n x,\n y,\n _dragContainer,\n _measurements,\n dragState.hasIntrinsicSize(),\n _validDropTargetPaths\n );\n } else {\n dropTarget = identifyDropTarget(\n dragState.dropX(),\n dragState.dropY(),\n _dragContainer,\n _measurements\n );\n }\n\n // did we have an existing droptarget which is no longer such ...\n if (currentDropTarget) {\n if (dropTarget == null || dropTarget.box !== currentDropTarget.box) {\n _dropTarget = null;\n }\n }\n\n if (dropTarget) {\n _dropTargetRenderer.draw(dropTarget, dragState);\n _dropTarget = dropTarget;\n }\n}\n\nfunction dragKeydownHandler(evt: KeyboardEvent) {\n if (evt.key === \"Escape\") {\n _dropTarget = null;\n onDragEnd();\n }\n}\n\nfunction dragMouseupHandler() {\n onDragEnd();\n}\n\nfunction onDragEnd() {\n if (_dropTarget) {\n const dropTarget =\n _dropTargetRenderer.hoverDropTarget ||\n DropTarget.getActiveDropTarget(_dropTarget);\n\n _dragEndCallback?.(dropTarget as DropTarget);\n\n _dropTarget = null;\n } else {\n _dragEndCallback?.();\n }\n\n _dragMoveCallback = null;\n _dragEndCallback = null;\n\n _dragContainer = undefined;\n _dropTargetRenderer.clear();\n _validDropTargetPaths = undefined;\n window.removeEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", dragMouseupHandler, false);\n window.removeEventListener(\"keydown\", dragKeydownHandler, false);\n}\n", "import classnames from \"clsx\";\nimport { ForwardedRef, forwardRef, HTMLAttributes } from \"react\";\nimport { registerComponent } from \"./registry/ComponentRegistry\";\n\nimport \"./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 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", "import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { CSSProperties, ForwardedRef, forwardRef } from \"react\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport { useSplitterResizing } from \"./useSplitterResizing\";\n\nimport \"./Flexbox.css\";\n\nconst classBase = \"hwFlexbox\";\n\nconst Flexbox = forwardRef(function Flexbox(\n props: FlexboxProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children,\n // cols: colsProp,\n column,\n className: classNameProp,\n flexFill,\n gap,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n spacing,\n splitterSize,\n style,\n ...rest\n } = props;\n\n const { content, rootRef } = useSplitterResizing({\n children,\n // cols: colsProp,\n onSplitterMoved,\n style,\n });\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n return (\n <div\n {...rest}\n className={className}\n // data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={\n {\n ...style,\n gap,\n \"--spacing\": spacing,\n } as CSSProperties\n }\n >\n {content}\n </div>\n );\n});\nFlexbox.displayName = \"Flexbox\";\n\nexport default Flexbox;\n", "import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport React, {\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Placeholder } from \"../placeholder\";\nimport { Splitter } from \"./Splitter\";\n\nimport {\n findSplitterAndPlaceholderPositions,\n gatherChildMeta,\n identifyResizeParties,\n PLACEHOLDER,\n SPLITTER,\n} from \"./flexbox-utils\";\nimport {\n ContentMeta,\n FlexSize,\n SplitterFactory,\n SplitterHookProps,\n SplitterHookResult,\n} from \"./flexboxTypes\";\n\nconst originalContentOnly = (meta: ContentMeta) =>\n !meta.splitter && !meta.placeholder;\n\nexport const useSplitterResizing = ({\n children: childrenProp,\n onSplitterMoved,\n style,\n}: SplitterHookProps): SplitterHookResult => {\n const rootRef = useRef<HTMLDivElement>(null);\n const metaRef = useRef<ContentMeta[]>();\n const contentRef = useRef<ReactElement[]>();\n const assignedKeys = useRef([]);\n const [, forceUpdate] = useState({});\n\n const setContent = (content: ReactElement[]) => {\n contentRef.current = content;\n forceUpdate({});\n };\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : React.isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const handleDragStart = useCallback(\n (index) => {\n const { current: contentMeta } = metaRef;\n if (contentMeta) {\n const [participants, bystanders] = identifyResizeParties(\n contentMeta,\n index\n );\n if (participants) {\n participants.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { size, minSize } = measureElement(el, dimension);\n contentMeta[index].currentSize = size;\n contentMeta[index].minSize = minSize;\n }\n });\n if (bystanders) {\n bystanders.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { [dimension]: size } = el.getBoundingClientRect();\n contentMeta[index].flexBasis = size;\n }\n });\n }\n }\n }\n },\n [dimension]\n );\n\n const handleDrag = useCallback(\n (idx, distance) => {\n if (contentRef.current && metaRef.current) {\n setContent(\n resizeContent(\n contentRef.current,\n metaRef.current,\n distance,\n dimension\n )\n );\n }\n },\n [dimension]\n );\n\n const handleDragEnd = useCallback(() => {\n const contentMeta = metaRef.current;\n if (contentMeta) {\n onSplitterMoved?.(contentMeta.filter(originalContentOnly));\n }\n contentMeta?.forEach((meta) => {\n meta.currentSize = undefined;\n meta.flexBasis = undefined;\n meta.flexOpen = false;\n });\n }, [onSplitterMoved]);\n\n const createSplitter: SplitterFactory = useCallback(\n (i) => {\n return React.createElement(Splitter, {\n column: isColumn,\n index: i,\n key: `splitter-${i}`,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n onDragStart: handleDragStart,\n });\n },\n [handleDrag, handleDragEnd, handleDragStart, isColumn]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(\n children,\n dimension,\n createSplitter,\n assignedKeys.current\n );\n metaRef.current = meta;\n contentRef.current = content;\n }, [children, createSplitter, dimension]);\n\n return {\n content: contentRef.current || [],\n rootRef,\n };\n};\n\nfunction buildContent(\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n createSplitter: SplitterFactory,\n keys: any[]\n): [any[], ContentMeta[]] {\n const childMeta = gatherChildMeta(children, dimension);\n const splitterAndPlaceholderPositions =\n findSplitterAndPlaceholderPositions(childMeta);\n const content = [];\n const meta: ContentMeta[] = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (i === 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true, shim: true });\n }\n if (child.key == null) {\n const key = keys[i] || (keys[i] = getUniqueId());\n content.push(React.cloneElement(child, { key }));\n } else {\n content.push(child);\n }\n meta.push(childMeta[i]);\n\n if (i > 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true });\n } else if (splitterAndPlaceholderPositions[i] & SPLITTER) {\n content.push(createSplitter(content.length));\n meta.push({ splitter: true });\n }\n }\n return [content, meta];\n}\n\nfunction resizeContent(\n content: ReactElement[],\n contentMeta: ContentMeta[],\n distance: number,\n dimension: \"width\" | \"height\"\n) {\n const metaUpdated = updateMeta(contentMeta, distance);\n if (!metaUpdated) {\n return content;\n }\n\n return content.map((child, idx) => {\n const meta = contentMeta[idx];\n const { currentSize, flexOpen, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n if (hasCurrentSize || flexOpen) {\n const { flexBasis: actualFlexBasis } = child.props.style || {};\n const size = hasCurrentSize ? meta.currentSize : flexBasis;\n if (size !== actualFlexBasis) {\n return React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexBasis: size,\n [dimension]: \"auto\",\n },\n });\n } else {\n return child;\n }\n } else {\n return child;\n }\n });\n}\n\n//TODO detect cursor move beyond drag limit and suspend further resize until cursoe re-engages with splitter\nfunction updateMeta(contentMeta: ContentMeta[], distance: number) {\n const resizeTargets: number[] = [];\n\n contentMeta.forEach((meta, idx) => {\n if (meta.currentSize !== undefined) {\n resizeTargets.push(idx);\n }\n });\n\n // we want the target being reduced first, this may limit the distance we can apply\n const target1 = distance < 0 ? resizeTargets[0] : resizeTargets[1];\n\n const { currentSize = 0, minSize = 0 } = contentMeta[target1];\n if (currentSize === minSize) {\n // size is already 0, we cannot go further\n return false;\n } else if (Math.abs(distance) > currentSize - minSize) {\n // reduce to 0\n const multiplier = distance < 0 ? -1 : 1;\n distance = Math.max(0, currentSize - minSize) * multiplier;\n }\n\n const leadingItem = contentMeta[resizeTargets[0]] as ContentMeta;\n const { currentSize: leadingSize = 0 } = leadingItem;\n leadingItem.currentSize = leadingSize + distance;\n\n const trailingItem = contentMeta[resizeTargets[1]] as ContentMeta;\n const { currentSize: trailingSize = 0 } = trailingItem;\n trailingItem.currentSize = trailingSize - distance;\n\n return true;\n}\n\nfunction createPlaceholder(index: number) {\n return React.createElement(Placeholder, {\n shim: index === 0,\n key: `placeholder-${index}`,\n } as any);\n}\n\nfunction measureElement(\n el: HTMLElement,\n dimension: \"width\" | \"height\"\n): FlexSize {\n const { [dimension]: size } = el.getBoundingClientRect();\n const style = getComputedStyle(el);\n const minSizeVal = style.getPropertyValue(`min-${dimension}`);\n const minSize = minSizeVal.endsWith(\"px\") ? parseInt(minSizeVal, 10) : 0;\n return { size, minSize };\n}\n", "import cx from \"clsx\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { LayoutStartPanel } from \"./LayoutStartPanel\";\nimport { View, ViewProps } from \"../layout-view\";\n\nimport \"./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 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);\n", "import { Button } from \"@salt-ds/core\";\nimport { HTMLAttributes, useMemo, useState } from \"react\";\nimport { QueryReponse, useViewContext } from \"../layout-view\";\n\nimport \"./LayoutStartPanel.css\";\n\nconst classBase = \"vuuLayoutStartPanel\";\n\nexport interface LayoutStartPanelProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nexport const LayoutStartPanel = (htmlAttributes: LayoutStartPanelProps) => {\n const { dispatch, path } = useViewContext();\n const [displayState, setDisplayState] = useState<\n \"initial\" | \"nested\" | undefined\n >();\n\n useMemo(() => {\n dispatch?.({\n type: \"query\",\n path,\n query: \"PARENT_CONTAINER\",\n }).then((response) => {\n if ((response as QueryReponse)?.parentContainerId === \"main-tabs\") {\n setDisplayState(\"initial\");\n } else {\n setDisplayState(\"nested\");\n }\n });\n }, [dispatch, path]);\n\n if (displayState === undefined) {\n return null;\n }\n\n const showInitialState = displayState === \"initial\";\n\n return (\n <div {...htmlAttributes} className={classBase}>\n {showInitialState ? (\n <>\n <header className={`${classBase}-title`}>\n Start by adding a table\n </header>\n <div className={`${classBase}-text`}>\n To add a table, drag any of the Vuu Tables to this area or click the\n button below\n </div>\n </>\n ) : null}\n <Button\n className={`${classBase}-addButton`}\n data-icon=\"add\"\n variant=\"cta\"\n />\n </div>\n );\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport {\n ReactElement,\n RefObject,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { QueryReponse, ViewDispatch } from \"./ViewContext\";\nimport { ViewAction } from \"./viewTypes\";\n\nexport type ContributionLocation = \"post-title\" | \"pre-title\";\n\nexport type Contribution = {\n index?: number;\n location?: ContributionLocation;\n content: ReactElement;\n};\n\nexport const useViewActionDispatcher = (\n id: string,\n root: RefObject<HTMLDivElement>,\n viewPath?: string,\n dropTargets?: string[]\n): [ViewDispatch, Contribution[] | undefined] => {\n const { loadSessionState, purgeSessionState, purgeState, saveSessionState } =\n usePersistentState();\n\n const [contributions, setContributions] = useState<Contribution[]>(\n loadSessionState(id, \"contributions\") ?? []\n );\n const dispatchLayoutAction = useLayoutProviderDispatch();\n const updateContributions = useCallback(\n (location: ContributionLocation, content: ReactElement) => {\n const updatedContributions = contributions.concat([\n { location, content },\n ]);\n saveSessionState(id, \"contributions\", updatedContributions);\n setContributions(updatedContributions);\n },\n [contributions, id, saveSessionState]\n );\n\n const clearContributions = useCallback(() => {\n purgeSessionState(id, \"contributions\");\n setContributions([]);\n }, [id, purgeSessionState]);\n\n const handleRemove = useCallback(() => {\n const ds = loadSessionState(id, \"data-source\") as DataSource;\n if (ds) {\n ds.unsubscribe();\n }\n purgeSessionState(id);\n purgeState(id);\n dispatchLayoutAction({ type: \"remove\", path: viewPath });\n }, [\n dispatchLayoutAction,\n id,\n loadSessionState,\n purgeSessionState,\n purgeState,\n viewPath,\n ]);\n\n const handleMouseDown = useCallback(\n async (evt, index, preDragActivity): Promise<boolean> => {\n evt.stopPropagation();\n const dragRect = root.current?.getBoundingClientRect();\n return new Promise((resolve, reject) => {\n dispatchLayoutAction({\n type: \"drag-start\",\n evt,\n path: index === undefined ? viewPath : `${viewPath}.${index}`,\n dragRect,\n preDragActivity,\n dropTargets,\n resolveDragStart: resolve,\n rejectDragStart: reject,\n } as DragStartAction);\n });\n },\n [root, dispatchLayoutAction, viewPath, dropTargets]\n );\n\n const dispatchAction = useCallback(\n async <A extends ViewAction = ViewAction>(\n action: A,\n evt?: SyntheticEvent\n ): Promise<boolean | QueryReponse | void> => {\n const { type } = action;\n switch (type) {\n case \"maximize\":\n case \"minimize\":\n case \"restore\":\n return dispatchLayoutAction({ type, path: action.path ?? viewPath });\n case \"remove\":\n return handleRemove();\n case \"mousedown\":\n return handleMouseDown(evt, action.index, action.preDragActivity);\n case \"add-toolbar-contribution\":\n return updateContributions(action.location, action.content);\n case \"remove-toolbar-contribution\":\n return clearContributions();\n case \"query\":\n return dispatchLayoutAction({\n type,\n path: action.path,\n query: action.query,\n });\n return;\n default: {\n return undefined;\n }\n }\n },\n [\n dispatchLayoutAction,\n viewPath,\n handleRemove,\n handleMouseDown,\n updateContributions,\n clearContributions,\n ]\n );\n\n return [dispatchAction, contributions];\n};\n", "import {\n MutableRefObject,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n LayoutActionType,\n LayoutChangeHandler,\n LayoutChangeReason,\n layoutFromJson,\n LayoutJSON,\n layoutQuery,\n layoutReducer,\n LayoutReducerAction,\n layoutToJSON,\n processLayoutElement,\n SaveAction,\n} from \"../layout-reducer\";\nimport { findTarget, getChildProp, getProp, getProps, typeOf } from \"../utils\";\nimport {\n LayoutProviderContext,\n LayoutProviderDispatch,\n} from \"./LayoutProviderContext\";\nimport { useLayoutDragDrop } from \"./useLayoutDragDrop\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst withDropTarget = (props: any) => props.dropTarget;\nconst shouldSave = (action: LayoutReducerAction) =>\n [\n \"drag-drop\",\n \"remove\",\n \"set-title\",\n \"splitter-resize\",\n \"switch-tab\",\n ].includes(action.type);\n\nconst getLayoutChangeReason = (\n action: LayoutReducerAction | SaveAction\n): LayoutChangeReason => {\n switch (action.type) {\n case \"switch-tab\":\n // TODO how can we make this more robust, shouldn't rely on 'main-tabs'\n if (action.id === \"main-tabs\") {\n return \"switch-active-layout\";\n } else {\n return \"switch-active-tab\";\n }\n case \"save\":\n return \"save-feature-props\";\n case \"drag-drop\":\n return \"drag-drop-operation\";\n case \"remove\":\n return \"remove-component\";\n case \"splitter-resize\":\n return \"resize-component\";\n case \"set-title\":\n return \"edit-feature-title\";\n default:\n throw Error(\"unknown layout action\");\n }\n};\n\nexport interface LayoutProviderProps {\n children: ReactElement;\n createNewChild?: (index?: number) => ReactElement;\n pathToDropTarget?: string;\n layout?: LayoutJSON;\n onLayoutChange?: LayoutChangeHandler;\n}\n\nexport const LayoutProviderVersion = () => {\n const version = useLayoutProviderVersion();\n return <div>{`Context: ${version} `}</div>;\n};\n\nexport const LayoutProvider = (props: LayoutProviderProps): ReactElement => {\n const { children, createNewChild, pathToDropTarget, layout, onLayoutChange } =\n props;\n const state = useRef<ReactElement | undefined>(undefined);\n const childrenRef = useRef<ReactElement>(children);\n\n const [, forceRefresh] = useState<unknown>(null);\n\n const serializeState = useCallback(\n (source, layoutChangeReason: LayoutChangeReason) => {\n if (onLayoutChange) {\n const targetContainer =\n findTarget(source, withDropTarget) || state.current;\n const isDraggableLayout = typeOf(targetContainer) === \"DraggableLayout\";\n const target = isDraggableLayout\n ? getProps(targetContainer).children[0]\n : targetContainer;\n const serializedModel = layoutToJSON(target);\n onLayoutChange(serializedModel, layoutChangeReason);\n }\n },\n [onLayoutChange]\n );\n\n const dispatchLayoutAction = useCallback(\n (action: LayoutReducerAction, suppressSave = false) => {\n const nextState = layoutReducer(state.current as ReactElement, action);\n if (nextState !== state.current) {\n state.current = nextState;\n forceRefresh({});\n if (!suppressSave && shouldSave(action)) {\n serializeState(nextState, getLayoutChangeReason(action));\n }\n }\n },\n [forceRefresh, serializeState]\n );\n\n const layoutActionDispatcher = useCallback<LayoutProviderDispatch>(\n (action) => {\n switch (action.type) {\n case \"drag-start\": {\n prepareToDragLayout(action);\n break;\n }\n case \"save\": {\n serializeState(state.current, getLayoutChangeReason(action));\n break;\n }\n case \"query\":\n if (action.query === \"PARENT_CONTAINER\") {\n return layoutQuery(action.query, action.path, state.current);\n }\n break;\n\n default: {\n dispatchLayoutAction(action);\n break;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatchLayoutAction, serializeState]\n );\n\n const prepareToDragLayout = useLayoutDragDrop(\n state as MutableRefObject<ReactElement>,\n layoutActionDispatcher,\n pathToDropTarget\n );\n\n useEffect(() => {\n if (layout) {\n const targetContainer = findTarget(\n state.current as never,\n withDropTarget\n ) as ReactElement;\n if (targetContainer) {\n const target = getChildProp(targetContainer);\n const newLayout = layoutFromJson(\n layout,\n `${targetContainer.props.path}.0`\n );\n const action = target\n ? {\n type: LayoutActionType.REPLACE,\n target,\n replacement: newLayout,\n }\n : {\n type: LayoutActionType.ADD,\n path: targetContainer.props.path,\n component: newLayout,\n };\n dispatchLayoutAction(action, true);\n } else if (layout.id === getProp(state.current, \"id\")) {\n const newLayout = layoutFromJson(layout, \"0\");\n const action = {\n type: LayoutActionType.REPLACE,\n target: state.current,\n replacement: newLayout,\n };\n dispatchLayoutAction(action, true);\n }\n }\n }, [dispatchLayoutAction, layout]);\n\n if (state.current === undefined) {\n state.current = processLayoutElement(children);\n } else if (children !== childrenRef.current) {\n state.current = processLayoutElement(children, state.current);\n childrenRef.current = children;\n }\n\n return (\n <LayoutProviderContext.Provider\n value={{\n createNewChild,\n dispatchLayoutProvider: layoutActionDispatcher,\n version: 0,\n }}\n >\n {state.current}\n </LayoutProviderContext.Provider>\n );\n};\n\nexport const useLayoutProviderDispatch = () => {\n const { dispatchLayoutProvider } = useContext(LayoutProviderContext);\n return dispatchLayoutProvider;\n};\n\nexport const useLayoutCreateNewChild = () => {\n const { createNewChild } = useContext(LayoutProviderContext);\n return createNewChild;\n};\n\nexport const useLayoutProviderVersion = () => {\n const { version } = useContext(LayoutProviderContext);\n return version;\n};\n", "import { dimension, rect, rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProps, resetPath } from \"../utils\";\nconst placeHolderProps = { \"data-placeholder\": true, \"data-resizeable\": true };\n\nconst NO_STYLE = {};\nconst auto = \"auto\";\nconst defaultFlexStyle = {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n height: auto,\n width: auto,\n};\n\nconst CROSS_DIMENSION = {\n height: \"width\",\n width: \"height\",\n};\n\nexport type flexDirection = \"row\" | \"column\";\n\ntype contraDimension = dimension;\ntype flexDimensionTuple = [dimension, contraDimension, flexDirection];\nexport type position = {\n height?: number;\n width?: number;\n};\n\nexport const getFlexDimensions = (flexDirection: flexDirection = \"row\") => {\n if (flexDirection === \"row\") {\n return [\"width\", \"height\", \"column\"] as flexDimensionTuple;\n } else {\n return [\"height\", \"width\", \"row\"] as flexDimensionTuple;\n }\n};\n\nconst isPercentageSize = (value: string | number) =>\n typeof value === \"string\" && value.endsWith(\"%\");\n\nexport const getIntrinsicSize = (\n component: ReactElement\n): { height?: number; width?: number } | undefined => {\n const { style: { width = auto, height = auto } = NO_STYLE } = component.props;\n\n const numHeight = typeof height === \"number\";\n const numWidth = typeof width === \"number\";\n\n if (numHeight && numWidth) {\n return { height, width };\n } else if (numHeight) {\n return { height };\n } else if (numWidth) {\n return { width };\n } else {\n return undefined;\n }\n};\n\nexport function getFlexStyle(\n component: ReactElement,\n dimension: dimension,\n pos?: DropPos\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n } else {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n}\n\nexport function hasUnboundedFlexStyle(component: ReactElement) {\n const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } =\n component.props;\n if (typeof flex === \"number\") {\n return true;\n }\n if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {\n return true;\n }\n if (typeof flexBasis === \"number\") {\n return false;\n }\n return true;\n}\n\nexport function getFlexOrIntrinsicStyle(\n component: ReactElement,\n dimension: dimension,\n pos: position\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [dimension]: intrinsicSize = auto,\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (intrinsicSize !== auto) {\n if (isPercentageSize(intrinsicSize)) {\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n [dimension]: undefined,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n return {\n flexBasis: intrinsicSize,\n flexGrow: 0,\n flexShrink: 0,\n [dimension]: intrinsicSize,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n return {\n ...intrinsicStyles,\n [crossDimension]: intrinsicCrossSize,\n };\n}\n\nexport function wrapIntrinsicSizeComponentWithFlexbox(\n component: ReactElement,\n flexDirection: flexDirection,\n path: string,\n clientRect?: rect,\n dropRect?: rectTuple\n) {\n const wrappedChildren = [];\n let pathIndex = 0;\n let endPlaceholder;\n\n if (clientRect && dropRect) {\n let startPlaceholder;\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n\n if (startPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n } else {\n endPlaceholder = true;\n }\n\n const { version = 0, style } = getProps(component);\n\n wrappedChildren.push(\n resetPath(component, `${path}.${pathIndex++}`, {\n version: version + 1,\n style: {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n },\n })\n );\n\n if (endPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, 0, undefined, {\n [`data-${flexDirection}-placeholder`]: true,\n })\n );\n }\n\n return createFlexbox(\n flexDirection,\n { resizeable: false, style: { flexBasis: \"auto\" } },\n wrappedChildren,\n path\n );\n}\n\nconst getFlexValue = (\n flexBasis: number,\n flexFill: boolean\n): number | undefined => {\n if (flexFill) {\n return undefined;\n }\n return flexBasis === 0 ? 1 : 0;\n};\n\nexport function createFlexbox(\n flexDirection: flexDirection,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n children: ReactNode,\n path: string\n) {\n const id = uuid();\n const { flexFill, style, resizeable = true } = props;\n const { flexBasis = flexFill ? undefined : \"auto\" } = style;\n const flex = getFlexValue(flexBasis, flexFill);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.createElement<any>(\n ComponentRegistry.Flexbox,\n {\n id,\n key: id,\n path,\n flexFill,\n style: {\n ...style,\n flexDirection,\n flexBasis,\n flexGrow: flex,\n flexShrink: flex,\n },\n resizeable,\n },\n children\n );\n}\n\nconst baseStyle = { flexGrow: 1, flexShrink: 1 };\n\nexport function createPlaceHolder(\n path: string,\n size: number,\n style?: CSSProperties,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props?: any\n) {\n const id = uuid();\n return React.createElement(\"div\", {\n ...placeHolderProps,\n ...props,\n \"data-path\": path,\n id,\n key: id,\n style: { ...baseStyle, ...style, flexBasis: size },\n });\n}\n", "import React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport {\n findTarget,\n followPath,\n followPathToParent,\n getProp,\n getProps,\n typeOf,\n} from \"../utils\";\nimport { getIntrinsicSize } from \"./flexUtils\";\nimport {\n getInsertTabBeforeAfter,\n insertBesideChild,\n insertIntoContainer,\n} from \"./insert-layout-element\";\nimport { moveChild } from \"./move-layout-element\";\nimport {\n AddAction,\n DragDropAction,\n LayoutActionType,\n LayoutReducerAction,\n MaximizeAction,\n SetPropAction,\n SetPropsAction,\n SwitchTabAction,\n} from \"./layoutTypes\";\nimport { LayoutProps } from \"./layoutUtils\";\nimport { removeChild } from \"./remove-layout-element\";\nimport {\n replaceChild,\n swapChild,\n _replaceChild,\n} from \"./replace-layout-element\";\nimport { resizeFlexChild, resizeFlexChildren } from \"./resize-flex-children\";\nimport { wrap } from \"./wrap-layout-element\";\n\nexport const layoutReducer = (\n state: ReactElement,\n action: LayoutReducerAction\n): ReactElement => {\n switch (action.type) {\n case LayoutActionType.ADD:\n return addChild(state, action);\n case LayoutActionType.DRAG_DROP:\n return dragDrop(state, action);\n case LayoutActionType.MAXIMIZE:\n return setChildProps(state, action);\n case LayoutActionType.REMOVE:\n return removeChild(state, action);\n case LayoutActionType.REPLACE:\n return replaceChild(state, action);\n case LayoutActionType.SET_PROP:\n return setProp(state, action);\n case LayoutActionType.SET_PROPS:\n return setProps(state, action);\n case LayoutActionType.SET_TITLE:\n return setProp(state, {\n type: \"set-prop\",\n path: action.path,\n propName: \"title\",\n propValue: action.title,\n });\n case LayoutActionType.SPLITTER_RESIZE:\n return resizeFlexChildren(state, action);\n case LayoutActionType.LAYOUT_RESIZE:\n return resizeFlexChild(state, action);\n case LayoutActionType.SWITCH_TAB:\n return switchTab(state, action);\n case LayoutActionType.MOVE_CHILD:\n return moveChild(state, action);\n default:\n return state;\n }\n};\n\nconst switchTab = (state: ReactElement, { path, nextIdx }: SwitchTabAction) => {\n const target = followPath(state, path, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const replacement = React.cloneElement<any>(target, {\n active: nextIdx,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProp = (\n state: ReactElement,\n { path, propName, propValue }: SetPropAction\n) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, {\n [propName]: propValue,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProps = (state: ReactElement, { path, props }: SetPropsAction) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, props);\n return swapChild(state, target, replacement);\n};\n\nconst setChildProps = (state: ReactElement, { path, type }: MaximizeAction) => {\n if (path) {\n const target = followPath(state, path, true);\n return swapChild(state, target, target, type);\n } else {\n return state;\n }\n};\n\nconst dragDrop = (\n layoutRoot: ReactElement,\n action: DragDropAction\n): ReactElement => {\n const {\n draggedReactElement: newComponent,\n dragInstructions,\n dropTarget,\n } = action;\n const existingComponent = dropTarget.component as ReactElement;\n const { pos } = dropTarget;\n const destinationTabstrip =\n pos?.position?.Header && typeOf(existingComponent) === \"Stack\";\n const { id, version } = getProps(newComponent);\n const intrinsicSize = getIntrinsicSize(newComponent);\n let newLayoutRoot: ReactElement;\n if (destinationTabstrip) {\n const [targetTab, insertionPosition] = getInsertTabBeforeAfter(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n existingComponent!,\n pos\n );\n if (targetTab === undefined) {\n newLayoutRoot = insertIntoContainer(\n layoutRoot,\n existingComponent,\n newComponent\n );\n } else {\n newLayoutRoot = insertBesideChild(\n layoutRoot,\n targetTab,\n newComponent,\n insertionPosition\n );\n }\n } else if (!intrinsicSize && pos?.position?.Centre) {\n newLayoutRoot = _replaceChild(\n layoutRoot,\n existingComponent as ReactElement,\n newComponent\n );\n } else {\n newLayoutRoot = dropLayoutIntoContainer(\n layoutRoot,\n dropTarget as DropTarget,\n newComponent\n );\n }\n\n if (dragInstructions.DoNotRemove) {\n return newLayoutRoot;\n }\n\n const finalTarget = findTarget(\n newLayoutRoot,\n (props: LayoutProps) => props.id === id && props.version === version\n ) as ReactElement;\n const finalPath = getProp(finalTarget, \"path\");\n return removeChild(newLayoutRoot, { path: finalPath, type: \"remove\" });\n};\n\nconst addChild = (\n layoutRoot: ReactElement,\n { path: containerPath, component }: AddAction\n) => {\n return insertIntoContainer(\n layoutRoot,\n followPath(layoutRoot, containerPath) as ReactElement,\n component\n );\n};\n\nconst dropLayoutIntoContainer = (\n layoutRoot: ReactElement,\n dropTarget: DropTarget,\n newComponent: ReactElement\n): ReactElement => {\n const { component, pos, clientRect, dropRect } = dropTarget;\n const existingComponent = component as ReactElement;\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n\n if (existingComponentPath === \"0.0\") {\n return wrap(\n layoutRoot,\n existingComponent as ReactElement,\n newComponent,\n pos\n );\n }\n\n const targetContainer = followPathToParent(\n layoutRoot,\n existingComponentPath\n ) as ReactElement;\n\n if (withTheGrain(pos, targetContainer)) {\n const insertionPosition = pos.position.SouthOrEast ? \"after\" : \"before\";\n return insertBesideChild(\n layoutRoot,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect\n );\n }\n\n if (!withTheGrain(pos, targetContainer)) {\n return wrap(\n layoutRoot,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n );\n }\n\n if (isContainer(typeOf(targetContainer) as string)) {\n return wrap(layoutRoot, existingComponent, newComponent, pos);\n }\n\n throw Error(`no support right now for position = ${pos.position}`);\n};\n\nconst withTheGrain = (pos: DropPos, container: ReactElement) => {\n if (pos.position.Centre) {\n return isTerrace(container) || isTower(container);\n }\n\n return pos.position.NorthOrSouth\n ? isTower(container)\n : pos.position.EastOrWest\n ? isTerrace(container)\n : false;\n};\n\nconst isTower = (container: ReactElement) => {\n return (\n typeOf(container) === \"Flexbox\" &&\n container.props.style.flexDirection === \"column\"\n );\n};\n\nconst isTerrace = (container: ReactElement) => {\n return (\n typeOf(container) === \"Flexbox\" &&\n container.props.style.flexDirection !== \"column\"\n );\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { getProp, getProps, nextStep, resetPath, typeOf } from \"../utils\";\nimport {\n createPlaceHolder,\n flexDirection,\n getFlexDimensions,\n getFlexOrIntrinsicStyle,\n getIntrinsicSize,\n wrapIntrinsicSizeComponentWithFlexbox,\n} from \"./flexUtils\";\nimport { LayoutModel } from \"./layoutTypes\";\nimport {\n getDefaultTabLabel,\n getManagedDimension,\n LayoutProps,\n} from \"./layoutUtils\";\n\ntype insertionPosition = \"before\" | \"after\";\n\nexport function getInsertTabBeforeAfter(stack: LayoutModel, pos: DropPos) {\n const tabs = stack.props.children;\n const tabCount = tabs.length;\n const { index = -1, positionRelativeToTab = \"after\" } = pos.tab || {};\n return index === -1 || index >= tabCount\n ? [tabs[tabCount - 1], \"after\"]\n : [tabs[index] ?? null, positionRelativeToTab];\n}\n\nexport function insertIntoContainer(\n container: ReactElement,\n targetContainer: ReactElement,\n newComponent: ReactElement\n): ReactElement {\n const {\n active: containerActive,\n children: containerChildren = [],\n path: containerPath,\n } = getProps(container) as LayoutProps;\n\n const existingComponentPath = getProp(targetContainer, \"path\");\n const { idx, finalStep } = nextStep(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n containerPath!,\n existingComponentPath,\n true\n );\n const [insertedIdx, children] = finalStep\n ? insertIntoChildren(container, containerChildren, newComponent)\n : [\n containerActive,\n containerChildren?.map((child, index) =>\n index === idx\n ? (insertIntoContainer(\n child,\n targetContainer,\n newComponent\n ) as ReactElement)\n : child\n ),\n ];\n const active =\n typeOf(container) === \"Stack\"\n ? Array.isArray(insertedIdx)\n ? (insertedIdx[0] as number)\n : insertedIdx\n : containerActive;\n\n return React.cloneElement(container, { active }, children);\n}\n\nconst getDefaultTitle = (\n containerType: string | undefined,\n component: ReactElement,\n index: number,\n existingLabels: string[]\n) =>\n containerType === \"Stack\"\n ? getDefaultTabLabel(component, index, existingLabels)\n : undefined;\n\nconst getChildrenTitles = (children: ReactElement[]) =>\n children.map((child) => child.props.title);\n\nfunction insertIntoChildren(\n container: ReactElement,\n containerChildren: ReactElement[],\n newComponent: ReactElement\n): [number, ReactElement[]] {\n const containerPath = getProp(container, \"path\");\n const count = containerChildren?.length;\n const {\n id = uuid(),\n title = getDefaultTitle(\n typeOf(container),\n newComponent,\n count ?? 0,\n getChildrenTitles(containerChildren)\n ),\n } = getProps(newComponent);\n\n if (count) {\n return [\n count,\n containerChildren.concat(\n resetPath(newComponent, `${containerPath}.${count}`, {\n id,\n key: id,\n title,\n })\n ),\n ];\n } else {\n return [0, [resetPath(newComponent, `${containerPath}.0`, { id, title })]];\n }\n}\n\nexport function insertBesideChild(\n container: ReactElement,\n existingComponent: any,\n newComponent: any,\n insertionPosition: insertionPosition,\n pos?: DropPos,\n clientRect?: any,\n dropRect?: any\n): ReactElement {\n const {\n active: containerActive,\n children: containerChildren,\n path: containerPath,\n } = getProps(container);\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n const { idx, finalStep } = nextStep(containerPath, existingComponentPath);\n const [insertedIdx, children] = finalStep\n ? updateChildren(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n pos!,\n clientRect,\n dropRect\n )\n : [\n containerActive,\n containerChildren.map((child: ReactElement, index: number) =>\n index === idx\n ? insertBesideChild(\n child,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect\n )\n : child\n ),\n ];\n\n const active = typeOf(container) === \"Stack\" ? insertedIdx : containerActive;\n return React.cloneElement(container, { active }, children);\n}\n\nfunction updateChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: insertionPosition,\n pos: DropPos,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: DropTarget[\"dropRect\"]\n) {\n const intrinsicSize = getIntrinsicSize(newComponent);\n if (intrinsicSize?.width && intrinsicSize?.height) {\n return insertIntrinsicSizedComponent(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n clientRect,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dropRect!\n );\n } else {\n return insertFlexComponent(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n pos?.width || pos?.height,\n clientRect\n );\n }\n}\n\nconst getLeadingPlaceholderSize = (\n flexDirection: flexDirection,\n insertionPosition: insertionPosition,\n { top, right, bottom, left }: DropTarget[\"clientRect\"],\n [rectLeft, rectTop, rectRight, rectBottom]: rectTuple\n) => {\n if (flexDirection === \"column\" && insertionPosition === \"before\") {\n return rectTop - top;\n } else if (flexDirection === \"column\") {\n return bottom - rectBottom;\n } else if (flexDirection === \"row\" && insertionPosition === \"before\") {\n return rectLeft - left;\n } else if (flexDirection === \"row\") {\n return right - rectRight;\n }\n};\n\nfunction insertIntrinsicSizedComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: insertionPosition,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: rectTuple\n) {\n const {\n style: { flexDirection },\n } = getProps(container);\n const [dimension, crossDimension, contraDirection] =\n getFlexDimensions(flexDirection);\n const { [crossDimension]: intrinsicCrossSize, [dimension]: intrinsicSize } =\n getIntrinsicSize(newComponent) as { height: number; width: number };\n const path = getProp(containerChildren[idx], \"path\");\n\n const placeholderSize = getLeadingPlaceholderSize(\n flexDirection,\n insertionPosition,\n clientRect,\n dropRect\n );\n\n const [itemToInsert, size] =\n intrinsicCrossSize < clientRect[crossDimension]\n ? [\n wrapIntrinsicSizeComponentWithFlexbox(\n newComponent,\n contraDirection,\n path,\n clientRect,\n dropRect\n ),\n intrinsicSize,\n ]\n : [newComponent, undefined];\n\n const placeholder = placeholderSize\n ? createPlaceHolder(path, placeholderSize, { flexGrow: 0, flexShrink: 0 })\n : undefined;\n\n if (intrinsicCrossSize > clientRect[crossDimension]) {\n containerChildren = containerChildren.map((child) => {\n if (getProp(child, \"placeholder\")) {\n return child;\n } else {\n const { [crossDimension]: intrinsicCrossChildSize } = getIntrinsicSize(\n child\n ) as {\n height: number;\n width: number;\n };\n if (\n intrinsicCrossChildSize &&\n intrinsicCrossChildSize < intrinsicCrossSize\n ) {\n return wrapIntrinsicSizeComponentWithFlexbox(\n child,\n contraDirection,\n getProp(child, \"path\")\n );\n } else {\n return child;\n }\n }\n });\n }\n\n return insertFlexComponent(\n container,\n containerChildren,\n idx,\n itemToInsert,\n insertionPosition,\n size,\n clientRect,\n placeholder\n );\n}\n\nfunction insertFlexComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: \"before\" | \"after\",\n size: number | undefined,\n targetRect: DropTarget[\"clientRect\"],\n placeholder?: ReactElement\n) {\n const containerPath = getProp(container, \"path\");\n let insertedIdx = 0;\n const children =\n !containerChildren || containerChildren.length === 0\n ? [newComponent]\n : containerChildren\n .reduce<ReactElement[]>((arr, child, i) => {\n if (idx === i) {\n const [existingComponent, insertedComponent] =\n getStyledComponents(container, child, newComponent, targetRect);\n if (insertionPosition === \"before\") {\n if (placeholder) {\n arr.push(placeholder, insertedComponent, existingComponent);\n } else {\n arr.push(insertedComponent, existingComponent);\n }\n } else {\n if (placeholder) {\n arr.push(existingComponent, insertedComponent, placeholder);\n } else {\n arr.push(existingComponent, insertedComponent);\n }\n }\n insertedIdx = arr.indexOf(insertedComponent);\n } else {\n arr.push(child);\n }\n return arr;\n }, [])\n .map((child, i) =>\n i < insertedIdx ? child : resetPath(child, `${containerPath}.${i}`)\n );\n\n return [insertedIdx, children];\n}\n\nfunction getStyledComponents(\n container: LayoutModel,\n existingComponent: ReactElement,\n newComponent: ReactElement,\n targetRect: DropTarget[\"clientRect\"]\n): [ReactElement, ReactElement] {\n const id = uuid();\n let { version = 0 } = getProps(newComponent);\n version += 1;\n if (typeOf(container) === \"Flexbox\") {\n const [dim] = getManagedDimension(container.props.style);\n const splitterSize = 6;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const size = { [dim]: (targetRect[dim] - splitterSize) / 2 };\n const existingComponentStyle = getFlexOrIntrinsicStyle(\n existingComponent,\n dim,\n size\n );\n const newComponentStyle = getFlexOrIntrinsicStyle(newComponent, dim, size);\n\n return [\n React.cloneElement(existingComponent, {\n style: existingComponentStyle,\n }),\n React.cloneElement(newComponent, {\n id,\n version,\n style: newComponentStyle,\n }),\n ];\n } else {\n const {\n style: { left: _1, top: _2, flex: _3, ...style } = {\n left: undefined,\n top: undefined,\n flex: undefined,\n },\n } = getProps(newComponent);\n return [\n existingComponent,\n React.cloneElement(newComponent, {\n id,\n version,\n style: { ...style, flex: \"1 1 0px\" },\n }),\n ];\n }\n}\n", "import { dimension, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { cloneElement, CSSProperties, ReactElement } from \"react\";\nimport {\n ComponentWithId,\n ComponentRegistry,\n isContainer,\n isLayoutComponent,\n} from \"../registry/ComponentRegistry\";\nimport { TabLabelFactory } from \"../stack\";\nimport {\n getPersistentState,\n hasPersistentState,\n setPersistentState,\n} from \"../use-persistent-state\";\nimport { expandFlex, followPathToParent, getProps, typeOf } from \"../utils\";\nimport { LayoutJSON, LayoutModel, layoutType } from \"./layoutTypes\";\n\nexport const getManagedDimension = (\n style: CSSProperties\n): [dimension, dimension] =>\n style.flexDirection === \"column\" ? [\"height\", \"width\"] : [\"width\", \"height\"];\n\nconst theKidHasNoStyle: CSSProperties = {};\n\nexport const applyLayoutProps = (component: ReactElement, path = \"0\") => {\n const [layoutProps, children] = getChildLayoutProps(\n typeOf(component) as string,\n component.props,\n path\n );\n return React.cloneElement(component, layoutProps, children);\n};\n\nexport interface LayoutProps extends ComponentWithId {\n active?: number;\n \"data-path\"?: string;\n children?: ReactElement[];\n column?: any;\n dropTarget?: any;\n key: string;\n layout?: any;\n path?: string;\n resizeable?: boolean;\n style: CSSProperties;\n type?: string;\n version?: number;\n}\n\n/**\n * parse the declarative JSX and clone adding layout attributes\n */\nexport const processLayoutElement = (\n layoutElement: ReactElement,\n previousLayout?: ReactElement\n): ReactElement => {\n const type = typeOf(layoutElement) as string;\n const [layoutProps, children] = getChildLayoutProps(\n type,\n layoutElement.props,\n \"0\",\n undefined,\n previousLayout\n );\n return cloneElement(layoutElement, layoutProps, children);\n};\n\nexport const applyLayout = (\n type: layoutType,\n props: LayoutProps,\n previousLayout?: LayoutModel\n): LayoutModel => {\n const [layoutProps, children] = getChildLayoutProps(\n type,\n props,\n \"0\",\n undefined,\n previousLayout\n );\n return {\n ...props,\n ...layoutProps,\n type,\n children,\n };\n};\n\nfunction getLayoutProps(\n type: string,\n props: LayoutProps,\n path = \"0\",\n parentType: string | null = null,\n previousLayout?: LayoutModel\n): LayoutProps {\n const {\n active: prevActive = 0,\n \"data-path\": dataPath,\n path: prevPath = dataPath,\n id: prevId,\n style: prevStyle,\n } = getProps(previousLayout);\n\n const prevMatch = typeOf(previousLayout) === type && path === prevPath;\n const id = prevMatch ? prevId : props.id ?? uuid();\n const active = type === \"Stack\" ? props.active ?? prevActive : undefined;\n\n const key = id;\n const style = prevMatch ? prevStyle : getStyle(type, props, parentType);\n return isLayoutComponent(type)\n ? { id, key, path, style, type, active }\n : { id, key, style, \"data-path\": path };\n}\n\nfunction getChildLayoutProps(\n type: string,\n props: LayoutProps,\n path: string,\n parentType: string | null = null,\n previousLayout?: LayoutModel\n): [LayoutProps, ReactElement[]] {\n const layoutProps = getLayoutProps(\n type,\n props,\n path,\n parentType,\n previousLayout\n );\n\n if (props.layout && !previousLayout) {\n return [layoutProps, [layoutFromJson(props.layout, `${path}.0`)]];\n }\n\n const previousChildren =\n (previousLayout as any)?.children ?? previousLayout?.props?.children;\n const hasDynamicChildren = props.dropTarget && previousChildren;\n const children = hasDynamicChildren\n ? previousChildren\n : getLayoutChildren(type, props.children, path, previousChildren);\n return [layoutProps, children];\n}\n\nfunction getLayoutChildren(\n type: string,\n children?: ReactElement[],\n path = \"0\",\n previousChildren?: ReactElement[]\n) {\n const kids = Array.isArray(children)\n ? children\n : React.isValidElement(children)\n ? [children]\n : [];\n return isContainer(type)\n ? kids.map((child, i) => {\n const childType = typeOf(child) as string;\n const previousType = typeOf(previousChildren?.[i]);\n\n if (!previousType || childType === previousType) {\n const [layoutProps, children] = getChildLayoutProps(\n childType,\n child.props,\n `${path}.${i}`,\n type,\n previousChildren?.[i]\n );\n return React.cloneElement(child, layoutProps, children);\n }\n\n return previousChildren?.[i];\n })\n : children;\n}\n\nconst getStyle = (\n type: string,\n props: LayoutProps,\n parentType?: string | null\n) => {\n let { style = theKidHasNoStyle } = props;\n if (type === \"Flexbox\") {\n style = {\n flexDirection: props.column ? \"column\" : \"row\",\n ...style,\n display: \"flex\",\n };\n }\n\n if (style.flex) {\n const { flex, ...otherStyles } = style;\n style = {\n ...otherStyles,\n ...expandFlex(typeof flex === \"number\" ? flex : 0),\n };\n } else if (parentType === \"Stack\") {\n style = {\n ...style,\n ...expandFlex(1),\n };\n } else if (\n parentType === \"Flexbox\" &&\n (style.width || style.height) &&\n style.flexBasis === undefined\n ) {\n style = {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n\n return style;\n};\n\nexport function layoutFromJson(\n { id = uuid(), type, children, props, state }: LayoutJSON,\n path: string\n): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : ComponentRegistry[type];\n\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create component from JSON, unknown type ${type}`\n );\n }\n\n if (state) {\n setPersistentState(id, state);\n }\n\n return React.createElement(\n componentType,\n {\n id,\n ...props,\n key: id,\n path,\n },\n children\n ? children.map((child, i) => layoutFromJson(child, `${path}.${i}`))\n : undefined\n );\n}\n\nexport function layoutToJSON(component: ReactElement) {\n return componentToJson(component);\n}\n\nexport function componentToJson(component: ReactElement): LayoutJSON {\n const type = typeOf(component) as string;\n const { id, children, type: _omit, ...props } = getProps(component);\n\n const state = hasPersistentState(id) ? getPersistentState(id) : undefined;\n\n return {\n id,\n type,\n props: serializeProps(props as LayoutProps),\n state,\n children: React.Children.map(children, componentToJson),\n };\n}\n\nexport function serializeProps(props?: LayoutProps) {\n if (props) {\n const { path, ...otherProps } = props;\n const result: { [key: string]: any } = {};\n for (const [key, value] of Object.entries(otherProps)) {\n result[key] = serializeValue(value);\n }\n return result;\n }\n}\n\nfunction serializeValue(value: unknown): any {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n } else if (Array.isArray(value)) {\n return value.map(serializeValue);\n } else if (typeof value === \"object\" && value !== null) {\n const result: { [key: string]: any } = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = serializeValue(v);\n }\n return result;\n }\n}\n\n// This is experimental and the only query we support to start off with is\n// PARENT_CONTAINER\nexport type LayoutQuery = \"PARENT_CONTAINER\";\n\nexport const layoutQuery = (\n query: LayoutQuery,\n path?: string,\n layoutRoot?: ReactElement\n) => {\n if (path && layoutRoot) {\n const parentElement = followPathToParent(layoutRoot, path);\n if (parentElement) {\n const { id: parentContainerId } = getProps(parentElement);\n const parentContainerType = typeOf(parentElement);\n return {\n parentContainerId,\n parentContainerType,\n };\n }\n return {\n parentContainerType: \"Stack\",\n parentContainerId: \"blah\",\n };\n }\n};\n\nexport const getDefaultTabLabel: TabLabelFactory = (\n component,\n tabIndex,\n existingLabels = []\n): string => {\n let label = component.props?.title ?? component.props?.[\"data-tab-title\"];\n if (label) {\n return label;\n } else {\n let count = tabIndex;\n do {\n label = `Tab ${++count}`;\n } while (existingLabels.includes(label));\n return label;\n }\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from \"react\";\n\n/**\n * Persistent state is stored at module level (i.e singleton-style)\n * It is kept at this level, rather than passed to the target component(s)\n * so that it endures across the unmount/mount lifecycle journey of any\n * individual component. e.g when switching between tabs, components are\n * unmounted and mounted. They re-request their persistent state on re-mount.\n * Persistent state is populated as the serialized layout schema is processed\n * (see layoutFromJSON).\n */\nconst persistentState = new Map<string, any>();\nconst sessionState = new Map<string, any>();\n\nexport const getPersistentState = (id: string) => persistentState.get(id);\nexport const hasPersistentState = (id: string) => persistentState.has(id);\nexport const setPersistentState = (id: string, value: any) =>\n persistentState.set(id, value);\n\nexport const usePersistentState = () => {\n const loadSessionState = useCallback((id, key) => {\n const state = sessionState.get(id);\n if (state) {\n if (key !== undefined && state[key] !== undefined) {\n return state[key];\n }\n if (key !== undefined) {\n return undefined;\n }\n return state;\n }\n }, []);\n\n const saveSessionState = useCallback((id, key, data) => {\n if (key === undefined) {\n sessionState.set(id, data);\n } else if (sessionState.has(id)) {\n const state = sessionState.get(id);\n sessionState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n sessionState.set(id, { [key]: data });\n }\n }, []);\n\n const purgeSessionState = useCallback((id: string, key?: string) => {\n if (sessionState.has(id)) {\n if (key === undefined) {\n sessionState.delete(id);\n } else {\n const state = sessionState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = sessionState.get(id);\n if (Object.keys(rest).length > 0) {\n sessionState.set(id, rest);\n } else {\n sessionState.delete(id);\n }\n }\n }\n }\n }, []);\n\n const loadState = useCallback((id: string, key?: string) => {\n const state = persistentState.get(id);\n if (state) {\n if (key !== undefined) {\n return state[key];\n }\n return state;\n }\n }, []);\n\n const saveState = useCallback(\n (id: string, key: string | undefined, data: unknown) => {\n if (key === undefined) {\n persistentState.set(id, data);\n } else if (persistentState.has(id)) {\n const state = persistentState.get(id);\n persistentState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n persistentState.set(id, { [key]: data });\n }\n },\n []\n );\n\n const purgeState = useCallback((id: string, key?: string) => {\n if (persistentState.has(id)) {\n if (key === undefined) {\n persistentState.delete(id);\n } else {\n const state = persistentState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = persistentState.get(id);\n if (Object.keys(rest).length > 0) {\n persistentState.set(id, rest);\n } else {\n persistentState.delete(id);\n }\n }\n }\n }\n }, []);\n\n return {\n loadSessionState,\n loadState,\n saveSessionState,\n saveState,\n purgeState,\n purgeSessionState,\n };\n};\n", "import { cloneElement, ReactElement } from \"react\";\nimport { followPath, getProps } from \"../utils\";\nimport { MoveChildAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function moveChild(\n layoutRoot: ReactElement,\n { fromIndex, path, toIndex }: MoveChildAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children } = getProps(target);\n const replacementChildren = moveChildWithinChildren(\n children,\n fromIndex,\n toIndex\n );\n const replacement = cloneElement(target, undefined, replacementChildren);\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction moveChildWithinChildren(\n children: ReactElement[],\n fromIndex: number,\n toIndex: number\n) {\n const newChildren = children.slice();\n const [child] = newChildren.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newChildren.concat(child);\n } else {\n newChildren.splice(toIndex, 0, child);\n return newChildren;\n }\n}\n", "import React, { ReactElement } from 'react';\nimport { Action } from '../layout-action';\nimport { getProp, getProps, nextStep } from '../utils';\nimport { ReplaceAction } from './layoutTypes';\nimport { applyLayoutProps, LayoutProps } from './layoutUtils';\n\nexport function replaceChild(model: ReactElement, { target, replacement }: ReplaceAction) {\n return _replaceChild(model, target, replacement);\n}\n\nexport function _replaceChild(\n model: ReactElement,\n child: ReactElement,\n replacement: ReactElement<LayoutProps>\n) {\n const path = getProp(child, 'path');\n const resizeable = getProp(child, 'resizeable');\n const { style } = getProps(child);\n const newChild =\n applyLayoutProps(\n React.cloneElement(replacement, {\n resizeable,\n style: {\n ...style,\n ...replacement.props.style\n }\n }),\n path\n );\n\n return swapChild(model, child, newChild);\n}\n\nexport function swapChild(\n model: ReactElement,\n child: ReactElement,\n replacement: ReactElement,\n op?: 'maximize' | 'minimize' | 'restore'\n): ReactElement {\n if (model === child) {\n return replacement;\n }\n \n const { idx, finalStep } = nextStep(getProp(model, 'path'), getProp(child, 'path'));\n const children = model.props.children.slice();\n \n if (finalStep) {\n if (!op) {\n children[idx] = replacement;\n } else if (op === Action.MINIMIZE) {\n children[idx] = minimize(model, children[idx]);\n } else if (op === Action.RESTORE) {\n children[idx] = restore(children[idx]);\n }\n } else {\n children[idx] = swapChild(children[idx], child, replacement, op);\n }\n return React.cloneElement(model, undefined, children);\n}\n\nfunction minimize(parent: ReactElement, child: ReactElement) {\n const { style: parentStyle } = getProps(parent);\n const { style: childStyle } = getProps(child);\n\n const { width, height, flexBasis, flexShrink, flexGrow, ...rest } = childStyle;\n\n const restoreStyle = {\n width,\n height,\n flexBasis,\n flexShrink,\n flexGrow\n };\n\n const style = {\n ...rest,\n flexBasis: 0,\n flexGrow: 0,\n flexShrink: 0\n };\n const collapsed =\n parentStyle.flexDirection === 'row'\n ? 'vertical'\n : parentStyle.flexDirection === 'column'\n ? 'horizontal'\n : false;\n\n if (collapsed) {\n return React.cloneElement(child, {\n collapsed,\n restoreStyle,\n style\n });\n }\n return child;\n}\n\nfunction restore(child: ReactElement) {\n const { style: childStyle, restoreStyle } = getProps(child);\n\n const { flexBasis, flexShrink, flexGrow, ...rest } = childStyle;\n\n const style = {\n ...rest,\n ...restoreStyle\n };\n\n return React.cloneElement(child, {\n collapsed: false,\n style,\n restoreStyle: undefined\n });\n}\n", "export const Action = {\n ADD: \"add\",\n BLUR: \"blur\",\n BLUR_SPLITTER: \"blur-splitter\",\n DRAG_START: \"drag-start\",\n DRAG_STARTED: \"drag-started\",\n DRAG_DROP: \"drag-drop\",\n FOCUS: \"focus\",\n FOCUS_SPLITTER: \"focus-splitter\",\n INITIALIZE: \"initialize\",\n LAYOUT_RESIZE: \"layout-resize\",\n MAXIMIZE: \"maximize\",\n MINIMIZE: \"minimize\",\n REMOVE: \"remove\",\n REPLACE: \"replace\",\n RESTORE: \"restore\",\n SAVE: \"save\",\n SET_TITLE: \"set-title\",\n SPLITTER_RESIZE: \"splitter-resize\",\n SWITCH_TAB: \"switch-tab\",\n TEAR_OUT: \"tear-out\",\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NamedFilter } from \"@vuu-ui/vuu-filter-types\";\nimport { CSSProperties, ReactElement } from \"react\";\nimport { DragDropRect, DragInstructions } from \"../drag-drop\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { ContributionLocation } from \"../layout-view\";\n\nexport interface WithProps {\n props?: { [key: string]: any };\n}\n\nexport interface WithType {\n props?: any;\n title?: string;\n type: string;\n}\n\nexport interface LayoutRoot extends WithProps {\n active?: number;\n children?: ReactElement[];\n type: string;\n}\n\nexport type ValueOf<T> = T[keyof T];\nexport interface ApplicationSettings {\n leftNav?: {\n activeTabIndex: number;\n expanded: boolean;\n };\n /**\n * filters are keyed by MODULE:tablename\n */\n filters?: { [key: string]: NamedFilter[] };\n}\nexport type ApplicationSetting = ValueOf<ApplicationSettings>;\n\nexport interface ApplicationJSON {\n layout: LayoutJSON;\n settings?: ApplicationSettings;\n}\n\nexport interface LayoutJSON extends WithType {\n active?: number;\n children?: LayoutJSON[];\n id?: string;\n props?: { [key: string]: any };\n state?: any;\n type: string;\n style?: CSSProperties;\n}\n\nexport interface WithActive {\n active?: number;\n}\n\nexport type LayoutModel = LayoutRoot | ReactElement | WithType;\n\nexport type layoutType = \"Flexbox\" | \"View\" | \"DraggableLayout\" | \"Stack\";\n\n// TODO duplicated in layout-action\nexport const LayoutActionType = {\n ADD: \"add\",\n DRAG_START: \"drag-start\",\n DRAG_DROP: \"drag-drop\",\n LAYOUT_RESIZE: \"layout-resize\",\n MAXIMIZE: \"maximize\",\n MINIMIZE: \"minimize\",\n MOVE_CHILD: \"move-child\",\n QUERY: \"query\",\n REMOVE: \"remove\",\n REPLACE: \"replace\",\n RESTORE: \"restore\",\n SAVE: \"save\",\n SET_PROP: \"set-prop\",\n SET_PROPS: \"set-props\",\n SET_TITLE: \"set-title\",\n SPLITTER_RESIZE: \"splitter-resize\",\n SWITCH_TAB: \"switch-tab\",\n TEAROUT: \"tearout\",\n} as const;\n\nexport type AddAction = {\n component: any;\n path: string;\n type: typeof LayoutActionType.ADD;\n};\n\nexport type DragDropAction = {\n draggedReactElement: ReactElement;\n dragInstructions: any;\n dropTarget: Partial<DropTarget>;\n type: typeof LayoutActionType.DRAG_DROP;\n};\n\nexport type MaximizeAction = {\n path?: string;\n type: typeof LayoutActionType.MAXIMIZE;\n};\n\nexport type MinimizeAction = {\n path?: string;\n type: typeof LayoutActionType.MINIMIZE;\n};\n\nexport type MoveChildAction = {\n fromIndex: number;\n toIndex: number;\n path: string;\n type: typeof LayoutActionType.MOVE_CHILD;\n};\n\nexport type QueryAction = {\n path?: string;\n query: string;\n type: typeof LayoutActionType.QUERY;\n};\n\nexport type RemoveAction = {\n path?: string;\n type: typeof LayoutActionType.REMOVE;\n};\n\nexport type ReplaceAction = {\n replacement: any;\n target: any;\n type: typeof LayoutActionType.REPLACE;\n};\n\nexport type RestoreAction = {\n path?: string;\n type: typeof LayoutActionType.RESTORE;\n};\n\nexport type SetPropAction = {\n path: string;\n propName: string;\n propValue: string | number | boolean;\n type: typeof LayoutActionType.SET_PROP;\n};\n\nexport type SetPropsAction = {\n path: string;\n props: { [key: string]: unknown };\n type: typeof LayoutActionType.SET_PROPS;\n};\n\nexport type SetTitleAction = {\n path: string;\n title: string;\n type: typeof LayoutActionType.SET_TITLE;\n};\n\nexport type SplitterResizeAction = {\n path: string;\n sizes: { currentSize: number; flexBasis: number }[];\n type: typeof LayoutActionType.SPLITTER_RESIZE;\n};\n\nexport type LayoutResizeAction = {\n path: string;\n size: number;\n type: typeof LayoutActionType.LAYOUT_RESIZE;\n};\n\nexport type SwitchTabAction = {\n id?: string;\n nextIdx: number;\n path: string;\n type: typeof LayoutActionType.SWITCH_TAB;\n};\n\nexport type TearoutAction = {\n path?: string;\n type: typeof LayoutActionType.TEAROUT;\n};\n\nexport type LayoutReducerAction =\n | AddAction\n | DragDropAction\n | LayoutResizeAction\n | MaximizeAction\n | MinimizeAction\n | MoveChildAction\n | RemoveAction\n | ReplaceAction\n | RestoreAction\n | SetPropAction\n | SetPropsAction\n | SetTitleAction\n | SplitterResizeAction\n | SwitchTabAction;\n\nexport type SaveAction = {\n type: typeof LayoutActionType.SAVE;\n};\n\nexport type AddToolbarContributionViewAction = {\n content: ReactElement;\n location: ContributionLocation;\n type: \"add-toolbar-contribution\";\n};\n\nexport type RemoveToolbarContributionViewAction = {\n location: ContributionLocation;\n type: \"remove-toolbar-contribution\";\n};\n\nexport type MousedownViewAction = {\n preDragActivity?: any;\n index?: number;\n type: \"mousedown\";\n};\n\nexport type DragStartAction = {\n payload?: ReactElement;\n dragContainerPath?: string;\n dragElement?: HTMLElement;\n dragRect: DragDropRect;\n dropTargets?: string[];\n evt: MouseEvent;\n instructions?: DragInstructions;\n path: string;\n type: typeof LayoutActionType.DRAG_START;\n};\n\nexport type LayoutLevelChange =\n | \"switch-active-tab\"\n | \"edit-feature-title\"\n | \"save-feature-props\"\n | \"resize-component\"\n | \"remove-component\"\n | \"drag-drop-operation\";\n\nexport type ApplicationLevelChange =\n | \"switch-active-layout\"\n | \"open-layout\"\n | \"close-layout\"\n | \"rename-layout\"\n | \"resize-application-chrome\";\n\nexport type LayoutChangeReason = LayoutLevelChange | ApplicationLevelChange;\n\nexport type LayoutChangeHandler = (\n layout: LayoutJSON,\n layoutChangeReason: LayoutChangeReason\n) => void;\n\nexport const isApplicationLevelChange = (\n layoutChangeReason: LayoutChangeReason\n): layoutChangeReason is ApplicationLevelChange =>\n [\n \"switch-active-layout\",\n \"open-layout\",\n \"close-layout\",\n \"rename-layout\",\n ].includes(layoutChangeReason);\n\nexport const isLayoutLevelChange = (\n layoutChangeReason: LayoutChangeReason\n): layoutChangeReason is LayoutLevelChange =>\n [\n \"switch-active-tab\",\n \"edit-feature-title\",\n \"save-feature-props\",\n \"remove-component\",\n \"resize-component\",\n \"drag-drop-operation\",\n ].includes(layoutChangeReason);\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport React, { ReactElement } from \"react\";\nimport { createPlaceHolder } from \"./flexUtils\";\nimport { layoutFromJson } from \"./layoutUtils\";\nimport { swapChild } from \"./replace-layout-element\";\n\nimport {\n followPath,\n followPathToParent,\n getProp,\n getProps,\n nextStep,\n resetPath,\n typeOf,\n} from \"../utils\";\nimport { RemoveAction } from \"./layoutTypes\";\n\nexport function removeChild(layoutRoot: ReactElement, { path }: RemoveAction) {\n const target = followPath(layoutRoot, path!) as ReactElement;\n let targetParent = followPathToParent(layoutRoot, path!);\n if (targetParent === null) {\n return layoutRoot;\n }\n const { children } = getProps(targetParent);\n if (\n // this is very specific to explicitly sized components\n children.length > 1 &&\n typeOf(targetParent) !== \"Stack\" &&\n allOtherChildrenArePlaceholders(children, path)\n ) {\n const {\n style: { flexBasis, display, flexDirection, ...style },\n } = getProps(targetParent);\n let containerPath = getProp(targetParent, \"path\");\n let newLayout = swapChild(\n layoutRoot,\n targetParent,\n createPlaceHolder(containerPath, flexBasis, style)\n );\n while ((targetParent = followPathToParent(newLayout, containerPath))) {\n if (getProp(targetParent, \"path\") === \"0\") {\n break;\n }\n const { children } = getProps(targetParent);\n if (allOtherChildrenArePlaceholders(children)) {\n containerPath = getProp(targetParent, \"path\");\n const {\n style: { flexBasis, display, flexDirection, ...style },\n } = getProps(targetParent);\n newLayout = swapChild(\n layoutRoot,\n targetParent,\n createPlaceHolder(containerPath, flexBasis, style)\n );\n } else if (hasAdjacentPlaceholders(children)) {\n newLayout = collapsePlaceholders(\n layoutRoot,\n targetParent as ReactElement\n );\n } else {\n break;\n }\n }\n return newLayout;\n }\n return _removeChild(layoutRoot, target);\n}\n\nfunction _removeChild(\n container: ReactElement,\n child: ReactElement\n): ReactElement {\n const props = getProps(container);\n const { children: componentChildren, path, preserve } = props;\n let { active, id: containerId } = props;\n const { idx, finalStep } = nextStep(path, getProp(child, \"path\"));\n const type = typeOf(container) as string;\n let children = componentChildren.slice() as ReactElement[];\n\n if (finalStep) {\n children.splice(idx, 1);\n\n if (active !== undefined && active >= idx) {\n active = Math.max(0, active - 1);\n }\n\n if (children.length === 0 && preserve && type === \"Stack\") {\n const {\n path,\n style: { flexBasis },\n } = getProps(child);\n const placeHolder =\n containerId === \"main-tabs\"\n ? layoutFromJson(\n {\n props: {\n style: { flexGrow: 1, flexShrink: 1, flexBasis },\n title: \"Tab 1\",\n },\n type: \"Placeholder\",\n },\n path\n )\n : createPlaceHolder(path, flexBasis);\n children.push(placeHolder);\n } else if (\n children.length === 1 &&\n !preserve &&\n path !== \"0\" &&\n type.match(/Flexbox|Stack/)\n ) {\n return unwrap(container, children[0]);\n }\n\n if (!children.some(isFlexible) && children.some(canBeMadeFlexible)) {\n children = makeFlexible(children);\n }\n } else {\n children[idx] = _removeChild(children[idx], child) as ReactElement;\n }\n\n children = children.map((child, i) => resetPath(child, `${path}.${i}`));\n return React.cloneElement(container, { active }, children);\n}\n\nfunction unwrap(container: ReactElement, child: ReactElement) {\n const type = typeOf(container);\n const {\n path,\n style: { flexBasis, flexGrow, flexShrink, width, height },\n } = getProps(container);\n\n let unwrappedChild = resetPath(child, path);\n if (path === \"0\") {\n unwrappedChild = React.cloneElement(unwrappedChild, {\n style: {\n ...child.props.style,\n width,\n height,\n },\n });\n } else if (type === \"Flexbox\") {\n const dim =\n container.props.style.flexDirection === \"column\" ? \"height\" : \"width\";\n const {\n style: { [dim]: size, ...style },\n } = unwrappedChild.props;\n unwrappedChild = React.cloneElement(unwrappedChild, {\n flexFill: undefined,\n style: {\n ...style,\n flexGrow,\n flexShrink,\n flexBasis,\n width,\n height,\n },\n });\n }\n return unwrappedChild;\n}\n\nconst isFlexible = (element: ReactElement) => {\n return element.props.style.flexGrow > 0;\n};\n\nconst canBeMadeFlexible = (element: ReactElement) => {\n const { width, height, flexGrow } = element.props.style;\n return (\n flexGrow === 0 && typeof width !== \"number\" && typeof height !== \"number\"\n );\n};\n\nconst makeFlexible = (children: ReactElement[]) => {\n return children.map((child) =>\n canBeMadeFlexible(child)\n ? React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexGrow: 1,\n },\n })\n : child\n );\n};\n\nconst hasAdjacentPlaceholders = (children: ReactElement[]) => {\n if (children && children.length > 0) {\n let wasPlaceholder = getProp(children[0], \"placeholder\");\n let isPlaceholder = false;\n for (let i = 1; i < children.length; i++) {\n isPlaceholder = getProp(children[i], \"placeholder\");\n if (wasPlaceholder && isPlaceholder) {\n return true;\n }\n wasPlaceholder = isPlaceholder;\n }\n }\n};\n\nconst collapsePlaceholders = (\n container: ReactElement,\n target: ReactElement\n) => {\n const { children: componentChildren, path } = getProps(container);\n const { idx, finalStep } = nextStep(path, getProp(target, \"path\"));\n let children = componentChildren.slice() as ReactElement[];\n if (finalStep) {\n children[idx] = _collapsePlaceHolders(target);\n } else {\n children[idx] = collapsePlaceholders(children[idx], target) as ReactElement;\n }\n\n children = children.map((child, i) => resetPath(child, `${path}.${i}`));\n return React.cloneElement(container, undefined, children);\n};\n\nconst _collapsePlaceHolders = (container: ReactElement) => {\n const { children } = getProps(container);\n const newChildren = [];\n const placeholders: ReactElement[] = [];\n\n for (let i = 0; i < children.length; i++) {\n if (getProp(children[i], \"placeholder\")) {\n placeholders.push(children[i]);\n } else {\n if (placeholders.length === 1) {\n newChildren.push(placeholders.pop());\n } else if (placeholders.length > 0) {\n newChildren.push(mergePlaceholders(placeholders));\n placeholders.length = 0;\n }\n newChildren.push(children[i]);\n }\n }\n\n if (placeholders.length === 1) {\n newChildren.push(placeholders.pop());\n } else if (placeholders.length > 0) {\n newChildren.push(mergePlaceholders(placeholders));\n }\n\n const containerPath = getProp(container, \"path\");\n return React.cloneElement(\n container,\n undefined,\n newChildren.map((child, i) => resetPath(child, `${containerPath}.${i}`))\n );\n};\n\nconst mergePlaceholders = ([placeholder, ...placeholders]: ReactElement[]) => {\n const targetStyle = getProp(placeholder, \"style\");\n let { flexBasis, flexGrow, flexShrink } = targetStyle;\n for (const {\n props: { style },\n } of placeholders) {\n flexBasis += style.flexBasis;\n flexGrow = Math.max(flexGrow, style.flexGrow);\n flexShrink = Math.max(flexShrink, style.flexShrink);\n }\n return React.cloneElement(placeholder, {\n style: { ...targetStyle, flexBasis, flexGrow, flexShrink },\n });\n};\n\nconst allOtherChildrenArePlaceholders = (\n children: ReactElement[],\n path?: string\n) =>\n children.every(\n (child) =>\n getProp(child, \"placeholder\") || (path && getProp(child, \"path\") === path)\n );\n", "import { dimension } from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement } from \"react\";\nimport { followPath, getProps } from \"../utils\";\nimport { LayoutResizeAction, SplitterResizeAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function resizeFlexChild(\n layoutRoot: ReactElement,\n { path, size }: LayoutResizeAction\n) {\n const target = followPath(layoutRoot, path, true);\n\n const { style } = getProps(target);\n\n const newStyle = {\n ...style,\n width: size,\n };\n\n // const dimension = style.flexDirection === \"column\" ? \"height\" : \"width\";\n // const replacementChildren = applySizesToChildren(children, sizes, dimension);\n\n const replacement = React.cloneElement(target, { style: newStyle });\n\n return swapChild(layoutRoot, target, replacement);\n}\n\nexport function resizeFlexChildren(\n layoutRoot: ReactElement,\n { path, sizes }: SplitterResizeAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children, style } = getProps(target);\n\n const dimension = style.flexDirection === \"column\" ? \"height\" : \"width\";\n const replacementChildren = applySizesToChildren(children, sizes, dimension);\n\n const replacement = React.cloneElement(\n target,\n undefined,\n replacementChildren\n );\n\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction applySizesToChildren(\n children: ReactElement[],\n sizes: { currentSize: number; flexBasis: number }[],\n dimension: dimension\n) {\n return children.map((child, i) => {\n const {\n style: { [dimension]: size, flexBasis: actualFlexBasis },\n } = getProps(child);\n const meta = sizes[i];\n const { currentSize, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n const newSize = hasCurrentSize ? meta.currentSize : flexBasis;\n\n if (\n newSize === undefined ||\n size === newSize ||\n actualFlexBasis === newSize\n ) {\n return child;\n }\n return React.cloneElement(child, {\n style: applySizeToChild(child.props.style, dimension, newSize),\n });\n });\n}\n\nfunction applySizeToChild(\n style: CSSProperties,\n dimension: dimension,\n newSize: number\n) {\n const hasSize = typeof style[dimension] === \"number\";\n const { flexShrink = 1, flexGrow = 1 } = style;\n return {\n ...style,\n [dimension]: hasSize ? newSize : \"auto\",\n flexBasis: hasSize ? \"auto\" : newSize,\n flexShrink,\n flexGrow,\n };\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProp, getProps, nextStep, resetPath, typeOf } from \"../utils\";\nimport {\n createFlexbox,\n createPlaceHolder,\n flexDirection,\n getFlexStyle,\n getIntrinsicSize,\n wrapIntrinsicSizeComponentWithFlexbox,\n} from \"./flexUtils\";\nimport { LayoutModel } from \"./layoutTypes\";\nimport { applyLayoutProps, LayoutProps } from \"./layoutUtils\";\n\nexport interface LayoutSpec {\n type: \"Stack\" | \"Flexbox\";\n flexDirection: \"column\" | \"row\";\n showTabs?: boolean;\n}\n\nconst isHtmlElement = (component: LayoutModel) => {\n const [firstLetter] = typeOf(component) as string;\n return firstLetter === firstLetter.toLowerCase();\n};\n\nexport function wrap(\n container: ReactElement,\n existingComponent: ReactElement,\n newComponent: any,\n pos: DropPos,\n clientRect?: DropTarget[\"clientRect\"],\n dropRect?: DropTarget[\"dropRect\"]\n): ReactElement {\n const { children: containerChildren, path: containerPath } =\n getProps(container);\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n const { idx, finalStep } = nextStep(containerPath, existingComponentPath);\n const children = finalStep\n ? updateChildren(\n container,\n containerChildren,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n )\n : containerChildren.map((child: ReactElement, index: number) =>\n index === idx\n ? wrap(\n child,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n )\n : child\n );\n\n return React.cloneElement(container, undefined, children);\n}\n\nfunction updateChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos,\n clientRect?: DropTarget[\"clientRect\"],\n dropRect?: rectTuple\n) {\n const intrinsicSize = getIntrinsicSize(newComponent);\n\n if (intrinsicSize?.width && intrinsicSize?.height) {\n if (clientRect === undefined || dropRect === undefined) {\n throw Error(\n \"wrap-layout-element, updateChildren clientRect and dropRect must both be available\"\n );\n }\n return wrapIntrinsicSizedComponent(\n containerChildren,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n );\n }\n return wrapFlexComponent(\n container,\n containerChildren,\n existingComponent,\n newComponent,\n pos\n );\n}\n\nfunction wrapFlexComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos\n) {\n const { version = 0 } = getProps(newComponent);\n const { path: existingComponentPath, title } = getProps(existingComponent);\n const {\n type,\n flexDirection,\n showTabs: showTabsProp,\n } = getLayoutSpecForWrapper(pos);\n const [style, existingComponentStyle, newComponentStyle] =\n getWrappedFlexStyles(\n type,\n existingComponent,\n newComponent,\n flexDirection,\n pos\n );\n const targetFirst = isTargetFirst(pos);\n const active = targetFirst ? 1 : 0;\n\n const newComponentProps = {\n resizeable: true,\n style: newComponentStyle,\n version: version + 1,\n };\n const resizeProp = isHtmlElement(existingComponent)\n ? \"data-resizeable\"\n : \"resizeable\";\n\n const existingComponentProps = {\n [resizeProp]: true,\n style: existingComponentStyle,\n };\n\n const showTabs = type === \"Stack\" ? { showTabs: showTabsProp } : undefined;\n const splitterSize =\n type === \"Flexbox\"\n ? {\n splitterSize:\n (typeOf(container) === \"Flexbox\" && container.props.splitterSize) ??\n undefined,\n }\n : undefined;\n\n const id = uuid();\n const wrapper = React.createElement(\n ComponentRegistry[type],\n {\n active,\n id,\n key: id,\n path: getProp(existingComponent, \"path\"),\n flexFill: getProp(existingComponent, \"flexFill\"),\n ...splitterSize,\n ...showTabs,\n style,\n title,\n resizeable: getProp(existingComponent, \"resizeable\"),\n } as LayoutProps,\n targetFirst\n ? [\n resetPath(\n existingComponent,\n `${existingComponentPath}.0`,\n existingComponentProps\n ),\n applyLayoutProps(\n React.cloneElement(newComponent, newComponentProps),\n `${existingComponentPath}.1`\n ),\n ]\n : [\n applyLayoutProps(\n React.cloneElement(newComponent, newComponentProps),\n `${existingComponentPath}.0`\n ),\n resetPath(\n existingComponent,\n `${existingComponentPath}.1`,\n existingComponentProps\n ),\n ]\n );\n return containerChildren.map((child: ReactElement) =>\n child === existingComponent ? wrapper : child\n );\n}\n\nfunction wrapIntrinsicSizedComponent(\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: rectTuple\n) {\n const { flexDirection } = getLayoutSpecForWrapper(pos);\n const contraDirection = flexDirection === \"column\" ? \"row\" : \"column\";\n const targetFirst = isTargetFirst(pos);\n\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n const [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n const pathRoot = getProp(existingComponent, \"path\");\n let pathIndex = 0;\n\n const resizeProp = isHtmlElement(existingComponent)\n ? \"data-resizeable\"\n : \"resizeable\";\n\n const wrappedChildren = [];\n if (startPlaceholder) {\n wrappedChildren.push(\n targetFirst\n ? resetPath(existingComponent, `${pathRoot}.${pathIndex++}`, {\n [resizeProp]: true,\n style: { flexBasis: startPlaceholder, flexGrow: 1, flexShrink: 1 },\n })\n : createPlaceHolder(`${pathRoot}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n wrappedChildren.push(\n wrapIntrinsicSizeComponentWithFlexbox(\n newComponent,\n contraDirection,\n `${pathRoot}.${pathIndex++}`,\n clientRect,\n dropRect\n )\n );\n if (endPlaceholder) {\n wrappedChildren.push(\n targetFirst\n ? createPlaceHolder(`${pathRoot}.${pathIndex++}`, 0)\n : resetPath(existingComponent, `${pathRoot}.${pathIndex++}`, {\n [resizeProp]: true,\n style: { flexBasis: 0, flexGrow: 1, flexShrink: 1 },\n })\n );\n }\n\n const wrapper = createFlexbox(\n flexDirection,\n existingComponent.props,\n wrappedChildren,\n pathRoot\n );\n return containerChildren.map((child) =>\n child === existingComponent ? wrapper : child\n );\n}\n\nfunction getWrappedFlexStyles(\n type: string,\n existingComponent: ReactElement,\n newComponent: ReactElement,\n flexDirection: flexDirection,\n pos: DropPos\n) {\n const style = {\n ...existingComponent.props.style,\n flexDirection,\n };\n\n const dimension =\n type === \"Flexbox\" && flexDirection === \"column\" ? \"height\" : \"width\";\n const newComponentStyle = getFlexStyle(newComponent, dimension, pos);\n const existingComponentStyle = getFlexStyle(existingComponent, dimension);\n\n return [style, existingComponentStyle, newComponentStyle];\n}\n\nconst isTargetFirst = (pos: DropPos) =>\n pos.position.SouthOrEast\n ? true\n : pos?.tab?.positionRelativeToTab === \"before\"\n ? false\n : pos.position.Header\n ? true\n : false;\n\nfunction getLayoutSpecForWrapper(pos: DropPos): LayoutSpec {\n if (pos.position.Header) {\n return {\n type: \"Stack\",\n flexDirection: \"column\",\n showTabs: true,\n };\n } else {\n return {\n type: \"Flexbox\",\n flexDirection: pos.position.EastOrWest ? \"row\" : \"column\",\n };\n }\n}\n", "import { createContext, Dispatch, ReactElement } from \"react\";\nimport {\n DragStartAction,\n LayoutReducerAction,\n QueryAction,\n SaveAction,\n} from \"../layout-reducer\";\n\nconst unconfiguredLayoutProviderDispatch: LayoutProviderDispatch = (action) =>\n console.log(\n `dispatch ${action.type}, have you forgotten to provide a LayoutProvider ?`\n );\n\nexport type LayoutProviderDispatch = Dispatch<\n LayoutReducerAction | SaveAction | DragStartAction | QueryAction\n>;\n\nexport interface LayoutProviderContextProps {\n createNewChild?: (index?: number) => ReactElement;\n dispatchLayoutProvider: LayoutProviderDispatch;\n version: number;\n}\n\nexport const LayoutProviderContext = createContext<LayoutProviderContextProps>({\n dispatchLayoutProvider: unconfiguredLayoutProviderDispatch,\n version: -1,\n});\n", "import { MutableRefObject, ReactElement, useCallback, useRef } from \"react\";\nimport {\n DragDropRect,\n DragEndCallback,\n Draggable,\n DragInstructions,\n} from \"../drag-drop\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { getIntrinsicSize } from \"../layout-reducer/flexUtils\";\nimport { followPath, resolvePath } from \"../utils\";\nimport { LayoutProviderDispatch } from \"./LayoutProviderContext\";\n\nconst NO_INSTRUCTIONS = {} as DragInstructions;\nconst NO_OFFSETS: [number, number] = [0, 0];\n\ninterface CurrentDragAction extends Omit<DragStartAction, \"evt\" | \"type\"> {\n dragContainerPath: string;\n}\n\ninterface DragOperation {\n payload: ReactElement;\n originalCSS: string;\n dragRect: unknown;\n dragInstructions: DragInstructions;\n dragOffsets: [number, number];\n targetPosition: { left: number; top: number };\n}\n\nconst getDragElement = (\n rect: DragDropRect,\n id: string,\n dragElement?: HTMLElement\n): [HTMLElement, string, number, number] => {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"vuuSimpleDraggableWrapper\";\n wrapper.classList.add(\n \"vuuSimpleDraggableWrapper\",\n \"salt-theme\",\n \"salt-density-medium\"\n );\n wrapper.dataset.dragging = \"true\";\n\n const div = dragElement ?? document.createElement(\"div\");\n div.id = id;\n\n wrapper.appendChild(div);\n document.body.appendChild(wrapper);\n const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;\n return [wrapper, cssText, rect.left, rect.top];\n};\n\nconst determineDragOffsets = (\n draggedElement: HTMLElement\n): [number, number] => {\n const { offsetParent } = draggedElement;\n if (offsetParent === null) {\n return NO_OFFSETS;\n } else {\n const { left: offsetLeft, top: offsetTop } =\n offsetParent.getBoundingClientRect();\n return [offsetLeft, offsetTop];\n }\n};\n\nexport const useLayoutDragDrop = (\n rootLayoutRef: MutableRefObject<ReactElement>,\n dispatch: LayoutProviderDispatch,\n pathToDropTarget?: string\n) => {\n const dragActionRef = useRef<CurrentDragAction>();\n const dragOperationRef = useRef<DragOperation>();\n const draggableHTMLElementRef = useRef<HTMLElement>();\n\n const handleDrag = useCallback((x, y) => {\n if (dragOperationRef.current && draggableHTMLElementRef.current) {\n const {\n dragOffsets: [offsetX, offsetY],\n targetPosition,\n } = dragOperationRef.current;\n const left = typeof x === \"number\" ? x - offsetX : targetPosition.left;\n const top = typeof y === \"number\" ? y - offsetY : targetPosition.top;\n if (left !== targetPosition.left || top !== targetPosition.top) {\n dragOperationRef.current.targetPosition.left = left;\n dragOperationRef.current.targetPosition.top = top;\n draggableHTMLElementRef.current.style.top = top + \"px\";\n draggableHTMLElementRef.current.style.left = left + \"px\";\n }\n }\n }, []);\n\n const handleDrop: DragEndCallback = useCallback(\n (dropTarget) => {\n if (dragOperationRef.current) {\n const {\n dragInstructions,\n payload: draggedReactElement,\n originalCSS,\n } = dragOperationRef.current;\n\n if (dropTarget) {\n dispatch({\n type: \"drag-drop\",\n draggedReactElement,\n dragInstructions,\n dropTarget,\n });\n }\n\n if (draggableHTMLElementRef.current) {\n if (!dropTarget && dragInstructions.DriftHomeIfNoDropTarget) {\n console.log(\"drift back to start\");\n document.body.removeChild(draggableHTMLElementRef.current);\n } else if (dragInstructions.RemoveDraggableOnDragEnd) {\n document.body.removeChild(draggableHTMLElementRef.current);\n } else {\n draggableHTMLElementRef.current.style.cssText = originalCSS;\n delete draggableHTMLElementRef.current.dataset.dragging;\n }\n }\n\n dragActionRef.current = undefined;\n dragOperationRef.current = undefined;\n draggableHTMLElementRef.current = undefined;\n }\n },\n [dispatch]\n );\n\n const handleDragStart = useCallback(\n (evt: MouseEvent) => {\n if (dragActionRef.current) {\n const {\n payload: component,\n dragContainerPath,\n dragElement,\n dragRect,\n instructions = NO_INSTRUCTIONS,\n path,\n } = dragActionRef.current;\n const { current: rootLayout } = rootLayoutRef;\n const dragPos = { x: evt.clientX, y: evt.clientY };\n const dragPayload = component ?? followPath(rootLayout, path, true);\n const { id: dragPayloadId } = dragPayload.props;\n const intrinsicSize = getIntrinsicSize(dragPayload);\n let originalCSS = \"\",\n dragCSS = \"\",\n dragTransform = \"\";\n\n let dragStartLeft = -1;\n let dragStartTop = -1;\n let dragOffsets: [number, number] = NO_OFFSETS;\n\n let element = document.getElementById(dragPayloadId);\n\n if (element === null) {\n [element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(\n dragRect,\n dragPayloadId,\n dragElement\n );\n } else {\n dragOffsets = determineDragOffsets(element);\n const [offsetLeft, offsetTop] = dragOffsets;\n const { width, height, left, top } = element.getBoundingClientRect();\n dragStartLeft = left - offsetLeft;\n dragStartTop = top - offsetTop;\n dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;\n element.dataset.dragging = \"true\";\n originalCSS = element.style.cssText;\n }\n\n dragTransform = Draggable.initDrag(\n rootLayoutRef.current,\n dragContainerPath,\n dragRect,\n dragPos,\n {\n drag: handleDrag,\n drop: handleDrop,\n },\n intrinsicSize\n // dropTargets\n );\n\n element.style.cssText = dragCSS + dragTransform;\n draggableHTMLElementRef.current = element;\n\n dragOperationRef.current = {\n payload: dragPayload,\n originalCSS,\n dragRect,\n dragOffsets,\n dragInstructions: instructions,\n targetPosition: { left: dragStartLeft, top: dragStartTop },\n };\n }\n },\n [handleDrag, handleDrop, rootLayoutRef]\n );\n\n const prepareToDrag = useCallback(\n (action: DragStartAction) => {\n const { evt, ...options } = action;\n dragActionRef.current = {\n ...options,\n dragContainerPath: resolvePath(rootLayoutRef.current, pathToDropTarget),\n };\n Draggable.handleMousedown(evt, handleDragStart, options.instructions);\n },\n [handleDragStart, pathToDropTarget, rootLayoutRef]\n );\n\n return prepareToDrag;\n};\n", "import { useId } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Header as VuuHeader } from \"../layout-header/Header\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { useView } from \"./useView\";\nimport { useViewResize } from \"./useViewResize\";\nimport { ViewContext, ViewContextAPI } from \"./ViewContext\";\nimport { ViewProps } from \"./viewTypes\";\n\nimport \"./View.css\";\n\nconst classBase = \"vuuView\";\n\ntype Props = { [key: string]: unknown };\n\nconst getProps = (state?: Props, props?: Props) => {\n if (state && props) {\n return {\n ...state,\n ...props,\n };\n } else return state || props;\n};\n\n/**\n * View is the leaf-level entity managed by the Vuu layout system. It may represent a component\n * or a group of components. It also offers an API (via useViewContext) for persistence.\n */\nconst View = forwardRef(function View(\n props: ViewProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const {\n Header = VuuHeader,\n children,\n className,\n collapsed,\n closeable,\n \"data-path\": dataPath,\n \"data-resizeable\": dataResizeable,\n dropTargets,\n expanded,\n flexFill,\n id: idProp,\n header,\n orientation = \"horizontal\",\n path = dataPath,\n resize = \"responsive\",\n resizeable = dataResizeable,\n tearOut,\n style = {},\n title: titleProp,\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const rootRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const [componentProps, _setComponentProps] = useState<Props>();\n const {\n contributions,\n dispatchViewAction,\n load,\n loadSession,\n onConfigChange,\n onEditTitle,\n purge,\n restoredState,\n save,\n saveSession,\n title,\n } = useView({\n id,\n rootRef,\n path,\n dropTargets,\n title: titleProp,\n });\n\n useViewResize({ mainRef, resize, rootRef });\n\n const setComponentProps = useCallback((props?: Props) => {\n _setComponentProps(props);\n }, []);\n\n const getContent = () => {\n if (React.isValidElement(children) && (restoredState || componentProps)) {\n return React.cloneElement(\n children,\n getProps(restoredState, componentProps)\n );\n }\n return children;\n };\n\n const viewContextValue: ViewContextAPI = useMemo(\n () => ({\n dispatch: dispatchViewAction,\n id,\n path,\n title,\n load,\n loadSession,\n onConfigChange,\n purge,\n save,\n saveSession,\n setComponentProps,\n }),\n [\n dispatchViewAction,\n id,\n load,\n loadSession,\n onConfigChange,\n path,\n purge,\n save,\n saveSession,\n setComponentProps,\n title,\n ]\n );\n\n const headerProps = typeof header === \"object\" ? header : {};\n\n return (\n <div\n {...restProps}\n className={cx(classBase, className, {\n [`${classBase}-collapsed`]: collapsed,\n [`${classBase}-expanded`]: expanded,\n [`${classBase}-resize-defer`]: resize === \"defer\",\n })}\n data-resizeable={resizeable}\n id={id}\n ref={useForkRef(forwardedRef, rootRef)}\n style={style}\n tabIndex={-1}\n >\n <ViewContext.Provider value={viewContextValue}>\n {header ? (\n <Header\n {...headerProps}\n collapsed={collapsed}\n contributions={contributions}\n expanded={expanded}\n closeable={closeable}\n onEditTitle={onEditTitle}\n orientation={orientation}\n tearOut={tearOut}\n title={title}\n />\n ) : null}\n <div className={`${classBase}-main`} ref={mainRef}>\n {getContent()}\n </div>\n </ViewContext.Provider>\n </div>\n );\n});\nView.displayName = \"View\";\n\ninterface ViewComponentType {\n (\n props: ViewProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n }\n ): ReactElement<ViewProps>;\n displayName?: string;\n}\n\nconst MemoView = React.memo(View) as ViewComponentType;\n\nMemoView.displayName = \"View\";\n\nregisterComponent(\"View\", MemoView, \"view\");\n\nexport { MemoView as View };\n", "import { EditableLabel } from \"@vuu-ui/vuu-ui-controls\";\nimport { Button } from \"@salt-ds/core\";\nimport { default as classnames, default as cx } from \"clsx\";\nimport {\n cloneElement,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n useRef,\n useState,\n} from \"react\";\nimport { Contribution, useViewDispatch } from \"../layout-view\";\n\nimport \"./Header.css\";\n\nexport interface HeaderProps extends HTMLAttributes<HTMLDivElement> {\n collapsed?: boolean;\n contributions?: Contribution[];\n expanded?: boolean;\n closeable?: boolean;\n onEditTitle: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n tearOut?: boolean;\n}\n\nconst classBase = \"vuuHeader\";\n\nexport const Header = ({\n className: classNameProp,\n contributions,\n collapsed,\n closeable,\n onEditTitle,\n orientation: orientationProp = \"horizontal\",\n style,\n title = \"Untitled\",\n}: HeaderProps) => {\n const labelFieldRef = useRef<HTMLDivElement>(null);\n const [value, setValue] = useState<string>(title);\n const [editing, setEditing] = useState<boolean>(false);\n\n const viewDispatch = useViewDispatch();\n const handleClose = (evt: MouseEvent) =>\n viewDispatch?.({ type: \"remove\" }, evt);\n\n const handleTitleMouseDown = () => {\n labelFieldRef.current?.focus();\n };\n\n const handleButtonMouseDown = (evt: MouseEvent) => {\n // do not allow drag to be initiated\n evt.stopPropagation();\n };\n\n const orientation = collapsed || orientationProp;\n\n const className = classnames(\n classBase,\n classNameProp,\n `${classBase}-${orientation}`\n );\n\n const handleEnterEditMode = () => {\n setEditing(true);\n };\n\n const handleTitleKeyDown = (evt: KeyboardEvent<HTMLDivElement>) => {\n if (evt.key === \"Enter\") {\n setEditing(true);\n }\n };\n\n const handleExitEditMode = (\n originalValue = \"\",\n finalValue = \"\",\n allowDeactivation = true,\n editCancelled = false\n ) => {\n setEditing(false);\n if (editCancelled) {\n setValue(originalValue);\n } else if (finalValue !== originalValue) {\n setValue(finalValue);\n onEditTitle?.(finalValue);\n }\n if (allowDeactivation === false) {\n labelFieldRef.current?.focus();\n }\n };\n\n const handleMouseDown = (e: MouseEvent) => {\n viewDispatch?.({ type: \"mousedown\" }, e);\n };\n\n const toolbarItems: ReactElement[] = [];\n const postTitleContributedItems: ReactElement[] = [];\n const actionButtons: ReactElement[] = [];\n\n contributions?.forEach((contribution, i) => {\n switch (contribution.location) {\n case \"pre-title\":\n toolbarItems.push(cloneElement(contribution.content, { key: i }));\n break;\n default:\n postTitleContributedItems.push(\n cloneElement(contribution.content, { key: i })\n );\n }\n });\n\n title &&\n toolbarItems.push(\n <EditableLabel\n className={`${classBase}-title`}\n editing={editing}\n key=\"title\"\n value={value}\n onChange={setValue}\n onMouseDownCapture={handleTitleMouseDown}\n onEnterEditMode={handleEnterEditMode}\n onExitEditMode={handleExitEditMode}\n onKeyDown={handleTitleKeyDown}\n ref={labelFieldRef}\n tabIndex={0}\n />\n );\n\n closeable &&\n actionButtons.push(\n <Button\n data-icon=\"close\"\n key=\"close\"\n onClick={handleClose}\n onMouseDown={handleButtonMouseDown}\n variant=\"secondary\"\n />\n );\n\n postTitleContributedItems.length > 0 &&\n toolbarItems.push(\n <div className=\"vuuTooltrayProxy\" data-align=\"end\" key=\"contributions\">\n {postTitleContributedItems}\n </div>\n );\n\n actionButtons.length > 0 &&\n toolbarItems.push(\n <div className=\"vuuTooltrayProxy\" data-align=\"end\" key=\"actions\">\n {actionButtons}\n </div>\n );\n\n return (\n <div\n className={cx(\"vuuToolbarProxy\", className)}\n style={style}\n onMouseDown={handleMouseDown}\n >\n {toolbarItems}\n {/* \n {collapsed === false ? (\n <ActionButton\n aria-label=\"Minimize View\"\n actionId=\"minimize\"\n iconName=\"minimize\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {collapsed ? (\n <ActionButton\n aria-label=\"Restore View\"\n actionId=\"restore\"\n iconName=\"double-chevron-right\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {expanded === false ? (\n <ActionButton\n aria-label=\"Maximize View\"\n actionId=\"maximize\"\n iconName=\"maximize\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {expanded ? (\n <ActionButton\n aria-label=\"Restore View\"\n actionId=\"restore\"\n iconName=\"restore\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {tearOut ? (\n <ActionButton\n aria-label=\"Tear out View\"\n actionId=\"tearout\"\n iconName=\"tear-out\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {closeable ? (\n <Button\n aria-label=\"close\"\n data-icon\n onClick={handleClose}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null} */}\n </div>\n );\n};\n", "import { RefObject, useCallback, useMemo } from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { useViewActionDispatcher } from \"./useViewActionDispatcher\";\n\nexport interface ViewHookProps {\n id: string;\n rootRef: RefObject<HTMLDivElement>;\n path?: string;\n dropTargets?: string[];\n title?: string;\n}\n\nexport const useView = ({\n id,\n rootRef,\n path,\n dropTargets,\n title: titleProp,\n}: ViewHookProps) => {\n const layoutDispatch = useLayoutProviderDispatch();\n\n const {\n loadState,\n loadSessionState,\n purgeState,\n saveState,\n saveSessionState,\n } = usePersistentState();\n\n const [dispatchViewAction, contributions] = useViewActionDispatcher(\n id,\n rootRef,\n path,\n dropTargets\n );\n\n const title = useMemo(\n () => loadState(\"view-title\") ?? titleProp,\n [loadState, titleProp]\n );\n\n const onEditTitle = useCallback(\n (title: string) => {\n if (path) {\n layoutDispatch({ type: \"set-title\", path, title });\n }\n },\n [layoutDispatch, path]\n );\n\n const restoredState = useMemo(() => loadState(id), [id, loadState]);\n\n const load = useCallback(\n (key?: string) => loadState(id, key),\n [id, loadState]\n );\n\n const purge = useCallback(\n (key) => {\n purgeState(id, key);\n layoutDispatch({ type: \"save\" });\n },\n [id, layoutDispatch, purgeState]\n );\n\n const save = useCallback(\n (state, key) => {\n saveState(id, key, state);\n layoutDispatch({ type: \"save\" });\n },\n [id, layoutDispatch, saveState]\n );\n const loadSession = useCallback(\n (key?: string) => loadSessionState(id, key),\n [id, loadSessionState]\n );\n const saveSession = useCallback(\n (state, key) => saveSessionState(id, key, state),\n [id, saveSessionState]\n );\n\n const onConfigChange = useCallback(\n ({ type: key, ...config }) => {\n const { [key]: data } = config;\n save(data, key);\n },\n [save]\n );\n\n return {\n contributions,\n dispatchViewAction,\n load,\n loadSession,\n onConfigChange,\n onEditTitle,\n purge,\n restoredState,\n save,\n saveSession,\n title,\n };\n};\n", "import { RefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useResizeObserver } from \"./useResizeObserver\";\nimport {\n BreakPointRamp,\n breakpointRamp,\n getBreakPoints as getDocumentBreakpoints,\n} from \"./breakpoints\";\nimport { BreakPoint, BreakPointsProp } from \"../flexbox/flexboxTypes\";\n\nconst EMPTY_ARRAY: BreakPoint[] = [];\n\nexport interface BreakpointsHookProps {\n breakPoints?: BreakPointsProp;\n smallerThan?: string;\n}\n\n// TODO how do we cater for smallerThan/greaterThan breakpoints\nexport const useBreakpoints = (\n { breakPoints: breakPointsProp, smallerThan }: BreakpointsHookProps,\n ref: RefObject<HTMLElement>\n) => {\n const [breakpointMatch, setBreakpointmatch] = useState(\n smallerThan ? false : \"lg\"\n );\n const bodyRef = useRef(document.body);\n const breakPointsRef = useRef<BreakPointRamp[]>(\n breakPointsProp ? breakpointRamp(breakPointsProp) : getDocumentBreakpoints()\n );\n\n // TODO how do we identify the default\n const sizeRef = useRef(\"lg\");\n\n const stopFromMinWidth = useCallback(\n (w) => {\n if (breakPointsRef.current) {\n for (const [name, size] of breakPointsRef.current) {\n if (w >= size) {\n return name;\n }\n }\n }\n },\n [breakPointsRef]\n );\n\n const matchSizeAgainstBreakpoints = useCallback(\n (width) => {\n if (smallerThan) {\n const breakPointRamp = breakPointsRef.current.find(\n ([name]: BreakPointRamp) => name === smallerThan\n );\n if (breakPointRamp) {\n const [, , maxValue] = breakPointRamp;\n return width < maxValue;\n }\n } else {\n return stopFromMinWidth(width);\n }\n // is this right ?\n return width;\n },\n [smallerThan, stopFromMinWidth]\n );\n\n // TODO need to make the dimension a config\n useResizeObserver(\n ref || bodyRef,\n breakPointsRef.current ? [\"width\"] : EMPTY_ARRAY,\n ({ width: measuredWidth }: { width?: number }) => {\n const result = matchSizeAgainstBreakpoints(measuredWidth);\n if (result !== sizeRef.current) {\n sizeRef.current = result;\n setBreakpointmatch(result);\n }\n },\n true\n );\n\n useEffect(() => {\n const target = ref || bodyRef;\n if (target.current) {\n const prevSize = sizeRef.current;\n if (breakPointsRef.current) {\n // We're measuring here when the resizeObserver has also measured\n // There isn't a convenient way to get the Resizeobserver to\n // notify initial size - that's not really its job, unless we\n // set a flag ?\n const { clientWidth } = target.current;\n const result = matchSizeAgainstBreakpoints(clientWidth);\n sizeRef.current = result;\n // If initial size of ref does not match the default, notify client after render\n if (result !== prevSize) {\n setBreakpointmatch(result);\n }\n }\n }\n }, [setBreakpointmatch, matchSizeAgainstBreakpoints, ref]);\n\n // No, just ass the class directly to the ref, no need to render\n return breakpointMatch;\n};\n", "/* eslint-disable no-restricted-syntax */\nimport { useCallback, useLayoutEffect, useRef, RefObject } from \"react\";\nexport const WidthHeight = [\"height\", \"width\"];\nexport const HeightOnly = [\"height\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n scrollHeight?: T;\n scrollWidth?: T;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new WeakMap<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n contentRect: DOMRectReadOnly,\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return contentRect.height;\n case \"scrollHeight\":\n return element.scrollHeight;\n case \"scrollWidth\":\n return element.scrollWidth;\n case \"width\":\n return contentRect.width;\n default:\n return 0;\n }\n};\n\nexport const resizeObserver = new ResizeObserver(\n (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, contentRect } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n contentRect,\n dimension as measuredDimension\n );\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n onResize && onResize(measurements);\n }\n }\n }\n }\n);\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\n// Note asking for scrollHeight alone will not trigger onResize, this is only triggered by height,\n// with scrollHeight returned as an auxilliary value\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n): void {\n const dimensionsRef = useRef(dimensions);\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const rect = target.getBoundingClientRect();\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(target, rect, dim as measuredDimension);\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n let cleanedUp = false;\n\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n cleanedUp = false;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { fonts } = document as any;\n if (fonts) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n await fonts.ready;\n }\n if (!cleanedUp) {\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n }\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\"\n );\n }\n void registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n cleanedUp = true;\n }\n };\n }, [ref, measure, reportInitialSize, onResize]);\n\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n\n // TODO might be a good idea to ref and return the current measurememnts. That way, derived hooks\n // e.g useBreakpoints don't have to measure and client cn make onResize callback simpler\n}\n", "// should we have some global; defaults ?\n\nimport { BreakPointsProp } from \"../flexbox/flexboxTypes\";\n\nexport type BreakPointRamp = [string, number, number];\n\nfunction breakpointReader(\n themeName: string,\n defaultBreakpoints?: BreakPointsProp\n) {\n //TODO ownerDocument\n const themeRoot = document.body.querySelector(`.${themeName}`);\n const handler = {\n get: function (style: CSSStyleDeclaration, stopName: string) {\n const val = style.getPropertyValue(\n // lets assume we have the following naming convention\n `--${themeName}-breakpoint-${stopName}`\n );\n return val ? parseInt(val) : undefined;\n },\n };\n\n return themeRoot\n ? new Proxy(getComputedStyle(themeRoot), handler)\n : defaultBreakpoints ?? {};\n}\n\nconst byDescendingStopSize = (\n [, s1]: [string, number],\n [, s2]: [string, number]\n) => s2 - s1;\n\n// These are assumed to be min-width (aka mobile-first) stops, we could take a\n// paramneter to support max-width as well ?\n// return [stopName, minWidth, maxWidth]\nexport const breakpointRamp = (\n breakpoints: BreakPointsProp\n): BreakPointRamp[] =>\n Object.entries(breakpoints)\n .sort(byDescendingStopSize)\n .map(([name, value], i, all) => [\n name,\n value,\n i < all.length - 1 ? all[i + 1][1] : 9999,\n ]);\n\nlet documentBreakpoints: BreakPointRamp[] | null = null;\n\nconst loadBreakpoints = (themeName = \"salt\") => {\n // TODO would be nice to read these breakpoint labels from a css variable to\n // avoid hard-coding them here ?\n const { xs, sm, md, lg, xl } = breakpointReader(themeName) as BreakPointsProp;\n return breakpointRamp({ xs, sm, md, lg, xl });\n};\n\n//TODO support multiple themes loaded\nexport const getBreakPoints = (themeName?: string) => {\n if (documentBreakpoints === null) {\n documentBreakpoints = loadBreakpoints(themeName);\n }\n return documentBreakpoints;\n};\n", "const COLLAPSIBLE = 'data-collapsible';\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n 'data-pad-start': true,\n 'data-pad-end': true\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: 'dynamic',\n instant: 'instant',\n true: 'instant'\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? 'none';\n\ntype Props = { [key: string]: any };\nexport const extractResponsiveProps = (props: Props) => {\n return Object.keys(props).reduce<[Props, Props]>(\n (result, propName) => {\n const [toolbarProps, rest] = result;\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return result;\n },\n [{}, {}]\n );\n};\n", "import { useResizeObserver, WidthHeight } from \"../responsive\";\nimport { RefObject, useCallback, useRef } from \"react\";\n\nconst NO_MEASUREMENT: string[] = [];\n\ntype size = {\n height?: number;\n width?: number;\n};\n\nexport interface ViewResizeHookProps {\n mainRef: RefObject<HTMLDivElement>;\n resize?: \"defer\" | \"responsive\";\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport const useViewResize = ({\n mainRef,\n resize = \"responsive\",\n rootRef,\n}: ViewResizeHookProps) => {\n const deferResize = resize === \"defer\";\n\n const mainSize = useRef<size>({});\n const resizeHandle = useRef<number>();\n\n const setMainSize = useCallback(() => {\n if (mainRef.current) {\n mainRef.current.style.height = mainSize.current.height + \"px\";\n mainRef.current.style.width = mainSize.current.width + \"px\";\n }\n resizeHandle.current = undefined;\n }, [mainRef]);\n\n const onResize = useCallback(\n ({ height, width }) => {\n mainSize.current.height = height;\n mainSize.current.width = width;\n if (resizeHandle.current !== null) {\n clearTimeout(resizeHandle.current);\n }\n resizeHandle.current = window.setTimeout(setMainSize, 40);\n },\n [setMainSize]\n );\n\n useResizeObserver(\n rootRef,\n deferResize ? WidthHeight : NO_MEASUREMENT,\n onResize,\n deferResize\n );\n};\n", "import React, { SyntheticEvent, useContext } from \"react\";\nimport { ViewAction } from \"./viewTypes\";\n\nexport type QueryReponse = { [key: string]: unknown };\n\nexport type ViewDispatch = <Action extends ViewAction = ViewAction>(\n action: Action,\n evt?: SyntheticEvent\n) => Promise<boolean | QueryReponse | void>;\n\n/**\n * This API is available to any Feature hosted within Vuu (as all Features are wrapped\n * with View component). It offers metadata about the View as well as access to the\n * Vuu persistencew API;\n */\nexport interface ViewContextAPI {\n /**\n * dispatcher for View actions. These are a subset of LayoutActions, specifically for\n * View manipulation\n */\n dispatch?: ViewDispatch | null;\n id?: string;\n load?: (key?: string) => unknown;\n loadSession?: (key?: string) => unknown;\n onConfigChange?: (config: unknown) => void;\n path?: string;\n purge?: (key: string) => void;\n save?: (state: unknown, key: string) => void;\n saveSession?: (state: unknown, key: string) => void;\n setComponentProps: (props: { [key: string]: unknown }) => void;\n title?: string;\n}\n\nconst NO_CONTEXT = { dispatch: null } as ViewContextAPI;\nexport const ViewContext = React.createContext<ViewContextAPI>(NO_CONTEXT);\n\nexport const useViewDispatch = () => {\n const context = useContext(ViewContext);\n return context?.dispatch ?? null;\n};\n\nexport const useViewContext = () => useContext(ViewContext);\n", "import cx from \"clsx\";\nimport React, {\n HTMLAttributes,\n KeyboardEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport \"./Splitter.css\";\n\nconst classBase = \"vuuSplitter\";\n\nexport type SplitterDragStartHandler = (index: number) => void;\nexport type SplitterDragHandler = (index: number, distance: number) => void;\nexport type SplitterDragEndHandler = () => void;\n\nexport interface SplitterProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onDrag\" | \"onDragStart\"> {\n //TODO change to alignment (vertical | horizontal)\n column: boolean;\n index: number;\n onDragStart: SplitterDragStartHandler;\n onDrag: SplitterDragHandler;\n onDragEnd: SplitterDragEndHandler;\n}\n\nexport const Splitter = React.memo(function Splitter({\n column,\n index,\n onDrag,\n onDragEnd,\n onDragStart,\n style,\n}: SplitterProps) {\n const ignoreClick = useRef<boolean>();\n const rootRef = useRef<HTMLDivElement>(null);\n const lastPos = useRef<number>(0);\n\n const [active, setActive] = useState(false);\n\n const handleKeyDownDrag = useCallback(\n ({ key, shiftKey }) => {\n const distance = shiftKey ? 10 : 1;\n if (column && key === \"ArrowDown\") {\n onDrag(index, distance);\n } else if (column && key === \"ArrowUp\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowLeft\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowRight\") {\n onDrag(index, distance);\n }\n },\n [column, index, onDrag]\n );\n\n const handleKeyDownInitDrag = useCallback(\n (evt) => {\n const { key } = evt;\n const horizontalMove = key === \"ArrowLeft\" || key === \"ArrowRight\";\n const verticalMove = key === \"ArrowUp\" || key === \"ArrowDown\";\n if ((column && verticalMove) || (!column && horizontalMove)) {\n onDragStart(index);\n handleKeyDownDrag(evt);\n keyDownHandlerRef.current = handleKeyDownDrag;\n }\n },\n [column, handleKeyDownDrag, index, onDragStart]\n );\n\n const keyDownHandlerRef = useRef(handleKeyDownInitDrag);\n const handleKeyDown = (evt: KeyboardEvent) => keyDownHandlerRef.current(evt);\n\n const handleMouseMove = useCallback(\n (e) => {\n ignoreClick.current = true;\n const pos = e[column ? \"clientY\" : \"clientX\"];\n const diff = pos - lastPos.current;\n if (pos && pos !== lastPos.current) {\n onDrag(index, diff);\n }\n lastPos.current = pos;\n },\n [column, index, onDrag]\n );\n\n const handleMouseUp = useCallback(() => {\n window.removeEventListener(\"mousemove\", handleMouseMove, false);\n window.removeEventListener(\"mouseup\", handleMouseUp, false);\n onDragEnd();\n setActive(false);\n rootRef.current?.focus();\n }, [handleMouseMove, onDragEnd, setActive]);\n\n const handleMouseDown = useCallback(\n (e) => {\n lastPos.current = column ? e.clientY : e.clientX;\n onDragStart(index);\n window.addEventListener(\"mousemove\", handleMouseMove, false);\n window.addEventListener(\"mouseup\", handleMouseUp, false);\n e.preventDefault();\n setActive(true);\n },\n [column, handleMouseMove, handleMouseUp, index, onDragStart, setActive]\n );\n\n const handleClick = () => {\n if (ignoreClick.current) {\n ignoreClick.current = false;\n } else {\n rootRef.current?.focus();\n }\n };\n\n const handleBlur = () => {\n keyDownHandlerRef.current = handleKeyDownInitDrag;\n };\n\n const className = cx(classBase, {\n [`${classBase}-active`]: active,\n [`${classBase}-column`]: column,\n });\n return (\n <div\n className={className}\n data-splitter\n ref={rootRef}\n role=\"separator\"\n style={style}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseDown={handleMouseDown}\n tabIndex={0}\n >\n <div className={`${classBase}-grab-zone`} />\n </div>\n );\n});\n", "import { ReactElement } from \"react\";\nimport {\n getIntrinsicSize,\n hasUnboundedFlexStyle,\n} from \"../layout-reducer/flexUtils\";\nimport { getProp } from \"../utils\";\nimport type { BreakPoint, ContentMeta } from \"./flexboxTypes\";\n\nconst NO_INTRINSIC_SIZE: {\n height?: number;\n width?: number;\n} = {};\n\nexport const SPLITTER = 1;\nexport const PLACEHOLDER = 2;\n\nconst isIntrinsicallySized = (item: ContentMeta) =>\n typeof item.intrinsicSize === \"number\";\n\nconst getBreakPointValues = (\n breakPoints: BreakPoint[],\n component: ReactElement\n) => {\n const values: { [key: string]: number | undefined } = {};\n breakPoints.forEach((breakPoint) => {\n values[breakPoint] = getProp(component, breakPoint);\n });\n return values;\n};\n\nexport const gatherChildMeta = (\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n breakPoints?: BreakPoint[]\n) => {\n return children.map((child, index) => {\n const resizeable = getProp(child, \"resizeable\");\n const { [dimension]: intrinsicSize } =\n getIntrinsicSize(child) ?? NO_INTRINSIC_SIZE;\n const flexOpen = hasUnboundedFlexStyle(child);\n if (breakPoints) {\n return {\n index,\n flexOpen,\n intrinsicSize,\n resizeable,\n ...getBreakPointValues(breakPoints, child),\n };\n } else {\n return { index, flexOpen, intrinsicSize, resizeable };\n }\n });\n};\n\n// Splitters are inserted AFTER the associated index, so\n// never a splitter in last position.\n// Placeholder goes before (first) OR after(last) index\nexport const findSplitterAndPlaceholderPositions = (\n childMeta: ContentMeta[]\n) => {\n const count = childMeta.length;\n const allIntrinsic = childMeta.every(isIntrinsicallySized);\n const splitterPositions = Array(count).fill(0);\n if (allIntrinsic && count > 0) {\n splitterPositions[0] = PLACEHOLDER;\n splitterPositions[count - 1] = PLACEHOLDER;\n }\n if (count < 2) {\n return splitterPositions;\n } else {\n // 1) From the left, check each item.\n // Once we hit a resizable item, set this index and all subsequent indices,\n // except for last, to SPLITTER\n for (let i = 0, resizeablesLeft = 0; i < count - 1; i++) {\n if (childMeta[i].resizeable && !resizeablesLeft) {\n resizeablesLeft = SPLITTER;\n }\n splitterPositions[i] += resizeablesLeft;\n }\n // 2) Now check from the right. Undo splitter insertion until we reach a point\n // where there is a resizeable to our right.\n for (let i = count - 1; i > 0; i--) {\n if (splitterPositions[i] & SPLITTER) {\n splitterPositions[i] -= SPLITTER;\n }\n if (childMeta[i].resizeable) {\n break;\n }\n }\n return splitterPositions;\n }\n};\n\nexport const identifyResizeParties = (\n contentMeta: ContentMeta[],\n idx: number\n) => {\n const idx1 = getLeadingResizeablePos(contentMeta, idx);\n const idx2 = getTrailingResizeablePos(contentMeta, idx);\n const participants = idx1 !== -1 && idx2 !== -1 ? [idx1, idx2] : undefined;\n const bystanders = identifyResizeBystanders(contentMeta, participants);\n return [participants, bystanders];\n};\n\nfunction identifyResizeBystanders(\n contentMeta: ContentMeta[],\n participants?: number[]\n) {\n if (participants) {\n const bystanders = [];\n for (let i = 0; i < contentMeta.length; i++) {\n if (contentMeta[i].flexOpen && !participants.includes(i)) {\n bystanders.push(i);\n }\n }\n return bystanders;\n }\n}\n\nfunction getLeadingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n while (pos >= 1 && !resizeable) {\n pos = pos - 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos;\n}\n\nfunction getTrailingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n const count = contentMeta.length;\n while (pos < count - 1 && !resizeable) {\n pos = pos + 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos === count ? -1 : pos;\n}\n\nfunction isResizeable(contentMeta: ContentMeta[], idx: number): boolean {\n const { placeholder, splitter, resizeable, intrinsicSize } = contentMeta[idx];\n return Boolean(!splitter && !intrinsicSize && (placeholder || resizeable));\n}\n", "import { useCallback } from \"react\";\nimport { Action } from \"../layout-action\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { SplitterResizeAction } from \"../layout-reducer\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Flexbox from \"./Flexbox\";\nimport { FlexboxLayoutProps } from \"./flexboxTypes\";\n\nexport const FlexboxLayout = function FlexboxLayout(props: FlexboxLayoutProps) {\n const { path } = props;\n const dispatch = useLayoutProviderDispatch();\n\n const handleSplitterMoved = useCallback(\n (sizes) => {\n dispatch({\n type: Action.SPLITTER_RESIZE,\n path,\n sizes,\n } as SplitterResizeAction);\n },\n [dispatch, path]\n );\n\n return <Flexbox {...props} onSplitterMoved={handleSplitterMoved} />;\n};\nFlexboxLayout.displayName = \"Flexbox\";\n\nregisterComponent(\"Flexbox\", FlexboxLayout, \"container\");\n", "import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef, useMemo } from \"react\";\nimport { useBreakpoints } from \"../responsive\";\nimport { asReactElements } from \"../utils\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport \"./FluidGrid.css\";\nimport { useResponsiveSizing } from \"./useResponsiveSizing\";\n\nconst classBase = \"hwFluidGrid\";\n\nexport interface FluidGridProps extends FlexboxProps {\n showGrid?: boolean;\n}\n\nexport const FluidGrid = forwardRef(function FluidGrid(\n props: FluidGridProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children: childrenProp,\n column,\n cols: colsProp = 12,\n className: classNameProp,\n flexFill,\n gap = 3,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n showGrid,\n spacing,\n splitterSize,\n style: styleProp,\n ...rest\n } = props;\n\n //TODO does thie useMemo serve any actual purpose or will childrenProp\n // always be new anyway ?\n const children = useMemo(() => {\n return asReactElements(childrenProp);\n }, [childrenProp]);\n\n const { cols, content, rootRef } = useResponsiveSizing({\n children,\n cols: colsProp,\n style: styleProp,\n });\n\n const breakpoint = useBreakpoints(\n {\n breakPoints,\n },\n rootRef\n );\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n [`${classBase}-show-grid`]: showGrid,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n const style = {\n ...styleProp,\n \"--spacing\": spacing,\n \"--grid-col-count\": cols,\n \"--grid-gap\": gap,\n };\n\n return (\n <div\n {...rest}\n className={className}\n data-breakpoint={breakpoint}\n data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={style}\n >\n {content}\n </div>\n );\n});\nFluidGrid.displayName = \"FluidGrid\";\n", "import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport {\n cloneElement,\n CSSProperties,\n isValidElement,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { gatherChildMeta } from \"./flexbox-utils\";\nimport { BreakPoint } from \"./flexboxTypes\";\n\nconst breakPoints: BreakPoint[] = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"];\n\nconst DEFAULT_COLS = 12;\n\nexport const useResponsiveSizing = ({\n children: childrenProp,\n cols: colsProp,\n style,\n}: {\n children: ReactElement[];\n cols?: number;\n style?: CSSProperties;\n}) => {\n const rootRef = useRef(null);\n const metaRef = useRef(null);\n const contentRef = useRef<ReactElement[]>();\n const cols = colsProp ?? DEFAULT_COLS;\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const buildContent = useCallback(\n (children, dimension): [ReactElement[], any] => {\n const childMeta = gatherChildMeta(children, dimension, breakPoints);\n const content = [];\n const meta = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const {\n style: { flex, ...rest },\n } = child.props;\n content.push(\n cloneElement(child, {\n key: getUniqueId(),\n style: {\n ...rest,\n \"--parent-col-count\": cols,\n },\n })\n );\n meta.push(childMeta[i]);\n }\n return [content, meta];\n },\n [cols]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(children, dimension);\n metaRef.current = meta;\n contentRef.current = content;\n }, [buildContent, children, dimension]);\n\n return {\n cols,\n content: contentRef.current,\n rootRef,\n };\n};\n", "import { registerComponent } from '../registry/ComponentRegistry';\nimport { FluidGrid, FluidGridProps } from './FluidGrid';\n\nexport const FluidGridLayout = function FluidGridLayout(props: FluidGridProps) {\n return <FluidGrid {...props} />;\n};\nFluidGridLayout.displayName = 'FluidGrid';\n\nregisterComponent('FluidGrid', FluidGridLayout, 'container');\n", "import { CSSProperties, forwardRef, ForwardedRef, HTMLAttributes } from \"react\";\nimport { MeasuredSize, useMeasuredContainer } from \"./useMeasuredContainer\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\n\nimport \"./MeasuredContainer.css\";\n\nexport interface MeasuredContainerProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * A numeric value for height will result in a fixed height. To adapt to container\n * use either a percentage height or 'auto'. Always use 'auto' when rendering\n * within a column based flex container, together with a flex value (use the\n * --vuuMeasuredContainer-flex CSS custom property))\n */\n height?: number | string;\n onResize?: (size: MeasuredSize) => void;\n width?: number | string;\n}\n\nconst baseClass = \"vuuMeasuredContainer\";\n\nexport const MeasuredContainer = forwardRef(function MeasuredContainer(\n {\n children,\n className,\n height,\n onResize,\n style,\n width,\n ...htmlAttributes\n }: MeasuredContainerProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { containerRef, ...containerMeasurements } = useMeasuredContainer({\n height,\n onResize,\n width,\n });\n\n const { cssSize, innerSize } = containerMeasurements;\n const unmeasured = innerSize === undefined;\n\n const getStyle = () => {\n return unmeasured\n ? ({\n \"--measured-css-height\": `${cssSize.height}`,\n \"--measured-css-width\": `${cssSize.width}`,\n } as CSSProperties)\n : ({\n ...style,\n \"--measured-css-height\": `${cssSize.height}`,\n \"--measured-css-width\": `${cssSize.width}`,\n \"--measured-px-height\": `${innerSize?.height}px`,\n \"--measured-px-width\": `${innerSize?.width}px`,\n } as CSSProperties);\n };\n\n const forkedRef = useForkRef(containerRef, forwardedRef);\n\n return unmeasured ? (\n <div\n {...htmlAttributes}\n className={cx(baseClass, `${baseClass}-ummeasured`)}\n style={getStyle()}\n ref={containerRef}\n />\n ) : (\n <div\n {...htmlAttributes}\n className={cx(baseClass, className)}\n ref={forkedRef}\n style={getStyle()}\n >\n {children}\n </div>\n );\n});\n", "import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport {\n CSSProperties,\n RefObject,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { MeasuredContainerProps } from \"./MeasuredContainer\";\nimport { useResizeObserver, ResizeHandler } from \"./useResizeObserver\";\n\nconst ClientWidthHeight = [\"clientHeight\", \"clientWidth\"];\nconst WidthOnly = [\"clientWidth\"];\nconst HeightOnly = [\"clientHeight\"];\nconst NO_MEASUREMENT = [] as const;\n\nexport interface ClientSize {\n clientHeight: number;\n clientWidth: number;\n}\n\nexport interface MeasuredProps\n extends Pick<MeasuredContainerProps, \"height\" | \"onResize\" | \"width\"> {\n defaultHeight?: number;\n defaultWidth?: number;\n}\n\nexport type CssSize = Pick<CSSProperties, \"height\" | \"width\">;\n\nexport interface MeasuredSize {\n height: number;\n width: number;\n}\n\ninterface MeasuredState {\n css: CssSize;\n outer: CssSize;\n inner?: MeasuredSize;\n}\n\nconst isNumber = (val: unknown): val is number => Number.isFinite(val);\n\nconst FULL_SIZE: CssSize = { height: \"100%\", width: \"auto\" };\n\nexport interface MeasuredContainerHookResult {\n containerRef: RefObject<HTMLDivElement>;\n cssSize: CssSize;\n outerSize: CssSize;\n innerSize?: MeasuredSize;\n}\n\n// If (outer) height and width are known at initialisation (i.e. they\n// were passed as props), use as initial values for inner size. If there\n// is no border on Table, these values will not change. If there is a border,\n// inner values will be updated once measured.\nconst getInitialCssSize = (\n height?: number | string,\n width?: number | string\n): CssSize => {\n if (isValidNumber(height) && isValidNumber(width)) {\n return {\n height: `${height}px`,\n width: `${width}px`,\n };\n } else if (typeof height === \"string\" || typeof width === \"string\") {\n return {\n height: height ?? \"100%\",\n width: width ?? \"auto\",\n };\n } else {\n return FULL_SIZE;\n }\n};\n\nconst getInitialInnerSize = (\n height: unknown,\n width: unknown\n): MeasuredSize | undefined => {\n if (isValidNumber(height) && isValidNumber(width)) {\n return {\n height,\n width,\n };\n }\n};\n\nexport const useMeasuredContainer = ({\n defaultHeight = 0,\n defaultWidth = 0,\n height,\n onResize: onResizeProp,\n width,\n}: MeasuredProps): MeasuredContainerHookResult => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [size, setSize] = useState<MeasuredState>({\n css: getInitialCssSize(height, width),\n inner: getInitialInnerSize(height, width),\n outer: {\n height: height ?? \"100%\",\n width: width ?? \"auto\",\n },\n });\n const fixedHeight = typeof height === \"number\";\n const fixedWidth = typeof width === \"number\";\n\n const dimensions =\n fixedHeight && fixedWidth\n ? NO_MEASUREMENT\n : fixedHeight\n ? WidthOnly\n : fixedWidth\n ? HeightOnly\n : ClientWidthHeight;\n\n useMemo(() => {\n setSize((currentSize) => {\n const { inner, outer } = currentSize;\n if (isValidNumber(height) && isValidNumber(width) && inner && outer) {\n const { height: innerHeight, width: innerWidth } = inner;\n const { height: outerHeight, width: outerWidth } = outer;\n\n if (outerHeight !== height || outerWidth !== width) {\n const heightDiff = isValidNumber(outerHeight)\n ? outerHeight - innerHeight\n : 0;\n const widthDiff = isValidNumber(outerWidth)\n ? outerWidth - innerWidth\n : 0;\n return {\n ...currentSize,\n outer: { height, width },\n inner: { height: height - heightDiff, width: width - widthDiff },\n };\n }\n }\n return currentSize;\n });\n }, [height, width]);\n\n const onResize: ResizeHandler = useCallback(\n ({ clientWidth, clientHeight }: Partial<ClientSize>) => {\n const { css, inner, outer } = size;\n let newState: MeasuredState = size;\n\n if (\n fixedHeight &&\n isNumber(clientWidth) &&\n Math.floor(clientWidth) !== inner?.width\n ) {\n newState = {\n css,\n outer,\n inner: {\n width: Math.floor(clientWidth) || defaultWidth,\n height,\n },\n };\n } else if (\n fixedWidth &&\n isNumber(clientHeight) &&\n Math.floor(clientHeight) !== inner?.height\n ) {\n newState = {\n css,\n outer,\n inner: {\n height: Math.floor(clientHeight) || defaultHeight,\n width,\n },\n };\n } else if (\n isNumber(clientHeight) &&\n isNumber(clientWidth) &&\n (clientWidth !== inner?.width || clientHeight !== inner?.height)\n ) {\n newState = {\n css,\n outer,\n inner: {\n width: Math.floor(clientWidth) || defaultWidth,\n height: Math.floor(clientHeight) || defaultHeight,\n },\n };\n }\n\n if (newState !== size) {\n setSize(newState);\n }\n },\n [defaultHeight, defaultWidth, fixedHeight, fixedWidth, height, size, width]\n );\n\n useEffect(() => {\n if (size.inner) {\n onResizeProp?.(size.inner);\n }\n }, [onResizeProp, size.inner]);\n\n useResizeObserver(containerRef, dimensions, onResize, true);\n\n return {\n containerRef,\n cssSize: size.css,\n outerSize: size.outer,\n innerSize: size.inner,\n };\n};\n", "import { RefObject, useCallback, useEffect, useRef } from \"react\";\n\nexport const WidthHeight = [\"height\", \"width\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n clientHeight?: number;\n clientWidth?: number;\n contentHeight?: number;\n contentWidth?: number;\n scrollHeight?: number;\n scrollWidth?: number;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new Map<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n size: {\n height: number;\n width: number;\n contentHeight: number;\n contentWidth: number;\n },\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return size.height;\n case \"clientHeight\":\n return Math.floor(element.clientHeight);\n case \"clientWidth\":\n return Math.floor(element.clientWidth);\n case \"contentHeight\":\n return size.contentHeight;\n case \"contentWidth\":\n return size.contentWidth;\n case \"scrollHeight\":\n return Math.ceil(Math.floor(element.scrollHeight));\n case \"scrollWidth\":\n return Math.ceil(Math.floor(element.scrollWidth));\n case \"width\":\n return size.width;\n default:\n return 0;\n }\n};\n\n// TODO should we make this create-on-demand\nconst resizeObserver = new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, borderBoxSize, contentBoxSize } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const [{ blockSize: height, inlineSize: width }] = borderBoxSize;\n const [{ blockSize: contentHeight, inlineSize: contentWidth }] =\n contentBoxSize;\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n { height, width, contentHeight, contentWidth },\n dimension as measuredDimension\n );\n\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n // TODO only return measured sizes\n onResize && onResize(measurements);\n }\n }\n }\n});\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: readonly string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n) {\n const dimensionsRef = useRef(dimensions);\n\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const { width, height } = target.getBoundingClientRect();\n const { clientWidth: contentWidth, clientHeight: contentHeight } = target;\n const flooredHeight = Math.floor(height);\n const flooredWidth = Math.floor(width);\n\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(\n target,\n {\n width: flooredWidth,\n height: flooredHeight,\n contentHeight,\n contentWidth,\n },\n dim as measuredDimension\n );\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useEffect(() => {\n const target = ref.current as HTMLElement;\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n // await document.fonts.ready;\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n } else {\n console.log(\n `%cuseResizeObserver an target expected to be under observation wa snot found. This warrants investigation`,\n \"font-weight:bold; color:red;\"\n );\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n console.log(\n `useResizeObserver attemping to observe same element twice`,\n {\n target,\n }\n );\n // throw Error(\n // \"useResizeObserver attemping to observe same element twice\"\n // );\n }\n // TODO set a pending entry on map\n registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n }\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [measure, ref]);\n\n useEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n}\n", "import { PopupMenu, PopupMenuProps } from \"@vuu-ui/vuu-popups\";\nimport { orientationType, useId } from \"@vuu-ui/vuu-utils\";\n\nimport cx from \"clsx\";\nimport React, {\n CSSProperties,\n ForwardedRef,\n forwardRef,\n HTMLAttributes,\n} from \"react\";\nimport { asReactElements } from \"../utils\";\nimport { OverflowItem } from \"./overflow-utils\";\nimport { useOverflowContainer } from \"./useOverflowContainer\";\n\nimport \"./OverflowContainer.css\";\n\nconst classBase = \"vuuOverflowContainer\";\n\nexport interface OverflowContainerProps extends HTMLAttributes<HTMLDivElement> {\n PopupMenuProps?: Partial<PopupMenuProps>;\n allowDragDrop?: boolean;\n debugId?: string;\n height: number;\n onMoveItem?: (fromIndex: number, toIndex: number) => void;\n onSwitchWrappedItemIntoView?: (overflowItem: OverflowItem) => void;\n orientation?: orientationType;\n overflowIcon?: string;\n overflowPosition?: \"start\" | \"end\" | number;\n}\n\nconst WrapContainer = React.memo(\n ({\n PopupMenuProps,\n allowDragDrop,\n children,\n className: classNameProp,\n height: heightProp,\n id,\n onMoveItem,\n onSwitchWrappedItemIntoView,\n orientation = \"horizontal\",\n overflowIcon,\n overflowPosition = \"end\",\n }: OverflowContainerProps) => {\n const childElements = asReactElements(children);\n const {\n draggable,\n draggedItemIndex,\n menuActionHandler,\n menuBuilder,\n onItemMouseDown,\n rootRef,\n } = useOverflowContainer({\n allowDragDrop,\n itemCount: childElements.length,\n onMoveItem,\n onSwitchWrappedItemIntoView,\n orientation,\n });\n\n const height = orientation === \"vertical\" ? \"100%\" : `${heightProp}px`;\n // TODO measure the height, if not provided\n const style = {\n \"--overflow-container-height\": `${height}`,\n } as CSSProperties;\n\n const className = cx(`${classBase}-wrapContainer`, classNameProp, {\n [`${classBase}-horizontal`]: orientation === \"horizontal\",\n [`${classBase}-vertical`]: orientation === \"vertical\",\n });\n\n const content = childElements.map((childEl, i) => {\n const {\n \"data-align\": align,\n \"data-overflow-priority\": overflowPriority = \"0\",\n id: itemId = `${id}-${i}`,\n label = `Item ${i + 1}`,\n } = childEl.props;\n return (\n <div\n className={cx(`${classBase}-item`, {\n \"vuuDraggable-dragAway\": draggedItemIndex === i,\n })}\n data-index={i}\n data-align={align}\n data-label={label}\n data-overflow-priority={overflowPriority}\n id={`${itemId}-wrapper`}\n key={i}\n onMouseDown={onItemMouseDown}\n >\n {childEl}\n </div>\n );\n });\n\n const overflowIndicator = (\n <div\n className={`${classBase}-OverflowIndicator`}\n data-index=\"overflow\"\n key=\"overflow\"\n >\n <PopupMenu\n {...PopupMenuProps}\n icon={overflowIcon}\n menuBuilder={menuBuilder}\n menuActionHandler={menuActionHandler}\n tabIndex={-1}\n />\n </div>\n );\n\n content.push(overflowIndicator);\n\n return (\n <div className={className} ref={rootRef} style={style}>\n {content}\n {draggable}\n </div>\n );\n }\n);\n\nWrapContainer.displayName = \"OverflowContainer.InnerContainer\";\n\nexport const OverflowContainer = forwardRef(function OverflowContainer(\n {\n PopupMenuProps,\n allowDragDrop = false,\n children,\n className,\n height = 44,\n id: idProp,\n onMoveItem,\n onSwitchWrappedItemIntoView,\n orientation,\n overflowIcon,\n overflowPosition,\n ...htmlAttributes\n }: OverflowContainerProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const id = useId(idProp);\n\n return (\n <div\n {...htmlAttributes}\n className={cx(cx(className, classBase))}\n id={id}\n ref={forwardedRef}\n >\n <WrapContainer\n PopupMenuProps={PopupMenuProps}\n allowDragDrop={allowDragDrop}\n height={height}\n id={id}\n orientation={orientation}\n overflowIcon={overflowIcon}\n overflowPosition={overflowPosition}\n onMoveItem={onMoveItem}\n onSwitchWrappedItemIntoView={onSwitchWrappedItemIntoView}\n >\n {children}\n </WrapContainer>\n </div>\n );\n});\n", "import { MenuActionHandler, MenuBuilder } from \"@vuu-ui/vuu-data-types\";\nimport { useDragDrop as useDragDrop } from \"@vuu-ui/vuu-ui-controls\";\nimport {\n isValidNumber,\n MEASURES,\n useLayoutEffectSkipFirst,\n} from \"@vuu-ui/vuu-utils\";\nimport { useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n applyOverflowClassToWrappedItems,\n removeOverflowIndicatorIfNoLongerNeeded,\n correctForWrappedHighPriorityItems,\n getNonWrappedAndWrappedItems,\n NO_WRAPPED_ITEMS,\n highPriorityItemsHaveWrappedButShouldNotHave,\n switchWrappedItemIntoView,\n OverflowItem,\n overflowIndicatorHasWrappedButShouldNotHave,\n correctForWrappedOverflowIndicator,\n} from \"./overflow-utils\";\nimport { OverflowContainerProps } from \"./OverflowContainer\";\n\nexport interface OverflowContainerHookProps\n extends Pick<\n OverflowContainerProps,\n \"allowDragDrop\" | \"onMoveItem\" | \"orientation\"\n > {\n itemCount: number;\n onSwitchWrappedItemIntoView?: (overflowItem: OverflowItem) => void;\n}\n\nexport const useOverflowContainer = ({\n allowDragDrop = false,\n itemCount,\n onMoveItem,\n onSwitchWrappedItemIntoView,\n orientation = \"horizontal\",\n}: OverflowContainerHookProps) => {\n const [container, setContainer] = useState<HTMLDivElement | null>(null);\n const wrappedItemsRef = useRef<OverflowItem[]>(NO_WRAPPED_ITEMS);\n // Drag drop needs a ref to container\n const containerRef = useRef<HTMLDivElement | null>(null);\n\n const setOverflowTabIndex = useCallback((tabIndex: \"0\" | \"-1\") => {\n if (containerRef.current) {\n containerRef.current\n .querySelector(\".vuuOverflowContainer-OverflowIndicator button\")\n ?.setAttribute(\"tabindex\", tabIndex);\n }\n }, []);\n\n const handleResize = useCallback(async () => {\n if (container) {\n let [nonWrapped, wrapped] = getNonWrappedAndWrappedItems(\n container,\n orientation\n );\n applyOverflowClassToWrappedItems(\n container,\n wrapped,\n \"vuuOverflowContainer-wrapContainer\"\n );\n if (overflowIndicatorHasWrappedButShouldNotHave(wrapped)) {\n wrapped = await correctForWrappedOverflowIndicator(container, wrapped);\n }\n while (\n highPriorityItemsHaveWrappedButShouldNotHave(nonWrapped, wrapped)\n ) {\n [nonWrapped, wrapped] = await correctForWrappedHighPriorityItems(\n container,\n nonWrapped,\n wrapped\n );\n }\n if (wrapped.length === 1) {\n if (removeOverflowIndicatorIfNoLongerNeeded(container)) {\n wrapped = NO_WRAPPED_ITEMS;\n }\n }\n\n if (wrappedItemsRef.current.length === 0 && wrapped.length > 0) {\n setOverflowTabIndex(\"0\");\n } else if (wrappedItemsRef.current.length > 0 && wrapped.length === 0) {\n setOverflowTabIndex(\"-1\");\n }\n\n wrappedItemsRef.current = wrapped;\n }\n }, [container, orientation, setOverflowTabIndex]);\n\n const hasOverflowItem = (\n opt: unknown\n ): opt is {\n overflowItem: OverflowItem;\n } => typeof opt === \"object\" && opt !== null && \"overflowItem\" in opt;\n\n const [menuBuilder, menuActionHandler] = useMemo((): [\n MenuBuilder,\n MenuActionHandler\n ] => {\n return [\n () => {\n const { current: menuItems } = wrappedItemsRef;\n return menuItems.map((item: OverflowItem) => {\n return {\n label: item.label,\n action: `activate-item-${item.index}`,\n options: { overflowItem: item },\n };\n });\n },\n // The menu items are our overflowed items, selecting one by default\n // brings it back onto the toolbar - TODO is this right ?\n ({ options }) => {\n if (container && hasOverflowItem(options)) {\n // TODO do we always want to switch it into view - leave that to caller\n const [, wrappedItems] = switchWrappedItemIntoView(\n container,\n options.overflowItem\n );\n wrappedItemsRef.current = wrappedItems;\n onSwitchWrappedItemIntoView?.(options.overflowItem);\n }\n return true;\n },\n ];\n }, [container, onSwitchWrappedItemIntoView]);\n\n const resizeObserver = useMemo(() => {\n const { sizeProp } = MEASURES[orientation];\n let currentSize = 0;\n return new ResizeObserver((entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { [sizeProp]: actualSize } = entry.contentRect;\n // This is important. Sometimes tiny sub-pixel differeces\n // can be reported, which break the layout assumptions\n const size = Math.round(actualSize as number);\n if (isValidNumber(size) && currentSize !== size) {\n currentSize = size;\n handleResize();\n }\n }\n });\n }, [handleResize, orientation]);\n\n useLayoutEffectSkipFirst(() => {\n handleResize();\n }, [handleResize, itemCount]);\n\n useMemo(() => {\n if (container) {\n resizeObserver.observe(container);\n }\n }, [container, resizeObserver]);\n\n const callbackRef = useCallback((el: HTMLDivElement | null) => {\n setContainer((containerRef.current = el));\n }, []);\n\n const handleDrop = useCallback(\n (fromIndex: number, toIndex: number) => {\n onMoveItem?.(fromIndex, toIndex);\n },\n [onMoveItem]\n );\n\n const { onMouseDown: dragDropHookHandleMouseDown, ...dragDropHook } =\n useDragDrop({\n allowDragDrop,\n containerRef,\n // this is for useDragDropNext\n draggableClassName: `vuuOverflowContainer`,\n // extendedDropZone: overflowedItems.length > 0,\n onDrop: handleDrop,\n orientation: \"horizontal\",\n itemQuery: \".vuuOverflowContainer-item\",\n });\n\n return {\n menuActionHandler,\n menuBuilder,\n onItemMouseDown: dragDropHookHandleMouseDown,\n rootRef: callbackRef,\n ...dragDropHook,\n };\n};\n", "import { getElementByDataIndex, orientationType } from \"@vuu-ui/vuu-utils\";\n\nconst NON_WRAPPED_ITEM = \".vuuOverflowContainer-item:not(.wrapped)\";\n\nexport type OverflowItem = {\n index: string;\n label: string;\n overflowPriority: string;\n};\n\nexport const isOverflowElement = (element: HTMLElement | null) =>\n element !== null &&\n element.dataset.index === \"overflow\" &&\n element.parentElement !== null &&\n element.parentElement.classList.contains(\n \"vuuOverflowContainer-wrapContainer-overflowed\"\n );\n\nexport const sortByScreenOrder = (elements: HTMLElement[]): HTMLElement[] =>\n elements.sort((e1, e2) => {\n const {\n dataset: { index: idx1 = \"?\" },\n } = e1;\n const {\n dataset: { index: idx2 = \"?\" },\n } = e2;\n const isOverflowed1 = e1.classList.contains(\"wrapped\");\n const isOverflowed2 = e2.classList.contains(\"wrapped\");\n const isOverflowedIndicator1 = idx1 === \"overflow\";\n const isOverflowedIndicator2 = idx2 === \"overflow\";\n if (isOverflowed1 && !isOverflowed2) {\n return 1;\n } else if (!isOverflowed1 && isOverflowed2) {\n return -1;\n }\n if (isOverflowedIndicator1) {\n return 1;\n } else if (isOverflowedIndicator2) {\n return -1;\n }\n return parseInt(idx1) > parseInt(idx2) ? 1 : -1;\n });\n\nexport const NO_WRAPPED_ITEMS: OverflowItem[] = [];\n\n/**\n Identify wrapped items by comparing position of each item. Any item\n not to the right of preceeding item has wrapped. Note: on-screen \n position of items does not necessarily match document position, due\n to use of css order. This is taken into account by sorting. \n TODO support Vertical orientation\n */\nexport const getNonWrappedAndWrappedItems = (\n container: HTMLElement,\n orientation: orientationType = \"horizontal\"\n): [OverflowItem[], OverflowItem[]] => {\n const nonWrappedItems: OverflowItem[] = [];\n const wrappedItems: OverflowItem[] = [];\n let currentPosition = -1;\n let overflowed = false;\n const sortedChildren = sortByScreenOrder(\n Array.from(container.children) as HTMLElement[]\n );\n const positionAttribute = orientation === \"vertical\" ? \"top\" : \"left\";\n for (const child of sortedChildren) {\n const element = child as HTMLElement;\n const {\n dataset: { index = \"?\", label = \"?\", overflowPriority = \"0\" },\n } = element;\n const { [positionAttribute]: position } = element.getBoundingClientRect();\n if (position <= currentPosition) {\n if (index === \"overflow\") {\n wrappedItems.push(nonWrappedItems.pop() as OverflowItem);\n } else {\n wrappedItems.push({ index, label, overflowPriority });\n }\n overflowed = true;\n } else if (overflowed) {\n wrappedItems.push({ index, label, overflowPriority });\n } else {\n nonWrappedItems.push({ index, label, overflowPriority });\n }\n currentPosition = position;\n }\n return [nonWrappedItems, wrappedItems];\n};\n\nexport const applyOverflowClassToWrappedItems = (\n container: HTMLElement,\n overflowedItems: OverflowItem[],\n classBase?: string\n) => {\n let ignoreOverflow = false;\n const className = classBase ? `${classBase}-overflowed` : \"overflow\";\n if (overflowedItems.find(({ index }) => index === \"overflow\")) {\n if (overflowedItems.length === 1) {\n ignoreOverflow = true;\n }\n }\n for (const element of container.children) {\n const {\n dataset: { index = \"?\" },\n } = element as HTMLElement;\n if (overflowedItems.length === 0 || ignoreOverflow) {\n container.classList.remove(className);\n } else {\n container.classList.add(className);\n }\n if (\n index !== \"overflow\" &&\n overflowedItems.find((item) => item.index === index)\n ) {\n element.classList.add(\"wrapped\");\n } else {\n element.classList.remove(\"wrapped\");\n }\n }\n};\n\nconst maxPriority = (priority: number, { overflowPriority }: OverflowItem) =>\n Math.max(priority, parseInt(overflowPriority));\n\nconst minPriority = (priority: number, { overflowPriority }: OverflowItem) =>\n Math.min(priority, parseInt(overflowPriority));\n\nexport const overflowIndicatorHasWrappedButShouldNotHave = (\n wrappedItems: OverflowItem[]\n) => wrappedItems.length > 1 && wrappedItems.at(-1)?.index === \"overflow\";\n\nconst getHighestPriorityItem = (overflowItems: OverflowItem[]) => {\n let [highestPriorityItem] = overflowItems;\n for (let i = 1; i < overflowItems.length; i++) {\n const item = overflowItems[i];\n if (\n parseInt(item.overflowPriority) >\n parseInt(highestPriorityItem.overflowPriority)\n ) {\n highestPriorityItem = item;\n }\n }\n return highestPriorityItem;\n};\n\nexport const highPriorityItemsHaveWrappedButShouldNotHave = (\n nonWrappedItems: OverflowItem[],\n wrappedItems: OverflowItem[]\n) => {\n const minNonwrappedPriority = nonWrappedItems.reduce<number>(\n minPriority,\n Number.MAX_SAFE_INTEGER\n );\n const maxwrappedPriority = wrappedItems.reduce<number>(maxPriority, 0);\n if (maxwrappedPriority > minNonwrappedPriority) {\n return true;\n } else {\n return wrappedItems.length > 1 && wrappedItems.at(-1)?.index === \"overflow\";\n }\n};\n\n/** \n An edge case that may occur when reducing width from unwrapped to\n wrapped, or on first render.\n We overflow one or more items. Then, when the overflowIndicator assumes\n full width, it may itself overflow.\n*/\nexport const correctForWrappedOverflowIndicator = (\n container: HTMLElement,\n overflowedItems: OverflowItem[]\n): Promise<OverflowItem[]> =>\n new Promise((resolve) => {\n requestAnimationFrame(() => {\n const [, o2] = getNonWrappedAndWrappedItems(container);\n const newlyOverflowed = getNewItems(overflowedItems, o2);\n newlyOverflowed.forEach((item) => markElementAsWrapped(container, item));\n resolve(o2);\n });\n });\n\n/** \n An edge case that may occur when reducing width from unwrapped to\n wrapped, or on first render.\n We overflow one or more items. Then, when the overflowIndicator assumes\n full width, it may itself overflow.\n*/\nexport const correctForWrappedHighPriorityItems = (\n container: HTMLElement,\n nonWrapped: OverflowItem[],\n wrapped: OverflowItem[]\n): Promise<[OverflowItem[], OverflowItem[]]> =>\n new Promise((resolve) => {\n requestAnimationFrame(() => {\n const [, o2] = getNonWrappedAndWrappedItems(container);\n const highPriorityWrappedItem = getHighestPriorityItem(o2);\n if (highPriorityWrappedItem) {\n const [nonWrappedItems, wrappedItems] = switchWrappedItemIntoView(\n container,\n highPriorityWrappedItem\n );\n resolve([nonWrappedItems, wrappedItems]);\n } else {\n resolve([nonWrapped, wrapped]);\n }\n });\n });\n\nexport const markElementAsWrapped = (\n container: HTMLElement,\n item: OverflowItem\n) => {\n const el = getElementByDataIndex(container, item.index);\n if (el) {\n el.classList.add(\"wrapped\");\n } else {\n throw Error(\n `markElementAsWrapped element item with index ${item.index} not found`\n );\n }\n};\n\nexport const getElementsMarkedAsWrapped = (container: HTMLElement) =>\n Array.from(container.querySelectorAll(\".wrapped\")) as HTMLElement[];\n\nconst getNewItems = (items1: OverflowItem[], items2: OverflowItem[]) => {\n const newItems: OverflowItem[] = [];\n for (const item of items2) {\n if (!items1.find(({ index }) => index === item.index)) {\n newItems.push(item);\n }\n }\n return newItems;\n};\n\nexport const unmarkItemsWhichAreNoLongerWrapped = (\n container: HTMLElement,\n wrappedItems: OverflowItem[]\n) => {\n const elementssMarkedAsWrapped = getElementsMarkedAsWrapped(container);\n elementssMarkedAsWrapped.forEach((el) => {\n const {\n dataset: { index = \"?\" },\n } = el;\n if (!wrappedItems.find((i) => i.index === index)) {\n el.classList.remove(\"wrapped\");\n }\n });\n};\n\nconst getOverflowIndicator = (container: HTMLElement) =>\n container.querySelector('[data-index=\"overflow\"]') as HTMLElement;\nconst getOverflowedItem = (container: HTMLElement) =>\n container.querySelector(\".wrapped\") as HTMLElement;\nconst getElementWidth = (el: HTMLElement) =>\n parseInt(getComputedStyle(el).getPropertyValue(\"width\"));\n\nconst getAvailableSpace = (\n container: HTMLElement,\n overflowIndicator: HTMLElement\n) => {\n const { right: containerRight } = container.getBoundingClientRect();\n const paddingRight = parseInt(\n getComputedStyle(container).getPropertyValue(\"padding-right\")\n );\n const { right: indicatorRight } = overflowIndicator.getBoundingClientRect();\n return containerRight - paddingRight - indicatorRight;\n};\n\n/**\n An edge case. If container has grown but we still have one\n wrapped item - could the wrapped item return to the fold if the overflow\n indicaor were removed ?\n */\nexport const removeOverflowIndicatorIfNoLongerNeeded = (\n container: HTMLElement\n): boolean => {\n const overflowIndicator = getOverflowIndicator(container);\n const availableSpace = getAvailableSpace(container, overflowIndicator);\n const indicatorWidth = getElementWidth(overflowIndicator);\n const overflowedItem = getOverflowedItem(container);\n const overflowWidth = getElementWidth(overflowedItem);\n\n if (overflowWidth <= availableSpace + indicatorWidth) {\n container.classList.remove(\"overflowed\");\n overflowedItem.classList.remove(\"wrapped\");\n return true;\n }\n return false;\n};\n\nconst byPriorityDescending = (h1: Element, h2: Element) => {\n const {\n dataset: { index: i1 = \"0\", overflowPriority: p1 = \"0\" },\n } = h1 as HTMLElement;\n const {\n dataset: { index: i2 = \"0\", overflowPriority: p2 = \"0\" },\n } = h2 as HTMLElement;\n\n if (p1 > p2) {\n return -1;\n } else if (p1 < p2) {\n return 1;\n } else {\n return parseInt(i1) - parseInt(i2);\n }\n};\n\nconst getNonwrappedItemsByPriority = (container: HTMLElement) =>\n Array.from(container.querySelectorAll(NON_WRAPPED_ITEM)).sort(\n byPriorityDescending\n ) as HTMLElement[];\n\n/**\n * This is used both when an overflow menu is used to select an overflowed item\n * and when a high priority item has overflowed, whilst lower priority items\n * remain in view.\n */\nexport const switchWrappedItemIntoView = (\n container: HTMLElement,\n overflowItem: OverflowItem\n): [OverflowItem[], OverflowItem[]] => {\n const unwrappedItems = getNonwrappedItemsByPriority(container);\n const targetElement = getElementByDataIndex(\n container,\n overflowItem.index,\n true\n );\n let pos = -1;\n let unwrappedItem = unwrappedItems.at(pos) as HTMLElement;\n const itemWidth = getElementWidth(unwrappedItem);\n const targetWidth = getElementWidth(targetElement);\n const overflowIndicator = getOverflowIndicator(container);\n let availableSpace =\n getAvailableSpace(container, overflowIndicator) + itemWidth;\n if (availableSpace >= targetWidth) {\n switchWrapOnElements(targetElement, unwrappedItem);\n } else {\n // we need to wrap multiple items to make space for the switched item\n const { left: lastLeft } = unwrappedItem.getBoundingClientRect();\n const baseAvailableSpace = availableSpace;\n const wrapTargets = [unwrappedItem];\n while (availableSpace < targetWidth) {\n pos -= 1;\n unwrappedItem = unwrappedItems.at(pos) as HTMLElement;\n wrapTargets.push(unwrappedItem);\n const { left: nextLeft } = unwrappedItem.getBoundingClientRect();\n const extraSpace = lastLeft - nextLeft;\n availableSpace = baseAvailableSpace + extraSpace;\n }\n\n targetElement?.classList.remove(\"wrapped\");\n wrapTargets.forEach((item) => {\n item.classList.add(\"wrapped\");\n });\n }\n const [nonWrappedItems, wrappedItems] =\n getNonWrappedAndWrappedItems(container);\n unmarkItemsWhichAreNoLongerWrapped(container, wrappedItems);\n return [nonWrappedItems, wrappedItems];\n};\n\nconst switchWrapOnElements = (\n wrappedElement?: HTMLElement | null,\n nonWrappedElement?: HTMLElement\n) => {\n if (!wrappedElement || !nonWrappedElement) {\n throw Error(\"switchWrapOnElements, element undefined\");\n }\n wrappedElement.classList.remove(\"wrapped\");\n nonWrappedElement.classList.add(\"wrapped\");\n};\n", "import { uuid } from \"@vuu-ui/vuu-utils\";\nimport {\n List,\n ListItem,\n ListItemProps,\n ListProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport cx from \"clsx\";\nimport {\n cloneElement,\n HTMLAttributes,\n memo,\n MouseEvent,\n ReactElement,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { View, ViewProps } from \"../layout-view\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\n\nimport \"./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 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", "import { Tab, Tabstrip, TabstripProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n useRef,\n} from \"react\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { StackProps } from \"./stackTypes\";\n\nimport \"./Stack.css\";\n\nconst classBase = \"vuuTabs\";\n\nconst getDefaultTabIcon = () => undefined;\n\nconst getChildElements = <T extends ReactElement = ReactElement>(\n children: ReactNode\n): T[] => {\n const elements: T[] = [];\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n elements.push(child as T);\n } else {\n console.warn(`Stack has unexpected child element type`);\n }\n });\n return elements;\n};\n\nconst DefaultTabstripProps: Partial<TabstripProps> = {\n allowAddTab: false,\n allowCloseTab: false,\n allowRenameTab: false,\n};\n\nexport const Stack = forwardRef(function Stack(\n {\n TabstripProps = DefaultTabstripProps,\n active = 0,\n children,\n className: classNameProp,\n getTabIcon = getDefaultTabIcon,\n getTabLabel = getDefaultTabLabel,\n id: idProp,\n keyBoardActivation = \"manual\",\n // onMouseDown,\n onAddTab,\n onMoveTab,\n onTabClose,\n onTabEdit,\n onTabSelectionChanged,\n showTabs = \"top\",\n style,\n }: StackProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const id = useId(idProp);\n const tabLabels = useRef<string[]>([]);\n const {\n allowCloseTab,\n allowRenameTab,\n className: tabstripClassName,\n } = TabstripProps;\n\n const handleExitEditMode = useCallback(\n (\n _oldText: string,\n newText: string,\n _allowDeactivation: boolean,\n tabIndex: number\n ) => {\n onTabEdit?.(tabIndex, newText);\n },\n [onTabEdit]\n );\n\n const activeChild = () => {\n //TODO need to inject an id if child does not have one, so we can\n // establish the aria-controls relationship. In a Vuu layout, there\n // will always be an id.\n if (React.isValidElement(children)) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[active] ?? null;\n }\n return null;\n };\n\n const renderTabs = () =>\n getChildElements(children).map((child, idx) => {\n const {\n closeable = allowCloseTab,\n id: childId = `${id}-${idx}`,\n \"data-tab-location\": tabLocation,\n } = child.props;\n const label = getTabLabel(child, idx, tabLabels.current);\n tabLabels.current.push(label);\n return (\n <Tab\n ariaControls={childId}\n data-icon={getTabIcon(child, idx)}\n key={childId}\n id={`${childId}-tab`}\n index={idx}\n label={label}\n location={tabLocation}\n closeable={closeable}\n editable={allowRenameTab}\n />\n );\n });\n\n const child = activeChild();\n const isHorizontal = showTabs === \"left\" || showTabs === \"right\";\n const tabstripOrientation = isHorizontal ? \"vertical\" : \"horizontal\";\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-horizontal`]: isHorizontal,\n })}\n style={style}\n id={id}\n ref={ref}\n >\n {showTabs ? (\n <Tabstrip\n {...TabstripProps}\n activeTabIndex={\n TabstripProps?.activeTabIndex ?? (child === null ? -1 : active)\n }\n allowDragDrop={TabstripProps.allowDragDrop !== false}\n animateSelectionThumb\n className={cx(\"vuuTabHeader\", tabstripClassName)}\n aria-label=\"data tabs\"\n keyBoardActivation={keyBoardActivation}\n onActiveChange={onTabSelectionChanged}\n onAddTab={onAddTab}\n onCloseTab={onTabClose}\n onExitEditMode={handleExitEditMode}\n onMoveTab={onMoveTab}\n orientation={tabstripOrientation}\n // onMouseDown={handleMouseDown}\n >\n {renderTabs()}\n </Tabstrip>\n ) : null}\n <div\n aria-labelledby={`${id}-${active}`}\n className={`${classBase}-tabPanel`}\n role=\"tabpanel\"\n >\n {child}\n </div>\n </div>\n );\n});\nStack.displayName = \"Stack\";\n", "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\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { Stack } from \"./Stack\";\nimport { StackProps, TabLabelFactory } from \"./stackTypes\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { Placeholder } from \"../placeholder\";\n\nimport \"./Stack.css\";\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", "import {\n forwardCallbackProps,\n SelectionStrategy,\n SpecialKeyMultipleSelection,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport React, { useMemo, useRef } from \"react\";\nimport {\n OverflowContainer,\n OverflowContainerProps,\n} from \"../overflow-container\";\nimport { asReactElements } from \"../utils\";\nimport { useToolbar } from \"./useToolbar\";\n\nimport \"./Toolbar.css\";\n\nconst classBase = \"vuuToolbar\";\n\nexport type ActiveItemChangeHandler = (itemIndex: number[]) => void;\n\nexport type NavigationOutOfBoundsHandler = (direction: \"start\" | \"end\") => void;\nexport interface ToolbarProps extends OverflowContainerProps {\n activeItemIndex?: number[];\n alignItems?: \"start\" | \"center\" | \"end\";\n defaultActiveItemIndex?: number[];\n onActiveChange?: ActiveItemChangeHandler;\n /**\n * Indicates that user has used Arrow key navigation to move beyond the\n * last or before the first item. A higher level component may want to\n * use this to implement a seamless navigation across components.\n */\n onNavigateOutOfBounds?: NavigationOutOfBoundsHandler;\n selectionStrategy?: SelectionStrategy | SpecialKeyMultipleSelection;\n showSeparators?: boolean;\n}\n\nexport const Toolbar = ({\n activeItemIndex: activeItemIndexProp,\n alignItems = \"start\",\n defaultActiveItemIndex,\n children,\n className,\n id: idProp,\n onActiveChange,\n onNavigateOutOfBounds,\n orientation = \"horizontal\",\n selectionStrategy = \"none\",\n showSeparators = false,\n ...props\n}: ToolbarProps) => {\n const rootRef = useRef<HTMLDivElement>(null);\n const {\n activeItemIndex,\n focusableIdx,\n focusVisible,\n itemProps,\n ...toolbarHook\n } = useToolbar({\n activeItemIndex: activeItemIndexProp,\n defaultActiveItemIndex,\n containerRef: rootRef,\n onActiveChange,\n onNavigateOutOfBounds,\n orientation,\n selectionStrategy,\n });\n\n const id = useId(idProp);\n\n const items = useMemo(\n () =>\n asReactElements(children).map((child, index) => {\n const {\n id: itemId = `${id}-tab-${index}`,\n className: itemClassName,\n ...ownProps\n } = child.props;\n const selected = activeItemIndex.includes(index);\n return React.cloneElement(child, {\n ...forwardCallbackProps(ownProps, itemProps),\n className: cx(\"vuuToolbarItem\", itemClassName),\n \"data-overflow-priority\": selected ? \"1\" : undefined,\n id: itemId,\n key: index,\n \"aria-selected\": selected,\n tabIndex: focusableIdx === index ? 0 : -1,\n });\n }),\n [activeItemIndex, children, focusableIdx, id, itemProps]\n );\n\n return (\n <OverflowContainer\n {...props}\n {...toolbarHook.containerProps}\n className={cx(className, classBase, `${classBase}-${orientation}`, {\n [`${classBase}-alignCenter`]: alignItems === \"center\",\n [`${classBase}-alignEnd`]: alignItems === \"end\",\n [`${classBase}-withSeparators`]: showSeparators,\n })}\n {...props}\n ref={rootRef}\n >\n {items}\n </OverflowContainer>\n );\n};\n", "import { isValidNumber } from \"@vuu-ui/vuu-utils\";\nimport {\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n RefObject,\n useCallback,\n useRef,\n} from \"react\";\nimport { OverflowItem } from \"../overflow-container\";\nimport { ToolbarProps } from \"./Toolbar\";\nimport { useKeyboardNavigation } from \"./useKeyboardNavigation\";\nimport { useSelection } from \"./useSelection\";\n\nexport interface ToolbarHookProps\n extends Pick<\n ToolbarProps,\n | \"activeItemIndex\"\n | \"defaultActiveItemIndex\"\n | \"onActiveChange\"\n | \"onNavigateOutOfBounds\"\n >,\n Required<Pick<ToolbarProps, \"orientation\" | \"selectionStrategy\">> {\n containerRef: RefObject<HTMLElement>;\n itemQuery?: string;\n}\n\nexport const useToolbar = ({\n activeItemIndex: activeItemIndexProp,\n defaultActiveItemIndex,\n containerRef,\n itemQuery = \"vuuToolbarItem\",\n onActiveChange,\n onNavigateOutOfBounds,\n orientation,\n selectionStrategy,\n}: ToolbarHookProps) => {\n const lastSelection = useRef(activeItemIndexProp);\n\n const {\n focusItem: keyboardHookFocusItem,\n highlightedIdx,\n onClick: keyboardHookHandleClick,\n onKeyDown: keyboardHookHandleKeyDown,\n setHighlightedIdx: keyboardHookSetHighlightedIndex,\n ...keyboardHook\n } = useKeyboardNavigation({\n containerRef,\n onNavigateOutOfBounds,\n orientation,\n });\n\n const {\n activateItem: selectionHookActivateItem,\n itemHandlers: { onClick, onKeyDown },\n selected: selectionHookSelected,\n } = useSelection({\n containerRef,\n defaultSelected: defaultActiveItemIndex,\n highlightedIdx,\n itemQuery,\n onSelectionChange: onActiveChange,\n selected: activeItemIndexProp,\n selectionStrategy,\n });\n // We need this on reEntry for navigation hook to handle focus and for dragDropHook\n // to re-apply selection after drag drop. For some reason the value is stale if we\n // directly use selectionHookSelected within the drag, even though all dependencies\n //appear to be correctly declared.\n lastSelection.current = selectionHookSelected;\n\n const handleClick = useCallback(\n (evt: ReactMouseEvent<HTMLElement>) => {\n const target = evt.target as HTMLElement;\n const toolbarItem = target.closest(\"[data-index]\") as HTMLElement;\n if (toolbarItem) {\n const index = parseInt(toolbarItem.dataset.index ?? \"-1\");\n if (index !== -1 && isValidNumber(index)) {\n keyboardHookHandleClick(evt, index);\n onClick?.(evt, index);\n }\n }\n },\n [keyboardHookHandleClick, onClick]\n );\n\n const handleKeyDown = useCallback(\n (evt: KeyboardEvent) => {\n keyboardHookHandleKeyDown(evt);\n if (!evt.defaultPrevented) {\n onKeyDown?.(evt);\n }\n },\n [keyboardHookHandleKeyDown, onKeyDown]\n );\n\n const onSwitchWrappedItemIntoView = useCallback(\n (item: OverflowItem) => {\n const index = parseInt(item.index);\n if (!isNaN(index)) {\n //TODO need to be able to reset the overflow-priority without selecting the item\n selectionHookActivateItem(index);\n keyboardHookFocusItem(index);\n }\n },\n [keyboardHookFocusItem, selectionHookActivateItem]\n );\n\n const itemProps = {\n onClick: handleClick,\n onFocus: keyboardHook.onFocus,\n onKeyDown: handleKeyDown,\n };\n\n return {\n activeItemIndex: selectionHookSelected,\n focusableIdx: keyboardHook.focusableIdx,\n focusVisible: keyboardHook.focusVisible,\n containerProps: {\n PopupMenuProps: {\n onKeyDown: handleKeyDown,\n onMenuClose: keyboardHook.onOverflowMenuClose,\n },\n ...keyboardHook.containerProps,\n onSwitchWrappedItemIntoView,\n },\n itemProps,\n };\n};\n", "import { useControlled } from \"@salt-ds/core\";\nimport {\n dispatchMouseEvent,\n getClosest,\n getElementDataIndex,\n getFocusableElement,\n orientationType,\n} from \"@vuu-ui/vuu-utils\";\nimport {\n FocusEvent,\n FocusEventHandler,\n KeyboardEvent,\n MouseEvent as ReactMouseEvent,\n MouseEventHandler,\n RefObject,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport {\n ArrowDown,\n ArrowUp,\n ArrowLeft,\n ArrowRight,\n Home,\n End,\n} from \"@vuu-ui/vuu-utils\";\nimport { getIndexOfEditedItem } from \"./toolbar-dom-utils\";\nimport { NavigationOutOfBoundsHandler } from \"./Toolbar\";\nimport { PopupCloseCallback } from \"@vuu-ui/vuu-popups\";\n\ntype directionType = \"bwd\" | \"fwd\" | \"start\" | \"end\";\ntype directionMap = { [key: string]: directionType };\nconst navigation = {\n horizontal: {\n [Home]: \"start\",\n [End]: \"end\",\n [ArrowLeft]: \"bwd\",\n [ArrowRight]: \"fwd\",\n } as directionMap,\n vertical: {\n [Home]: \"start\",\n [End]: \"end\",\n [ArrowUp]: \"bwd\",\n [ArrowDown]: \"fwd\",\n } as directionMap,\n};\n\nconst isOverflowIndicator = (el: HTMLElement | null) =>\n el !== null && el.dataset.index === \"overflow\";\n\nconst itemIsNotFocusable = (\n container: HTMLElement | null,\n direction: \"bwd\" | \"fwd\",\n indexCount: number,\n nextIdx: number,\n hasOverflowedItem: boolean\n) => {\n if (container) {\n const withinRangeBwd = direction === \"bwd\" && nextIdx > 0;\n const withinRangeFwd = direction === \"fwd\" && nextIdx < indexCount;\n const withinRange = withinRangeBwd || withinRangeFwd;\n const nextElement = getElementByPosition(container, nextIdx, true);\n const isOverflowedItem =\n hasOverflowedItem && !isNonWrappedElement(nextElement);\n const isHiddenOverflowIndicator =\n !hasOverflowedItem && isOverflowIndicator(nextElement);\n hasOverflowedItem && !isNonWrappedElement(nextElement);\n return withinRange && (isOverflowedItem || isHiddenOverflowIndicator);\n } else {\n return false;\n }\n};\n\nconst isNavigationKey = (\n key: string,\n orientation: orientationType = \"horizontal\"\n) => navigation[orientation][key] !== undefined;\n\nconst isMenuActivationKey = (key: string) => key === ArrowDown;\n\nfunction nextItemIdx(count: number, direction: directionType, idx: number) {\n if (direction === \"start\") {\n return 0;\n } else if (direction === \"end\") {\n return count - 1;\n } else if (direction === \"bwd\") {\n if (idx > 0) {\n return idx - 1;\n } else {\n return idx;\n }\n } else {\n if (idx === null) {\n return 0;\n } else if (idx === count - 1) {\n return idx;\n } else {\n return idx + 1;\n }\n }\n}\n\nconst isNonWrappedElement = (element: HTMLElement | null) =>\n element !== null && !element.classList.contains(\"wrapped\");\n\nconst getToolbarItems = (container: HTMLElement) =>\n Array.from(container.querySelectorAll(\"[data-index]\")) as HTMLElement[];\n\nconst getIndexOfOverflowItem = (container: HTMLElement | null) => {\n if (container === null) {\n return -1;\n } else {\n const targets = getToolbarItems(container);\n const indexValues = targets.map((el) => el.dataset.index);\n return indexValues.indexOf(\"overflow\");\n }\n};\n\n// Get an OverflowItem based on data-index\nconst getElementByPosition = (\n container: HTMLElement | null,\n index: number,\n includeOverflowInd = false\n) => {\n if (container !== null) {\n const targets = getToolbarItems(container);\n const target = targets[index];\n if (!includeOverflowInd && isOverflowIndicator(target)) {\n return null;\n } else {\n return target;\n }\n }\n return null;\n};\n\nexport interface ContainerNavigationProps {\n onBlur: FocusEventHandler;\n onFocus: FocusEventHandler;\n onMouseDownCapture: MouseEventHandler;\n onMouseLeave: MouseEventHandler;\n}\n\ninterface ToolbarNavigationHookProps {\n containerRef: RefObject<HTMLElement>;\n defaultHighlightedIdx?: number;\n highlightedIdx?: number;\n onNavigateOutOfBounds?: NavigationOutOfBoundsHandler;\n orientation: orientationType;\n}\n\ninterface ToolbarNavigationHookResult {\n containerProps: ContainerNavigationProps;\n focusableIdx: number;\n highlightedIdx: number;\n focusItem: (\n itemIndex: number,\n immediateFocus?: boolean,\n withKeyboard?: boolean,\n delay?: number\n ) => void;\n focusVisible: number;\n focusIsWithinComponent: boolean;\n onClick: (evt: ReactMouseEvent, tabIndex: number) => void;\n onFocus: (evt: FocusEvent<HTMLElement>) => void;\n onKeyDown: (evt: KeyboardEvent) => void;\n onOverflowMenuClose?: PopupCloseCallback;\n setHighlightedIdx: (highlightedIndex: number) => void;\n}\n\nexport const useKeyboardNavigation = ({\n containerRef,\n defaultHighlightedIdx = -1,\n highlightedIdx: highlightedIdxProp,\n onNavigateOutOfBounds,\n orientation,\n}: ToolbarNavigationHookProps): ToolbarNavigationHookResult => {\n const mouseClickPending = useRef(false);\n /** tracks the highlighted index */\n const focusedRef = useRef<number>(-1);\n const [hasFocus, setHasFocus] = useState(false);\n const [highlightedIdx, _setHighlightedIdx] = useControlled({\n controlled: highlightedIdxProp,\n default: defaultHighlightedIdx,\n name: \"UseKeyboardNavigation\",\n });\n\n const setHighlightedIdx = useCallback(\n (value: number) => {\n _setHighlightedIdx((focusedRef.current = value));\n },\n [_setHighlightedIdx]\n );\n\n const keyboardNavigation = useRef(false);\n\n const focusItem = useCallback(\n (\n itemIndex: number,\n immediateFocus = false,\n withKeyboard?: boolean,\n delay = 70\n ) => {\n // The timeout is important in two scenarios:\n // 1) where tab has overflowed and is being selected from overflow menu.\n // We must not focus it until the overflow mechanism + render has restored\n // it to the main display.\n // 2) when we are focussing a new tab\n // We MUST NOT delay focus when using keyboard nav, else when focus moves from\n // close button (focus ring styled by :focus-visible) to Tab label (focus ring\n // styled by css class) focus style will briefly linger on both.\n console.log(`focus item ${itemIndex}`);\n setHighlightedIdx(itemIndex);\n\n if (withKeyboard === true && !keyboardNavigation.current) {\n keyboardNavigation.current = true;\n }\n\n const setFocus = () => {\n const element = getElementByPosition(\n containerRef.current,\n itemIndex,\n true\n );\n if (element) {\n const focussableElement = getFocusableElement(element);\n focussableElement?.focus();\n }\n };\n if (immediateFocus) {\n setFocus();\n } else {\n setTimeout(setFocus, delay);\n }\n },\n [containerRef, setHighlightedIdx]\n );\n\n const onFocus = (e: FocusEvent<HTMLElement>) => {\n // If focus is received by keyboard navigation, item with tabindex 0 will receive\n // focus. If the item receiving focus has tabindex -1, then focus has been set\n // programatically. We must respect this and not reset focus to selected tab.\n if (focusedRef.current === -1) {\n // Focus is entering tabstrip. Assume keyboard - if it'a actually mouse-driven,\n // the click event will have set correct value.\n if (e.target.tabIndex === 0) {\n // we are tabbing into the focusable item, by default the first\n // align highlighted index\n const index = getElementDataIndex(getClosest(e.target, \"index\"));\n setHighlightedIdx(index);\n } else if (e.target.tabIndex === -1) {\n // Do nothing, assume focus is being passed back to button by closing dialog. Might need\n // to revisit this and add code here if we may get focus set programatically in other ways.\n } else {\n const index = getIndexOfEditedItem(containerRef.current);\n if (index !== -1) {\n requestAnimationFrame(() => {\n setHighlightedIdx(index);\n });\n }\n }\n }\n };\n\n const getIndexCount = useCallback(\n () => containerRef.current?.querySelectorAll(`[data-index]`).length ?? 0,\n [containerRef]\n );\n\n const nextFocusableItemIdx = useCallback(\n (direction: directionType = \"fwd\", idx?: number) => {\n const indexCount = getIndexCount();\n const index = typeof idx === \"number\" ? idx : indexCount;\n\n let nextIdx = nextItemIdx(indexCount, direction, index);\n const nextDirection =\n direction === \"start\" ? \"fwd\" : direction === \"end\" ? \"bwd\" : direction;\n\n const hasOverflowedItem =\n containerRef.current?.querySelector(\n \".vuuOverflowContainer-wrapContainer-overflowed\"\n ) != null;\n\n while (\n itemIsNotFocusable(\n containerRef.current,\n nextDirection,\n indexCount,\n nextIdx,\n hasOverflowedItem\n )\n ) {\n const newIdx = nextItemIdx(indexCount, nextDirection, nextIdx);\n if (newIdx === nextIdx) {\n // theres no further index and nextIndex is not focusable\n // so there are no further focusable items\n return index;\n } else {\n nextIdx = newIdx;\n }\n }\n return nextIdx;\n },\n [containerRef, getIndexCount]\n );\n\n const navigateChildItems = useCallback(\n (e: React.KeyboardEvent) => {\n const direction = navigation[orientation][e.key];\n const nextIdx = nextFocusableItemIdx(direction, highlightedIdx);\n console.log(`highlightedIdx = ${highlightedIdx}, nextIdx = ${nextIdx} `);\n if (nextIdx !== highlightedIdx) {\n const immediateFocus = true;\n focusItem(nextIdx, immediateFocus);\n } else {\n onNavigateOutOfBounds?.(direction === \"bwd\" ? \"start\" : \"end\");\n }\n },\n [\n orientation,\n nextFocusableItemIdx,\n highlightedIdx,\n focusItem,\n onNavigateOutOfBounds,\n ]\n );\n\n const highlightedItemHasMenu = useCallback(() => {\n const el = getElementByPosition(containerRef.current, highlightedIdx);\n if (el) {\n return el.querySelector(\".vuuPopupMenu\") != null;\n }\n return false;\n }, [containerRef, highlightedIdx]);\n\n const highlightedItemInEditState = useCallback(() => {\n const el = getElementByPosition(containerRef.current, highlightedIdx);\n if (el) {\n return el.querySelector(\".vuuEditableLabel-input\") != null;\n }\n return false;\n }, [containerRef, highlightedIdx]);\n\n const activateItemMenu = useCallback(() => {\n const el = getElementByPosition(containerRef.current, highlightedIdx);\n const menuEl = el?.querySelector(\".vuuPopupMenu\") as HTMLElement;\n if (menuEl) {\n dispatchMouseEvent(menuEl, \"click\");\n }\n return false;\n }, [containerRef, highlightedIdx]);\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (getIndexCount() > 0 && isNavigationKey(e.key, orientation)) {\n e.preventDefault();\n if (keyboardNavigation.current) {\n navigateChildItems(e);\n } else {\n keyboardNavigation.current = true;\n navigateChildItems(e);\n }\n } else if (\n isMenuActivationKey(e.key) &&\n highlightedItemHasMenu() &&\n !highlightedItemInEditState()\n ) {\n activateItemMenu();\n }\n },\n [\n activateItemMenu,\n getIndexCount,\n highlightedItemHasMenu,\n highlightedItemInEditState,\n navigateChildItems,\n orientation,\n ]\n );\n\n // TODO, in common hooks, we use mouse movement to track current highlighted\n // index, rather than rely on component item reporting it\n const handleItemClick = (_: ReactMouseEvent, itemIndex: number) => {\n setHighlightedIdx(itemIndex);\n };\n\n const handleFocus = useCallback(() => {\n if (!hasFocus) {\n setHasFocus(true);\n if (!mouseClickPending.current) {\n keyboardNavigation.current = true;\n } else {\n mouseClickPending.current = false;\n }\n }\n }, [hasFocus]);\n\n const handleContainerMouseDown = useCallback(() => {\n if (!hasFocus) {\n mouseClickPending.current = true;\n }\n keyboardNavigation.current = false;\n }, [hasFocus]);\n\n const handleOverflowMenuClose = useCallback<PopupCloseCallback>(\n (closeReason) => {\n if (closeReason?.type === \"escape\") {\n const index = getIndexOfOverflowItem(containerRef.current);\n if (index !== -1) {\n focusItem(index);\n }\n }\n },\n [containerRef, focusItem]\n );\n\n const containerProps = {\n onBlur: (e: FocusEvent) => {\n const sourceTarget = (e.target as HTMLElement).closest(\".vuuToolbar\");\n const destTarget = e.relatedTarget as HTMLElement;\n if (sourceTarget && !sourceTarget?.contains(destTarget)) {\n setHighlightedIdx(-1);\n setHasFocus(false);\n }\n },\n onMouseDownCapture: handleContainerMouseDown,\n onFocus: handleFocus,\n onMouseLeave: () => {\n keyboardNavigation.current = true;\n setHighlightedIdx(-1);\n mouseClickPending.current = false;\n },\n };\n\n return {\n containerProps,\n focusVisible: keyboardNavigation.current ? highlightedIdx : -1,\n focusIsWithinComponent: hasFocus,\n highlightedIdx,\n focusableIdx: 0,\n focusItem,\n onClick: handleItemClick,\n onFocus,\n onKeyDown: handleKeyDown,\n onOverflowMenuClose: handleOverflowMenuClose,\n setHighlightedIdx,\n };\n};\n", "import { getElementDataIndex } from \"@vuu-ui/vuu-utils\";\n\nexport const getIndexOfItem = (\n container: HTMLElement | null,\n query: string\n) => {\n if (container) {\n const targetTab = container.querySelector(\n `[data-index]:has(${query})`\n ) as HTMLElement;\n return getElementDataIndex(targetTab);\n }\n return -1;\n};\n\nexport const getIndexOfSelectedTab = (container: HTMLElement | null) =>\n getIndexOfItem(container, '[aria-selected=\"true\"]');\n\nexport const getIndexOfEditedItem = (container: HTMLElement | null) =>\n getIndexOfItem(container, \".vuuEditableLabel-editing\");\n", "import { isSelectableElement, getClosestIndexItem } from \"@vuu-ui/vuu-utils\";\nimport {\n allowMultipleSelection,\n deselectionIsAllowed,\n selectionIsDisallowed,\n SelectionStrategy,\n SpecialKeyMultipleSelection,\n useControlled,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport { KeyboardEvent, MouseEvent, RefObject, useCallback } from \"react\";\n\nconst defaultSelectionKeys = [\"Enter\", \" \"];\n\nexport interface SelectionHookProps {\n containerRef: RefObject<HTMLElement>;\n defaultSelected?: number[];\n highlightedIdx: number;\n itemQuery: string;\n onSelectionChange?: (selectedIndices: number[]) => void;\n selected?: number[];\n selectionStrategy: SelectionStrategy | SpecialKeyMultipleSelection;\n}\n\nexport interface ItemHandlers {\n onClick?: (e: MouseEvent, itemIndex: number) => void;\n onKeyDown?: (event: React.KeyboardEvent) => void;\n}\n\nconst NO_SELECTION_HANDLERS: ItemHandlers = {};\n\nexport interface SelectionHookResult {\n activateItem: (tabIndex: number) => void;\n itemHandlers: ItemHandlers;\n isControlled: boolean;\n selected: number[];\n}\n\n// TODO use SelectionProps\nexport const useSelection = ({\n containerRef,\n defaultSelected,\n highlightedIdx,\n itemQuery,\n onSelectionChange,\n selected: selectedProp,\n selectionStrategy,\n}: SelectionHookProps): SelectionHookResult => {\n const [selected, setSelected, isControlled] = useControlled({\n controlled: selectedProp,\n default: defaultSelected ?? [],\n name: \"useSelection\",\n state: \"selected\",\n });\n\n // const isSelectableElement = useMemo(\n // () =>\n // (el: HTMLElement): boolean =>\n // el && el.matches(`[class*=\"${itemQuery} \"]`),\n // [itemQuery]\n // );\n\n const isSelectionEvent = useCallback(\n (evt: KeyboardEvent) => defaultSelectionKeys.includes(evt.key),\n []\n );\n\n const selectItem = useCallback(\n (itemIndex: number, specialKey = false) => {\n const newSelected = allowMultipleSelection(selectionStrategy, specialKey)\n ? selected.concat(itemIndex)\n : [itemIndex];\n\n setSelected(newSelected);\n onSelectionChange?.(newSelected);\n },\n [onSelectionChange, selected, selectionStrategy, setSelected]\n );\n\n const deselectItem = useCallback(\n (itemIndex: number, specialKey = false) => {\n const newSelected =\n selectionStrategy === \"deselectable\" ||\n (selectionStrategy === \"multiple-special-key\" && !specialKey)\n ? []\n : selected.filter((index) => index !== itemIndex);\n setSelected(newSelected);\n onSelectionChange?.(newSelected);\n },\n [onSelectionChange, selected, selectionStrategy, setSelected]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isSelectionEvent(e) && isSelectableElement(e.target as HTMLElement)) {\n if (!selected.includes(highlightedIdx)) {\n e.stopPropagation();\n e.preventDefault();\n selectItem(highlightedIdx, e.shiftKey);\n } else if (deselectionIsAllowed(selectionStrategy)) {\n e.stopPropagation();\n e.preventDefault();\n deselectItem(highlightedIdx, e.shiftKey);\n }\n }\n },\n [\n isSelectionEvent,\n selected,\n highlightedIdx,\n selectionStrategy,\n selectItem,\n deselectItem,\n ]\n );\n\n const handleClick = useCallback(\n (e: MouseEvent, itemIndex: number) => {\n const element = getClosestIndexItem(e.target as HTMLElement);\n if (isSelectableElement(element)) {\n if (!selected.includes(itemIndex)) {\n selectItem(itemIndex, e.shiftKey);\n } else if (deselectionIsAllowed(selectionStrategy)) {\n deselectItem(itemIndex, e.shiftKey);\n }\n }\n },\n [deselectItem, selectItem, selected, selectionStrategy]\n );\n\n const itemHandlers = selectionIsDisallowed(selectionStrategy)\n ? NO_SELECTION_HANDLERS\n : {\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n };\n\n return {\n activateItem: selectItem,\n itemHandlers,\n isControlled,\n selected,\n };\n};\n", "import React, { useState } from \"react\";\n\nimport { LayoutConfigurator, LayoutTreeViewer } from \"..\";\nimport { followPathToComponent } from \"../..\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ConfigWrapper = ({ children }: any) => {\n const designMode = false;\n const [layout, setLayout] = useState(children);\n const [selectedComponent, setSelectedComponent] = useState(children);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleSelection = (selectedPath: any) => {\n const targetComponent = followPathToComponent(layout, selectedPath);\n setSelectedComponent(targetComponent);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = (property: any, value: any) => {\n console.log(`change ${property} -> ${value}`);\n\n const newComponent = React.cloneElement(selectedComponent, {\n style: {\n ...selectedComponent.props.style,\n [property]: value,\n },\n });\n setSelectedComponent(newComponent);\n setLayout(React.cloneElement(layout, {}, newComponent));\n };\n\n return (\n <div data-design-mode={`${designMode}`}>\n {layout}\n <br />\n <div style={{ display: \"flex\" }}>\n <LayoutConfigurator\n height={300}\n managedStyle={selectedComponent.props.style}\n width={300}\n onChange={handleChange}\n style={undefined}\n />\n <LayoutTreeViewer\n layout={layout}\n onSelect={handleSelection}\n style={{ width: 300, height: 300, backgroundColor: \"#ccc\" }}\n />\n </div>\n {/* <StateButton\n defaultChecked={false}\n onChange={(e, value) => setDesignMode(value)}>Design Mode</StateButton> */}\n </div>\n );\n};\n", "import \"./layout-configurator.css\";\nimport { FormField, Input } from \"@salt-ds/core\";\n\nconst NO_STYLE = {};\n\nconst DIMENSIONS = {\n margin: {\n top: \"marginTop\",\n right: \"marginRight\",\n bottom: \"marginBottom\",\n left: \"marginLeft\",\n },\n border: {\n top: \"borderTopWidth\",\n right: \"borderRightWidth\",\n bottom: \"borderBottomWidth\",\n left: \"borderLeftWidth\",\n },\n padding: {\n top: \"paddingTop\",\n right: \"paddingRight\",\n bottom: \"paddingBottom\",\n left: \"paddingLeft\",\n },\n};\n\nconst LayoutBox = ({ feature, children, style, onChange }) => {\n return (\n <div className={`LayoutBox layout-${feature} layout-outer`}>\n <div className={`layout-top`}>\n <span className=\"layout-title\">{feature}</span>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.top}\n onChange={(evt, value) => onChange(feature, \"top\", value)}\n />\n </FormField>\n </div>\n <div className={`layout-inner`}>\n <div className={`layout-left`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.left}\n onChange={(evt, value) => onChange(feature, \"left\", value)}\n />\n </FormField>\n </div>\n {children}\n <div className={`layout-right`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.right}\n onChange={(evt, value) => onChange(feature, \"right\", value)}\n />\n </FormField>\n </div>\n </div>\n <div className={`layout-bottom`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.bottom}\n onChange={(evt, value) => onChange(feature, \"bottom\", value)}\n />\n </FormField>\n </div>\n </div>\n );\n};\n\nexport const MARGIN_STYLES = {\n margin: true,\n marginTop: true,\n marginRight: true,\n marginBottom: true,\n marginLeft: true,\n};\n\nexport const PADDING_STYLES = {\n padding: true,\n paddingTop: true,\n paddingRight: true,\n paddingBottom: true,\n paddingLeft: true,\n};\n\nexport const BORDER_STYLES = {\n border: true,\n borderColor: true,\n borderWidth: true,\n borderTopWidth: true,\n borderRightWidth: true,\n borderBottomWidth: true,\n borderLeftWidth: true,\n};\n\nconst CSS_DIGIT = \"(\\\\d+)(?:px)?\";\nconst CSS_MEASURE = `^(?:${CSS_DIGIT}(?:\\\\s${CSS_DIGIT}(?:\\\\s${CSS_DIGIT}(?:\\\\s${CSS_DIGIT})?)?)?)$`;\nconst CSS_REX = new RegExp(CSS_MEASURE);\nconst BORDER_REX = /^(?:(\\d+)(?:px)\\ssolid\\s([a-zA-Z,0-9().]+))$/;\n\nexport const LayoutConfigurator = ({\n height,\n managedStyle,\n onChange,\n style,\n width,\n}) => {\n const state = normalizeStyle(managedStyle);\n\n const handleChange = (feature, dimension, strValue) => {\n const value = parseInt(strValue || \"0\", 10);\n const property = DIMENSIONS[feature][dimension];\n onChange(property, value);\n };\n\n const {\n marginTop: mt = 0,\n marginRight: mr = 0,\n marginBottom: mb = 0,\n marginLeft: ml = 0,\n } = state;\n const {\n borderTopWidth: bt = 0,\n borderRightWidth: br = 0,\n borderBottomWidth: bb = 0,\n borderLeftWidth: bl = 0,\n } = state;\n const {\n paddingTop: pt = 0,\n paddingRight: pr = 0,\n paddingBottom: pb = 0,\n paddingLeft: pl = 0,\n } = state;\n return (\n <div className=\"LayoutConfigurator\" style={{ width, height, ...style }}>\n <LayoutBox\n feature=\"margin\"\n style={{ top: mt, right: mr, bottom: mb, left: ml }}\n onChange={handleChange}\n >\n <LayoutBox\n feature=\"border\"\n style={{ top: bt, right: br, bottom: bb, left: bl }}\n onChange={handleChange}\n >\n <LayoutBox\n feature=\"padding\"\n style={{ top: pt, right: pr, bottom: pb, left: pl }}\n onChange={handleChange}\n >\n <div className=\"layout-content\" />\n </LayoutBox>\n </LayoutBox>\n </LayoutBox>\n </div>\n );\n};\n\n// TODO merge the following two functions\nexport function XXXnormalizeStyles(\n layoutStyle = NO_STYLE,\n visualStyle = NO_STYLE\n) {\n const {\n margin,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n padding,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n ...style\n } = layoutStyle;\n\n if (typeof margin === \"number\") {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n margin;\n } else if (typeof margin === \"string\") {\n const match = CSS_REX.exec(margin);\n if (match === null) {\n console.error(`Invalid css value for margin '${margin}'`);\n } else {\n const [, pos1, pos2, pos3, pos4] = match;\n const pos123 = pos1 && pos2 && pos3;\n if (pos123 && pos4) {\n style.marginTop = parseInt(pos1, 10);\n style.marginRight = parseInt(pos2, 10);\n style.marginBottom = parseInt(pos3, 10);\n style.marginLeft = parseInt(pos4, 10);\n } else if (pos123) {\n style.marginTop = parseInt(pos1, 10);\n style.marginRight = style.marginLeft = parseInt(pos2, 10);\n style.marginBottom = parseInt(pos3, 10);\n } else if (pos1 && pos2) {\n style.marginTop = style.marginBottom = parseInt(pos1, 10);\n style.marginRight = style.marginLeft = parseInt(pos2, 10);\n } else {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n parseInt(pos1, 10);\n }\n }\n }\n if (typeof marginTop === \"number\") style.marginTop = marginTop;\n if (typeof marginRight === \"number\") style.marginRight = marginRight;\n if (typeof marginBottom === \"number\") style.marginBottom = marginBottom;\n if (typeof marginLeft === \"number\") style.marginLeft = marginLeft;\n\n if (typeof padding === \"number\") {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddingLeft =\n padding;\n } else if (typeof padding === \"string\") {\n const match = CSS_REX.exec(padding);\n if (match === null) {\n console.error(`Invalid css value for padding '${padding}'`);\n } else {\n const [, pos1, pos2, pos3, pos4] = match;\n const pos123 = pos1 && pos2 && pos3;\n if (pos123 && pos4) {\n style.paddingTop = parseInt(pos1, 10);\n style.paddingRight = parseInt(pos2, 10);\n style.paddingBottom = parseInt(pos3, 10);\n style.paddingLeft = parseInt(pos4, 10);\n } else if (pos123) {\n style.paddingTop = parseInt(pos1, 10);\n style.paddingRight = style.paddingLeft = parseInt(pos2, 10);\n style.paddingBottom = parseInt(pos3, 10);\n } else if (pos1 && pos2) {\n style.paddingTop = style.paddingBottom = parseInt(pos1, 10);\n style.paddingRight = style.paddingLeft = parseInt(pos2, 10);\n } else {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddinggLeft =\n parseInt(pos1, 10);\n }\n }\n }\n if (typeof paddingTop === \"number\") style.paddingTop = paddingTop;\n if (typeof paddingRight === \"number\") style.paddingRight = paddingRight;\n if (typeof paddingBottom === \"number\") style.paddingBottom = paddingBottom;\n if (typeof paddingLeft === \"number\") style.paddingLeft = paddingLeft;\n\n return normalizeStyle(style, visualStyle);\n}\n\nfunction normalizeStyle(managedStyle = NO_STYLE) {\n const style = { ...managedStyle };\n\n // if (BORDER_LIST.some(bs => style[bs])) {\n let match;\n\n let {\n border,\n borderWidth,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderColor,\n margin,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n padding,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n ...rest\n } = style;\n\n let marginStyles = {};\n let paddingStyles = {};\n\n if (typeof margin === \"number\") {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n margin;\n marginStyles = {\n marginTop: margin,\n marginRight: margin,\n marginBottom: margin,\n marginLeft: margin,\n };\n }\n\n if (typeof padding === \"number\") {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddingLeft =\n padding;\n paddingStyles = {\n paddingTop: padding,\n paddingRight: padding,\n paddingBottom: padding,\n paddingLeft: padding,\n };\n }\n\n if (\n border ||\n borderWidth ||\n borderTopWidth ||\n borderRightWidth ||\n borderBottomWidth ||\n borderLeftWidth\n ) {\n if (typeof border === \"string\" && (match = BORDER_REX.exec(border))) {\n // what if both border and borderWidth are specified ?\n [, borderWidth, borderColor] = match;\n borderWidth = parseInt(borderWidth, 10);\n }\n\n if (borderWidth) {\n borderTopWidth =\n borderTopWidth === undefined ? borderWidth : borderTopWidth;\n borderRightWidth =\n borderRightWidth === undefined ? borderWidth : borderRightWidth;\n borderBottomWidth =\n borderBottomWidth === undefined ? borderWidth : borderBottomWidth;\n borderLeftWidth =\n borderLeftWidth === undefined ? borderWidth : borderLeftWidth;\n }\n\n borderColor = borderColor || \"black\";\n const boxShadow = `\n ${borderColor} ${borderLeftWidth || 0}px ${\n borderTopWidth || 0\n }px 0 0 inset,\n ${borderColor} ${-borderRightWidth || 0}px ${\n -borderBottomWidth || 0\n }px 0 0 inset`;\n\n return {\n ...rest,\n ...marginStyles,\n ...paddingStyles,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderColor,\n borderStyle: \"solid\",\n boxShadow,\n };\n } else {\n return style;\n }\n // } else {\n // return style;\n // }\n}\n", "import React from \"react\";\nimport cx from \"clsx\";\nimport { typeOf } from \"../../utils\";\n\nimport \"./layout-tree-viewer.css\";\nimport { Tree } from \"@vuu-ui/vuu-ui-controls\";\n\nconst classBaseTree = \"hwLayoutTreeViewer\";\n\nconst toTreeJson = (component, path = \"0\") => {\n return {\n label: typeOf(component),\n path,\n childNodes: React.Children.map(component.props.children, (child, i) =>\n toTreeJson(child, path ? `${path}.${i}` : `${i}`)\n ),\n };\n};\n\nexport const LayoutTreeViewer = ({ layout, onSelect, style }) => {\n const treeJson = [toTreeJson(layout)];\n\n const handleSelection = (evt, [{ path }]) => {\n onSelect(path);\n };\n\n return (\n <div className={cx(classBaseTree)} style={style}>\n <Tree\n source={treeJson}\n groupSelection=\"single\"\n onSelectionChange={handleSelection}\n />\n </div>\n );\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_clsx", "componentName", "cx", "import_jsx_runtime", "classBase", "cx", "import_react", "import_jsx_runtime", "Component", "import_react", "React", "path", "nextStep", "
|
|
3
|
+
"sources": ["../../../packages/vuu-layout/src/index.ts", "../../../packages/vuu-layout/src/dock-layout/DockLayout.tsx", "../../../packages/vuu-layout/src/registry/ComponentRegistry.ts", "../../../packages/vuu-layout/src/dock-layout/Drawer.tsx", "../../../packages/vuu-layout/src/Component.tsx", "../../../packages/vuu-layout/src/utils/pathUtils.ts", "../../../packages/vuu-layout/src/utils/propUtils.ts", "../../../packages/vuu-layout/src/utils/typeOf.ts", "../../../packages/vuu-layout/src/utils/refUtils.ts", "../../../packages/vuu-layout/src/utils/styleUtils.ts", "../../../packages/vuu-layout/src/drag-drop/BoxModel.ts", "../../../packages/vuu-layout/src/drag-drop/DragState.ts", "../../../packages/vuu-layout/src/drag-drop/DropTarget.ts", "../../../packages/vuu-layout/src/drag-drop/DropTargetRenderer.tsx", "../../../packages/vuu-layout/src/drag-drop/DropMenu.tsx", "../../../packages/vuu-layout/src/drag-drop/Draggable.ts", "../../../packages/vuu-layout/src/DraggableLayout.tsx", "../../../packages/vuu-layout/src/flexbox/Flexbox.tsx", "../../../packages/vuu-layout/src/flexbox/useSplitterResizing.ts", "../../../packages/vuu-layout/src/placeholder/Placeholder.tsx", "../../../packages/vuu-layout/src/placeholder/LayoutStartPanel.tsx", "../../../packages/vuu-layout/src/layout-view/useViewActionDispatcher.ts", "../../../packages/vuu-layout/src/layout-provider/LayoutProvider.tsx", "../../../packages/vuu-layout/src/layout-reducer/flexUtils.ts", "../../../packages/vuu-layout/src/layout-reducer/layout-reducer.ts", "../../../packages/vuu-layout/src/layout-reducer/insert-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/layoutUtils.ts", "../../../packages/vuu-layout/src/use-persistent-state.ts", "../../../packages/vuu-layout/src/layout-reducer/move-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/replace-layout-element.ts", "../../../packages/vuu-layout/src/layout-action.ts", "../../../packages/vuu-layout/src/layout-reducer/layoutTypes.ts", "../../../packages/vuu-layout/src/layout-reducer/remove-layout-element.ts", "../../../packages/vuu-layout/src/layout-reducer/resize-flex-children.ts", "../../../packages/vuu-layout/src/layout-reducer/wrap-layout-element.ts", "../../../packages/vuu-layout/src/layout-provider/LayoutProviderContext.ts", "../../../packages/vuu-layout/src/layout-provider/useLayoutDragDrop.ts", "../../../packages/vuu-layout/src/layout-view/View.tsx", "../../../packages/vuu-layout/src/layout-header/Header.tsx", "../../../packages/vuu-layout/src/layout-view/useView.tsx", "../../../packages/vuu-layout/src/responsive/use-breakpoints.ts", "../../../packages/vuu-layout/src/responsive/useResizeObserver.ts", "../../../packages/vuu-layout/src/responsive/breakpoints.ts", "../../../packages/vuu-layout/src/responsive/utils.ts", "../../../packages/vuu-layout/src/layout-view/useViewResize.ts", "../../../packages/vuu-layout/src/layout-view/ViewContext.ts", "../../../packages/vuu-layout/src/flexbox/Splitter.tsx", "../../../packages/vuu-layout/src/flexbox/flexbox-utils.ts", "../../../packages/vuu-layout/src/flexbox/FlexboxLayout.tsx", "../../../packages/vuu-layout/src/flexbox/FluidGrid.tsx", "../../../packages/vuu-layout/src/flexbox/useResponsiveSizing.ts", "../../../packages/vuu-layout/src/flexbox/FluidGridLayout.tsx", "../../../packages/vuu-layout/src/palette/Palette.tsx", "../../../packages/vuu-layout/src/stack/Stack.tsx", "../../../packages/vuu-layout/src/stack/StackLayout.tsx", "../../../packages/vuu-layout/src/tools/config-wrapper/ConfigWrapper.tsx", "../../../packages/vuu-layout/src/tools/devtools-box/layout-configurator.jsx", "../../../packages/vuu-layout/src/tools/devtools-tree/layout-tree-viewer.jsx"],
|
|
4
|
+
"sourcesContent": ["export * from \"./dock-layout\";\nexport { default as Component } from \"./Component\";\nexport * from \"./drag-drop\";\nexport * from \"./DraggableLayout\";\nexport * from \"./flexbox\";\nexport { Action } from \"./layout-action\";\nexport * from \"./layout-header\";\nexport * from \"./layout-provider\";\nexport * from \"./layout-reducer\";\nexport * from \"./layout-view\";\nexport * from \"./palette\";\nexport * from \"./placeholder\";\nexport * from \"./registry\";\nexport * from \"./responsive\";\nexport * from \"./stack\";\nexport * from \"./tools\";\nexport * from \"./use-persistent-state\";\nexport * from \"./utils\";\n", "import { partition } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport { HTMLAttributes, ReactElement } from \"react\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Drawer from \"./Drawer\";\n\nimport \"./DockLayout.css\";\n\nconst isDrawer = (component: ReactElement) => component.type === Drawer;\nconst isVertical = ({ props: { position = \"left\" } }: ReactElement) =>\n position.match(/top|bottom/);\n\nexport interface DockLayoutProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactElement[];\n}\n\nconst DockLayout = (props: DockLayoutProps) => {\n const { children, className: classNameProp, id, style } = props;\n const classBase = \"vuuDockLayout\";\n const [drawers, content] = partition(children, 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", "import { FunctionComponent } from \"react\";\n\nconst _containers: { [key: string]: boolean } = {};\nconst _views: { [key: string]: boolean } = {};\n\nexport type layoutComponentType = \"component\" | \"container\" | \"view\";\n\nexport interface ComponentWithId {\n id: string;\n [key: string]: unknown;\n}\n\nexport const ComponentRegistry: {\n [key: string]: FunctionComponent<ComponentWithId>;\n} = {};\n\nexport function isContainer(componentType: string) {\n return _containers[componentType] === true;\n}\n\nexport function isView(componentType: string) {\n return _views[componentType] === true;\n}\n\nexport const isLayoutComponent = (type: string) =>\n isContainer(type) || isView(type);\n\n// export const isRegistered = (className: string) =>\n// !!ComponentRegistry[className];\n\nexport function registerComponent(\n componentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: FunctionComponent<any>,\n type: layoutComponentType = \"component\"\n) {\n ComponentRegistry[componentName] = component;\n\n if (type === \"container\") {\n _containers[componentName] = true;\n } else if (type === \"view\") {\n _views[componentName] = true;\n }\n}\n", "import { Button, useControlled } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { CSSProperties, HTMLAttributes, useCallback } from \"react\";\n\nimport \"./Drawer.css\";\n\nconst classBase = \"vuuDrawer\";\n\nconst sizeAttribute = (value: string | number) => {\n return typeof value === \"string\" ? value : value + \"px\";\n};\n\nconst getStyle = (\n styleProp?: CSSProperties,\n sizeOpen?: number,\n sizeClosed?: number\n) => {\n const hasSizeOpen = sizeOpen !== undefined;\n const hasSizeClosed = sizeClosed !== undefined;\n\n if (!styleProp && !hasSizeClosed && !hasSizeOpen) {\n return undefined;\n }\n\n if (!hasSizeClosed && !hasSizeOpen) {\n return styleProp;\n }\n\n return {\n ...styleProp,\n \"--drawer-size\": hasSizeOpen ? sizeAttribute(sizeOpen) : undefined,\n \"--drawer-peek-size\": hasSizeClosed ? sizeAttribute(sizeClosed) : undefined,\n };\n};\n\nexport interface DrawerProps extends HTMLAttributes<HTMLDivElement> {\n clickToOpen?: boolean;\n defaultOpen?: boolean;\n inline?: boolean;\n open?: boolean;\n peekaboo?: boolean;\n position?: \"left\" | \"right\" | \"top\" | \"bottom\";\n sizeOpen?: number;\n sizeClosed?: number;\n toggleButton?: \"start\" | \"end\";\n}\nconst Drawer = ({\n children,\n className: classNameProp,\n clickToOpen,\n defaultOpen,\n sizeOpen,\n sizeClosed,\n style: styleProp,\n open: openProp,\n position = \"left\",\n inline,\n onClick,\n peekaboo = false,\n toggleButton,\n ...props\n}: DrawerProps) => {\n const [open, setOpen] = useControlled({\n controlled: openProp,\n default: defaultOpen ?? false,\n name: \"Drawer\",\n state: \"open\",\n });\n\n console.log(`Drawer sizeOpen ${sizeOpen} sizeClosed ${sizeClosed}`);\n\n const className = cx(classBase, classNameProp, `${classBase}-${position}`, {\n [`${classBase}-open`]: open,\n [`${classBase}-inline`]: inline,\n [`${classBase}-over`]: !inline,\n [`${classBase}-peekaboo`]: peekaboo,\n });\n\n const toggleDrawer = useCallback(() => {\n setOpen(!open);\n }, [open, setOpen]);\n\n const style = getStyle(styleProp, sizeOpen, sizeClosed);\n\n const handleClick = clickToOpen ? toggleDrawer : onClick;\n\n const renderToggleButton = () => (\n <div className={cx(\"vuuToggleButton-container\")}>\n {open ? (\n <Button\n aria-label=\"close\"\n onClick={toggleDrawer}\n data-icon=\"close\"\n variant=\"secondary\"\n />\n ) : (\n <Button\n aria-label=\"open\"\n onClick={toggleDrawer}\n data-icon=\"close\"\n variant=\"secondary\"\n />\n )}\n </div>\n );\n\n return (\n <div {...props} className={className} onClick={handleClick} style={style}>\n {toggleButton == \"start\" ? renderToggleButton() : null}\n <div className={`${classBase}-liner`}>\n <div className={`${classBase}-content`}>{children}</div>\n </div>\n {toggleButton == \"end\" ? renderToggleButton() : null}\n </div>\n );\n};\nDrawer.displayName = \"Drawer\";\n\nexport default Drawer;\n", "import React, { forwardRef, HTMLAttributes } from 'react';\nimport { registerComponent } from './registry/ComponentRegistry';\n\nimport './Component.css';\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);\n", "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", "import { ReactElement } from \"react\";\nimport { LayoutModel } from \"../layout-reducer\";\n\nconst NO_PROPS = {};\nexport const getProp = (\n component: LayoutModel | undefined,\n propName: string\n) => {\n const props = getProps(component);\n return props[propName] ?? props[`data-${propName}`];\n};\n\nexport const getProps = (component?: LayoutModel) =>\n component?.props || component || NO_PROPS;\n\nexport const getChildProp = (container: LayoutModel) => {\n const props = getProps(container);\n if (props.children) {\n const {\n children: [target, ...rest],\n } = props;\n if (rest.length > 0) {\n console.warn(\n `getChild expected a single child, found ${rest.length + 1}`\n );\n }\n return target as ReactElement;\n }\n};\n", "import { ReactElement } from 'react';\nimport { LayoutJSON, LayoutModel, WithType } from '../layout-reducer';\n\nexport function typeOf(element?: LayoutModel | WithType): string | undefined {\n if (element) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const type = element.type as any;\n if (typeof type === 'function' || typeof type === 'object') {\n const elementName = type.displayName || type.name || type.type?.name;\n if (typeof elementName === 'string') {\n return elementName;\n }\n }\n if (typeof element.type === 'string') {\n return element.type;\n }\n if (element.constructor) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return (element.constructor as any).displayName as string;\n }\n throw Error(`typeOf unable to determine type of element`);\n }\n}\n\nexport const isTypeOf = (element: ReactElement, type: string) => typeOf(element) === type;\n\nexport const isLayoutJSON = (layout: LayoutJSON): layout is LayoutJSON =>\n layout !== undefined && \"type\" in layout;\n", "import { MutableRefObject } from \"react\";\n\nexport function setRef<T>(\n ref:\n | MutableRefObject<T | null>\n | ((instance: T | null) => void)\n | null\n | undefined,\n value: T | null\n): void {\n if (typeof ref === \"function\") {\n ref(value);\n } else if (ref) {\n ref.current = value;\n }\n}\n", "import { CSSProperties } from 'react';\nexport type CSSFlexProperties = Pick<CSSProperties, 'flexBasis' | 'flexGrow' | 'flexShrink'>;\n\nexport const expandFlex = (flex: number | CSSFlexProperties): CSSFlexProperties => {\n if (typeof flex !== 'number') {\n throw Error(`\"no support yet for flex value ${flex}`);\n }\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1\n };\n};\n", "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", "import { pointPositionWithinRect } from './BoxModel';\nimport { DragDropRect } from './dragDropTypes';\n\nconst SCALE_FACTOR = 0.4;\n\nexport type IntrinsicSizes = {\n height?: number;\n width?: number;\n};\n\ninterface ZoneRange {\n hi: number;\n lo: number;\n}\ntype DragConstraint = {\n zone: {\n x: ZoneRange;\n y: ZoneRange;\n };\n pos: {\n x: ZoneRange;\n y: ZoneRange;\n };\n mouse: {\n x: ZoneRange;\n y: ZoneRange;\n };\n};\n\ninterface ExtendedZoneRange {\n lo: boolean;\n hi: boolean;\n mousePct: number;\n mousePos: number;\n pos: number;\n}\n\nexport class DragState {\n public constraint!: DragConstraint;\n public x!: ExtendedZoneRange;\n public y!: ExtendedZoneRange;\n public intrinsicSize: IntrinsicSizes | undefined;\n\n constructor(\n zone: DragDropRect,\n mouseX: number,\n mouseY: number,\n measurements: DragDropRect,\n intrinsicSize?: IntrinsicSizes\n ) {\n this.init(zone, mouseX, mouseY, measurements, intrinsicSize);\n }\n\n init(\n zone: DragDropRect,\n mouseX: number,\n mouseY: number,\n rect: DragDropRect,\n intrinsicSize?: IntrinsicSizes\n ) {\n const { left: x, top: y } = rect;\n\n const { pctX, pctY } = pointPositionWithinRect(mouseX, mouseY, rect);\n\n // We are applying a scale factor of 0.4 to the draggee. This is purely a visual\n // effect - the actual box size remains the original size. The 'leading' values\n // represent the difference between the visual scaled down box and the actual box.\n\n const scaleFactor = SCALE_FACTOR;\n\n const leadX = pctX * rect.width;\n const trailX = rect.width - leadX;\n const leadY = pctY * rect.height;\n const trailY = rect.height - leadY;\n\n // When we assign position to rect using css. positioning units are applied to the\n // unscaled shape, so we have to adjust values to take scaling into account.\n const scaledWidth = rect.width * scaleFactor,\n scaledHeight = rect.height * scaleFactor;\n\n const scaleDiff = 1 - scaleFactor;\n const leadXScaleDiff = leadX * scaleDiff;\n const leadYScaleDiff = leadY * scaleDiff;\n const trailXScaleDiff = trailX * scaleDiff;\n const trailYScaleDiff = trailY * scaleDiff;\n\n this.intrinsicSize = intrinsicSize;\n\n this.constraint = {\n zone: {\n x: {\n lo: zone.left,\n hi: zone.right\n },\n y: {\n lo: zone.top,\n hi: zone.bottom\n }\n },\n\n pos: {\n x: {\n lo: /* left */ zone.left - leadXScaleDiff,\n hi: /* right */ zone.right - rect.width + trailXScaleDiff\n },\n y: {\n lo: /* top */ zone.top - leadYScaleDiff,\n hi: /* bottom */ zone.bottom - rect.height + trailYScaleDiff\n }\n },\n mouse: {\n x: {\n lo: /* left */ zone.left + scaledWidth * pctX,\n hi: /* right */ zone.right - scaledWidth * (1 - pctX)\n },\n y: {\n lo: /* top */ zone.top + scaledHeight * pctY,\n hi: /* bottom */ zone.bottom - scaledHeight * (1 - pctY)\n }\n }\n };\n\n this.x = {\n pos: x,\n lo: false,\n hi: false,\n mousePos: mouseX,\n mousePct: pctX\n };\n this.y = {\n pos: y,\n lo: false,\n hi: false,\n mousePos: mouseY,\n mousePct: pctY\n };\n }\n\n outOfBounds() {\n return this.x.lo || this.x.hi || this.y.lo || this.y.hi;\n }\n\n inBounds() {\n return !this.outOfBounds();\n }\n\n dropX() {\n return this.dropXY('x');\n }\n\n dropY() {\n return this.dropXY('y');\n }\n\n hasIntrinsicSize(): number | undefined {\n return this?.intrinsicSize?.height && this?.intrinsicSize?.width;\n }\n\n /*\n * diff = mouse movement, signed int\n * xy = 'x' or 'y'\n */\n //todo, diff can be calculated in here\n update(xy: 'x' | 'y', mousePos: number) {\n const state = this[xy],\n mouseConstraint = this.constraint.mouse[xy],\n posConstraint = this.constraint.pos[xy],\n previousPos = state.pos;\n\n const diff = mousePos - state.mousePos;\n\n //xy==='x' && console.log(`update: state.lo=${state.lo}, mPos=${mousePos}, mC.lo=${mouseConstraint.lo}, prevPos=${previousPos}, diff=${diff} ` );\n\n if (diff < 0) {\n if (state.lo) {\n /* do nothing */\n } else if (mousePos < mouseConstraint.lo) {\n state.lo = true;\n state.pos = posConstraint.lo;\n } else if (state.hi) {\n if (mousePos < mouseConstraint.hi) {\n state.hi = false;\n state.pos += diff;\n }\n } else {\n state.pos += diff;\n }\n } else if (diff > 0) {\n if (state.hi) {\n /* do nothing */\n } else if (mousePos > mouseConstraint.hi) {\n state.hi = true;\n state.pos = posConstraint.hi;\n } else if (state.lo) {\n if (mousePos > mouseConstraint.lo) {\n state.lo = false;\n state.pos += diff;\n }\n } else {\n state.pos += diff;\n }\n }\n\n state.mousePos = mousePos;\n\n return previousPos !== state.pos;\n }\n\n private dropXY(this: DragState, dir: 'x' | 'y') {\n const pos = this[dir],\n rect = this.constraint.zone[dir];\n // why not do the rounding +/- 1 on the rect initially - this is all it is usef for\n return pos.lo\n ? Math.max(rect.lo, pos.mousePos)\n : pos.hi\n ? Math.min(pos.mousePos, Math.round(rect.hi) - 1)\n : pos.mousePos;\n }\n}\n", "import { rect, rectTuple } from \"@vuu-ui/vuu-utils\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { getProps, typeOf } from \"../utils\";\nimport {\n BoxModel,\n getPosition,\n Measurements,\n Position,\n positionValues,\n RelativeDropPosition,\n} from \"./BoxModel\";\nimport { DragDropRect, DropPos, DropPosTab } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\n\nexport const isTabstrip = (dropTarget: DropTarget) =>\n dropTarget.pos.tab &&\n typeOf(dropTarget.component) === \"Stack\" &&\n dropTarget.pos.position.Header;\n\nconst { north, south, east, west } = positionValues;\nconst eastwest = east + west;\nconst northsouth = north + south;\n\nexport interface DropTargetProps {\n component: LayoutModel;\n pos: DropPos;\n clientRect: DragDropRect;\n nextDropTarget: DropTarget | null;\n}\n\nexport type GuideLine = [\n number,\n number,\n number,\n number,\n number,\n number,\n number,\n number\n];\nexport interface TargetDropOutline {\n l: number;\n r: number;\n t: number;\n b: number;\n tabLeft?: number;\n tabWidth?: number;\n tabHeight?: number;\n guideLines?: GuideLine;\n}\n\nexport class DropTarget {\n private active: boolean;\n\n public box: unknown;\n public clientRect: DragDropRect;\n public component: LayoutModel;\n public dropRect: rectTuple | undefined;\n public nextDropTarget: DropTarget | null;\n public pos: DropPos;\n\n constructor({\n component,\n pos,\n clientRect /*, closeToTheEdge*/,\n nextDropTarget,\n }: DropTargetProps) {\n this.component = component;\n this.pos = pos;\n this.clientRect = clientRect;\n this.nextDropTarget = nextDropTarget;\n this.active = false;\n this.dropRect = undefined;\n }\n\n targetTabPos(tab: DropPosTab) {\n const { left: tabLeft, width: tabWidth, positionRelativeToTab } = tab;\n return positionRelativeToTab === RelativeDropPosition.BEFORE\n ? tabLeft\n : tabLeft + tabWidth;\n }\n\n /**\n * Determine what will be rendered by the dropTargetRenderer\n *\n * @param {*} lineWidth\n * @param {*} dragState\n * @returns {l, t, r, b, tabLeft, tabWidth, tabHeight}\n */\n getTargetDropOutline(\n lineWidth: number,\n dragState?: DragState\n ): TargetDropOutline {\n if (this.pos.tab) {\n return this.getDropTabOutline(lineWidth, this.pos.tab);\n } else if (dragState && dragState.hasIntrinsicSize()) {\n return this.getIntrinsicDropRect(dragState);\n } else {\n const [l, t, r, b] = this.getDropRectOutline(\n lineWidth,\n dragState\n ) as rectTuple;\n return { l, t, r, b };\n }\n }\n\n getDropTabOutline(lineWidth: number, tab: DropPosTab): TargetDropOutline {\n const {\n clientRect: { top, left, right, bottom, header },\n } = this;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n const t = Math.round(top);\n const l = Math.round(left + gap);\n const r = Math.round(right - gap);\n const b = Math.round(bottom - gap);\n const tabLeft = this.targetTabPos(tab);\n const tabWidth = 60; // should really measure text\n const tabHeight = (header?.bottom ?? 0) - (header?.top ?? 0);\n return { l, t, r, b, tabLeft, tabWidth, tabHeight };\n }\n\n getIntrinsicDropRect(dragState: DragState): TargetDropOutline {\n const { pos, clientRect: rect } = this;\n\n const { x, y } = dragState;\n\n let height = dragState.intrinsicSize?.height ?? 0;\n let width = dragState.intrinsicSize?.height ?? 0;\n\n if (height && height > rect.height) {\n console.log(`DropTarget: we're going to blow the gaff`);\n height = rect.height;\n } else if (width && width > rect.width) {\n console.log(`DropTarget: we're going to blow the gaff`);\n width = rect.width;\n }\n\n const left = Math.min(\n rect.right - width,\n Math.max(rect.left, Math.round(pos.x - x.mousePct * width))\n );\n const top = Math.min(\n rect.bottom - height,\n Math.max(rect.top, Math.round(pos.y - y.mousePct * height))\n );\n const [l, t, r, b] = (this.dropRect = [\n left,\n top,\n left + width,\n top + height,\n ]);\n\n const guideLines: GuideLine = pos.position.EastOrWest\n ? [l, rect.top, l, rect.bottom, r, rect.top, r, rect.bottom]\n : [rect.left, t, rect.right, t, rect.left, b, rect.right, b];\n\n return { l, r, t, b, guideLines };\n }\n\n /**\n * @returns [left, top, right, bottom]\n */\n getDropRectOutline(lineWidth: number, dragState?: DragState) {\n const { pos, clientRect: rect } = this;\n const { width: suggestedWidth, height: suggestedHeight, position } = pos;\n\n const { width: intrinsicWidth, height: intrinsicHeight } =\n dragState?.intrinsicSize ?? {};\n const sizeHeight = intrinsicHeight ?? suggestedHeight ?? 0;\n const sizeWidth = intrinsicWidth ?? suggestedWidth ?? 0;\n\n this.dropRect = undefined;\n\n const { top: t, left: l, right: r, bottom: b } = rect;\n\n const inset = 0;\n const gap = Math.round(lineWidth / 2) + inset;\n\n switch (position) {\n case Position.North:\n case Position.Header: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, t + gap, l + sizeWidth - gap, t + gap + height] // need flex direction indicator\n : [l + gap, t + gap, r - gap, t + gap + height];\n }\n case Position.West: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [l + gap, t + gap, l - gap + width, t + sizeHeight + gap] // need flex direction indicator\n : [l + gap, t + gap, l - gap + width, b - gap];\n }\n case Position.East: {\n const halfWidth = Math.round((r - l) / 2);\n const width = sizeWidth\n ? Math.min(halfWidth, Math.round(sizeWidth))\n : halfWidth;\n return sizeHeight && t + sizeHeight < b\n ? [r - gap - width, t + gap, r - gap, t + sizeHeight + gap] // need flex direction indicator\n : [r - gap - width, t + gap, r - gap, b - gap];\n }\n case Position.South: {\n const halfHeight = Math.round((b - t) / 2);\n const height = sizeHeight\n ? Math.min(halfHeight, Math.round(sizeHeight))\n : halfHeight;\n\n return sizeWidth && l + sizeWidth < r\n ? [l + gap, b - gap - height, l + sizeWidth - gap, b - gap] // need flex direction indicator\n : [l + gap, b - gap - height, r - gap, b - gap];\n }\n case Position.Centre: {\n return [l + gap, t + gap, r - gap, b - gap];\n }\n default:\n console.warn(`DropTarget does not recognize position ${position}`);\n return null;\n }\n }\n\n activate() {\n this.active = true;\n return this;\n }\n\n toArray(this: DropTarget) {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n let dropTarget: DropTarget | null = this;\n const dropTargets = [dropTarget];\n // eslint-disable-next-line no-cond-assign\n while ((dropTarget = dropTarget.nextDropTarget)) {\n dropTargets.push(dropTarget);\n }\n return dropTargets;\n }\n\n static getActiveDropTarget(dropTarget: DropTarget | null): DropTarget | null {\n return dropTarget === null\n ? null\n : dropTarget?.active\n ? dropTarget\n : DropTarget.getActiveDropTarget(dropTarget.nextDropTarget);\n }\n}\n\n// Initial entry to this method is always via the app (may be it should be *on* the app)\nexport function identifyDropTarget(\n x: number,\n y: number,\n rootLayout: LayoutModel,\n measurements: Measurements,\n intrinsicSize?: number,\n validDropTargets?: string[]\n) {\n let dropTarget = null;\n\n const allBoxesContainingPoint = BoxModel.allBoxesContainingPoint(\n rootLayout,\n measurements,\n x,\n y,\n validDropTargets\n );\n\n if (allBoxesContainingPoint.length) {\n const [component, ...containers] = allBoxesContainingPoint;\n const {\n \"data-path\": dataPath,\n path = dataPath,\n \"data-row-placeholder\": isRowPlaceholder,\n } = getProps(component);\n const clientRect = measurements[path];\n const placeholderOrientation =\n intrinsicSize && isRowPlaceholder ? \"row\" : undefined;\n const pos = getPosition(x, y, clientRect, placeholderOrientation);\n const box = measurements[path];\n\n const nextDropTarget = ([nextTarget, ...targets]: LayoutModel[]):\n | DropTarget\n | undefined => {\n if (pos.position?.Header || pos.closeToTheEdge) {\n const targetPosition = getTargetPosition(\n nextTarget,\n pos,\n box,\n measurements,\n x,\n y\n );\n if (targetPosition) {\n const [containerPos, clientRect] = targetPosition;\n\n return new DropTarget({\n component: nextTarget,\n pos: containerPos,\n clientRect,\n nextDropTarget: nextDropTarget(targets) ?? null,\n });\n } else if (targets.length) {\n return nextDropTarget(targets);\n }\n }\n };\n dropTarget = new DropTarget({\n component,\n pos,\n clientRect,\n nextDropTarget: nextDropTarget(containers) ?? null,\n }).activate();\n }\n\n return dropTarget;\n}\n\nfunction getTargetPosition(\n container: LayoutModel,\n { closeToTheEdge, position }: DropPos,\n box: rect,\n measurements: Measurements,\n x: number,\n y: number\n): [DropPos, DragDropRect] | undefined {\n if (!container || container.type === \"DraggableLayout\") {\n return;\n }\n\n const containingBox = measurements[container.props.path];\n const closeToTop = closeToTheEdge & positionValues.north;\n const closeToRight = closeToTheEdge & positionValues.east;\n const closeToBottom = closeToTheEdge & positionValues.south;\n const closeToLeft = closeToTheEdge & positionValues.west;\n\n const atTop =\n (closeToTop || position.Header) &&\n Math.round(box.top) === Math.round(containingBox.top);\n const atRight =\n closeToRight && Math.round(box.right) === Math.round(containingBox.right);\n const atBottom =\n closeToBottom &&\n Math.round(box.bottom) === Math.round(containingBox.bottom);\n const atLeft =\n closeToLeft && Math.round(box.left) === Math.round(containingBox.left);\n\n if (atTop || atRight || atBottom || atLeft) {\n const { \"data-path\": dataPath, path = dataPath } = container.props;\n const clientRect = measurements[path];\n const containerPos = getPosition(x, y, clientRect);\n\n // if its a VBox and we're close to left or right ...\n if (\n (isVBox(container) || isTabbedContainer(container)) &&\n closeToTheEdge & eastwest\n ) {\n containerPos.width = 120;\n return [containerPos, clientRect];\n }\n // if it's a HBox and we're close to top or bottom ...\n else if (\n (isHBox(container) || isTabbedContainer(container)) &&\n (position.Header || closeToTheEdge & northsouth)\n ) {\n containerPos.height = 120;\n return [containerPos, clientRect];\n }\n }\n}\n\nfunction isTabbedContainer(component: LayoutModel) {\n return typeOf(component) === \"Stack\";\n}\n\nfunction isVBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n component.props.style.flexDirection === \"column\"\n );\n}\n\nfunction isHBox(component: LayoutModel) {\n return (\n typeOf(component) === \"Flexbox\" &&\n component.props.style.flexDirection === \"row\"\n );\n}\n", "import { PopupService } from \"@vuu-ui/vuu-popups\";\nimport { RelativeDropPosition } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState } from \"./DragState\";\nimport { computeMenuPosition, DropMenu } from \"./DropMenu\";\nimport { DropTarget, GuideLine } from \"./DropTarget\";\n\nimport \"./DropTargetRenderer.css\";\n\ntype Point = [number, number];\ntype TabMode = \"full-view\" | \"tab-only\";\n\nlet _multiDropOptions = false;\nlet _hoverDropTarget: DropTarget | null = null;\nlet _shiftedTab: HTMLElement | null = null;\n\nconst onHoverDropTarget = (dropTarget: DropTarget | null) =>\n (_hoverDropTarget = dropTarget);\n\nconst start = ([x, y]: Point) => `M${x},${y}`;\nconst point = ([x, y]: Point) => `L${x},${y}`;\nconst pathFromPoints = ([p1, ...points]: Point[]) =>\n `${start(p1)} ${points.map(point)}Z`;\n\nconst pathFromGuideLines = (guideLines?: GuideLine) => {\n if (guideLines) {\n const [x1, y1, x2, y2, x3, y3, x4, y4] = guideLines;\n return `M${x1},${y1} L${x2},${y2} M${x3},${y3} L${x4},${y4}`;\n } else {\n return \"\";\n }\n};\n\nfunction insertSVGRoot() {\n if (document.getElementById(\"hw-drag-canvas\") === null) {\n const root = document.getElementById(\"root\");\n const container = document.createElement(\"div\");\n container.id = \"hw-drag-canvas\";\n container.innerHTML = `\n <svg width=\"100%\" height=\"100%\">\n <path id=\"hw-drop-guides\" />\n <path\n id=\"vuu-drop-outline\"\n d=\"M300,132 L380,132 L380,100 L460,100 L460,132, L550,132 L550,350 L300,350z\">\n <animate\n attributeName=\"d\"\n id=\"hw-drop-outline-animate\"\n begin=\"indefinite\"\n dur=\"300ms\"\n fill=\"freeze\"\n to=\"M255,33 L255,33,L255,1,L315,1,L315,1,L794,1,L794,164,L255,164Z\"\n />\n </path>\n </svg>\n `;\n document.body.insertBefore(container, root);\n }\n}\nexport default class DropTargetCanvas {\n private currentPath: string | null = null;\n private tabMode: TabMode | null = null;\n\n constructor() {\n insertSVGRoot();\n }\n\n prepare(dragRect: DragDropRect, tabMode: TabMode = \"full-view\") {\n // don't do this on body\n document.body.classList.add(\"drawing\");\n this.currentPath = null;\n this.tabMode = tabMode;\n\n const points = this.getPoints(0, 0, 0, 0);\n // const points = this.getPoints(left, top, width, height);\n const d = pathFromPoints(points);\n\n const dropOutlinePath = document.getElementById(\"vuu-drop-outline\");\n dropOutlinePath?.setAttribute(\"d\", d);\n this.currentPath = d;\n }\n\n clear() {\n // don't do this on body\n _hoverDropTarget = null;\n clearShiftedTab();\n document.body.classList.remove(\"drawing\");\n PopupService.hidePopup();\n }\n\n get hoverDropTarget() {\n return _hoverDropTarget;\n }\n\n getPoints(\n x: number,\n y: number,\n width: number,\n height: number,\n tabLeft = 0,\n tabWidth = 0,\n tabHeight = 0\n ): Point[] {\n const tabOnly = this.tabMode === \"tab-only\";\n if (tabWidth === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y],\n [x + width, y],\n [x + width, y + height],\n [x, y + height],\n ];\n } else if (tabOnly) {\n const left = tabLeft;\n return [\n [left, y],\n [left, y],\n [left + tabWidth, y],\n [left + tabWidth, y],\n [left + tabWidth, y + tabHeight],\n [left + tabWidth, y + tabHeight],\n [left, y + tabHeight],\n [left, y + tabHeight],\n ];\n } else if (tabLeft === 0) {\n return [\n [x, y + tabHeight],\n [x, y + tabHeight],\n [x, y],\n [x + tabWidth, y],\n [x + tabWidth, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n } else {\n return [\n [x, y + tabHeight],\n [x + tabLeft, y + tabHeight],\n [x + tabLeft, y],\n [x + tabLeft, y],\n [x + tabLeft, y + tabHeight],\n [x + width, y + tabHeight],\n [x + width, y + height],\n [x, y + height],\n ];\n }\n }\n\n draw(dropTarget: DropTarget, dragState: DragState) {\n const sameDropTarget = false;\n const wasMultiDrop = _multiDropOptions;\n\n if (_hoverDropTarget !== null) {\n this.drawTarget(_hoverDropTarget);\n } else {\n if (sameDropTarget === false) {\n _multiDropOptions = dropTarget.nextDropTarget != null;\n if (dropTarget.pos.tab) {\n moveExistingTabs(dropTarget);\n } else if (_shiftedTab) {\n clearShiftedTab();\n }\n this.drawTarget(dropTarget, dragState);\n }\n\n if (_multiDropOptions) {\n const [left, top, orientation] = computeMenuPosition(dropTarget);\n if (!wasMultiDrop || !sameDropTarget) {\n const component = (\n <DropMenu\n dropTarget={dropTarget}\n onHover={onHoverDropTarget}\n orientation={orientation}\n />\n );\n PopupService.showPopup({\n left,\n top,\n component,\n });\n }\n } else {\n PopupService.hidePopup();\n }\n }\n }\n\n drawTarget(dropTarget: DropTarget, dragState?: DragState) {\n const lineWidth = 6;\n\n const targetDropOutline = dropTarget.getTargetDropOutline(\n lineWidth,\n dragState\n );\n\n if (targetDropOutline) {\n const { l, t, r, b, tabLeft, tabWidth, tabHeight, guideLines } =\n targetDropOutline;\n const w = r - l;\n const h = b - t;\n\n if (this.currentPath) {\n const path = document.getElementById(\"vuu-drop-outline\");\n path?.setAttribute(\"d\", this.currentPath);\n }\n\n const points = this.getPoints(l, t, w, h, tabLeft, tabWidth, tabHeight);\n const path = pathFromPoints(points);\n const animation = document.getElementById(\n \"hw-drop-outline-animate\"\n ) as unknown as SVGAnimateElement;\n animation?.setAttribute(\"to\", path);\n animation?.beginElement();\n this.currentPath = path;\n\n const dropGuidePath = document.getElementById(\"hw-drop-guides\");\n dropGuidePath?.setAttribute(\"d\", pathFromGuideLines(guideLines));\n }\n }\n}\n\nconst cssShiftRight = \"transition:margin-left .4s ease-out;margin-left: 63px\";\nconst cssShiftBack = \"transition:margin-left .4s ease-out;margin-left: 0px\";\n\nfunction moveExistingTabs(dropTarget: DropTarget) {\n const { AFTER, BEFORE } = RelativeDropPosition;\n const {\n clientRect: { Stack },\n pos: {\n // tab: { index: tabIndex, positionRelativeToTab }\n tab,\n },\n } = dropTarget;\n\n const { id } = dropTarget.component.props;\n let tabEl = null;\n // console.log(`tabPos = ${tabPos} (width=${tabWidth}) x=${x}`)\n if (Stack && tab && tab.positionRelativeToTab !== AFTER) {\n const tabOffset = tab.positionRelativeToTab === BEFORE ? 1 : 2;\n const selector = `:scope .hwTabstrip > .hwTabstrip-inner > .hwTab:nth-child(${\n tab.index + tabOffset\n })`;\n tabEl = document.getElementById(id)?.querySelector(selector) as HTMLElement;\n if (tabEl) {\n if (_shiftedTab === null || _shiftedTab !== tabEl) {\n tabEl.style.cssText = cssShiftRight;\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n }\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n } else if (tab?.positionRelativeToTab === BEFORE) {\n if (_shiftedTab === null) {\n const selector = \".vuuHeader-title\";\n tabEl = document\n .getElementById(id)\n ?.querySelector(selector) as HTMLElement;\n tabEl.style.cssText = cssShiftRight;\n _shiftedTab = tabEl;\n }\n } else {\n clearShiftedTab();\n }\n}\n\nfunction clearShiftedTab() {\n if (_shiftedTab) {\n _shiftedTab.style.cssText = cssShiftBack;\n _shiftedTab = null;\n }\n}\n", "import cx from \"clsx\";\nimport { HTMLAttributes } from \"react\";\nimport { DropTarget } from \"./DropTarget\";\n\nimport \"./DropMenu.css\";\n\nexport function computeMenuPosition(\n dropTarget: DropTarget,\n offsetTop = 0,\n offsetLeft = 0\n): [number, number, \"left\" | \"bottom\" | \"right\" | \"top\"] {\n const { pos, clientRect: box } = dropTarget;\n const menuOffset = 20;\n\n return pos.position.West\n ? [box.left - offsetLeft + menuOffset, pos.y - offsetTop, \"left\"]\n : pos.position.South\n ? [pos.x - offsetLeft, box.bottom - offsetTop - menuOffset, \"bottom\"]\n : pos.position.East\n ? [box.right - offsetLeft - menuOffset, pos.y - offsetTop, \"right\"]\n : /* North | Header*/ [\n pos.x - offsetLeft,\n box.top - offsetTop + menuOffset,\n \"top\",\n ];\n}\n\nconst classBase = \"vuuDropMenu\";\n\nexport interface DropMenuProps extends HTMLAttributes<HTMLDivElement> {\n dropTarget: DropTarget;\n onHover: (target: DropTarget | null) => void;\n orientation?: \"left\" | \"top\" | \"right\" | \"bottom\";\n}\n\nexport const DropMenu = ({\n className,\n dropTarget,\n onHover,\n orientation,\n}: DropMenuProps) => {\n const dropTargets = dropTarget.toArray();\n // TODO we have all the information here to draw a mini target map\n // but maybe thats overkill ...\n\n return (\n <div\n className={cx(classBase, className, `${classBase}-${orientation}`)}\n onMouseLeave={() => onHover(null)}\n >\n {dropTargets.map((target, i) => (\n <div\n key={i}\n className={`${classBase}-item`}\n data-icon={i === 0 ? \"column-2A\" : \"column-2B\"}\n onMouseEnter={() => onHover(target)}\n />\n ))}\n </div>\n );\n};\n", "import { rect } from \"@vuu-ui/vuu-utils\";\nimport { ReactElement } from \"react\";\nimport { LayoutModel } from \"../layout-reducer\";\nimport { findTarget, followPath, getProps } from \"../utils\";\nimport { BoxModel, Measurements } from \"./BoxModel\";\nimport { DragDropRect } from \"./dragDropTypes\";\nimport { DragState, IntrinsicSizes } from \"./DragState\";\nimport { DropTarget, identifyDropTarget } from \"./DropTarget\";\nimport DropTargetRenderer from \"./DropTargetRenderer\";\n\nexport type DragStartCallback = (e: MouseEvent, x: number, y: number) => void;\nexport type DragMoveCallback = (\n x: number | undefined,\n y: number | undefined\n) => void;\nexport type DragEndCallback = (droppedTarget?: Partial<DropTarget>) => void;\nexport type DragInstructions = {\n DoNotRemove?: boolean;\n DoNotTransform?: boolean;\n dragThreshold?: number;\n DriftHomeIfNoDropTarget?: boolean;\n RemoveDraggableOnDragEnd?: boolean;\n};\n\nlet _dragStartCallback: DragStartCallback | null;\nlet _dragMoveCallback: DragMoveCallback | null;\nlet _dragEndCallback: DragEndCallback | null;\n\nlet _dragStartX: number;\nlet _dragStartY: number;\nlet _dragContainer: ReactElement | undefined;\nlet _dragState: DragState;\nlet _dropTarget: DropTarget | null = null;\nlet _validDropTargetPaths: string[] | undefined;\nlet _dragInstructions: DragInstructions;\nlet _measurements: Measurements;\nlet _simpleDrag: boolean;\nlet _dragThreshold: number;\nlet _mouseDownTimer: number | null = null;\n\nconst DEFAULT_DRAG_THRESHOLD = 3;\nconst _dropTargetRenderer = new DropTargetRenderer();\nconst SCALE_FACTOR = 0.4;\n\nfunction getDragContainer(\n rootContainer: ReactElement,\n dragContainerPath: string\n) {\n if (dragContainerPath) {\n return followPath(rootContainer, dragContainerPath) as ReactElement;\n } else {\n return findTarget(\n rootContainer,\n // TODO dropTarget is not good\n (props) => props.dropTarget\n ) as ReactElement;\n }\n}\n\nexport const Draggable = {\n handleMousedown(\n e: MouseEvent,\n dragStartCallback: DragStartCallback,\n dragInstructions: DragInstructions = {}\n ) {\n _dragStartCallback = dragStartCallback;\n _dragInstructions = dragInstructions;\n\n _dragStartX = e.clientX;\n _dragStartY = e.clientY;\n\n _dragThreshold =\n dragInstructions.dragThreshold === undefined\n ? DEFAULT_DRAG_THRESHOLD\n : dragInstructions.dragThreshold;\n\n if (_dragThreshold === 0) {\n // maybe this should be -1\n _dragStartCallback(e, 0, 0);\n } else {\n window.addEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", preDragMouseupHandler, false);\n\n _mouseDownTimer = window.setTimeout(() => {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, 0, 0);\n }, 500);\n }\n\n e.preventDefault();\n },\n\n // called from handleDragStart (_dragCallback)\n initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n { top, left, right, bottom }: rect,\n dragPos: { x: number; y: number },\n dragHandler: {\n drag: DragMoveCallback;\n drop: DragEndCallback;\n },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[]\n ) {\n ({ drag: _dragMoveCallback, drop: _dragEndCallback } = dragHandler);\n return initDrag(\n rootContainer,\n dragContainerPath,\n { top, left, right, bottom } as DragDropRect,\n dragPos,\n intrinsicSize,\n dropTargets\n );\n },\n};\n\nfunction preDragMousemoveHandler(e: MouseEvent) {\n const x = true;\n const y = true;\n\n const x_diff = x ? e.clientX - _dragStartX : 0;\n const y_diff = y ? e.clientY - _dragStartY : 0;\n const mouseMoveDistance = Math.max(Math.abs(x_diff), Math.abs(y_diff));\n\n // when we do finally move the draggee, we are going to 'jump' by the amount of the drag threshold, should we\n // attempt to animate this ?\n if (mouseMoveDistance > _dragThreshold) {\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n _dragStartCallback?.(e, x_diff, y_diff);\n _dragStartCallback = null;\n }\n}\n\nfunction preDragMouseupHandler() {\n if (_mouseDownTimer) {\n window.clearTimeout(_mouseDownTimer);\n _mouseDownTimer = null;\n }\n window.removeEventListener(\"mousemove\", preDragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", preDragMouseupHandler, false);\n}\n\nfunction initDrag(\n rootContainer: ReactElement,\n dragContainerPath: string,\n dragRect: DragDropRect,\n dragPos: { x: number; y: number },\n intrinsicSize?: IntrinsicSizes,\n dropTargets?: string[]\n) {\n _dragContainer = getDragContainer(rootContainer, dragContainerPath);\n\n const { \"data-path\": dataPath, path = dataPath } = getProps(_dragContainer);\n\n if (dropTargets) {\n const dropPaths = dropTargets\n .map((id) => findTarget(rootContainer, (props) => props.id === id))\n .map((target) => (target as LayoutModel).props.path);\n _validDropTargetPaths = dropPaths;\n }\n\n // const start = window.performance.now();\n // translate the layout $position to drag-oriented co-ordinates, ignoring splitters\n\n _measurements = BoxModel.measure(_dragContainer, dropTargets);\n // console.log({ _measurements });\n // onsole.log({ measurements: _measurements });\n // const end = window.performance.now();\n // console.log(`[Draggable] measurements took ${end - start}ms`, _measurements);\n\n const dragZone = _measurements[path];\n\n _dragState = new DragState(\n dragZone,\n dragPos.x,\n dragPos.y,\n dragRect,\n intrinsicSize\n );\n\n const pctX = Math.round(_dragState.x.mousePct * 100);\n const pctY = Math.round(_dragState.y.mousePct * 100);\n\n window.addEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.addEventListener(\"mouseup\", dragMouseupHandler, false);\n window.addEventListener(\"keydown\", dragKeydownHandler, false);\n\n _simpleDrag = false;\n\n _dropTargetRenderer.prepare(dragRect, \"tab-only\");\n\n return _dragInstructions.DoNotTransform\n ? \"transform:none\"\n : // scale factor should be applied in caller, not here\n `transform:scale(${SCALE_FACTOR},${SCALE_FACTOR});transform-origin:${pctX}% ${pctY}%;`;\n}\n\nfunction dragMousemoveHandler(evt: MouseEvent) {\n const x = evt.clientX;\n const y = evt.clientY;\n const dragState = _dragState;\n const currentDropTarget = _dropTarget;\n let dropTarget;\n let newX, newY;\n\n if (dragState.update(\"x\", x)) {\n newX = dragState.x.pos;\n }\n\n if (dragState.update(\"y\", y)) {\n newY = dragState.y.pos;\n }\n\n if (newX === undefined && newY === undefined) {\n //onsole.log('both x and y are unchanged');\n } else {\n _dragMoveCallback?.(newX, newY);\n }\n\n if (_simpleDrag || _dragContainer === undefined) {\n return;\n }\n\n if (dragState.inBounds()) {\n dropTarget = identifyDropTarget(\n x,\n y,\n _dragContainer,\n _measurements,\n dragState.hasIntrinsicSize(),\n _validDropTargetPaths\n );\n } else {\n dropTarget = identifyDropTarget(\n dragState.dropX(),\n dragState.dropY(),\n _dragContainer,\n _measurements\n );\n }\n\n // did we have an existing droptarget which is no longer such ...\n if (currentDropTarget) {\n if (dropTarget == null || dropTarget.box !== currentDropTarget.box) {\n _dropTarget = null;\n }\n }\n\n if (dropTarget) {\n _dropTargetRenderer.draw(dropTarget, dragState);\n _dropTarget = dropTarget;\n }\n}\n\nfunction dragKeydownHandler(evt: KeyboardEvent) {\n if (evt.key === \"Escape\") {\n _dropTarget = null;\n onDragEnd();\n }\n}\n\nfunction dragMouseupHandler() {\n onDragEnd();\n}\n\nfunction onDragEnd() {\n if (_dropTarget) {\n const dropTarget =\n _dropTargetRenderer.hoverDropTarget ||\n DropTarget.getActiveDropTarget(_dropTarget);\n\n _dragEndCallback?.(dropTarget as DropTarget);\n\n _dropTarget = null;\n } else {\n _dragEndCallback?.();\n }\n\n _dragMoveCallback = null;\n _dragEndCallback = null;\n\n _dragContainer = undefined;\n _dropTargetRenderer.clear();\n _validDropTargetPaths = undefined;\n window.removeEventListener(\"mousemove\", dragMousemoveHandler, false);\n window.removeEventListener(\"mouseup\", dragMouseupHandler, false);\n window.removeEventListener(\"keydown\", dragKeydownHandler, false);\n}\n", "import classnames from \"clsx\";\nimport { ForwardedRef, forwardRef, HTMLAttributes } from \"react\";\nimport { registerComponent } from \"./registry/ComponentRegistry\";\n\nimport \"./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 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", "import { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { CSSProperties, ForwardedRef, forwardRef } from \"react\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport { useSplitterResizing } from \"./useSplitterResizing\";\n\nimport \"./Flexbox.css\";\n\nconst classBase = \"hwFlexbox\";\n\nconst Flexbox = forwardRef(function Flexbox(\n props: FlexboxProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children,\n // cols: colsProp,\n column,\n className: classNameProp,\n flexFill,\n gap,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n spacing,\n splitterSize,\n style,\n ...rest\n } = props;\n\n const { content, rootRef } = useSplitterResizing({\n children,\n // cols: colsProp,\n onSplitterMoved,\n style,\n });\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n return (\n <div\n {...rest}\n className={className}\n // data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={\n {\n ...style,\n gap,\n \"--spacing\": spacing,\n } as CSSProperties\n }\n >\n {content}\n </div>\n );\n});\nFlexbox.displayName = \"Flexbox\";\n\nexport default Flexbox;\n", "import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport React, {\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Placeholder } from \"../placeholder\";\nimport { Splitter } from \"./Splitter\";\n\nimport {\n findSplitterAndPlaceholderPositions,\n gatherChildMeta,\n identifyResizeParties,\n PLACEHOLDER,\n SPLITTER,\n} from \"./flexbox-utils\";\nimport {\n ContentMeta,\n FlexSize,\n SplitterFactory,\n SplitterHookProps,\n SplitterHookResult,\n} from \"./flexboxTypes\";\n\nconst originalContentOnly = (meta: ContentMeta) =>\n !meta.splitter && !meta.placeholder;\n\nexport const useSplitterResizing = ({\n children: childrenProp,\n onSplitterMoved,\n style,\n}: SplitterHookProps): SplitterHookResult => {\n const rootRef = useRef<HTMLDivElement>(null);\n const metaRef = useRef<ContentMeta[]>();\n const contentRef = useRef<ReactElement[]>();\n const assignedKeys = useRef([]);\n const [, forceUpdate] = useState({});\n\n const setContent = (content: ReactElement[]) => {\n contentRef.current = content;\n forceUpdate({});\n };\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : React.isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const handleDragStart = useCallback(\n (index) => {\n const { current: contentMeta } = metaRef;\n if (contentMeta) {\n const [participants, bystanders] = identifyResizeParties(\n contentMeta,\n index\n );\n if (participants) {\n participants.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { size, minSize } = measureElement(el, dimension);\n contentMeta[index].currentSize = size;\n contentMeta[index].minSize = minSize;\n }\n });\n if (bystanders) {\n bystanders.forEach((index) => {\n const el = rootRef.current?.childNodes[index] as HTMLElement;\n if (el) {\n const { [dimension]: size } = el.getBoundingClientRect();\n contentMeta[index].flexBasis = size;\n }\n });\n }\n }\n }\n },\n [dimension]\n );\n\n const handleDrag = useCallback(\n (idx, distance) => {\n if (contentRef.current && metaRef.current) {\n setContent(\n resizeContent(\n contentRef.current,\n metaRef.current,\n distance,\n dimension\n )\n );\n }\n },\n [dimension]\n );\n\n const handleDragEnd = useCallback(() => {\n const contentMeta = metaRef.current;\n if (contentMeta) {\n onSplitterMoved?.(contentMeta.filter(originalContentOnly));\n }\n contentMeta?.forEach((meta) => {\n meta.currentSize = undefined;\n meta.flexBasis = undefined;\n meta.flexOpen = false;\n });\n }, [onSplitterMoved]);\n\n const createSplitter: SplitterFactory = useCallback(\n (i) => {\n return React.createElement(Splitter, {\n column: isColumn,\n index: i,\n key: `splitter-${i}`,\n onDrag: handleDrag,\n onDragEnd: handleDragEnd,\n onDragStart: handleDragStart,\n });\n },\n [handleDrag, handleDragEnd, handleDragStart, isColumn]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(\n children,\n dimension,\n createSplitter,\n assignedKeys.current\n );\n metaRef.current = meta;\n contentRef.current = content;\n }, [children, createSplitter, dimension]);\n\n return {\n content: contentRef.current || [],\n rootRef,\n };\n};\n\nfunction buildContent(\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n createSplitter: SplitterFactory,\n keys: any[]\n): [any[], ContentMeta[]] {\n const childMeta = gatherChildMeta(children, dimension);\n const splitterAndPlaceholderPositions =\n findSplitterAndPlaceholderPositions(childMeta);\n const content = [];\n const meta: ContentMeta[] = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (i === 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true, shim: true });\n }\n if (child.key == null) {\n const key = keys[i] || (keys[i] = getUniqueId());\n content.push(React.cloneElement(child, { key }));\n } else {\n content.push(child);\n }\n meta.push(childMeta[i]);\n\n if (i > 0 && splitterAndPlaceholderPositions[i] & PLACEHOLDER) {\n content.push(createPlaceholder(i));\n meta.push({ placeholder: true });\n } else if (splitterAndPlaceholderPositions[i] & SPLITTER) {\n content.push(createSplitter(content.length));\n meta.push({ splitter: true });\n }\n }\n return [content, meta];\n}\n\nfunction resizeContent(\n content: ReactElement[],\n contentMeta: ContentMeta[],\n distance: number,\n dimension: \"width\" | \"height\"\n) {\n const metaUpdated = updateMeta(contentMeta, distance);\n if (!metaUpdated) {\n return content;\n }\n\n return content.map((child, idx) => {\n const meta = contentMeta[idx];\n const { currentSize, flexOpen, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n if (hasCurrentSize || flexOpen) {\n const { flexBasis: actualFlexBasis } = child.props.style || {};\n const size = hasCurrentSize ? meta.currentSize : flexBasis;\n if (size !== actualFlexBasis) {\n return React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexBasis: size,\n [dimension]: \"auto\",\n },\n });\n } else {\n return child;\n }\n } else {\n return child;\n }\n });\n}\n\n//TODO detect cursor move beyond drag limit and suspend further resize until cursoe re-engages with splitter\nfunction updateMeta(contentMeta: ContentMeta[], distance: number) {\n const resizeTargets: number[] = [];\n\n contentMeta.forEach((meta, idx) => {\n if (meta.currentSize !== undefined) {\n resizeTargets.push(idx);\n }\n });\n\n // we want the target being reduced first, this may limit the distance we can apply\n const target1 = distance < 0 ? resizeTargets[0] : resizeTargets[1];\n\n const { currentSize = 0, minSize = 0 } = contentMeta[target1];\n if (currentSize === minSize) {\n // size is already 0, we cannot go further\n return false;\n } else if (Math.abs(distance) > currentSize - minSize) {\n // reduce to 0\n const multiplier = distance < 0 ? -1 : 1;\n distance = Math.max(0, currentSize - minSize) * multiplier;\n }\n\n const leadingItem = contentMeta[resizeTargets[0]] as ContentMeta;\n const { currentSize: leadingSize = 0 } = leadingItem;\n leadingItem.currentSize = leadingSize + distance;\n\n const trailingItem = contentMeta[resizeTargets[1]] as ContentMeta;\n const { currentSize: trailingSize = 0 } = trailingItem;\n trailingItem.currentSize = trailingSize - distance;\n\n return true;\n}\n\nfunction createPlaceholder(index: number) {\n return React.createElement(Placeholder, {\n shim: index === 0,\n key: `placeholder-${index}`,\n } as any);\n}\n\nfunction measureElement(\n el: HTMLElement,\n dimension: \"width\" | \"height\"\n): FlexSize {\n const { [dimension]: size } = el.getBoundingClientRect();\n const style = getComputedStyle(el);\n const minSizeVal = style.getPropertyValue(`min-${dimension}`);\n const minSize = minSizeVal.endsWith(\"px\") ? parseInt(minSizeVal, 10) : 0;\n return { size, minSize };\n}\n", "import cx from \"clsx\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { LayoutStartPanel } from \"./LayoutStartPanel\";\nimport { View, ViewProps } from \"../layout-view\";\n\nimport \"./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 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);\n", "import { Button } from \"@salt-ds/core\";\nimport { HTMLAttributes, useMemo, useState } from \"react\";\nimport { QueryReponse, useViewContext } from \"../layout-view\";\n\nimport \"./LayoutStartPanel.css\";\n\nconst classBase = \"vuuLayoutStartPanel\";\n\nexport interface LayoutStartPanelProps extends HTMLAttributes<HTMLDivElement> {\n label?: string;\n}\n\nexport const LayoutStartPanel = (htmlAttributes: LayoutStartPanelProps) => {\n const { dispatch, path } = useViewContext();\n const [displayState, setDisplayState] = useState<\n \"initial\" | \"nested\" | undefined\n >();\n\n useMemo(() => {\n dispatch?.({\n type: \"query\",\n path,\n query: \"PARENT_CONTAINER\",\n }).then((response) => {\n if ((response as QueryReponse)?.parentContainerId === \"main-tabs\") {\n setDisplayState(\"initial\");\n } else {\n setDisplayState(\"nested\");\n }\n });\n }, [dispatch, path]);\n\n if (displayState === undefined) {\n return null;\n }\n\n const showInitialState = displayState === \"initial\";\n\n return (\n <div {...htmlAttributes} className={classBase}>\n {showInitialState ? (\n <>\n <header className={`${classBase}-title`}>\n Start by adding a table\n </header>\n <div className={`${classBase}-text`}>\n To add a table, drag any of the Vuu Tables to this area or click the\n button below\n </div>\n </>\n ) : null}\n <Button\n className={`${classBase}-addButton`}\n data-icon=\"add\"\n variant=\"cta\"\n />\n </div>\n );\n};\n", "import { DataSource } from \"@vuu-ui/vuu-data-types\";\nimport {\n ReactElement,\n RefObject,\n SyntheticEvent,\n useCallback,\n useState,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { QueryReponse, ViewDispatch } from \"./ViewContext\";\nimport { ViewAction } from \"./viewTypes\";\n\nexport type ContributionLocation = \"post-title\" | \"pre-title\";\n\nexport type Contribution = {\n index?: number;\n location?: ContributionLocation;\n content: ReactElement;\n};\n\nexport const useViewActionDispatcher = (\n id: string,\n root: RefObject<HTMLDivElement>,\n viewPath?: string,\n dropTargets?: string[]\n): [ViewDispatch, Contribution[] | undefined] => {\n const { loadSessionState, purgeSessionState, purgeState, saveSessionState } =\n usePersistentState();\n\n const [contributions, setContributions] = useState<Contribution[]>(\n loadSessionState(id, \"contributions\") ?? []\n );\n const dispatchLayoutAction = useLayoutProviderDispatch();\n const updateContributions = useCallback(\n (location: ContributionLocation, content: ReactElement) => {\n const updatedContributions = contributions.concat([\n { location, content },\n ]);\n saveSessionState(id, \"contributions\", updatedContributions);\n setContributions(updatedContributions);\n },\n [contributions, id, saveSessionState]\n );\n\n const clearContributions = useCallback(() => {\n purgeSessionState(id, \"contributions\");\n setContributions([]);\n }, [id, purgeSessionState]);\n\n const handleRemove = useCallback(() => {\n const ds = loadSessionState(id, \"data-source\") as DataSource;\n if (ds) {\n ds.unsubscribe();\n }\n purgeSessionState(id);\n purgeState(id);\n dispatchLayoutAction({ type: \"remove\", path: viewPath });\n }, [\n dispatchLayoutAction,\n id,\n loadSessionState,\n purgeSessionState,\n purgeState,\n viewPath,\n ]);\n\n const handleMouseDown = useCallback(\n async (evt, index, preDragActivity): Promise<boolean> => {\n evt.stopPropagation();\n const dragRect = root.current?.getBoundingClientRect();\n return new Promise((resolve, reject) => {\n dispatchLayoutAction({\n type: \"drag-start\",\n evt,\n path: index === undefined ? viewPath : `${viewPath}.${index}`,\n dragRect,\n preDragActivity,\n dropTargets,\n resolveDragStart: resolve,\n rejectDragStart: reject,\n } as DragStartAction);\n });\n },\n [root, dispatchLayoutAction, viewPath, dropTargets]\n );\n\n const dispatchAction = useCallback(\n async <A extends ViewAction = ViewAction>(\n action: A,\n evt?: SyntheticEvent\n ): Promise<boolean | QueryReponse | void> => {\n const { type } = action;\n switch (type) {\n case \"maximize\":\n case \"minimize\":\n case \"restore\":\n return dispatchLayoutAction({ type, path: action.path ?? viewPath });\n case \"remove\":\n return handleRemove();\n case \"mousedown\":\n return handleMouseDown(evt, action.index, action.preDragActivity);\n case \"add-toolbar-contribution\":\n return updateContributions(action.location, action.content);\n case \"remove-toolbar-contribution\":\n return clearContributions();\n case \"query\":\n return dispatchLayoutAction({\n type,\n path: action.path,\n query: action.query,\n });\n return;\n default: {\n return undefined;\n }\n }\n },\n [\n dispatchLayoutAction,\n viewPath,\n handleRemove,\n handleMouseDown,\n updateContributions,\n clearContributions,\n ]\n );\n\n return [dispatchAction, contributions];\n};\n", "import {\n MutableRefObject,\n ReactElement,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport {\n LayoutActionType,\n LayoutChangeHandler,\n LayoutChangeReason,\n layoutFromJson,\n LayoutJSON,\n layoutQuery,\n layoutReducer,\n LayoutReducerAction,\n layoutToJSON,\n processLayoutElement,\n SaveAction,\n} from \"../layout-reducer\";\nimport { findTarget, getChildProp, getProp, getProps, typeOf } from \"../utils\";\nimport {\n LayoutProviderContext,\n LayoutProviderDispatch,\n} from \"./LayoutProviderContext\";\nimport { useLayoutDragDrop } from \"./useLayoutDragDrop\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst withDropTarget = (props: any) => props.dropTarget;\nconst shouldSave = (action: LayoutReducerAction) =>\n [\n \"drag-drop\",\n \"remove\",\n \"set-title\",\n \"splitter-resize\",\n \"switch-tab\",\n ].includes(action.type);\n\nconst getLayoutChangeReason = (\n action: LayoutReducerAction | SaveAction\n): LayoutChangeReason => {\n switch (action.type) {\n case \"switch-tab\":\n // TODO how can we make this more robust, shouldn't rely on 'main-tabs'\n if (action.id === \"main-tabs\") {\n return \"switch-active-layout\";\n } else {\n return \"switch-active-tab\";\n }\n case \"save\":\n return \"save-feature-props\";\n case \"drag-drop\":\n return \"drag-drop-operation\";\n case \"remove\":\n return \"remove-component\";\n case \"splitter-resize\":\n return \"resize-component\";\n case \"set-title\":\n return \"edit-feature-title\";\n default:\n throw Error(\"unknown layout action\");\n }\n};\n\nexport interface LayoutProviderProps {\n children: ReactElement;\n createNewChild?: (index?: number) => ReactElement;\n pathToDropTarget?: string;\n layout?: LayoutJSON;\n onLayoutChange?: LayoutChangeHandler;\n}\n\nexport const LayoutProviderVersion = () => {\n const version = useLayoutProviderVersion();\n return <div>{`Context: ${version} `}</div>;\n};\n\nexport const LayoutProvider = (props: LayoutProviderProps): ReactElement => {\n const { children, createNewChild, pathToDropTarget, layout, onLayoutChange } =\n props;\n const state = useRef<ReactElement | undefined>(undefined);\n const childrenRef = useRef<ReactElement>(children);\n\n const [, forceRefresh] = useState<unknown>(null);\n\n const serializeState = useCallback(\n (source, layoutChangeReason: LayoutChangeReason) => {\n if (onLayoutChange) {\n const targetContainer =\n findTarget(source, withDropTarget) || state.current;\n const isDraggableLayout = typeOf(targetContainer) === \"DraggableLayout\";\n const target = isDraggableLayout\n ? getProps(targetContainer).children[0]\n : targetContainer;\n const serializedModel = layoutToJSON(target);\n onLayoutChange(serializedModel, layoutChangeReason);\n }\n },\n [onLayoutChange]\n );\n\n const dispatchLayoutAction = useCallback(\n (action: LayoutReducerAction, suppressSave = false) => {\n const nextState = layoutReducer(state.current as ReactElement, action);\n if (nextState !== state.current) {\n state.current = nextState;\n forceRefresh({});\n if (!suppressSave && shouldSave(action)) {\n serializeState(nextState, getLayoutChangeReason(action));\n }\n }\n },\n [forceRefresh, serializeState]\n );\n\n const layoutActionDispatcher = useCallback<LayoutProviderDispatch>(\n (action) => {\n switch (action.type) {\n case \"drag-start\": {\n prepareToDragLayout(action);\n break;\n }\n case \"save\": {\n serializeState(state.current, getLayoutChangeReason(action));\n break;\n }\n case \"query\":\n if (action.query === \"PARENT_CONTAINER\") {\n return layoutQuery(action.query, action.path, state.current);\n }\n break;\n\n default: {\n dispatchLayoutAction(action);\n break;\n }\n }\n },\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [dispatchLayoutAction, serializeState]\n );\n\n const prepareToDragLayout = useLayoutDragDrop(\n state as MutableRefObject<ReactElement>,\n layoutActionDispatcher,\n pathToDropTarget\n );\n\n useEffect(() => {\n if (layout) {\n const targetContainer = findTarget(\n state.current as never,\n withDropTarget\n ) as ReactElement;\n if (targetContainer) {\n const target = getChildProp(targetContainer);\n const newLayout = layoutFromJson(\n layout,\n `${targetContainer.props.path}.0`\n );\n const action = target\n ? {\n type: LayoutActionType.REPLACE,\n target,\n replacement: newLayout,\n }\n : {\n type: LayoutActionType.ADD,\n path: targetContainer.props.path,\n component: newLayout,\n };\n dispatchLayoutAction(action, true);\n } else if (layout.id === getProp(state.current, \"id\")) {\n const newLayout = layoutFromJson(layout, \"0\");\n const action = {\n type: LayoutActionType.REPLACE,\n target: state.current,\n replacement: newLayout,\n };\n dispatchLayoutAction(action, true);\n }\n }\n }, [dispatchLayoutAction, layout]);\n\n if (state.current === undefined) {\n state.current = processLayoutElement(children);\n } else if (children !== childrenRef.current) {\n state.current = processLayoutElement(children, state.current);\n childrenRef.current = children;\n }\n\n return (\n <LayoutProviderContext.Provider\n value={{\n createNewChild,\n dispatchLayoutProvider: layoutActionDispatcher,\n version: 0,\n }}\n >\n {state.current}\n </LayoutProviderContext.Provider>\n );\n};\n\nexport const useLayoutProviderDispatch = () => {\n const { dispatchLayoutProvider } = useContext(LayoutProviderContext);\n return dispatchLayoutProvider;\n};\n\nexport const useLayoutCreateNewChild = () => {\n const { createNewChild } = useContext(LayoutProviderContext);\n return createNewChild;\n};\n\nexport const useLayoutProviderVersion = () => {\n const { version } = useContext(LayoutProviderContext);\n return version;\n};\n", "import { dimension, rect, rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement, ReactNode } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProps, resetPath } from \"../utils\";\nconst placeHolderProps = { \"data-placeholder\": true, \"data-resizeable\": true };\n\nconst NO_STYLE = {};\nconst auto = \"auto\";\nconst defaultFlexStyle = {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n height: auto,\n width: auto,\n};\n\nconst CROSS_DIMENSION = {\n height: \"width\",\n width: \"height\",\n};\n\nexport type flexDirection = \"row\" | \"column\";\n\ntype contraDimension = dimension;\ntype flexDimensionTuple = [dimension, contraDimension, flexDirection];\nexport type position = {\n height?: number;\n width?: number;\n};\n\nexport const getFlexDimensions = (flexDirection: flexDirection = \"row\") => {\n if (flexDirection === \"row\") {\n return [\"width\", \"height\", \"column\"] as flexDimensionTuple;\n } else {\n return [\"height\", \"width\", \"row\"] as flexDimensionTuple;\n }\n};\n\nconst isPercentageSize = (value: string | number) =>\n typeof value === \"string\" && value.endsWith(\"%\");\n\nexport const getIntrinsicSize = (\n component: ReactElement\n): { height?: number; width?: number } | undefined => {\n const { style: { width = auto, height = auto } = NO_STYLE } = component.props;\n\n const numHeight = typeof height === \"number\";\n const numWidth = typeof width === \"number\";\n\n if (numHeight && numWidth) {\n return { height, width };\n } else if (numHeight) {\n return { height };\n } else if (numWidth) {\n return { width };\n } else {\n return undefined;\n }\n};\n\nexport function getFlexStyle(\n component: ReactElement,\n dimension: dimension,\n pos?: DropPos\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n } else {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n}\n\nexport function hasUnboundedFlexStyle(component: ReactElement) {\n const { style: { flex, flexGrow, flexShrink, flexBasis } = NO_STYLE } =\n component.props;\n if (typeof flex === \"number\") {\n return true;\n }\n if (flexBasis === 0 && flexGrow === 1 && flexShrink === 1) {\n return true;\n }\n if (typeof flexBasis === \"number\") {\n return false;\n }\n return true;\n}\n\nexport function getFlexOrIntrinsicStyle(\n component: ReactElement,\n dimension: dimension,\n pos: position\n) {\n const crossDimension = CROSS_DIMENSION[dimension];\n const {\n style: {\n [dimension]: intrinsicSize = auto,\n [crossDimension]: intrinsicCrossSize = auto,\n ...intrinsicStyles\n } = NO_STYLE,\n } = component.props;\n\n if (intrinsicSize !== auto) {\n if (isPercentageSize(intrinsicSize)) {\n return {\n flexBasis: 0,\n flexGrow: 1,\n flexShrink: 1,\n [dimension]: undefined,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n return {\n flexBasis: intrinsicSize,\n flexGrow: 0,\n flexShrink: 0,\n [dimension]: intrinsicSize,\n [crossDimension]: intrinsicCrossSize,\n };\n }\n if (pos && pos[dimension]) {\n return {\n ...intrinsicStyles,\n ...defaultFlexStyle,\n flexBasis: pos[dimension],\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n return {\n ...intrinsicStyles,\n [crossDimension]: intrinsicCrossSize,\n };\n}\n\nexport function wrapIntrinsicSizeComponentWithFlexbox(\n component: ReactElement,\n flexDirection: flexDirection,\n path: string,\n clientRect?: rect,\n dropRect?: rectTuple\n) {\n const wrappedChildren = [];\n let pathIndex = 0;\n let endPlaceholder;\n\n if (clientRect && dropRect) {\n let startPlaceholder;\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n\n if (startPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n } else {\n endPlaceholder = true;\n }\n\n const { version = 0, style } = getProps(component);\n\n wrappedChildren.push(\n resetPath(component, `${path}.${pathIndex++}`, {\n version: version + 1,\n style: {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n },\n })\n );\n\n if (endPlaceholder) {\n wrappedChildren.push(\n createPlaceHolder(`${path}.${pathIndex++}`, 0, undefined, {\n [`data-${flexDirection}-placeholder`]: true,\n })\n );\n }\n\n return createFlexbox(\n flexDirection,\n { resizeable: false, style: { flexBasis: \"auto\" } },\n wrappedChildren,\n path\n );\n}\n\nconst getFlexValue = (\n flexBasis: number,\n flexFill: boolean\n): number | undefined => {\n if (flexFill) {\n return undefined;\n }\n return flexBasis === 0 ? 1 : 0;\n};\n\nexport function createFlexbox(\n flexDirection: flexDirection,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props: any,\n children: ReactNode,\n path: string\n) {\n const id = uuid();\n const { flexFill, style, resizeable = true } = props;\n const { flexBasis = flexFill ? undefined : \"auto\" } = style;\n const flex = getFlexValue(flexBasis, flexFill);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return React.createElement<any>(\n ComponentRegistry.Flexbox,\n {\n id,\n key: id,\n path,\n flexFill,\n style: {\n ...style,\n flexDirection,\n flexBasis,\n flexGrow: flex,\n flexShrink: flex,\n },\n resizeable,\n },\n children\n );\n}\n\nconst baseStyle = { flexGrow: 1, flexShrink: 1 };\n\nexport function createPlaceHolder(\n path: string,\n size: number,\n style?: CSSProperties,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props?: any\n) {\n const id = uuid();\n return React.createElement(\"div\", {\n ...placeHolderProps,\n ...props,\n \"data-path\": path,\n id,\n key: id,\n style: { ...baseStyle, ...style, flexBasis: size },\n });\n}\n", "import React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { isContainer } from \"../registry/ComponentRegistry\";\nimport {\n findTarget,\n followPath,\n followPathToParent,\n getProp,\n getProps,\n typeOf,\n} from \"../utils\";\nimport { getIntrinsicSize } from \"./flexUtils\";\nimport {\n getInsertTabBeforeAfter,\n insertBesideChild,\n insertIntoContainer,\n} from \"./insert-layout-element\";\nimport { moveChild } from \"./move-layout-element\";\nimport {\n AddAction,\n DragDropAction,\n LayoutActionType,\n LayoutReducerAction,\n MaximizeAction,\n SetPropAction,\n SetPropsAction,\n SwitchTabAction,\n} from \"./layoutTypes\";\nimport { LayoutProps } from \"./layoutUtils\";\nimport { removeChild } from \"./remove-layout-element\";\nimport {\n replaceChild,\n swapChild,\n _replaceChild,\n} from \"./replace-layout-element\";\nimport { resizeFlexChild, resizeFlexChildren } from \"./resize-flex-children\";\nimport { wrap } from \"./wrap-layout-element\";\n\nexport const layoutReducer = (\n state: ReactElement,\n action: LayoutReducerAction\n): ReactElement => {\n switch (action.type) {\n case LayoutActionType.ADD:\n return addChild(state, action);\n case LayoutActionType.DRAG_DROP:\n return dragDrop(state, action);\n case LayoutActionType.MAXIMIZE:\n return setChildProps(state, action);\n case LayoutActionType.REMOVE:\n return removeChild(state, action);\n case LayoutActionType.REPLACE:\n return replaceChild(state, action);\n case LayoutActionType.SET_PROP:\n return setProp(state, action);\n case LayoutActionType.SET_PROPS:\n return setProps(state, action);\n case LayoutActionType.SET_TITLE:\n return setProp(state, {\n type: \"set-prop\",\n path: action.path,\n propName: \"title\",\n propValue: action.title,\n });\n case LayoutActionType.SPLITTER_RESIZE:\n return resizeFlexChildren(state, action);\n case LayoutActionType.LAYOUT_RESIZE:\n return resizeFlexChild(state, action);\n case LayoutActionType.SWITCH_TAB:\n return switchTab(state, action);\n case LayoutActionType.MOVE_CHILD:\n return moveChild(state, action);\n default:\n return state;\n }\n};\n\nconst switchTab = (state: ReactElement, { path, nextIdx }: SwitchTabAction) => {\n const target = followPath(state, path, true);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const replacement = React.cloneElement<any>(target, {\n active: nextIdx,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProp = (\n state: ReactElement,\n { path, propName, propValue }: SetPropAction\n) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, {\n [propName]: propValue,\n });\n return swapChild(state, target, replacement);\n};\n\nconst setProps = (state: ReactElement, { path, props }: SetPropsAction) => {\n const target = followPath(state, path, true);\n const replacement = React.cloneElement(target, props);\n return swapChild(state, target, replacement);\n};\n\nconst setChildProps = (state: ReactElement, { path, type }: MaximizeAction) => {\n if (path) {\n const target = followPath(state, path, true);\n return swapChild(state, target, target, type);\n } else {\n return state;\n }\n};\n\nconst dragDrop = (\n layoutRoot: ReactElement,\n action: DragDropAction\n): ReactElement => {\n const {\n draggedReactElement: newComponent,\n dragInstructions,\n dropTarget,\n } = action;\n const existingComponent = dropTarget.component as ReactElement;\n const { pos } = dropTarget;\n const destinationTabstrip =\n pos?.position?.Header && typeOf(existingComponent) === \"Stack\";\n const { id, version } = getProps(newComponent);\n const intrinsicSize = getIntrinsicSize(newComponent);\n let newLayoutRoot: ReactElement;\n if (destinationTabstrip) {\n const [targetTab, insertionPosition] = getInsertTabBeforeAfter(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n existingComponent!,\n pos\n );\n if (targetTab === undefined) {\n newLayoutRoot = insertIntoContainer(\n layoutRoot,\n existingComponent,\n newComponent\n );\n } else {\n newLayoutRoot = insertBesideChild(\n layoutRoot,\n targetTab,\n newComponent,\n insertionPosition\n );\n }\n } else if (!intrinsicSize && pos?.position?.Centre) {\n newLayoutRoot = _replaceChild(\n layoutRoot,\n existingComponent as ReactElement,\n newComponent\n );\n } else {\n newLayoutRoot = dropLayoutIntoContainer(\n layoutRoot,\n dropTarget as DropTarget,\n newComponent\n );\n }\n\n if (dragInstructions.DoNotRemove) {\n return newLayoutRoot;\n }\n\n const finalTarget = findTarget(\n newLayoutRoot,\n (props: LayoutProps) => props.id === id && props.version === version\n ) as ReactElement;\n const finalPath = getProp(finalTarget, \"path\");\n return removeChild(newLayoutRoot, { path: finalPath, type: \"remove\" });\n};\n\nconst addChild = (\n layoutRoot: ReactElement,\n { path: containerPath, component }: AddAction\n) => {\n return insertIntoContainer(\n layoutRoot,\n followPath(layoutRoot, containerPath) as ReactElement,\n component\n );\n};\n\nconst dropLayoutIntoContainer = (\n layoutRoot: ReactElement,\n dropTarget: DropTarget,\n newComponent: ReactElement\n): ReactElement => {\n const { component, pos, clientRect, dropRect } = dropTarget;\n const existingComponent = component as ReactElement;\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n\n if (existingComponentPath === \"0.0\") {\n return wrap(\n layoutRoot,\n existingComponent as ReactElement,\n newComponent,\n pos\n );\n }\n\n const targetContainer = followPathToParent(\n layoutRoot,\n existingComponentPath\n ) as ReactElement;\n\n if (withTheGrain(pos, targetContainer)) {\n const insertionPosition = pos.position.SouthOrEast ? \"after\" : \"before\";\n return insertBesideChild(\n layoutRoot,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect\n );\n }\n\n if (!withTheGrain(pos, targetContainer)) {\n return wrap(\n layoutRoot,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n );\n }\n\n if (isContainer(typeOf(targetContainer) as string)) {\n return wrap(layoutRoot, existingComponent, newComponent, pos);\n }\n\n throw Error(`no support right now for position = ${pos.position}`);\n};\n\nconst withTheGrain = (pos: DropPos, container: ReactElement) => {\n if (pos.position.Centre) {\n return isTerrace(container) || isTower(container);\n }\n\n return pos.position.NorthOrSouth\n ? isTower(container)\n : pos.position.EastOrWest\n ? isTerrace(container)\n : false;\n};\n\nconst isTower = (container: ReactElement) => {\n return (\n typeOf(container) === \"Flexbox\" &&\n container.props.style.flexDirection === \"column\"\n );\n};\n\nconst isTerrace = (container: ReactElement) => {\n return (\n typeOf(container) === \"Flexbox\" &&\n container.props.style.flexDirection !== \"column\"\n );\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { getProp, getProps, nextStep, resetPath, typeOf } from \"../utils\";\nimport {\n createPlaceHolder,\n flexDirection,\n getFlexDimensions,\n getFlexOrIntrinsicStyle,\n getIntrinsicSize,\n wrapIntrinsicSizeComponentWithFlexbox,\n} from \"./flexUtils\";\nimport { LayoutModel } from \"./layoutTypes\";\nimport {\n getDefaultTabLabel,\n getManagedDimension,\n LayoutProps,\n} from \"./layoutUtils\";\n\ntype insertionPosition = \"before\" | \"after\";\n\nexport function getInsertTabBeforeAfter(stack: LayoutModel, pos: DropPos) {\n const tabs = stack.props.children;\n const tabCount = tabs.length;\n const { index = -1, positionRelativeToTab = \"after\" } = pos.tab || {};\n return index === -1 || index >= tabCount\n ? [tabs[tabCount - 1], \"after\"]\n : [tabs[index] ?? null, positionRelativeToTab];\n}\n\nexport function insertIntoContainer(\n container: ReactElement,\n targetContainer: ReactElement,\n newComponent: ReactElement\n): ReactElement {\n const {\n active: containerActive,\n children: containerChildren = [],\n path: containerPath,\n } = getProps(container) as LayoutProps;\n\n const existingComponentPath = getProp(targetContainer, \"path\");\n const { idx, finalStep } = nextStep(\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n containerPath!,\n existingComponentPath,\n true\n );\n const [insertedIdx, children] = finalStep\n ? insertIntoChildren(container, containerChildren, newComponent)\n : [\n containerActive,\n containerChildren?.map((child, index) =>\n index === idx\n ? (insertIntoContainer(\n child,\n targetContainer,\n newComponent\n ) as ReactElement)\n : child\n ),\n ];\n const active =\n typeOf(container) === \"Stack\"\n ? Array.isArray(insertedIdx)\n ? (insertedIdx[0] as number)\n : insertedIdx\n : containerActive;\n\n return React.cloneElement(container, { active }, children);\n}\n\nconst getDefaultTitle = (\n containerType: string | undefined,\n component: ReactElement,\n index: number,\n existingLabels: string[]\n) =>\n containerType === \"Stack\"\n ? getDefaultTabLabel(component, index, existingLabels)\n : undefined;\n\nconst getChildrenTitles = (children: ReactElement[]) =>\n children.map((child) => child.props.title);\n\nfunction insertIntoChildren(\n container: ReactElement,\n containerChildren: ReactElement[],\n newComponent: ReactElement\n): [number, ReactElement[]] {\n const containerPath = getProp(container, \"path\");\n const count = containerChildren?.length;\n const {\n id = uuid(),\n title = getDefaultTitle(\n typeOf(container),\n newComponent,\n count ?? 0,\n getChildrenTitles(containerChildren)\n ),\n } = getProps(newComponent);\n\n if (count) {\n return [\n count,\n containerChildren.concat(\n resetPath(newComponent, `${containerPath}.${count}`, {\n id,\n key: id,\n title,\n })\n ),\n ];\n } else {\n return [0, [resetPath(newComponent, `${containerPath}.0`, { id, title })]];\n }\n}\n\nexport function insertBesideChild(\n container: ReactElement,\n existingComponent: any,\n newComponent: any,\n insertionPosition: insertionPosition,\n pos?: DropPos,\n clientRect?: any,\n dropRect?: any\n): ReactElement {\n const {\n active: containerActive,\n children: containerChildren,\n path: containerPath,\n } = getProps(container);\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n const { idx, finalStep } = nextStep(containerPath, existingComponentPath);\n const [insertedIdx, children] = finalStep\n ? updateChildren(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n pos!,\n clientRect,\n dropRect\n )\n : [\n containerActive,\n containerChildren.map((child: ReactElement, index: number) =>\n index === idx\n ? insertBesideChild(\n child,\n existingComponent,\n newComponent,\n insertionPosition,\n pos,\n clientRect,\n dropRect\n )\n : child\n ),\n ];\n\n const active = typeOf(container) === \"Stack\" ? insertedIdx : containerActive;\n return React.cloneElement(container, { active }, children);\n}\n\nfunction updateChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: insertionPosition,\n pos: DropPos,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: DropTarget[\"dropRect\"]\n) {\n const intrinsicSize = getIntrinsicSize(newComponent);\n if (intrinsicSize?.width && intrinsicSize?.height) {\n return insertIntrinsicSizedComponent(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n clientRect,\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n dropRect!\n );\n } else {\n return insertFlexComponent(\n container,\n containerChildren,\n idx,\n newComponent,\n insertionPosition,\n pos?.width || pos?.height,\n clientRect\n );\n }\n}\n\nconst getLeadingPlaceholderSize = (\n flexDirection: flexDirection,\n insertionPosition: insertionPosition,\n { top, right, bottom, left }: DropTarget[\"clientRect\"],\n [rectLeft, rectTop, rectRight, rectBottom]: rectTuple\n) => {\n if (flexDirection === \"column\" && insertionPosition === \"before\") {\n return rectTop - top;\n } else if (flexDirection === \"column\") {\n return bottom - rectBottom;\n } else if (flexDirection === \"row\" && insertionPosition === \"before\") {\n return rectLeft - left;\n } else if (flexDirection === \"row\") {\n return right - rectRight;\n }\n};\n\nfunction insertIntrinsicSizedComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: insertionPosition,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: rectTuple\n) {\n const {\n style: { flexDirection },\n } = getProps(container);\n const [dimension, crossDimension, contraDirection] =\n getFlexDimensions(flexDirection);\n const { [crossDimension]: intrinsicCrossSize, [dimension]: intrinsicSize } =\n getIntrinsicSize(newComponent) as { height: number; width: number };\n const path = getProp(containerChildren[idx], \"path\");\n\n const placeholderSize = getLeadingPlaceholderSize(\n flexDirection,\n insertionPosition,\n clientRect,\n dropRect\n );\n\n const [itemToInsert, size] =\n intrinsicCrossSize < clientRect[crossDimension]\n ? [\n wrapIntrinsicSizeComponentWithFlexbox(\n newComponent,\n contraDirection,\n path,\n clientRect,\n dropRect\n ),\n intrinsicSize,\n ]\n : [newComponent, undefined];\n\n const placeholder = placeholderSize\n ? createPlaceHolder(path, placeholderSize, { flexGrow: 0, flexShrink: 0 })\n : undefined;\n\n if (intrinsicCrossSize > clientRect[crossDimension]) {\n containerChildren = containerChildren.map((child) => {\n if (getProp(child, \"placeholder\")) {\n return child;\n } else {\n const { [crossDimension]: intrinsicCrossChildSize } = getIntrinsicSize(\n child\n ) as {\n height: number;\n width: number;\n };\n if (\n intrinsicCrossChildSize &&\n intrinsicCrossChildSize < intrinsicCrossSize\n ) {\n return wrapIntrinsicSizeComponentWithFlexbox(\n child,\n contraDirection,\n getProp(child, \"path\")\n );\n } else {\n return child;\n }\n }\n });\n }\n\n return insertFlexComponent(\n container,\n containerChildren,\n idx,\n itemToInsert,\n insertionPosition,\n size,\n clientRect,\n placeholder\n );\n}\n\nfunction insertFlexComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n idx: number,\n newComponent: ReactElement,\n insertionPosition: \"before\" | \"after\",\n size: number | undefined,\n targetRect: DropTarget[\"clientRect\"],\n placeholder?: ReactElement\n) {\n const containerPath = getProp(container, \"path\");\n let insertedIdx = 0;\n const children =\n !containerChildren || containerChildren.length === 0\n ? [newComponent]\n : containerChildren\n .reduce<ReactElement[]>((arr, child, i) => {\n if (idx === i) {\n const [existingComponent, insertedComponent] =\n getStyledComponents(container, child, newComponent, targetRect);\n if (insertionPosition === \"before\") {\n if (placeholder) {\n arr.push(placeholder, insertedComponent, existingComponent);\n } else {\n arr.push(insertedComponent, existingComponent);\n }\n } else {\n if (placeholder) {\n arr.push(existingComponent, insertedComponent, placeholder);\n } else {\n arr.push(existingComponent, insertedComponent);\n }\n }\n insertedIdx = arr.indexOf(insertedComponent);\n } else {\n arr.push(child);\n }\n return arr;\n }, [])\n .map((child, i) =>\n i < insertedIdx ? child : resetPath(child, `${containerPath}.${i}`)\n );\n\n return [insertedIdx, children];\n}\n\nfunction getStyledComponents(\n container: LayoutModel,\n existingComponent: ReactElement,\n newComponent: ReactElement,\n targetRect: DropTarget[\"clientRect\"]\n): [ReactElement, ReactElement] {\n const id = uuid();\n let { version = 0 } = getProps(newComponent);\n version += 1;\n if (typeOf(container) === \"Flexbox\") {\n const [dim] = getManagedDimension(container.props.style);\n const splitterSize = 6;\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const size = { [dim]: (targetRect[dim] - splitterSize) / 2 };\n const existingComponentStyle = getFlexOrIntrinsicStyle(\n existingComponent,\n dim,\n size\n );\n const newComponentStyle = getFlexOrIntrinsicStyle(newComponent, dim, size);\n\n return [\n React.cloneElement(existingComponent, {\n style: existingComponentStyle,\n }),\n React.cloneElement(newComponent, {\n id,\n version,\n style: newComponentStyle,\n }),\n ];\n } else {\n const {\n style: { left: _1, top: _2, flex: _3, ...style } = {\n left: undefined,\n top: undefined,\n flex: undefined,\n },\n } = getProps(newComponent);\n return [\n existingComponent,\n React.cloneElement(newComponent, {\n id,\n version,\n style: { ...style, flex: \"1 1 0px\" },\n }),\n ];\n }\n}\n", "import { dimension, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { cloneElement, CSSProperties, ReactElement } from \"react\";\nimport {\n ComponentWithId,\n ComponentRegistry,\n isContainer,\n isLayoutComponent,\n} from \"../registry/ComponentRegistry\";\nimport { TabLabelFactory } from \"../stack\";\nimport {\n getPersistentState,\n hasPersistentState,\n setPersistentState,\n} from \"../use-persistent-state\";\nimport { expandFlex, followPathToParent, getProps, typeOf } from \"../utils\";\nimport { LayoutJSON, LayoutModel, layoutType } from \"./layoutTypes\";\n\nexport const getManagedDimension = (\n style: CSSProperties\n): [dimension, dimension] =>\n style.flexDirection === \"column\" ? [\"height\", \"width\"] : [\"width\", \"height\"];\n\nconst theKidHasNoStyle: CSSProperties = {};\n\nexport const applyLayoutProps = (component: ReactElement, path = \"0\") => {\n const [layoutProps, children] = getChildLayoutProps(\n typeOf(component) as string,\n component.props,\n path\n );\n return React.cloneElement(component, layoutProps, children);\n};\n\nexport interface LayoutProps extends ComponentWithId {\n active?: number;\n \"data-path\"?: string;\n children?: ReactElement[];\n column?: any;\n dropTarget?: any;\n key: string;\n layout?: any;\n path?: string;\n resizeable?: boolean;\n style: CSSProperties;\n type?: string;\n version?: number;\n}\n\n/**\n * parse the declarative JSX and clone adding layout attributes\n */\nexport const processLayoutElement = (\n layoutElement: ReactElement,\n previousLayout?: ReactElement\n): ReactElement => {\n const type = typeOf(layoutElement) as string;\n const [layoutProps, children] = getChildLayoutProps(\n type,\n layoutElement.props,\n \"0\",\n undefined,\n previousLayout\n );\n return cloneElement(layoutElement, layoutProps, children);\n};\n\nexport const applyLayout = (\n type: layoutType,\n props: LayoutProps,\n previousLayout?: LayoutModel\n): LayoutModel => {\n const [layoutProps, children] = getChildLayoutProps(\n type,\n props,\n \"0\",\n undefined,\n previousLayout\n );\n return {\n ...props,\n ...layoutProps,\n type,\n children,\n };\n};\n\nfunction getLayoutProps(\n type: string,\n props: LayoutProps,\n path = \"0\",\n parentType: string | null = null,\n previousLayout?: LayoutModel\n): LayoutProps {\n const {\n active: prevActive = 0,\n \"data-path\": dataPath,\n path: prevPath = dataPath,\n id: prevId,\n style: prevStyle,\n } = getProps(previousLayout);\n\n const prevMatch = typeOf(previousLayout) === type && path === prevPath;\n const id = prevMatch ? prevId : props.id ?? uuid();\n const active = type === \"Stack\" ? props.active ?? prevActive : undefined;\n\n const key = id;\n const style = prevMatch ? prevStyle : getStyle(type, props, parentType);\n return isLayoutComponent(type)\n ? { id, key, path, style, type, active }\n : { id, key, style, \"data-path\": path };\n}\n\nfunction getChildLayoutProps(\n type: string,\n props: LayoutProps,\n path: string,\n parentType: string | null = null,\n previousLayout?: LayoutModel\n): [LayoutProps, ReactElement[]] {\n const layoutProps = getLayoutProps(\n type,\n props,\n path,\n parentType,\n previousLayout\n );\n\n if (props.layout && !previousLayout) {\n return [layoutProps, [layoutFromJson(props.layout, `${path}.0`)]];\n }\n\n const previousChildren =\n (previousLayout as any)?.children ?? previousLayout?.props?.children;\n const hasDynamicChildren = props.dropTarget && previousChildren;\n const children = hasDynamicChildren\n ? previousChildren\n : getLayoutChildren(type, props.children, path, previousChildren);\n return [layoutProps, children];\n}\n\nfunction getLayoutChildren(\n type: string,\n children?: ReactElement[],\n path = \"0\",\n previousChildren?: ReactElement[]\n) {\n const kids = Array.isArray(children)\n ? children\n : React.isValidElement(children)\n ? [children]\n : [];\n return isContainer(type)\n ? kids.map((child, i) => {\n const childType = typeOf(child) as string;\n const previousType = typeOf(previousChildren?.[i]);\n\n if (!previousType || childType === previousType) {\n const [layoutProps, children] = getChildLayoutProps(\n childType,\n child.props,\n `${path}.${i}`,\n type,\n previousChildren?.[i]\n );\n return React.cloneElement(child, layoutProps, children);\n }\n\n return previousChildren?.[i];\n })\n : children;\n}\n\nconst getStyle = (\n type: string,\n props: LayoutProps,\n parentType?: string | null\n) => {\n let { style = theKidHasNoStyle } = props;\n if (type === \"Flexbox\") {\n style = {\n flexDirection: props.column ? \"column\" : \"row\",\n ...style,\n display: \"flex\",\n };\n }\n\n if (style.flex) {\n const { flex, ...otherStyles } = style;\n style = {\n ...otherStyles,\n ...expandFlex(typeof flex === \"number\" ? flex : 0),\n };\n } else if (parentType === \"Stack\") {\n style = {\n ...style,\n ...expandFlex(1),\n };\n } else if (\n parentType === \"Flexbox\" &&\n (style.width || style.height) &&\n style.flexBasis === undefined\n ) {\n style = {\n ...style,\n flexBasis: \"auto\",\n flexGrow: 0,\n flexShrink: 0,\n };\n }\n\n return style;\n};\n\nexport function layoutFromJson(\n { id = uuid(), type, children, props, state }: LayoutJSON,\n path: string\n): ReactElement {\n const componentType = type.match(/^[a-z]/) ? type : ComponentRegistry[type];\n\n if (componentType === undefined) {\n throw Error(\n `layoutUtils unable to create component from JSON, unknown type ${type}`\n );\n }\n\n if (state) {\n setPersistentState(id, state);\n }\n\n return React.createElement(\n componentType,\n {\n id,\n ...props,\n key: id,\n path,\n },\n children\n ? children.map((child, i) => layoutFromJson(child, `${path}.${i}`))\n : undefined\n );\n}\n\nexport function layoutToJSON(component: ReactElement) {\n return componentToJson(component);\n}\n\nexport function componentToJson(component: ReactElement): LayoutJSON {\n const type = typeOf(component) as string;\n const { id, children, type: _omit, ...props } = getProps(component);\n\n const state = hasPersistentState(id) ? getPersistentState(id) : undefined;\n\n return {\n id,\n type,\n props: serializeProps(props as LayoutProps),\n state,\n children: React.Children.map(children, componentToJson),\n };\n}\n\nexport function serializeProps(props?: LayoutProps) {\n if (props) {\n const { path, ...otherProps } = props;\n const result: { [key: string]: any } = {};\n for (const [key, value] of Object.entries(otherProps)) {\n result[key] = serializeValue(value);\n }\n return result;\n }\n}\n\nfunction serializeValue(value: unknown): any {\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\"\n ) {\n return value;\n } else if (Array.isArray(value)) {\n return value.map(serializeValue);\n } else if (typeof value === \"object\" && value !== null) {\n const result: { [key: string]: any } = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = serializeValue(v);\n }\n return result;\n }\n}\n\n// This is experimental and the only query we support to start off with is\n// PARENT_CONTAINER\nexport type LayoutQuery = \"PARENT_CONTAINER\";\n\nexport const layoutQuery = (\n query: LayoutQuery,\n path?: string,\n layoutRoot?: ReactElement\n) => {\n if (path && layoutRoot) {\n const parentElement = followPathToParent(layoutRoot, path);\n if (parentElement) {\n const { id: parentContainerId } = getProps(parentElement);\n const parentContainerType = typeOf(parentElement);\n return {\n parentContainerId,\n parentContainerType,\n };\n }\n return {\n parentContainerType: \"Stack\",\n parentContainerId: \"blah\",\n };\n }\n};\n\nexport const getDefaultTabLabel: TabLabelFactory = (\n component,\n tabIndex,\n existingLabels = []\n): string => {\n let label = component.props?.title ?? component.props?.[\"data-tab-title\"];\n if (label) {\n return label;\n } else {\n let count = tabIndex;\n do {\n label = `Tab ${++count}`;\n } while (existingLabels.includes(label));\n return label;\n }\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { useCallback } from \"react\";\n\n/**\n * Persistent state is stored at module level (i.e singleton-style)\n * It is kept at this level, rather than passed to the target component(s)\n * so that it endures across the unmount/mount lifecycle journey of any\n * individual component. e.g when switching between tabs, components are\n * unmounted and mounted. They re-request their persistent state on re-mount.\n * Persistent state is populated as the serialized layout schema is processed\n * (see layoutFromJSON).\n */\nconst persistentState = new Map<string, any>();\nconst sessionState = new Map<string, any>();\n\nexport const getPersistentState = (id: string) => persistentState.get(id);\nexport const hasPersistentState = (id: string) => persistentState.has(id);\nexport const setPersistentState = (id: string, value: any) =>\n persistentState.set(id, value);\n\nexport const usePersistentState = () => {\n const loadSessionState = useCallback((id, key) => {\n const state = sessionState.get(id);\n if (state) {\n if (key !== undefined && state[key] !== undefined) {\n return state[key];\n }\n if (key !== undefined) {\n return undefined;\n }\n return state;\n }\n }, []);\n\n const saveSessionState = useCallback((id, key, data) => {\n if (key === undefined) {\n sessionState.set(id, data);\n } else if (sessionState.has(id)) {\n const state = sessionState.get(id);\n sessionState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n sessionState.set(id, { [key]: data });\n }\n }, []);\n\n const purgeSessionState = useCallback((id: string, key?: string) => {\n if (sessionState.has(id)) {\n if (key === undefined) {\n sessionState.delete(id);\n } else {\n const state = sessionState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = sessionState.get(id);\n if (Object.keys(rest).length > 0) {\n sessionState.set(id, rest);\n } else {\n sessionState.delete(id);\n }\n }\n }\n }\n }, []);\n\n const loadState = useCallback((id: string, key?: string) => {\n const state = persistentState.get(id);\n if (state) {\n if (key !== undefined) {\n return state[key];\n }\n return state;\n }\n }, []);\n\n const saveState = useCallback(\n (id: string, key: string | undefined, data: unknown) => {\n if (key === undefined) {\n persistentState.set(id, data);\n } else if (persistentState.has(id)) {\n const state = persistentState.get(id);\n persistentState.set(id, {\n ...state,\n [key]: data,\n });\n } else {\n persistentState.set(id, { [key]: data });\n }\n },\n []\n );\n\n const purgeState = useCallback((id: string, key?: string) => {\n if (persistentState.has(id)) {\n if (key === undefined) {\n persistentState.delete(id);\n } else {\n const state = persistentState.get(id);\n if (state[key]) {\n const { [key]: _doomedState, ...rest } = persistentState.get(id);\n if (Object.keys(rest).length > 0) {\n persistentState.set(id, rest);\n } else {\n persistentState.delete(id);\n }\n }\n }\n }\n }, []);\n\n return {\n loadSessionState,\n loadState,\n saveSessionState,\n saveState,\n purgeState,\n purgeSessionState,\n };\n};\n", "import { cloneElement, ReactElement } from \"react\";\nimport { followPath, getProps } from \"../utils\";\nimport { MoveChildAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function moveChild(\n layoutRoot: ReactElement,\n { fromIndex, path, toIndex }: MoveChildAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children } = getProps(target);\n const replacementChildren = moveChildWithinChildren(\n children,\n fromIndex,\n toIndex\n );\n const replacement = cloneElement(target, undefined, replacementChildren);\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction moveChildWithinChildren(\n children: ReactElement[],\n fromIndex: number,\n toIndex: number\n) {\n const newChildren = children.slice();\n const [child] = newChildren.splice(fromIndex, 1);\n if (toIndex === -1) {\n return newChildren.concat(child);\n } else {\n newChildren.splice(toIndex, 0, child);\n return newChildren;\n }\n}\n", "import React, { ReactElement } from 'react';\nimport { Action } from '../layout-action';\nimport { getProp, getProps, nextStep } from '../utils';\nimport { ReplaceAction } from './layoutTypes';\nimport { applyLayoutProps, LayoutProps } from './layoutUtils';\n\nexport function replaceChild(model: ReactElement, { target, replacement }: ReplaceAction) {\n return _replaceChild(model, target, replacement);\n}\n\nexport function _replaceChild(\n model: ReactElement,\n child: ReactElement,\n replacement: ReactElement<LayoutProps>\n) {\n const path = getProp(child, 'path');\n const resizeable = getProp(child, 'resizeable');\n const { style } = getProps(child);\n const newChild =\n applyLayoutProps(\n React.cloneElement(replacement, {\n resizeable,\n style: {\n ...style,\n ...replacement.props.style\n }\n }),\n path\n );\n\n return swapChild(model, child, newChild);\n}\n\nexport function swapChild(\n model: ReactElement,\n child: ReactElement,\n replacement: ReactElement,\n op?: 'maximize' | 'minimize' | 'restore'\n): ReactElement {\n if (model === child) {\n return replacement;\n }\n \n const { idx, finalStep } = nextStep(getProp(model, 'path'), getProp(child, 'path'));\n const children = model.props.children.slice();\n \n if (finalStep) {\n if (!op) {\n children[idx] = replacement;\n } else if (op === Action.MINIMIZE) {\n children[idx] = minimize(model, children[idx]);\n } else if (op === Action.RESTORE) {\n children[idx] = restore(children[idx]);\n }\n } else {\n children[idx] = swapChild(children[idx], child, replacement, op);\n }\n return React.cloneElement(model, undefined, children);\n}\n\nfunction minimize(parent: ReactElement, child: ReactElement) {\n const { style: parentStyle } = getProps(parent);\n const { style: childStyle } = getProps(child);\n\n const { width, height, flexBasis, flexShrink, flexGrow, ...rest } = childStyle;\n\n const restoreStyle = {\n width,\n height,\n flexBasis,\n flexShrink,\n flexGrow\n };\n\n const style = {\n ...rest,\n flexBasis: 0,\n flexGrow: 0,\n flexShrink: 0\n };\n const collapsed =\n parentStyle.flexDirection === 'row'\n ? 'vertical'\n : parentStyle.flexDirection === 'column'\n ? 'horizontal'\n : false;\n\n if (collapsed) {\n return React.cloneElement(child, {\n collapsed,\n restoreStyle,\n style\n });\n }\n return child;\n}\n\nfunction restore(child: ReactElement) {\n const { style: childStyle, restoreStyle } = getProps(child);\n\n const { flexBasis, flexShrink, flexGrow, ...rest } = childStyle;\n\n const style = {\n ...rest,\n ...restoreStyle\n };\n\n return React.cloneElement(child, {\n collapsed: false,\n style,\n restoreStyle: undefined\n });\n}\n", "export const Action = {\n ADD: \"add\",\n BLUR: \"blur\",\n BLUR_SPLITTER: \"blur-splitter\",\n DRAG_START: \"drag-start\",\n DRAG_STARTED: \"drag-started\",\n DRAG_DROP: \"drag-drop\",\n FOCUS: \"focus\",\n FOCUS_SPLITTER: \"focus-splitter\",\n INITIALIZE: \"initialize\",\n LAYOUT_RESIZE: \"layout-resize\",\n MAXIMIZE: \"maximize\",\n MINIMIZE: \"minimize\",\n REMOVE: \"remove\",\n REPLACE: \"replace\",\n RESTORE: \"restore\",\n SAVE: \"save\",\n SET_TITLE: \"set-title\",\n SPLITTER_RESIZE: \"splitter-resize\",\n SWITCH_TAB: \"switch-tab\",\n TEAR_OUT: \"tear-out\",\n};\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { NamedFilter } from \"@vuu-ui/vuu-filter-types\";\nimport { CSSProperties, ReactElement } from \"react\";\nimport { DragDropRect, DragInstructions } from \"../drag-drop\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { ContributionLocation } from \"../layout-view\";\n\nexport interface WithProps {\n props?: { [key: string]: any };\n}\n\nexport interface WithType {\n props?: any;\n title?: string;\n type: string;\n}\n\nexport interface LayoutRoot extends WithProps {\n active?: number;\n children?: ReactElement[];\n type: string;\n}\n\nexport type ValueOf<T> = T[keyof T];\nexport interface ApplicationSettings {\n leftNav?: {\n activeTabIndex: number;\n expanded: boolean;\n };\n /**\n * filters are keyed by MODULE:tablename\n */\n filters?: { [key: string]: NamedFilter[] };\n}\nexport type ApplicationSetting = ValueOf<ApplicationSettings>;\n\nexport interface ApplicationJSON {\n layout: LayoutJSON;\n settings?: ApplicationSettings;\n}\n\nexport interface LayoutJSON extends WithType {\n active?: number;\n children?: LayoutJSON[];\n id?: string;\n props?: { [key: string]: any };\n state?: any;\n type: string;\n style?: CSSProperties;\n}\n\nexport interface WithActive {\n active?: number;\n}\n\nexport type LayoutModel = LayoutRoot | ReactElement | WithType;\n\nexport type layoutType = \"Flexbox\" | \"View\" | \"DraggableLayout\" | \"Stack\";\n\n// TODO duplicated in layout-action\nexport const LayoutActionType = {\n ADD: \"add\",\n DRAG_START: \"drag-start\",\n DRAG_DROP: \"drag-drop\",\n LAYOUT_RESIZE: \"layout-resize\",\n MAXIMIZE: \"maximize\",\n MINIMIZE: \"minimize\",\n MOVE_CHILD: \"move-child\",\n QUERY: \"query\",\n REMOVE: \"remove\",\n REPLACE: \"replace\",\n RESTORE: \"restore\",\n SAVE: \"save\",\n SET_PROP: \"set-prop\",\n SET_PROPS: \"set-props\",\n SET_TITLE: \"set-title\",\n SPLITTER_RESIZE: \"splitter-resize\",\n SWITCH_TAB: \"switch-tab\",\n TEAROUT: \"tearout\",\n} as const;\n\nexport type AddAction = {\n component: any;\n path: string;\n type: typeof LayoutActionType.ADD;\n};\n\nexport type DragDropAction = {\n draggedReactElement: ReactElement;\n dragInstructions: any;\n dropTarget: Partial<DropTarget>;\n type: typeof LayoutActionType.DRAG_DROP;\n};\n\nexport type MaximizeAction = {\n path?: string;\n type: typeof LayoutActionType.MAXIMIZE;\n};\n\nexport type MinimizeAction = {\n path?: string;\n type: typeof LayoutActionType.MINIMIZE;\n};\n\nexport type MoveChildAction = {\n fromIndex: number;\n toIndex: number;\n path: string;\n type: typeof LayoutActionType.MOVE_CHILD;\n};\n\nexport type QueryAction = {\n path?: string;\n query: string;\n type: typeof LayoutActionType.QUERY;\n};\n\nexport type RemoveAction = {\n path?: string;\n type: typeof LayoutActionType.REMOVE;\n};\n\nexport type ReplaceAction = {\n replacement: any;\n target: any;\n type: typeof LayoutActionType.REPLACE;\n};\n\nexport type RestoreAction = {\n path?: string;\n type: typeof LayoutActionType.RESTORE;\n};\n\nexport type SetPropAction = {\n path: string;\n propName: string;\n propValue: string | number | boolean;\n type: typeof LayoutActionType.SET_PROP;\n};\n\nexport type SetPropsAction = {\n path: string;\n props: { [key: string]: unknown };\n type: typeof LayoutActionType.SET_PROPS;\n};\n\nexport type SetTitleAction = {\n path: string;\n title: string;\n type: typeof LayoutActionType.SET_TITLE;\n};\n\nexport type SplitterResizeAction = {\n path: string;\n sizes: { currentSize: number; flexBasis: number }[];\n type: typeof LayoutActionType.SPLITTER_RESIZE;\n};\n\nexport type LayoutResizeAction = {\n path: string;\n size: number;\n type: typeof LayoutActionType.LAYOUT_RESIZE;\n};\n\nexport type SwitchTabAction = {\n id?: string;\n nextIdx: number;\n path: string;\n type: typeof LayoutActionType.SWITCH_TAB;\n};\n\nexport type TearoutAction = {\n path?: string;\n type: typeof LayoutActionType.TEAROUT;\n};\n\nexport type LayoutReducerAction =\n | AddAction\n | DragDropAction\n | LayoutResizeAction\n | MaximizeAction\n | MinimizeAction\n | MoveChildAction\n | RemoveAction\n | ReplaceAction\n | RestoreAction\n | SetPropAction\n | SetPropsAction\n | SetTitleAction\n | SplitterResizeAction\n | SwitchTabAction;\n\nexport type SaveAction = {\n type: typeof LayoutActionType.SAVE;\n};\n\nexport type AddToolbarContributionViewAction = {\n content: ReactElement;\n location: ContributionLocation;\n type: \"add-toolbar-contribution\";\n};\n\nexport type RemoveToolbarContributionViewAction = {\n location: ContributionLocation;\n type: \"remove-toolbar-contribution\";\n};\n\nexport type MousedownViewAction = {\n preDragActivity?: any;\n index?: number;\n type: \"mousedown\";\n};\n\nexport type DragStartAction = {\n payload?: ReactElement;\n dragContainerPath?: string;\n dragElement?: HTMLElement;\n dragRect: DragDropRect;\n dropTargets?: string[];\n evt: MouseEvent;\n instructions?: DragInstructions;\n path: string;\n type: typeof LayoutActionType.DRAG_START;\n};\n\nexport type LayoutLevelChange =\n | \"switch-active-tab\"\n | \"edit-feature-title\"\n | \"save-feature-props\"\n | \"resize-component\"\n | \"remove-component\"\n | \"drag-drop-operation\";\n\nexport type ApplicationLevelChange =\n | \"switch-active-layout\"\n | \"open-layout\"\n | \"close-layout\"\n | \"rename-layout\"\n | \"resize-application-chrome\";\n\nexport type LayoutChangeReason = LayoutLevelChange | ApplicationLevelChange;\n\nexport type LayoutChangeHandler = (\n layout: LayoutJSON,\n layoutChangeReason: LayoutChangeReason\n) => void;\n\nexport const isApplicationLevelChange = (\n layoutChangeReason: LayoutChangeReason\n): layoutChangeReason is ApplicationLevelChange =>\n [\n \"switch-active-layout\",\n \"open-layout\",\n \"close-layout\",\n \"rename-layout\",\n ].includes(layoutChangeReason);\n\nexport const isLayoutLevelChange = (\n layoutChangeReason: LayoutChangeReason\n): layoutChangeReason is LayoutLevelChange =>\n [\n \"switch-active-tab\",\n \"edit-feature-title\",\n \"save-feature-props\",\n \"remove-component\",\n \"resize-component\",\n \"drag-drop-operation\",\n ].includes(layoutChangeReason);\n", "/* eslint-disable @typescript-eslint/no-non-null-assertion */\nimport React, { ReactElement } from \"react\";\nimport { createPlaceHolder } from \"./flexUtils\";\nimport { layoutFromJson } from \"./layoutUtils\";\nimport { swapChild } from \"./replace-layout-element\";\n\nimport {\n followPath,\n followPathToParent,\n getProp,\n getProps,\n nextStep,\n resetPath,\n typeOf,\n} from \"../utils\";\nimport { RemoveAction } from \"./layoutTypes\";\n\nexport function removeChild(layoutRoot: ReactElement, { path }: RemoveAction) {\n const target = followPath(layoutRoot, path!) as ReactElement;\n let targetParent = followPathToParent(layoutRoot, path!);\n if (targetParent === null) {\n return layoutRoot;\n }\n const { children } = getProps(targetParent);\n if (\n // this is very specific to explicitly sized components\n children.length > 1 &&\n typeOf(targetParent) !== \"Stack\" &&\n allOtherChildrenArePlaceholders(children, path)\n ) {\n const {\n style: { flexBasis, display, flexDirection, ...style },\n } = getProps(targetParent);\n let containerPath = getProp(targetParent, \"path\");\n let newLayout = swapChild(\n layoutRoot,\n targetParent,\n createPlaceHolder(containerPath, flexBasis, style)\n );\n while ((targetParent = followPathToParent(newLayout, containerPath))) {\n if (getProp(targetParent, \"path\") === \"0\") {\n break;\n }\n const { children } = getProps(targetParent);\n if (allOtherChildrenArePlaceholders(children)) {\n containerPath = getProp(targetParent, \"path\");\n const {\n style: { flexBasis, display, flexDirection, ...style },\n } = getProps(targetParent);\n newLayout = swapChild(\n layoutRoot,\n targetParent,\n createPlaceHolder(containerPath, flexBasis, style)\n );\n } else if (hasAdjacentPlaceholders(children)) {\n newLayout = collapsePlaceholders(\n layoutRoot,\n targetParent as ReactElement\n );\n } else {\n break;\n }\n }\n return newLayout;\n }\n return _removeChild(layoutRoot, target);\n}\n\nfunction _removeChild(\n container: ReactElement,\n child: ReactElement\n): ReactElement {\n const props = getProps(container);\n const { children: componentChildren, path, preserve } = props;\n let { active, id: containerId } = props;\n const { idx, finalStep } = nextStep(path, getProp(child, \"path\"));\n const type = typeOf(container) as string;\n let children = componentChildren.slice() as ReactElement[];\n\n if (finalStep) {\n children.splice(idx, 1);\n\n if (active !== undefined && active >= idx) {\n active = Math.max(0, active - 1);\n }\n\n if (children.length === 0 && preserve && type === \"Stack\") {\n const {\n path,\n style: { flexBasis },\n } = getProps(child);\n const placeHolder =\n containerId === \"main-tabs\"\n ? layoutFromJson(\n {\n props: {\n style: { flexGrow: 1, flexShrink: 1, flexBasis },\n title: \"Tab 1\",\n },\n type: \"Placeholder\",\n },\n path\n )\n : createPlaceHolder(path, flexBasis);\n children.push(placeHolder);\n } else if (\n children.length === 1 &&\n !preserve &&\n path !== \"0\" &&\n type.match(/Flexbox|Stack/)\n ) {\n return unwrap(container, children[0]);\n }\n\n if (!children.some(isFlexible) && children.some(canBeMadeFlexible)) {\n children = makeFlexible(children);\n }\n } else {\n children[idx] = _removeChild(children[idx], child) as ReactElement;\n }\n\n children = children.map((child, i) => resetPath(child, `${path}.${i}`));\n return React.cloneElement(container, { active }, children);\n}\n\nfunction unwrap(container: ReactElement, child: ReactElement) {\n const type = typeOf(container);\n const {\n path,\n style: { flexBasis, flexGrow, flexShrink, width, height },\n } = getProps(container);\n\n let unwrappedChild = resetPath(child, path);\n if (path === \"0\") {\n unwrappedChild = React.cloneElement(unwrappedChild, {\n style: {\n ...child.props.style,\n width,\n height,\n },\n });\n } else if (type === \"Flexbox\") {\n const dim =\n container.props.style.flexDirection === \"column\" ? \"height\" : \"width\";\n const {\n style: { [dim]: size, ...style },\n } = unwrappedChild.props;\n unwrappedChild = React.cloneElement(unwrappedChild, {\n flexFill: undefined,\n style: {\n ...style,\n flexGrow,\n flexShrink,\n flexBasis,\n width,\n height,\n },\n });\n }\n return unwrappedChild;\n}\n\nconst isFlexible = (element: ReactElement) => {\n return element.props.style.flexGrow > 0;\n};\n\nconst canBeMadeFlexible = (element: ReactElement) => {\n const { width, height, flexGrow } = element.props.style;\n return (\n flexGrow === 0 && typeof width !== \"number\" && typeof height !== \"number\"\n );\n};\n\nconst makeFlexible = (children: ReactElement[]) => {\n return children.map((child) =>\n canBeMadeFlexible(child)\n ? React.cloneElement(child, {\n style: {\n ...child.props.style,\n flexGrow: 1,\n },\n })\n : child\n );\n};\n\nconst hasAdjacentPlaceholders = (children: ReactElement[]) => {\n if (children && children.length > 0) {\n let wasPlaceholder = getProp(children[0], \"placeholder\");\n let isPlaceholder = false;\n for (let i = 1; i < children.length; i++) {\n isPlaceholder = getProp(children[i], \"placeholder\");\n if (wasPlaceholder && isPlaceholder) {\n return true;\n }\n wasPlaceholder = isPlaceholder;\n }\n }\n};\n\nconst collapsePlaceholders = (\n container: ReactElement,\n target: ReactElement\n) => {\n const { children: componentChildren, path } = getProps(container);\n const { idx, finalStep } = nextStep(path, getProp(target, \"path\"));\n let children = componentChildren.slice() as ReactElement[];\n if (finalStep) {\n children[idx] = _collapsePlaceHolders(target);\n } else {\n children[idx] = collapsePlaceholders(children[idx], target) as ReactElement;\n }\n\n children = children.map((child, i) => resetPath(child, `${path}.${i}`));\n return React.cloneElement(container, undefined, children);\n};\n\nconst _collapsePlaceHolders = (container: ReactElement) => {\n const { children } = getProps(container);\n const newChildren = [];\n const placeholders: ReactElement[] = [];\n\n for (let i = 0; i < children.length; i++) {\n if (getProp(children[i], \"placeholder\")) {\n placeholders.push(children[i]);\n } else {\n if (placeholders.length === 1) {\n newChildren.push(placeholders.pop());\n } else if (placeholders.length > 0) {\n newChildren.push(mergePlaceholders(placeholders));\n placeholders.length = 0;\n }\n newChildren.push(children[i]);\n }\n }\n\n if (placeholders.length === 1) {\n newChildren.push(placeholders.pop());\n } else if (placeholders.length > 0) {\n newChildren.push(mergePlaceholders(placeholders));\n }\n\n const containerPath = getProp(container, \"path\");\n return React.cloneElement(\n container,\n undefined,\n newChildren.map((child, i) => resetPath(child, `${containerPath}.${i}`))\n );\n};\n\nconst mergePlaceholders = ([placeholder, ...placeholders]: ReactElement[]) => {\n const targetStyle = getProp(placeholder, \"style\");\n let { flexBasis, flexGrow, flexShrink } = targetStyle;\n for (const {\n props: { style },\n } of placeholders) {\n flexBasis += style.flexBasis;\n flexGrow = Math.max(flexGrow, style.flexGrow);\n flexShrink = Math.max(flexShrink, style.flexShrink);\n }\n return React.cloneElement(placeholder, {\n style: { ...targetStyle, flexBasis, flexGrow, flexShrink },\n });\n};\n\nconst allOtherChildrenArePlaceholders = (\n children: ReactElement[],\n path?: string\n) =>\n children.every(\n (child) =>\n getProp(child, \"placeholder\") || (path && getProp(child, \"path\") === path)\n );\n", "import { dimension } from \"@vuu-ui/vuu-utils\";\nimport React, { CSSProperties, ReactElement } from \"react\";\nimport { followPath, getProps } from \"../utils\";\nimport { LayoutResizeAction, SplitterResizeAction } from \"./layoutTypes\";\nimport { swapChild } from \"./replace-layout-element\";\n\nexport function resizeFlexChild(\n layoutRoot: ReactElement,\n { path, size }: LayoutResizeAction\n) {\n const target = followPath(layoutRoot, path, true);\n\n const { style } = getProps(target);\n\n const newStyle = {\n ...style,\n width: size,\n };\n\n // const dimension = style.flexDirection === \"column\" ? \"height\" : \"width\";\n // const replacementChildren = applySizesToChildren(children, sizes, dimension);\n\n const replacement = React.cloneElement(target, { style: newStyle });\n\n return swapChild(layoutRoot, target, replacement);\n}\n\nexport function resizeFlexChildren(\n layoutRoot: ReactElement,\n { path, sizes }: SplitterResizeAction\n) {\n const target = followPath(layoutRoot, path, true);\n const { children, style } = getProps(target);\n\n const dimension = style.flexDirection === \"column\" ? \"height\" : \"width\";\n const replacementChildren = applySizesToChildren(children, sizes, dimension);\n\n const replacement = React.cloneElement(\n target,\n undefined,\n replacementChildren\n );\n\n return swapChild(layoutRoot, target, replacement);\n}\n\nfunction applySizesToChildren(\n children: ReactElement[],\n sizes: { currentSize: number; flexBasis: number }[],\n dimension: dimension\n) {\n return children.map((child, i) => {\n const {\n style: { [dimension]: size, flexBasis: actualFlexBasis },\n } = getProps(child);\n const meta = sizes[i];\n const { currentSize, flexBasis } = meta;\n const hasCurrentSize = currentSize !== undefined;\n const newSize = hasCurrentSize ? meta.currentSize : flexBasis;\n\n if (\n newSize === undefined ||\n size === newSize ||\n actualFlexBasis === newSize\n ) {\n return child;\n }\n return React.cloneElement(child, {\n style: applySizeToChild(child.props.style, dimension, newSize),\n });\n });\n}\n\nfunction applySizeToChild(\n style: CSSProperties,\n dimension: dimension,\n newSize: number\n) {\n const hasSize = typeof style[dimension] === \"number\";\n const { flexShrink = 1, flexGrow = 1 } = style;\n return {\n ...style,\n [dimension]: hasSize ? newSize : \"auto\",\n flexBasis: hasSize ? \"auto\" : newSize,\n flexShrink,\n flexGrow,\n };\n}\n", "/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { rectTuple, uuid } from \"@vuu-ui/vuu-utils\";\nimport React, { ReactElement } from \"react\";\nimport { DropPos } from \"../drag-drop/dragDropTypes\";\nimport { DropTarget } from \"../drag-drop/DropTarget\";\nimport { ComponentRegistry } from \"../registry/ComponentRegistry\";\nimport { getProp, getProps, nextStep, resetPath, typeOf } from \"../utils\";\nimport {\n createFlexbox,\n createPlaceHolder,\n flexDirection,\n getFlexStyle,\n getIntrinsicSize,\n wrapIntrinsicSizeComponentWithFlexbox,\n} from \"./flexUtils\";\nimport { LayoutModel } from \"./layoutTypes\";\nimport { applyLayoutProps, LayoutProps } from \"./layoutUtils\";\n\nexport interface LayoutSpec {\n type: \"Stack\" | \"Flexbox\";\n flexDirection: \"column\" | \"row\";\n showTabs?: boolean;\n}\n\nconst isHtmlElement = (component: LayoutModel) => {\n const [firstLetter] = typeOf(component) as string;\n return firstLetter === firstLetter.toLowerCase();\n};\n\nexport function wrap(\n container: ReactElement,\n existingComponent: ReactElement,\n newComponent: any,\n pos: DropPos,\n clientRect?: DropTarget[\"clientRect\"],\n dropRect?: DropTarget[\"dropRect\"]\n): ReactElement {\n const { children: containerChildren, path: containerPath } =\n getProps(container);\n\n const existingComponentPath = getProp(existingComponent, \"path\");\n const { idx, finalStep } = nextStep(containerPath, existingComponentPath);\n const children = finalStep\n ? updateChildren(\n container,\n containerChildren,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n )\n : containerChildren.map((child: ReactElement, index: number) =>\n index === idx\n ? wrap(\n child,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n )\n : child\n );\n\n return React.cloneElement(container, undefined, children);\n}\n\nfunction updateChildren(\n container: LayoutModel,\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos,\n clientRect?: DropTarget[\"clientRect\"],\n dropRect?: rectTuple\n) {\n const intrinsicSize = getIntrinsicSize(newComponent);\n\n if (intrinsicSize?.width && intrinsicSize?.height) {\n if (clientRect === undefined || dropRect === undefined) {\n throw Error(\n \"wrap-layout-element, updateChildren clientRect and dropRect must both be available\"\n );\n }\n return wrapIntrinsicSizedComponent(\n containerChildren,\n existingComponent,\n newComponent,\n pos,\n clientRect,\n dropRect\n );\n }\n return wrapFlexComponent(\n container,\n containerChildren,\n existingComponent,\n newComponent,\n pos\n );\n}\n\nfunction wrapFlexComponent(\n container: LayoutModel,\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos\n) {\n const { version = 0 } = getProps(newComponent);\n const { path: existingComponentPath, title } = getProps(existingComponent);\n const {\n type,\n flexDirection,\n showTabs: showTabsProp,\n } = getLayoutSpecForWrapper(pos);\n const [style, existingComponentStyle, newComponentStyle] =\n getWrappedFlexStyles(\n type,\n existingComponent,\n newComponent,\n flexDirection,\n pos\n );\n const targetFirst = isTargetFirst(pos);\n const active = targetFirst ? 1 : 0;\n\n const newComponentProps = {\n resizeable: true,\n style: newComponentStyle,\n version: version + 1,\n };\n const resizeProp = isHtmlElement(existingComponent)\n ? \"data-resizeable\"\n : \"resizeable\";\n\n const existingComponentProps = {\n [resizeProp]: true,\n style: existingComponentStyle,\n };\n\n const showTabs = type === \"Stack\" ? { showTabs: showTabsProp } : undefined;\n const splitterSize =\n type === \"Flexbox\"\n ? {\n splitterSize:\n (typeOf(container) === \"Flexbox\" && container.props.splitterSize) ??\n undefined,\n }\n : undefined;\n\n const id = uuid();\n const wrapper = React.createElement(\n ComponentRegistry[type],\n {\n active,\n id,\n key: id,\n path: getProp(existingComponent, \"path\"),\n flexFill: getProp(existingComponent, \"flexFill\"),\n ...splitterSize,\n ...showTabs,\n style,\n title,\n resizeable: getProp(existingComponent, \"resizeable\"),\n } as LayoutProps,\n targetFirst\n ? [\n resetPath(\n existingComponent,\n `${existingComponentPath}.0`,\n existingComponentProps\n ),\n applyLayoutProps(\n React.cloneElement(newComponent, newComponentProps),\n `${existingComponentPath}.1`\n ),\n ]\n : [\n applyLayoutProps(\n React.cloneElement(newComponent, newComponentProps),\n `${existingComponentPath}.0`\n ),\n resetPath(\n existingComponent,\n `${existingComponentPath}.1`,\n existingComponentProps\n ),\n ]\n );\n return containerChildren.map((child: ReactElement) =>\n child === existingComponent ? wrapper : child\n );\n}\n\nfunction wrapIntrinsicSizedComponent(\n containerChildren: ReactElement[],\n existingComponent: ReactElement,\n newComponent: ReactElement,\n pos: DropPos,\n clientRect: DropTarget[\"clientRect\"],\n dropRect: rectTuple\n) {\n const { flexDirection } = getLayoutSpecForWrapper(pos);\n const contraDirection = flexDirection === \"column\" ? \"row\" : \"column\";\n const targetFirst = isTargetFirst(pos);\n\n const [dropLeft, dropTop, dropRight, dropBottom] = dropRect;\n const [startPlaceholder, endPlaceholder] =\n flexDirection === \"column\"\n ? [dropTop - clientRect.top, clientRect.bottom - dropBottom]\n : [dropLeft - clientRect.left, clientRect.right - dropRight];\n const pathRoot = getProp(existingComponent, \"path\");\n let pathIndex = 0;\n\n const resizeProp = isHtmlElement(existingComponent)\n ? \"data-resizeable\"\n : \"resizeable\";\n\n const wrappedChildren = [];\n if (startPlaceholder) {\n wrappedChildren.push(\n targetFirst\n ? resetPath(existingComponent, `${pathRoot}.${pathIndex++}`, {\n [resizeProp]: true,\n style: { flexBasis: startPlaceholder, flexGrow: 1, flexShrink: 1 },\n })\n : createPlaceHolder(`${pathRoot}.${pathIndex++}`, startPlaceholder, {\n flexGrow: 0,\n flexShrink: 0,\n })\n );\n }\n wrappedChildren.push(\n wrapIntrinsicSizeComponentWithFlexbox(\n newComponent,\n contraDirection,\n `${pathRoot}.${pathIndex++}`,\n clientRect,\n dropRect\n )\n );\n if (endPlaceholder) {\n wrappedChildren.push(\n targetFirst\n ? createPlaceHolder(`${pathRoot}.${pathIndex++}`, 0)\n : resetPath(existingComponent, `${pathRoot}.${pathIndex++}`, {\n [resizeProp]: true,\n style: { flexBasis: 0, flexGrow: 1, flexShrink: 1 },\n })\n );\n }\n\n const wrapper = createFlexbox(\n flexDirection,\n existingComponent.props,\n wrappedChildren,\n pathRoot\n );\n return containerChildren.map((child) =>\n child === existingComponent ? wrapper : child\n );\n}\n\nfunction getWrappedFlexStyles(\n type: string,\n existingComponent: ReactElement,\n newComponent: ReactElement,\n flexDirection: flexDirection,\n pos: DropPos\n) {\n const style = {\n ...existingComponent.props.style,\n flexDirection,\n };\n\n const dimension =\n type === \"Flexbox\" && flexDirection === \"column\" ? \"height\" : \"width\";\n const newComponentStyle = getFlexStyle(newComponent, dimension, pos);\n const existingComponentStyle = getFlexStyle(existingComponent, dimension);\n\n return [style, existingComponentStyle, newComponentStyle];\n}\n\nconst isTargetFirst = (pos: DropPos) =>\n pos.position.SouthOrEast\n ? true\n : pos?.tab?.positionRelativeToTab === \"before\"\n ? false\n : pos.position.Header\n ? true\n : false;\n\nfunction getLayoutSpecForWrapper(pos: DropPos): LayoutSpec {\n if (pos.position.Header) {\n return {\n type: \"Stack\",\n flexDirection: \"column\",\n showTabs: true,\n };\n } else {\n return {\n type: \"Flexbox\",\n flexDirection: pos.position.EastOrWest ? \"row\" : \"column\",\n };\n }\n}\n", "import { createContext, Dispatch, ReactElement } from \"react\";\nimport {\n DragStartAction,\n LayoutReducerAction,\n QueryAction,\n SaveAction,\n} from \"../layout-reducer\";\n\nconst unconfiguredLayoutProviderDispatch: LayoutProviderDispatch = (action) =>\n console.log(\n `dispatch ${action.type}, have you forgotten to provide a LayoutProvider ?`\n );\n\nexport type LayoutProviderDispatch = Dispatch<\n LayoutReducerAction | SaveAction | DragStartAction | QueryAction\n>;\n\nexport interface LayoutProviderContextProps {\n createNewChild?: (index?: number) => ReactElement;\n dispatchLayoutProvider: LayoutProviderDispatch;\n version: number;\n}\n\nexport const LayoutProviderContext = createContext<LayoutProviderContextProps>({\n dispatchLayoutProvider: unconfiguredLayoutProviderDispatch,\n version: -1,\n});\n", "import { MutableRefObject, ReactElement, useCallback, useRef } from \"react\";\nimport {\n DragDropRect,\n DragEndCallback,\n Draggable,\n DragInstructions,\n} from \"../drag-drop\";\nimport { DragStartAction } from \"../layout-reducer\";\nimport { getIntrinsicSize } from \"../layout-reducer/flexUtils\";\nimport { followPath, resolvePath } from \"../utils\";\nimport { LayoutProviderDispatch } from \"./LayoutProviderContext\";\n\nconst NO_INSTRUCTIONS = {} as DragInstructions;\nconst NO_OFFSETS: [number, number] = [0, 0];\n\ninterface CurrentDragAction extends Omit<DragStartAction, \"evt\" | \"type\"> {\n dragContainerPath: string;\n}\n\ninterface DragOperation {\n payload: ReactElement;\n originalCSS: string;\n dragRect: unknown;\n dragInstructions: DragInstructions;\n dragOffsets: [number, number];\n targetPosition: { left: number; top: number };\n}\n\nconst getDragElement = (\n rect: DragDropRect,\n id: string,\n dragElement?: HTMLElement\n): [HTMLElement, string, number, number] => {\n const wrapper = document.createElement(\"div\");\n wrapper.className = \"vuuSimpleDraggableWrapper\";\n wrapper.classList.add(\n \"vuuSimpleDraggableWrapper\",\n \"salt-theme\",\n \"salt-density-medium\"\n );\n wrapper.dataset.dragging = \"true\";\n\n const div = dragElement ?? document.createElement(\"div\");\n div.id = id;\n\n wrapper.appendChild(div);\n document.body.appendChild(wrapper);\n const cssText = `top:${rect.top}px;left:${rect.left}px;width:${rect.width}px;height:${rect.height}px;`;\n return [wrapper, cssText, rect.left, rect.top];\n};\n\nconst determineDragOffsets = (\n draggedElement: HTMLElement\n): [number, number] => {\n const { offsetParent } = draggedElement;\n if (offsetParent === null) {\n return NO_OFFSETS;\n } else {\n const { left: offsetLeft, top: offsetTop } =\n offsetParent.getBoundingClientRect();\n return [offsetLeft, offsetTop];\n }\n};\n\nexport const useLayoutDragDrop = (\n rootLayoutRef: MutableRefObject<ReactElement>,\n dispatch: LayoutProviderDispatch,\n pathToDropTarget?: string\n) => {\n const dragActionRef = useRef<CurrentDragAction>();\n const dragOperationRef = useRef<DragOperation>();\n const draggableHTMLElementRef = useRef<HTMLElement>();\n\n const handleDrag = useCallback((x, y) => {\n if (dragOperationRef.current && draggableHTMLElementRef.current) {\n const {\n dragOffsets: [offsetX, offsetY],\n targetPosition,\n } = dragOperationRef.current;\n const left = typeof x === \"number\" ? x - offsetX : targetPosition.left;\n const top = typeof y === \"number\" ? y - offsetY : targetPosition.top;\n if (left !== targetPosition.left || top !== targetPosition.top) {\n dragOperationRef.current.targetPosition.left = left;\n dragOperationRef.current.targetPosition.top = top;\n draggableHTMLElementRef.current.style.top = top + \"px\";\n draggableHTMLElementRef.current.style.left = left + \"px\";\n }\n }\n }, []);\n\n const handleDrop: DragEndCallback = useCallback(\n (dropTarget) => {\n if (dragOperationRef.current) {\n const {\n dragInstructions,\n payload: draggedReactElement,\n originalCSS,\n } = dragOperationRef.current;\n\n if (dropTarget) {\n dispatch({\n type: \"drag-drop\",\n draggedReactElement,\n dragInstructions,\n dropTarget,\n });\n }\n\n if (draggableHTMLElementRef.current) {\n if (!dropTarget && dragInstructions.DriftHomeIfNoDropTarget) {\n console.log(\"drift back to start\");\n document.body.removeChild(draggableHTMLElementRef.current);\n } else if (dragInstructions.RemoveDraggableOnDragEnd) {\n document.body.removeChild(draggableHTMLElementRef.current);\n } else {\n draggableHTMLElementRef.current.style.cssText = originalCSS;\n delete draggableHTMLElementRef.current.dataset.dragging;\n }\n }\n\n dragActionRef.current = undefined;\n dragOperationRef.current = undefined;\n draggableHTMLElementRef.current = undefined;\n }\n },\n [dispatch]\n );\n\n const handleDragStart = useCallback(\n (evt: MouseEvent) => {\n if (dragActionRef.current) {\n const {\n payload: component,\n dragContainerPath,\n dragElement,\n dragRect,\n instructions = NO_INSTRUCTIONS,\n path,\n } = dragActionRef.current;\n const { current: rootLayout } = rootLayoutRef;\n const dragPos = { x: evt.clientX, y: evt.clientY };\n const dragPayload = component ?? followPath(rootLayout, path, true);\n const { id: dragPayloadId } = dragPayload.props;\n const intrinsicSize = getIntrinsicSize(dragPayload);\n let originalCSS = \"\",\n dragCSS = \"\",\n dragTransform = \"\";\n\n let dragStartLeft = -1;\n let dragStartTop = -1;\n let dragOffsets: [number, number] = NO_OFFSETS;\n\n let element = document.getElementById(dragPayloadId);\n\n if (element === null) {\n [element, dragCSS, dragStartLeft, dragStartTop] = getDragElement(\n dragRect,\n dragPayloadId,\n dragElement\n );\n } else {\n dragOffsets = determineDragOffsets(element);\n const [offsetLeft, offsetTop] = dragOffsets;\n const { width, height, left, top } = element.getBoundingClientRect();\n dragStartLeft = left - offsetLeft;\n dragStartTop = top - offsetTop;\n dragCSS = `width:${width}px;height:${height}px;left:${dragStartLeft}px;top:${dragStartTop}px;z-index: 100;background-color:#ccc;opacity: 0.6;`;\n element.dataset.dragging = \"true\";\n originalCSS = element.style.cssText;\n }\n\n dragTransform = Draggable.initDrag(\n rootLayoutRef.current,\n dragContainerPath,\n dragRect,\n dragPos,\n {\n drag: handleDrag,\n drop: handleDrop,\n },\n intrinsicSize\n // dropTargets\n );\n\n element.style.cssText = dragCSS + dragTransform;\n draggableHTMLElementRef.current = element;\n\n dragOperationRef.current = {\n payload: dragPayload,\n originalCSS,\n dragRect,\n dragOffsets,\n dragInstructions: instructions,\n targetPosition: { left: dragStartLeft, top: dragStartTop },\n };\n }\n },\n [handleDrag, handleDrop, rootLayoutRef]\n );\n\n const prepareToDrag = useCallback(\n (action: DragStartAction) => {\n const { evt, ...options } = action;\n dragActionRef.current = {\n ...options,\n dragContainerPath: resolvePath(rootLayoutRef.current, pathToDropTarget),\n };\n Draggable.handleMousedown(evt, handleDragStart, options.instructions);\n },\n [handleDragStart, pathToDropTarget, rootLayoutRef]\n );\n\n return prepareToDrag;\n};\n", "import { useId } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Header as VuuHeader } from \"../layout-header/Header\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { useView } from \"./useView\";\nimport { useViewResize } from \"./useViewResize\";\nimport { ViewContext, ViewContextAPI } from \"./ViewContext\";\nimport { ViewProps } from \"./viewTypes\";\n\nimport \"./View.css\";\n\nconst classBase = \"vuuView\";\n\ntype Props = { [key: string]: unknown };\n\nconst getProps = (state?: Props, props?: Props) => {\n if (state && props) {\n return {\n ...state,\n ...props,\n };\n } else return state || props;\n};\n\n/**\n * View is the leaf-level entity managed by the Vuu layout system. It may represent a component\n * or a group of components. It also offers an API (via useViewContext) for persistence.\n */\nconst View = forwardRef(function View(\n props: ViewProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const {\n Header = VuuHeader,\n children,\n className,\n collapsed,\n closeable,\n \"data-path\": dataPath,\n \"data-resizeable\": dataResizeable,\n dropTargets,\n expanded,\n flexFill,\n id: idProp,\n header,\n orientation = \"horizontal\",\n path = dataPath,\n resize = \"responsive\",\n resizeable = dataResizeable,\n tearOut,\n style = {},\n title: titleProp,\n ...restProps\n } = props;\n\n const id = useId(idProp);\n const rootRef = useRef<HTMLDivElement>(null);\n const mainRef = useRef<HTMLDivElement>(null);\n const [componentProps, _setComponentProps] = useState<Props>();\n const {\n contributions,\n dispatchViewAction,\n load,\n loadSession,\n onConfigChange,\n onEditTitle,\n purge,\n restoredState,\n save,\n saveSession,\n title,\n } = useView({\n id,\n rootRef,\n path,\n dropTargets,\n title: titleProp,\n });\n\n useViewResize({ mainRef, resize, rootRef });\n\n const setComponentProps = useCallback((props?: Props) => {\n _setComponentProps(props);\n }, []);\n\n const getContent = () => {\n if (React.isValidElement(children) && (restoredState || componentProps)) {\n return React.cloneElement(\n children,\n getProps(restoredState, componentProps)\n );\n }\n return children;\n };\n\n const viewContextValue: ViewContextAPI = useMemo(\n () => ({\n dispatch: dispatchViewAction,\n id,\n path,\n title,\n load,\n loadSession,\n onConfigChange,\n purge,\n save,\n saveSession,\n setComponentProps,\n }),\n [\n dispatchViewAction,\n id,\n load,\n loadSession,\n onConfigChange,\n path,\n purge,\n save,\n saveSession,\n setComponentProps,\n title,\n ]\n );\n\n const headerProps = typeof header === \"object\" ? header : {};\n\n return (\n <div\n {...restProps}\n className={cx(classBase, className, {\n [`${classBase}-collapsed`]: collapsed,\n [`${classBase}-expanded`]: expanded,\n [`${classBase}-resize-defer`]: resize === \"defer\",\n })}\n data-resizeable={resizeable}\n id={id}\n ref={useForkRef(forwardedRef, rootRef)}\n style={style}\n tabIndex={-1}\n >\n <ViewContext.Provider value={viewContextValue}>\n {header ? (\n <Header\n {...headerProps}\n collapsed={collapsed}\n contributions={contributions}\n expanded={expanded}\n closeable={closeable}\n onEditTitle={onEditTitle}\n orientation={orientation}\n tearOut={tearOut}\n title={title}\n />\n ) : null}\n <div className={`${classBase}-main`} ref={mainRef}>\n {getContent()}\n </div>\n </ViewContext.Provider>\n </div>\n );\n});\nView.displayName = \"View\";\n\ninterface ViewComponentType {\n (\n props: ViewProps & {\n ref?: ForwardedRef<HTMLDivElement>;\n }\n ): ReactElement<ViewProps>;\n displayName?: string;\n}\n\nconst MemoView = React.memo(View) as ViewComponentType;\n\nMemoView.displayName = \"View\";\n\nregisterComponent(\"View\", MemoView, \"view\");\n\nexport { MemoView as View };\n", "import { EditableLabel } from \"@vuu-ui/vuu-ui-controls\";\nimport { Button } from \"@salt-ds/core\";\nimport { default as classnames, default as cx } from \"clsx\";\nimport {\n cloneElement,\n HTMLAttributes,\n KeyboardEvent,\n MouseEvent,\n ReactElement,\n useRef,\n useState,\n} from \"react\";\nimport { Contribution, useViewDispatch } from \"../layout-view\";\n\nimport \"./Header.css\";\n\nexport interface HeaderProps extends HTMLAttributes<HTMLDivElement> {\n collapsed?: boolean;\n contributions?: Contribution[];\n expanded?: boolean;\n closeable?: boolean;\n onEditTitle: (value: string) => void;\n orientation?: \"horizontal\" | \"vertical\";\n tearOut?: boolean;\n}\n\nconst classBase = \"vuuHeader\";\n\nexport const Header = ({\n className: classNameProp,\n contributions,\n collapsed,\n closeable,\n onEditTitle,\n orientation: orientationProp = \"horizontal\",\n style,\n title = \"Untitled\",\n}: HeaderProps) => {\n const labelFieldRef = useRef<HTMLDivElement>(null);\n const [value, setValue] = useState<string>(title);\n const [editing, setEditing] = useState<boolean>(false);\n\n const viewDispatch = useViewDispatch();\n const handleClose = (evt: MouseEvent) =>\n viewDispatch?.({ type: \"remove\" }, evt);\n\n const handleTitleMouseDown = () => {\n labelFieldRef.current?.focus();\n };\n\n const handleButtonMouseDown = (evt: MouseEvent) => {\n // do not allow drag to be initiated\n evt.stopPropagation();\n };\n\n const orientation = collapsed || orientationProp;\n\n const className = classnames(\n classBase,\n classNameProp,\n `${classBase}-${orientation}`\n );\n\n const handleEnterEditMode = () => {\n setEditing(true);\n };\n\n const handleTitleKeyDown = (evt: KeyboardEvent<HTMLDivElement>) => {\n if (evt.key === \"Enter\") {\n setEditing(true);\n }\n };\n\n const handleExitEditMode = (\n originalValue = \"\",\n finalValue = \"\",\n allowDeactivation = true,\n editCancelled = false\n ) => {\n setEditing(false);\n if (editCancelled) {\n setValue(originalValue);\n } else if (finalValue !== originalValue) {\n setValue(finalValue);\n onEditTitle?.(finalValue);\n }\n if (allowDeactivation === false) {\n labelFieldRef.current?.focus();\n }\n };\n\n const handleMouseDown = (e: MouseEvent) => {\n viewDispatch?.({ type: \"mousedown\" }, e);\n };\n\n const toolbarItems: ReactElement[] = [];\n const postTitleContributedItems: ReactElement[] = [];\n const actionButtons: ReactElement[] = [];\n\n contributions?.forEach((contribution, i) => {\n switch (contribution.location) {\n case \"pre-title\":\n toolbarItems.push(cloneElement(contribution.content, { key: i }));\n break;\n default:\n postTitleContributedItems.push(\n cloneElement(contribution.content, { key: i })\n );\n }\n });\n\n title &&\n toolbarItems.push(\n <EditableLabel\n className={`${classBase}-title`}\n editing={editing}\n key=\"title\"\n value={value}\n onChange={setValue}\n onMouseDownCapture={handleTitleMouseDown}\n onEnterEditMode={handleEnterEditMode}\n onExitEditMode={handleExitEditMode}\n onKeyDown={handleTitleKeyDown}\n ref={labelFieldRef}\n tabIndex={0}\n />\n );\n\n closeable &&\n actionButtons.push(\n <Button\n data-icon=\"close\"\n key=\"close\"\n onClick={handleClose}\n onMouseDown={handleButtonMouseDown}\n variant=\"secondary\"\n />\n );\n\n postTitleContributedItems.length > 0 &&\n toolbarItems.push(\n <div className=\"vuuTooltrayProxy\" data-align=\"end\" key=\"contributions\">\n {postTitleContributedItems}\n </div>\n );\n\n actionButtons.length > 0 &&\n toolbarItems.push(\n <div className=\"vuuTooltrayProxy\" data-align=\"end\" key=\"actions\">\n {actionButtons}\n </div>\n );\n\n return (\n <div\n className={cx(\"vuuToolbarProxy\", className)}\n style={style}\n onMouseDown={handleMouseDown}\n >\n {toolbarItems}\n {/* \n {collapsed === false ? (\n <ActionButton\n aria-label=\"Minimize View\"\n actionId=\"minimize\"\n iconName=\"minimize\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {collapsed ? (\n <ActionButton\n aria-label=\"Restore View\"\n actionId=\"restore\"\n iconName=\"double-chevron-right\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {expanded === false ? (\n <ActionButton\n aria-label=\"Maximize View\"\n actionId=\"maximize\"\n iconName=\"maximize\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {expanded ? (\n <ActionButton\n aria-label=\"Restore View\"\n actionId=\"restore\"\n iconName=\"restore\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {tearOut ? (\n <ActionButton\n aria-label=\"Tear out View\"\n actionId=\"tearout\"\n iconName=\"tear-out\"\n onClick={handleAction}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null}\n {closeable ? (\n <Button\n aria-label=\"close\"\n data-icon\n onClick={handleClose}\n onMouseDown={handleButtonMouseDown}\n />\n ) : null} */}\n </div>\n );\n};\n", "import { RefObject, useCallback, useMemo } from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { useViewActionDispatcher } from \"./useViewActionDispatcher\";\n\nexport interface ViewHookProps {\n id: string;\n rootRef: RefObject<HTMLDivElement>;\n path?: string;\n dropTargets?: string[];\n title?: string;\n}\n\nexport const useView = ({\n id,\n rootRef,\n path,\n dropTargets,\n title: titleProp,\n}: ViewHookProps) => {\n const layoutDispatch = useLayoutProviderDispatch();\n\n const {\n loadState,\n loadSessionState,\n purgeState,\n saveState,\n saveSessionState,\n } = usePersistentState();\n\n const [dispatchViewAction, contributions] = useViewActionDispatcher(\n id,\n rootRef,\n path,\n dropTargets\n );\n\n const title = useMemo(\n () => loadState(\"view-title\") ?? titleProp,\n [loadState, titleProp]\n );\n\n const onEditTitle = useCallback(\n (title: string) => {\n if (path) {\n layoutDispatch({ type: \"set-title\", path, title });\n }\n },\n [layoutDispatch, path]\n );\n\n const restoredState = useMemo(() => loadState(id), [id, loadState]);\n\n const load = useCallback(\n (key?: string) => loadState(id, key),\n [id, loadState]\n );\n\n const purge = useCallback(\n (key) => {\n purgeState(id, key);\n layoutDispatch({ type: \"save\" });\n },\n [id, layoutDispatch, purgeState]\n );\n\n const save = useCallback(\n (state, key) => {\n saveState(id, key, state);\n layoutDispatch({ type: \"save\" });\n },\n [id, layoutDispatch, saveState]\n );\n const loadSession = useCallback(\n (key?: string) => loadSessionState(id, key),\n [id, loadSessionState]\n );\n const saveSession = useCallback(\n (state, key) => saveSessionState(id, key, state),\n [id, saveSessionState]\n );\n\n const onConfigChange = useCallback(\n ({ type: key, ...config }) => {\n const { [key]: data } = config;\n save(data, key);\n },\n [save]\n );\n\n return {\n contributions,\n dispatchViewAction,\n load,\n loadSession,\n onConfigChange,\n onEditTitle,\n purge,\n restoredState,\n save,\n saveSession,\n title,\n };\n};\n", "import { RefObject, useCallback, useEffect, useRef, useState } from \"react\";\nimport { useResizeObserver } from \"./useResizeObserver\";\nimport {\n BreakPointRamp,\n breakpointRamp,\n getBreakPoints as getDocumentBreakpoints,\n} from \"./breakpoints\";\nimport { BreakPoint, BreakPointsProp } from \"../flexbox/flexboxTypes\";\n\nconst EMPTY_ARRAY: BreakPoint[] = [];\n\nexport interface BreakpointsHookProps {\n breakPoints?: BreakPointsProp;\n smallerThan?: string;\n}\n\n// TODO how do we cater for smallerThan/greaterThan breakpoints\nexport const useBreakpoints = (\n { breakPoints: breakPointsProp, smallerThan }: BreakpointsHookProps,\n ref: RefObject<HTMLElement>\n) => {\n const [breakpointMatch, setBreakpointmatch] = useState(\n smallerThan ? false : \"lg\"\n );\n const bodyRef = useRef(document.body);\n const breakPointsRef = useRef<BreakPointRamp[]>(\n breakPointsProp ? breakpointRamp(breakPointsProp) : getDocumentBreakpoints()\n );\n\n // TODO how do we identify the default\n const sizeRef = useRef(\"lg\");\n\n const stopFromMinWidth = useCallback(\n (w) => {\n if (breakPointsRef.current) {\n for (const [name, size] of breakPointsRef.current) {\n if (w >= size) {\n return name;\n }\n }\n }\n },\n [breakPointsRef]\n );\n\n const matchSizeAgainstBreakpoints = useCallback(\n (width) => {\n if (smallerThan) {\n const breakPointRamp = breakPointsRef.current.find(\n ([name]: BreakPointRamp) => name === smallerThan\n );\n if (breakPointRamp) {\n const [, , maxValue] = breakPointRamp;\n return width < maxValue;\n }\n } else {\n return stopFromMinWidth(width);\n }\n // is this right ?\n return width;\n },\n [smallerThan, stopFromMinWidth]\n );\n\n // TODO need to make the dimension a config\n useResizeObserver(\n ref || bodyRef,\n breakPointsRef.current ? [\"width\"] : EMPTY_ARRAY,\n ({ width: measuredWidth }: { width?: number }) => {\n const result = matchSizeAgainstBreakpoints(measuredWidth);\n if (result !== sizeRef.current) {\n sizeRef.current = result;\n setBreakpointmatch(result);\n }\n },\n true\n );\n\n useEffect(() => {\n const target = ref || bodyRef;\n if (target.current) {\n const prevSize = sizeRef.current;\n if (breakPointsRef.current) {\n // We're measuring here when the resizeObserver has also measured\n // There isn't a convenient way to get the Resizeobserver to\n // notify initial size - that's not really its job, unless we\n // set a flag ?\n const { clientWidth } = target.current;\n const result = matchSizeAgainstBreakpoints(clientWidth);\n sizeRef.current = result;\n // If initial size of ref does not match the default, notify client after render\n if (result !== prevSize) {\n setBreakpointmatch(result);\n }\n }\n }\n }, [setBreakpointmatch, matchSizeAgainstBreakpoints, ref]);\n\n // No, just ass the class directly to the ref, no need to render\n return breakpointMatch;\n};\n", "/* eslint-disable no-restricted-syntax */\nimport { useCallback, useLayoutEffect, useRef, RefObject } from \"react\";\nexport const WidthHeight = [\"height\", \"width\"];\nexport const HeightOnly = [\"height\"];\nexport const WidthOnly = [\"width\"];\n\nexport type measurements<T = string | number> = {\n height?: T;\n scrollHeight?: T;\n scrollWidth?: T;\n width?: T;\n};\ntype measuredDimension = keyof measurements<number>;\n\nexport type ResizeHandler = (measurements: measurements<number>) => void;\n\ntype observedDetails = {\n onResize?: ResizeHandler;\n measurements: measurements<number>;\n};\nconst observedMap = new WeakMap<HTMLElement, observedDetails>();\n\nconst getTargetSize = (\n element: HTMLElement,\n contentRect: DOMRectReadOnly,\n dimension: measuredDimension\n): number => {\n switch (dimension) {\n case \"height\":\n return contentRect.height;\n case \"scrollHeight\":\n return element.scrollHeight;\n case \"scrollWidth\":\n return element.scrollWidth;\n case \"width\":\n return contentRect.width;\n default:\n return 0;\n }\n};\n\nexport const resizeObserver = new ResizeObserver(\n (entries: ResizeObserverEntry[]) => {\n for (const entry of entries) {\n const { target, contentRect } = entry;\n const observedTarget = observedMap.get(target as HTMLElement);\n if (observedTarget) {\n const { onResize, measurements } = observedTarget;\n let sizeChanged = false;\n for (const [dimension, size] of Object.entries(measurements)) {\n const newSize = getTargetSize(\n target as HTMLElement,\n contentRect,\n dimension as measuredDimension\n );\n if (newSize !== size) {\n sizeChanged = true;\n measurements[dimension as measuredDimension] = newSize;\n }\n }\n if (sizeChanged) {\n onResize && onResize(measurements);\n }\n }\n }\n }\n);\n\n// TODO use an optional lag (default to false) to ask to fire onResize\n// with initial size\n// Note asking for scrollHeight alone will not trigger onResize, this is only triggered by height,\n// with scrollHeight returned as an auxilliary value\nexport function useResizeObserver(\n ref: RefObject<Element | HTMLElement | null>,\n dimensions: string[],\n onResize: ResizeHandler,\n reportInitialSize = false\n): void {\n const dimensionsRef = useRef(dimensions);\n const measure = useCallback((target: HTMLElement): measurements<number> => {\n const rect = target.getBoundingClientRect();\n return dimensionsRef.current.reduce(\n (map: { [key: string]: number }, dim) => {\n map[dim] = getTargetSize(target, rect, dim as measuredDimension);\n return map;\n },\n {}\n );\n }, []);\n\n // TODO use ref to store resizeHandler here\n // resize handler registered with REsizeObserver will never change\n // use ref to store user onResize callback here\n // resizeHandler will call user callback.current\n\n // Keep this effect separate in case user inadvertently passes different\n // dimensions or callback instance each time - we only ever want to\n // initiate new observation when ref changes.\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n let cleanedUp = false;\n\n async function registerObserver() {\n // Create the map entry immediately. useEffect may fire below\n // before fonts are ready and attempt to update entry\n observedMap.set(target, { measurements: {} as measurements<number> });\n cleanedUp = false;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const { fonts } = document as any;\n if (fonts) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n await fonts.ready;\n }\n if (!cleanedUp) {\n const observedTarget = observedMap.get(target);\n if (observedTarget) {\n const measurements = measure(target);\n observedTarget.measurements = measurements;\n resizeObserver.observe(target);\n if (reportInitialSize) {\n onResize(measurements);\n }\n }\n }\n }\n\n if (target) {\n // TODO might we want multiple callers to attach a listener to the same element ?\n if (observedMap.has(target)) {\n throw Error(\n \"useResizeObserver attemping to observe same element twice\"\n );\n }\n void registerObserver();\n }\n return () => {\n if (target && observedMap.has(target)) {\n resizeObserver.unobserve(target);\n observedMap.delete(target);\n cleanedUp = true;\n }\n };\n }, [ref, measure, reportInitialSize, onResize]);\n\n useLayoutEffect(() => {\n const target = ref.current as HTMLElement;\n const record = observedMap.get(target);\n if (record) {\n if (dimensionsRef.current !== dimensions) {\n dimensionsRef.current = dimensions;\n const measurements = measure(target);\n record.measurements = measurements;\n }\n // Might not have changed, but no harm ...\n record.onResize = onResize;\n }\n }, [dimensions, measure, ref, onResize]);\n\n // TODO might be a good idea to ref and return the current measurememnts. That way, derived hooks\n // e.g useBreakpoints don't have to measure and client cn make onResize callback simpler\n}\n", "// should we have some global; defaults ?\n\nimport { BreakPointsProp } from \"../flexbox/flexboxTypes\";\n\nexport type BreakPointRamp = [string, number, number];\n\nfunction breakpointReader(\n themeName: string,\n defaultBreakpoints?: BreakPointsProp\n) {\n //TODO ownerDocument\n const themeRoot = document.body.querySelector(`.${themeName}`);\n const handler = {\n get: function (style: CSSStyleDeclaration, stopName: string) {\n const val = style.getPropertyValue(\n // lets assume we have the following naming convention\n `--${themeName}-breakpoint-${stopName}`\n );\n return val ? parseInt(val) : undefined;\n },\n };\n\n return themeRoot\n ? new Proxy(getComputedStyle(themeRoot), handler)\n : defaultBreakpoints ?? {};\n}\n\nconst byDescendingStopSize = (\n [, s1]: [string, number],\n [, s2]: [string, number]\n) => s2 - s1;\n\n// These are assumed to be min-width (aka mobile-first) stops, we could take a\n// paramneter to support max-width as well ?\n// return [stopName, minWidth, maxWidth]\nexport const breakpointRamp = (\n breakpoints: BreakPointsProp\n): BreakPointRamp[] =>\n Object.entries(breakpoints)\n .sort(byDescendingStopSize)\n .map(([name, value], i, all) => [\n name,\n value,\n i < all.length - 1 ? all[i + 1][1] : 9999,\n ]);\n\nlet documentBreakpoints: BreakPointRamp[] | null = null;\n\nconst loadBreakpoints = (themeName = \"salt\") => {\n // TODO would be nice to read these breakpoint labels from a css variable to\n // avoid hard-coding them here ?\n const { xs, sm, md, lg, xl } = breakpointReader(themeName) as BreakPointsProp;\n return breakpointRamp({ xs, sm, md, lg, xl });\n};\n\n//TODO support multiple themes loaded\nexport const getBreakPoints = (themeName?: string) => {\n if (documentBreakpoints === null) {\n documentBreakpoints = loadBreakpoints(themeName);\n }\n return documentBreakpoints;\n};\n", "const COLLAPSIBLE = 'data-collapsible';\n\nconst RESPONSIVE_ATTRIBUTE: { [key: string]: boolean } = {\n [COLLAPSIBLE]: true,\n 'data-pad-start': true,\n 'data-pad-end': true\n};\n\nexport const isResponsiveAttribute = (propName: string): boolean =>\n RESPONSIVE_ATTRIBUTE[propName] ?? false;\n\nconst isCollapsible = (propName: string) => propName === COLLAPSIBLE;\n\nconst COLLAPSIBLE_VALUE: { [key: string]: string } = {\n dynamic: 'dynamic',\n instant: 'instant',\n true: 'instant'\n};\n\nconst collapsibleValue = (value: string) => COLLAPSIBLE_VALUE[value] ?? 'none';\n\ntype Props = { [key: string]: any };\nexport const extractResponsiveProps = (props: Props) => {\n return Object.keys(props).reduce<[Props, Props]>(\n (result, propName) => {\n const [toolbarProps, rest] = result;\n if (isResponsiveAttribute(propName)) {\n const value = isCollapsible(propName) ? collapsibleValue(props[propName]) : props[propName];\n\n toolbarProps[propName] = value;\n rest[propName] = undefined;\n }\n return result;\n },\n [{}, {}]\n );\n};\n", "import { useResizeObserver, WidthHeight } from \"../responsive\";\nimport { RefObject, useCallback, useRef } from \"react\";\n\nconst NO_MEASUREMENT: string[] = [];\n\ntype size = {\n height?: number;\n width?: number;\n};\n\nexport interface ViewResizeHookProps {\n mainRef: RefObject<HTMLDivElement>;\n resize?: \"defer\" | \"responsive\";\n rootRef: RefObject<HTMLDivElement>;\n}\n\nexport const useViewResize = ({\n mainRef,\n resize = \"responsive\",\n rootRef,\n}: ViewResizeHookProps) => {\n const deferResize = resize === \"defer\";\n\n const mainSize = useRef<size>({});\n const resizeHandle = useRef<number>();\n\n const setMainSize = useCallback(() => {\n if (mainRef.current) {\n mainRef.current.style.height = mainSize.current.height + \"px\";\n mainRef.current.style.width = mainSize.current.width + \"px\";\n }\n resizeHandle.current = undefined;\n }, [mainRef]);\n\n const onResize = useCallback(\n ({ height, width }) => {\n mainSize.current.height = height;\n mainSize.current.width = width;\n if (resizeHandle.current !== null) {\n clearTimeout(resizeHandle.current);\n }\n resizeHandle.current = window.setTimeout(setMainSize, 40);\n },\n [setMainSize]\n );\n\n useResizeObserver(\n rootRef,\n deferResize ? WidthHeight : NO_MEASUREMENT,\n onResize,\n deferResize\n );\n};\n", "import React, { SyntheticEvent, useContext } from \"react\";\nimport { ViewAction } from \"./viewTypes\";\n\nexport type QueryReponse = { [key: string]: unknown };\n\nexport type ViewDispatch = <Action extends ViewAction = ViewAction>(\n action: Action,\n evt?: SyntheticEvent\n) => Promise<boolean | QueryReponse | void>;\n\n/**\n * This API is available to any Feature hosted within Vuu (as all Features are wrapped\n * with View component). It offers metadata about the View as well as access to the\n * Vuu persistencew API;\n */\nexport interface ViewContextAPI {\n /**\n * dispatcher for View actions. These are a subset of LayoutActions, specifically for\n * View manipulation\n */\n dispatch?: ViewDispatch | null;\n id?: string;\n load?: (key?: string) => unknown;\n loadSession?: (key?: string) => unknown;\n onConfigChange?: (config: unknown) => void;\n path?: string;\n purge?: (key: string) => void;\n save?: (state: unknown, key: string) => void;\n saveSession?: (state: unknown, key: string) => void;\n setComponentProps: (props: { [key: string]: unknown }) => void;\n title?: string;\n}\n\nconst NO_CONTEXT = { dispatch: null } as ViewContextAPI;\nexport const ViewContext = React.createContext<ViewContextAPI>(NO_CONTEXT);\n\nexport const useViewDispatch = () => {\n const context = useContext(ViewContext);\n return context?.dispatch ?? null;\n};\n\nexport const useViewContext = () => useContext(ViewContext);\n", "import cx from \"clsx\";\nimport React, {\n HTMLAttributes,\n KeyboardEvent,\n useCallback,\n useRef,\n useState,\n} from \"react\";\n\nimport \"./Splitter.css\";\n\nconst classBase = \"vuuSplitter\";\n\nexport type SplitterDragStartHandler = (index: number) => void;\nexport type SplitterDragHandler = (index: number, distance: number) => void;\nexport type SplitterDragEndHandler = () => void;\n\nexport interface SplitterProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onDrag\" | \"onDragStart\"> {\n //TODO change to alignment (vertical | horizontal)\n column: boolean;\n index: number;\n onDragStart: SplitterDragStartHandler;\n onDrag: SplitterDragHandler;\n onDragEnd: SplitterDragEndHandler;\n}\n\nexport const Splitter = React.memo(function Splitter({\n column,\n index,\n onDrag,\n onDragEnd,\n onDragStart,\n style,\n}: SplitterProps) {\n const ignoreClick = useRef<boolean>();\n const rootRef = useRef<HTMLDivElement>(null);\n const lastPos = useRef<number>(0);\n\n const [active, setActive] = useState(false);\n\n const handleKeyDownDrag = useCallback(\n ({ key, shiftKey }) => {\n const distance = shiftKey ? 10 : 1;\n if (column && key === \"ArrowDown\") {\n onDrag(index, distance);\n } else if (column && key === \"ArrowUp\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowLeft\") {\n onDrag(index, -distance);\n } else if (!column && key === \"ArrowRight\") {\n onDrag(index, distance);\n }\n },\n [column, index, onDrag]\n );\n\n const handleKeyDownInitDrag = useCallback(\n (evt) => {\n const { key } = evt;\n const horizontalMove = key === \"ArrowLeft\" || key === \"ArrowRight\";\n const verticalMove = key === \"ArrowUp\" || key === \"ArrowDown\";\n if ((column && verticalMove) || (!column && horizontalMove)) {\n onDragStart(index);\n handleKeyDownDrag(evt);\n keyDownHandlerRef.current = handleKeyDownDrag;\n }\n },\n [column, handleKeyDownDrag, index, onDragStart]\n );\n\n const keyDownHandlerRef = useRef(handleKeyDownInitDrag);\n const handleKeyDown = (evt: KeyboardEvent) => keyDownHandlerRef.current(evt);\n\n const handleMouseMove = useCallback(\n (e) => {\n ignoreClick.current = true;\n const pos = e[column ? \"clientY\" : \"clientX\"];\n const diff = pos - lastPos.current;\n if (pos && pos !== lastPos.current) {\n onDrag(index, diff);\n }\n lastPos.current = pos;\n },\n [column, index, onDrag]\n );\n\n const handleMouseUp = useCallback(() => {\n window.removeEventListener(\"mousemove\", handleMouseMove, false);\n window.removeEventListener(\"mouseup\", handleMouseUp, false);\n onDragEnd();\n setActive(false);\n rootRef.current?.focus();\n }, [handleMouseMove, onDragEnd, setActive]);\n\n const handleMouseDown = useCallback(\n (e) => {\n lastPos.current = column ? e.clientY : e.clientX;\n onDragStart(index);\n window.addEventListener(\"mousemove\", handleMouseMove, false);\n window.addEventListener(\"mouseup\", handleMouseUp, false);\n e.preventDefault();\n setActive(true);\n },\n [column, handleMouseMove, handleMouseUp, index, onDragStart, setActive]\n );\n\n const handleClick = () => {\n if (ignoreClick.current) {\n ignoreClick.current = false;\n } else {\n rootRef.current?.focus();\n }\n };\n\n const handleBlur = () => {\n keyDownHandlerRef.current = handleKeyDownInitDrag;\n };\n\n const className = cx(classBase, {\n [`${classBase}-active`]: active,\n [`${classBase}-column`]: column,\n });\n return (\n <div\n className={className}\n data-splitter\n ref={rootRef}\n role=\"separator\"\n style={style}\n onBlur={handleBlur}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n onMouseDown={handleMouseDown}\n tabIndex={0}\n >\n <div className={`${classBase}-grab-zone`} />\n </div>\n );\n});\n", "import { ReactElement } from \"react\";\nimport {\n getIntrinsicSize,\n hasUnboundedFlexStyle,\n} from \"../layout-reducer/flexUtils\";\nimport { getProp } from \"../utils\";\nimport type { BreakPoint, ContentMeta } from \"./flexboxTypes\";\n\nconst NO_INTRINSIC_SIZE: {\n height?: number;\n width?: number;\n} = {};\n\nexport const SPLITTER = 1;\nexport const PLACEHOLDER = 2;\n\nconst isIntrinsicallySized = (item: ContentMeta) =>\n typeof item.intrinsicSize === \"number\";\n\nconst getBreakPointValues = (\n breakPoints: BreakPoint[],\n component: ReactElement\n) => {\n const values: { [key: string]: number | undefined } = {};\n breakPoints.forEach((breakPoint) => {\n values[breakPoint] = getProp(component, breakPoint);\n });\n return values;\n};\n\nexport const gatherChildMeta = (\n children: ReactElement[],\n dimension: \"width\" | \"height\",\n breakPoints?: BreakPoint[]\n) => {\n return children.map((child, index) => {\n const resizeable = getProp(child, \"resizeable\");\n const { [dimension]: intrinsicSize } =\n getIntrinsicSize(child) ?? NO_INTRINSIC_SIZE;\n const flexOpen = hasUnboundedFlexStyle(child);\n if (breakPoints) {\n return {\n index,\n flexOpen,\n intrinsicSize,\n resizeable,\n ...getBreakPointValues(breakPoints, child),\n };\n } else {\n return { index, flexOpen, intrinsicSize, resizeable };\n }\n });\n};\n\n// Splitters are inserted AFTER the associated index, so\n// never a splitter in last position.\n// Placeholder goes before (first) OR after(last) index\nexport const findSplitterAndPlaceholderPositions = (\n childMeta: ContentMeta[]\n) => {\n const count = childMeta.length;\n const allIntrinsic = childMeta.every(isIntrinsicallySized);\n const splitterPositions = Array(count).fill(0);\n if (allIntrinsic && count > 0) {\n splitterPositions[0] = PLACEHOLDER;\n splitterPositions[count - 1] = PLACEHOLDER;\n }\n if (count < 2) {\n return splitterPositions;\n } else {\n // 1) From the left, check each item.\n // Once we hit a resizable item, set this index and all subsequent indices,\n // except for last, to SPLITTER\n for (let i = 0, resizeablesLeft = 0; i < count - 1; i++) {\n if (childMeta[i].resizeable && !resizeablesLeft) {\n resizeablesLeft = SPLITTER;\n }\n splitterPositions[i] += resizeablesLeft;\n }\n // 2) Now check from the right. Undo splitter insertion until we reach a point\n // where there is a resizeable to our right.\n for (let i = count - 1; i > 0; i--) {\n if (splitterPositions[i] & SPLITTER) {\n splitterPositions[i] -= SPLITTER;\n }\n if (childMeta[i].resizeable) {\n break;\n }\n }\n return splitterPositions;\n }\n};\n\nexport const identifyResizeParties = (\n contentMeta: ContentMeta[],\n idx: number\n) => {\n const idx1 = getLeadingResizeablePos(contentMeta, idx);\n const idx2 = getTrailingResizeablePos(contentMeta, idx);\n const participants = idx1 !== -1 && idx2 !== -1 ? [idx1, idx2] : undefined;\n const bystanders = identifyResizeBystanders(contentMeta, participants);\n return [participants, bystanders];\n};\n\nfunction identifyResizeBystanders(\n contentMeta: ContentMeta[],\n participants?: number[]\n) {\n if (participants) {\n const bystanders = [];\n for (let i = 0; i < contentMeta.length; i++) {\n if (contentMeta[i].flexOpen && !participants.includes(i)) {\n bystanders.push(i);\n }\n }\n return bystanders;\n }\n}\n\nfunction getLeadingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n while (pos >= 1 && !resizeable) {\n pos = pos - 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos;\n}\n\nfunction getTrailingResizeablePos(contentMeta: ContentMeta[], idx: number) {\n let pos = idx,\n resizeable = false;\n const count = contentMeta.length;\n while (pos < count - 1 && !resizeable) {\n pos = pos + 1;\n resizeable = isResizeable(contentMeta, pos);\n }\n return pos === count ? -1 : pos;\n}\n\nfunction isResizeable(contentMeta: ContentMeta[], idx: number): boolean {\n const { placeholder, splitter, resizeable, intrinsicSize } = contentMeta[idx];\n return Boolean(!splitter && !intrinsicSize && (placeholder || resizeable));\n}\n", "import { useCallback } from \"react\";\nimport { Action } from \"../layout-action\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { SplitterResizeAction } from \"../layout-reducer\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport Flexbox from \"./Flexbox\";\nimport { FlexboxLayoutProps } from \"./flexboxTypes\";\n\nexport const FlexboxLayout = function FlexboxLayout(props: FlexboxLayoutProps) {\n const { path } = props;\n const dispatch = useLayoutProviderDispatch();\n\n const handleSplitterMoved = useCallback(\n (sizes) => {\n dispatch({\n type: Action.SPLITTER_RESIZE,\n path,\n sizes,\n } as SplitterResizeAction);\n },\n [dispatch, path]\n );\n\n return <Flexbox {...props} onSplitterMoved={handleSplitterMoved} />;\n};\nFlexboxLayout.displayName = \"Flexbox\";\n\nregisterComponent(\"Flexbox\", FlexboxLayout, \"container\");\n", "import { asReactElements } from \"@vuu-ui/vuu-utils\";\nimport { useForkRef } from \"@salt-ds/core\";\nimport cx from \"clsx\";\nimport { ForwardedRef, forwardRef, useMemo } from \"react\";\nimport { useBreakpoints } from \"../responsive\";\nimport { FlexboxProps } from \"./flexboxTypes\";\nimport \"./FluidGrid.css\";\nimport { useResponsiveSizing } from \"./useResponsiveSizing\";\n\nconst classBase = \"hwFluidGrid\";\n\nexport interface FluidGridProps extends FlexboxProps {\n showGrid?: boolean;\n}\n\nexport const FluidGrid = forwardRef(function FluidGrid(\n props: FluidGridProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const {\n breakPoints,\n children: childrenProp,\n column,\n cols: colsProp = 12,\n className: classNameProp,\n flexFill,\n gap = 3,\n fullPage,\n id,\n onSplitterMoved,\n resizeable,\n row,\n showGrid,\n spacing,\n splitterSize,\n style: styleProp,\n ...rest\n } = props;\n\n //TODO does thie useMemo serve any actual purpose or will childrenProp\n // always be new anyway ?\n const children = useMemo(() => {\n return asReactElements(childrenProp);\n }, [childrenProp]);\n\n const { cols, content, rootRef } = useResponsiveSizing({\n children,\n cols: colsProp,\n style: styleProp,\n });\n\n const breakpoint = useBreakpoints(\n {\n breakPoints,\n },\n rootRef\n );\n\n const className = cx(classBase, classNameProp, {\n [`${classBase}-column`]: column,\n [`${classBase}-row`]: row,\n [`${classBase}-show-grid`]: showGrid,\n \"flex-fill\": flexFill,\n \"full-page\": fullPage,\n });\n\n const style = {\n ...styleProp,\n \"--spacing\": spacing,\n \"--grid-col-count\": cols,\n \"--grid-gap\": gap,\n };\n\n return (\n <div\n {...rest}\n className={className}\n data-breakpoint={breakpoint}\n data-cols={cols}\n data-resizeable={resizeable || undefined}\n id={id}\n ref={useForkRef(rootRef, ref)}\n style={style}\n >\n {content}\n </div>\n );\n});\nFluidGrid.displayName = \"FluidGrid\";\n", "import { getUniqueId } from \"@vuu-ui/vuu-utils\";\nimport {\n cloneElement,\n CSSProperties,\n isValidElement,\n ReactElement,\n useCallback,\n useMemo,\n useRef,\n} from \"react\";\nimport { gatherChildMeta } from \"./flexbox-utils\";\nimport { BreakPoint } from \"./flexboxTypes\";\n\nconst breakPoints: BreakPoint[] = [\"xs\", \"sm\", \"md\", \"lg\", \"xl\"];\n\nconst DEFAULT_COLS = 12;\n\nexport const useResponsiveSizing = ({\n children: childrenProp,\n cols: colsProp,\n style,\n}: {\n children: ReactElement[];\n cols?: number;\n style?: CSSProperties;\n}) => {\n const rootRef = useRef(null);\n const metaRef = useRef(null);\n const contentRef = useRef<ReactElement[]>();\n const cols = colsProp ?? DEFAULT_COLS;\n\n const isColumn = style?.flexDirection === \"column\";\n const dimension = isColumn ? \"height\" : \"width\";\n\n const children = useMemo(\n () =>\n Array.isArray(childrenProp)\n ? childrenProp\n : isValidElement(childrenProp)\n ? [childrenProp]\n : [],\n [childrenProp]\n );\n\n const buildContent = useCallback(\n (children, dimension): [ReactElement[], any] => {\n const childMeta = gatherChildMeta(children, dimension, breakPoints);\n const content = [];\n const meta = [];\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n const {\n style: { flex, ...rest },\n } = child.props;\n content.push(\n cloneElement(child, {\n key: getUniqueId(),\n style: {\n ...rest,\n \"--parent-col-count\": cols,\n },\n })\n );\n meta.push(childMeta[i]);\n }\n return [content, meta];\n },\n [cols]\n );\n\n useMemo(() => {\n const [content, meta] = buildContent(children, dimension);\n metaRef.current = meta;\n contentRef.current = content;\n }, [buildContent, children, dimension]);\n\n return {\n cols,\n content: contentRef.current,\n rootRef,\n };\n};\n", "import { registerComponent } from '../registry/ComponentRegistry';\nimport { FluidGrid, FluidGridProps } from './FluidGrid';\n\nexport const FluidGridLayout = function FluidGridLayout(props: FluidGridProps) {\n return <FluidGrid {...props} />;\n};\nFluidGridLayout.displayName = 'FluidGrid';\n\nregisterComponent('FluidGrid', FluidGridLayout, 'container');\n", "import { uuid } from \"@vuu-ui/vuu-utils\";\nimport {\n List,\n ListItem,\n ListItemProps,\n ListProps,\n} from \"@vuu-ui/vuu-ui-controls\";\nimport cx from \"clsx\";\nimport {\n cloneElement,\n HTMLAttributes,\n memo,\n MouseEvent,\n ReactElement,\n} from \"react\";\nimport { useLayoutProviderDispatch } from \"../layout-provider\";\nimport { View, ViewProps } from \"../layout-view\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\n\nimport \"./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 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", "import { Tab, Tabstrip, TabstripProps } from \"@vuu-ui/vuu-ui-controls\";\nimport { useId } from \"@vuu-ui/vuu-utils\";\nimport cx from \"clsx\";\nimport React, {\n ForwardedRef,\n forwardRef,\n ReactElement,\n ReactNode,\n useCallback,\n useRef,\n} from \"react\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { StackProps } from \"./stackTypes\";\n\nimport \"./Stack.css\";\n\nconst classBase = \"vuuTabs\";\n\nconst getDefaultTabIcon = () => undefined;\n\nconst getChildElements = <T extends ReactElement = ReactElement>(\n children: ReactNode\n): T[] => {\n const elements: T[] = [];\n React.Children.forEach(children, (child) => {\n if (React.isValidElement(child)) {\n elements.push(child as T);\n } else {\n console.warn(`Stack has unexpected child element type`);\n }\n });\n return elements;\n};\n\nconst DefaultTabstripProps: Partial<TabstripProps> = {\n allowAddTab: false,\n allowCloseTab: false,\n allowRenameTab: false,\n};\n\nexport const Stack = forwardRef(function Stack(\n {\n TabstripProps = DefaultTabstripProps,\n active = 0,\n children,\n className: classNameProp,\n getTabIcon = getDefaultTabIcon,\n getTabLabel = getDefaultTabLabel,\n id: idProp,\n keyBoardActivation = \"manual\",\n // onMouseDown,\n onAddTab,\n onMoveTab,\n onTabClose,\n onTabEdit,\n onTabSelectionChanged,\n showTabs = \"top\",\n style,\n }: StackProps,\n ref: ForwardedRef<HTMLDivElement>\n) {\n const id = useId(idProp);\n const tabLabels = useRef<string[]>([]);\n const {\n allowCloseTab,\n allowRenameTab,\n className: tabstripClassName,\n } = TabstripProps;\n\n const handleExitEditMode = useCallback(\n (\n _oldText: string,\n newText: string,\n _allowDeactivation: boolean,\n tabIndex: number\n ) => {\n onTabEdit?.(tabIndex, newText);\n },\n [onTabEdit]\n );\n\n const activeChild = () => {\n //TODO need to inject an id if child does not have one, so we can\n // establish the aria-controls relationship. In a Vuu layout, there\n // will always be an id.\n if (React.isValidElement(children)) {\n return children;\n }\n if (Array.isArray(children)) {\n return children[active] ?? null;\n }\n return null;\n };\n\n const renderTabs = () =>\n getChildElements(children).map((child, idx) => {\n const {\n closeable = allowCloseTab,\n id: childId = `${id}-${idx}`,\n \"data-tab-location\": tabLocation,\n } = child.props;\n const label = getTabLabel(child, idx, tabLabels.current);\n tabLabels.current.push(label);\n return (\n <Tab\n ariaControls={childId}\n data-icon={getTabIcon(child, idx)}\n key={childId}\n id={`${childId}-tab`}\n index={idx}\n label={label}\n location={tabLocation}\n closeable={closeable}\n editable={allowRenameTab}\n />\n );\n });\n\n const child = activeChild();\n const isHorizontal = showTabs === \"left\" || showTabs === \"right\";\n const tabstripOrientation = isHorizontal ? \"vertical\" : \"horizontal\";\n\n return (\n <div\n className={cx(classBase, classNameProp, {\n [`${classBase}-horizontal`]: isHorizontal,\n })}\n style={style}\n id={id}\n ref={ref}\n >\n {showTabs ? (\n <Tabstrip\n {...TabstripProps}\n activeTabIndex={\n TabstripProps?.activeTabIndex ?? (child === null ? -1 : active)\n }\n allowDragDrop={TabstripProps.allowDragDrop !== false}\n animateSelectionThumb\n className={cx(\"vuuTabHeader\", tabstripClassName)}\n aria-label=\"data tabs\"\n keyBoardActivation={keyBoardActivation}\n onActiveChange={onTabSelectionChanged}\n onAddTab={onAddTab}\n onCloseTab={onTabClose}\n onExitEditMode={handleExitEditMode}\n onMoveTab={onMoveTab}\n orientation={tabstripOrientation}\n // onMouseDown={handleMouseDown}\n >\n {renderTabs()}\n </Tabstrip>\n ) : null}\n <div\n aria-labelledby={`${id}-${active}`}\n className={`${classBase}-tabPanel`}\n role=\"tabpanel\"\n >\n {child}\n </div>\n </div>\n );\n});\nStack.displayName = \"Stack\";\n", "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\";\nimport { registerComponent } from \"../registry/ComponentRegistry\";\nimport { usePersistentState } from \"../use-persistent-state\";\nimport { Stack } from \"./Stack\";\nimport { StackProps, TabLabelFactory } from \"./stackTypes\";\nimport { getDefaultTabLabel } from \"../layout-reducer\";\nimport { Placeholder } from \"../placeholder\";\n\nimport \"./Stack.css\";\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", "import React, { useState } from \"react\";\n\nimport { LayoutConfigurator, LayoutTreeViewer } from \"..\";\nimport { followPathToComponent } from \"../..\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const ConfigWrapper = ({ children }: any) => {\n const designMode = false;\n const [layout, setLayout] = useState(children);\n const [selectedComponent, setSelectedComponent] = useState(children);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleSelection = (selectedPath: any) => {\n const targetComponent = followPathToComponent(layout, selectedPath);\n setSelectedComponent(targetComponent);\n };\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handleChange = (property: any, value: any) => {\n console.log(`change ${property} -> ${value}`);\n\n const newComponent = React.cloneElement(selectedComponent, {\n style: {\n ...selectedComponent.props.style,\n [property]: value,\n },\n });\n setSelectedComponent(newComponent);\n setLayout(React.cloneElement(layout, {}, newComponent));\n };\n\n return (\n <div data-design-mode={`${designMode}`}>\n {layout}\n <br />\n <div style={{ display: \"flex\" }}>\n <LayoutConfigurator\n height={300}\n managedStyle={selectedComponent.props.style}\n width={300}\n onChange={handleChange}\n style={undefined}\n />\n <LayoutTreeViewer\n layout={layout}\n onSelect={handleSelection}\n style={{ width: 300, height: 300, backgroundColor: \"#ccc\" }}\n />\n </div>\n {/* <StateButton\n defaultChecked={false}\n onChange={(e, value) => setDesignMode(value)}>Design Mode</StateButton> */}\n </div>\n );\n};\n", "import \"./layout-configurator.css\";\nimport { FormField, Input } from \"@salt-ds/core\";\n\nconst NO_STYLE = {};\n\nconst DIMENSIONS = {\n margin: {\n top: \"marginTop\",\n right: \"marginRight\",\n bottom: \"marginBottom\",\n left: \"marginLeft\",\n },\n border: {\n top: \"borderTopWidth\",\n right: \"borderRightWidth\",\n bottom: \"borderBottomWidth\",\n left: \"borderLeftWidth\",\n },\n padding: {\n top: \"paddingTop\",\n right: \"paddingRight\",\n bottom: \"paddingBottom\",\n left: \"paddingLeft\",\n },\n};\n\nconst LayoutBox = ({ feature, children, style, onChange }) => {\n return (\n <div className={`LayoutBox layout-${feature} layout-outer`}>\n <div className={`layout-top`}>\n <span className=\"layout-title\">{feature}</span>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.top}\n onChange={(evt, value) => onChange(feature, \"top\", value)}\n />\n </FormField>\n </div>\n <div className={`layout-inner`}>\n <div className={`layout-left`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.left}\n onChange={(evt, value) => onChange(feature, \"left\", value)}\n />\n </FormField>\n </div>\n {children}\n <div className={`layout-right`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.right}\n onChange={(evt, value) => onChange(feature, \"right\", value)}\n />\n </FormField>\n </div>\n </div>\n <div className={`layout-bottom`}>\n <FormField className=\"layout-input\" style={{ width: 30 }}>\n <Input\n value={style.bottom}\n onChange={(evt, value) => onChange(feature, \"bottom\", value)}\n />\n </FormField>\n </div>\n </div>\n );\n};\n\nexport const MARGIN_STYLES = {\n margin: true,\n marginTop: true,\n marginRight: true,\n marginBottom: true,\n marginLeft: true,\n};\n\nexport const PADDING_STYLES = {\n padding: true,\n paddingTop: true,\n paddingRight: true,\n paddingBottom: true,\n paddingLeft: true,\n};\n\nexport const BORDER_STYLES = {\n border: true,\n borderColor: true,\n borderWidth: true,\n borderTopWidth: true,\n borderRightWidth: true,\n borderBottomWidth: true,\n borderLeftWidth: true,\n};\n\nconst CSS_DIGIT = \"(\\\\d+)(?:px)?\";\nconst CSS_MEASURE = `^(?:${CSS_DIGIT}(?:\\\\s${CSS_DIGIT}(?:\\\\s${CSS_DIGIT}(?:\\\\s${CSS_DIGIT})?)?)?)$`;\nconst CSS_REX = new RegExp(CSS_MEASURE);\nconst BORDER_REX = /^(?:(\\d+)(?:px)\\ssolid\\s([a-zA-Z,0-9().]+))$/;\n\nexport const LayoutConfigurator = ({\n height,\n managedStyle,\n onChange,\n style,\n width,\n}) => {\n const state = normalizeStyle(managedStyle);\n\n const handleChange = (feature, dimension, strValue) => {\n const value = parseInt(strValue || \"0\", 10);\n const property = DIMENSIONS[feature][dimension];\n onChange(property, value);\n };\n\n const {\n marginTop: mt = 0,\n marginRight: mr = 0,\n marginBottom: mb = 0,\n marginLeft: ml = 0,\n } = state;\n const {\n borderTopWidth: bt = 0,\n borderRightWidth: br = 0,\n borderBottomWidth: bb = 0,\n borderLeftWidth: bl = 0,\n } = state;\n const {\n paddingTop: pt = 0,\n paddingRight: pr = 0,\n paddingBottom: pb = 0,\n paddingLeft: pl = 0,\n } = state;\n return (\n <div className=\"LayoutConfigurator\" style={{ width, height, ...style }}>\n <LayoutBox\n feature=\"margin\"\n style={{ top: mt, right: mr, bottom: mb, left: ml }}\n onChange={handleChange}\n >\n <LayoutBox\n feature=\"border\"\n style={{ top: bt, right: br, bottom: bb, left: bl }}\n onChange={handleChange}\n >\n <LayoutBox\n feature=\"padding\"\n style={{ top: pt, right: pr, bottom: pb, left: pl }}\n onChange={handleChange}\n >\n <div className=\"layout-content\" />\n </LayoutBox>\n </LayoutBox>\n </LayoutBox>\n </div>\n );\n};\n\n// TODO merge the following two functions\nexport function XXXnormalizeStyles(\n layoutStyle = NO_STYLE,\n visualStyle = NO_STYLE\n) {\n const {\n margin,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n padding,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n ...style\n } = layoutStyle;\n\n if (typeof margin === \"number\") {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n margin;\n } else if (typeof margin === \"string\") {\n const match = CSS_REX.exec(margin);\n if (match === null) {\n console.error(`Invalid css value for margin '${margin}'`);\n } else {\n const [, pos1, pos2, pos3, pos4] = match;\n const pos123 = pos1 && pos2 && pos3;\n if (pos123 && pos4) {\n style.marginTop = parseInt(pos1, 10);\n style.marginRight = parseInt(pos2, 10);\n style.marginBottom = parseInt(pos3, 10);\n style.marginLeft = parseInt(pos4, 10);\n } else if (pos123) {\n style.marginTop = parseInt(pos1, 10);\n style.marginRight = style.marginLeft = parseInt(pos2, 10);\n style.marginBottom = parseInt(pos3, 10);\n } else if (pos1 && pos2) {\n style.marginTop = style.marginBottom = parseInt(pos1, 10);\n style.marginRight = style.marginLeft = parseInt(pos2, 10);\n } else {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n parseInt(pos1, 10);\n }\n }\n }\n if (typeof marginTop === \"number\") style.marginTop = marginTop;\n if (typeof marginRight === \"number\") style.marginRight = marginRight;\n if (typeof marginBottom === \"number\") style.marginBottom = marginBottom;\n if (typeof marginLeft === \"number\") style.marginLeft = marginLeft;\n\n if (typeof padding === \"number\") {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddingLeft =\n padding;\n } else if (typeof padding === \"string\") {\n const match = CSS_REX.exec(padding);\n if (match === null) {\n console.error(`Invalid css value for padding '${padding}'`);\n } else {\n const [, pos1, pos2, pos3, pos4] = match;\n const pos123 = pos1 && pos2 && pos3;\n if (pos123 && pos4) {\n style.paddingTop = parseInt(pos1, 10);\n style.paddingRight = parseInt(pos2, 10);\n style.paddingBottom = parseInt(pos3, 10);\n style.paddingLeft = parseInt(pos4, 10);\n } else if (pos123) {\n style.paddingTop = parseInt(pos1, 10);\n style.paddingRight = style.paddingLeft = parseInt(pos2, 10);\n style.paddingBottom = parseInt(pos3, 10);\n } else if (pos1 && pos2) {\n style.paddingTop = style.paddingBottom = parseInt(pos1, 10);\n style.paddingRight = style.paddingLeft = parseInt(pos2, 10);\n } else {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddinggLeft =\n parseInt(pos1, 10);\n }\n }\n }\n if (typeof paddingTop === \"number\") style.paddingTop = paddingTop;\n if (typeof paddingRight === \"number\") style.paddingRight = paddingRight;\n if (typeof paddingBottom === \"number\") style.paddingBottom = paddingBottom;\n if (typeof paddingLeft === \"number\") style.paddingLeft = paddingLeft;\n\n return normalizeStyle(style, visualStyle);\n}\n\nfunction normalizeStyle(managedStyle = NO_STYLE) {\n const style = { ...managedStyle };\n\n // if (BORDER_LIST.some(bs => style[bs])) {\n let match;\n\n let {\n border,\n borderWidth,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderColor,\n margin,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n padding,\n paddingTop,\n paddingRight,\n paddingBottom,\n paddingLeft,\n ...rest\n } = style;\n\n let marginStyles = {};\n let paddingStyles = {};\n\n if (typeof margin === \"number\") {\n style.marginTop =\n style.marginRight =\n style.marginBottom =\n style.marginLeft =\n margin;\n marginStyles = {\n marginTop: margin,\n marginRight: margin,\n marginBottom: margin,\n marginLeft: margin,\n };\n }\n\n if (typeof padding === \"number\") {\n style.paddingTop =\n style.paddingRight =\n style.paddingBottom =\n style.paddingLeft =\n padding;\n paddingStyles = {\n paddingTop: padding,\n paddingRight: padding,\n paddingBottom: padding,\n paddingLeft: padding,\n };\n }\n\n if (\n border ||\n borderWidth ||\n borderTopWidth ||\n borderRightWidth ||\n borderBottomWidth ||\n borderLeftWidth\n ) {\n if (typeof border === \"string\" && (match = BORDER_REX.exec(border))) {\n // what if both border and borderWidth are specified ?\n [, borderWidth, borderColor] = match;\n borderWidth = parseInt(borderWidth, 10);\n }\n\n if (borderWidth) {\n borderTopWidth =\n borderTopWidth === undefined ? borderWidth : borderTopWidth;\n borderRightWidth =\n borderRightWidth === undefined ? borderWidth : borderRightWidth;\n borderBottomWidth =\n borderBottomWidth === undefined ? borderWidth : borderBottomWidth;\n borderLeftWidth =\n borderLeftWidth === undefined ? borderWidth : borderLeftWidth;\n }\n\n borderColor = borderColor || \"black\";\n const boxShadow = `\n ${borderColor} ${borderLeftWidth || 0}px ${\n borderTopWidth || 0\n }px 0 0 inset,\n ${borderColor} ${-borderRightWidth || 0}px ${\n -borderBottomWidth || 0\n }px 0 0 inset`;\n\n return {\n ...rest,\n ...marginStyles,\n ...paddingStyles,\n borderTopWidth,\n borderRightWidth,\n borderBottomWidth,\n borderLeftWidth,\n borderColor,\n borderStyle: \"solid\",\n boxShadow,\n };\n } else {\n return style;\n }\n // } else {\n // return style;\n // }\n}\n", "import React from \"react\";\nimport cx from \"clsx\";\nimport { typeOf } from \"../../utils\";\n\nimport \"./layout-tree-viewer.css\";\nimport { Tree } from \"@vuu-ui/vuu-ui-controls\";\n\nconst classBaseTree = \"hwLayoutTreeViewer\";\n\nconst toTreeJson = (component, path = \"0\") => {\n return {\n label: typeOf(component),\n path,\n childNodes: React.Children.map(component.props.children, (child, i) =>\n toTreeJson(child, path ? `${path}.${i}` : `${i}`)\n ),\n };\n};\n\nexport const LayoutTreeViewer = ({ layout, onSelect, style }) => {\n const treeJson = [toTreeJson(layout)];\n\n const handleSelection = (evt, [{ path }]) => {\n onSelect(path);\n };\n\n return (\n <div className={cx(classBaseTree)} style={style}>\n <Tree\n source={treeJson}\n groupSelection=\"single\"\n onSelectionChange={handleSelection}\n />\n </div>\n );\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_clsx", "componentName", "cx", "import_jsx_runtime", "classBase", "cx", "import_react", "import_jsx_runtime", "Component", "import_react", "React", "path", "nextStep", "import_vuu_utils", "rect", "left", "right", "header", "isTower", "isTerrace", "rect", "rect", "allBoxesContainingPoint", "_a", "clientRect", "import_clsx", "import_jsx_runtime", "classBase", "cx", "import_jsx_runtime", "path", "Stack", "SCALE_FACTOR", "import_clsx", "import_react", "import_jsx_runtime", "DraggableLayout", "classnames", "import_core", "import_clsx", "import_react", "import_vuu_utils", "import_react", "import_clsx", "import_core", "import_react", "import_react", "import_react", "import_vuu_utils", "import_react", "flexDirection", "dimension", "React", "import_react", "import_vuu_utils", "import_react", "import_vuu_utils", "import_react", "import_react", "React", "getStyle", "children", "React", "flexDirection", "dimension", "import_react", "import_react", "React", "import_react", "flexDirection", "children", "flexBasis", "display", "style", "path", "child", "React", "import_react", "React", "dimension", "import_vuu_utils", "import_react", "updateChildren", "React", "flexDirection", "dimension", "React", "import_react", "import_react", "rect", "import_jsx_runtime", "_a", "import_vuu_utils", "import_core", "import_clsx", "import_react", "import_core", "import_clsx", "import_react", "import_jsx_runtime", "classBase", "classnames", "cx", "import_react", "title", "import_react", "import_react", "dimension", "rect", "import_react", "import_react", "React", "import_jsx_runtime", "classBase", "getProps", "View", "Header", "props", "React", "cx", "import_jsx_runtime", "classBase", "import_jsx_runtime", "classBase", "cx", "import_clsx", "import_react", "import_jsx_runtime", "classBase", "React", "Splitter", "onDragEnd", "cx", "breakPoints", "dimension", "dimension", "React", "index", "import_jsx_runtime", "classBase", "Flexbox", "breakPoints", "cx", "import_react", "import_jsx_runtime", "FlexboxLayout", "import_vuu_utils", "import_core", "import_clsx", "import_react", "import_vuu_utils", "import_react", "dimension", "buildContent", "children", "import_jsx_runtime", "classBase", "FluidGrid", "breakPoints", "cx", "import_jsx_runtime", "FluidGridLayout", "import_vuu_utils", "import_vuu_ui_controls", "import_clsx", "import_react", "import_jsx_runtime", "cx", "ListProps", "ViewProps", "classBase", "props", "import_vuu_ui_controls", "import_vuu_utils", "import_clsx", "import_react", "import_jsx_runtime", "classBase", "React", "Stack", "TabstripProps", "_a", "child", "cx", "import_vuu_utils", "import_react", "import_jsx_runtime", "path", "React", "id", "import_react", "import_jsx_runtime", "React", "import_core", "import_jsx_runtime", "NO_STYLE", "dimension", "import_react", "import_clsx", "import_vuu_ui_controls", "import_jsx_runtime", "React", "cx"]
|
|
7
7
|
}
|