@vuu-ui/vuu-layout 0.8.57 → 0.8.59

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